Document ID: | 16733 |
Title: | Why do all my ethernet interfaces have the same ethernet MAC address? |
Synopsis: | Why do all my ethernet interfaces have the same ethernet MAC address? |
Update Date: | Mon Aug 16 00:00:00 MDT 2004 |
Keyword(s):MAC
Q. Why do all my ethernet interfaces have the same ether MAC address? How do I modify the interfaces to have unique ethernet MAC addresses? I have multiple interfaces, but they show up as the same ethernet MAC address as my built-in interface. Setting NVRAM parameter local-mac-address?=true does not seem to affect the address? A. Explanation/discussion IEEE leaves it up to the vendor to use the station address approach vs. per port approach. Sun used the concept of a host-based MAC identity prior to the newer network interface cards (NICs). Usually this does not present a problem. Only systems on the same subnet (connected to same switch/hub) are required to have unique hardware address (arp entries). If you are configuring a multi-homed host with more than one interface on the same physical subnet (connections to same hub), choosing and configuring a unique ether address that is different from the primary host-based assigned ethernet Mac address may be necessary. The older network interface drivers in Sun systems get the MAC address for the ethernet interface from the PROM on the system. The MAC address does not come from the ethernet chip or interface hardware. There is just one ethernet MAC address for all interfaces on a system. The intel (i.e.), lance (le) ethernet interfaces along with the SunSwift[TM] (hme) and SunFastEthernet[TM] 1.0 (be) and 2.0 Adapters (hme) use the host assigned address of the CPU OpenBoot PROM. Sun Microsystems uses reserved OUI reserved ethernet ranges of 08:00:20:#:#:# or 00:03:ba:#:#:# and assigns unique numbers for each OBP and NIC that support local-mac-address. The ones with local MAC addresses today are: -------------------------------------------- TRI/P (4/16mbps UTP/STP Token Ring) x1039a FreshChoice light (PCI) FastEthernet x1033a FreshChoice (PCI) FW-scsi/FastEthernet combo x1032a QFE/Sbus (4 MAC addresses) x1042a, x1049a QFE/PCI (4 MAC addresses) x1034a QFE/cPCI (4 MAC addresses) x1234 GEM/Sbus (Gigabit v2.0) x1140a GEM/PCI (Gigabit v2.0) x1141a GBE/PCI (Gigaswift v1.0) x1151a GBE/PCI(copper) (Gigaswift v1.0) x1150a GBE/PCI(combo) (Gigaswift v1.0 and FC-AL PCI combo) X2069 GBE/cPCI (Gigaswift v1.0) x1261a Dual Fastethernet/cPCI (2 MAC addr) Dual Gigaswift v1.0@100Mb and dual SCSI) x2222a VGE/SBus (Gigabit v1.0) x1045a VGE/PCI (Gigabit v1.0) x1144a FDDI/S 3.0, 4.0, 5.0 SAS and DAS For fddi-5.0: x1025a, x1026a FDDI/P 1.0 x1035a, x1036a ATM 155 2.0/2.1 Sbus (2.1 has 16 MAC addr, 2.0 only one) x1060a, x1061a ATM 622 2.1 SBus (16 MAC addresses) x1064a ATM 155/622 3.0 PCI (16 MAC addresses) x1066a, x1067a, x1068a + all NEW Sun network adapters from now on. The Sun Adapters with local MAC addresses (machine access code) have addresses encoded in the Fcode Prom. The local-mac-address property in eeprom is used to enable this feature. ok local-mac-address? (Defaults to false = use system defined mac address). This can be set for true, which allows network drivers to use their own MAC address, not the system default. This is for use with the QFE (QuadFastEthernet) or newer ethernet NICs listed above. To set from the eeprom on the command line: # eeprom local-mac-address?=true Note: Section 3.2.3(4) of the IEEE 802.3 specification defines a reserved bit in the Ethernet Address that can be used to administer a universally assigned ethernet addresses. A locally administered address (LAA) can be implemented to ensure a unique HW address. Setting the LAA bit can be done by using a 0A hex (second bit set 1010, add 2) as the first digit instead of 08 (1000). 8:00:20:x:x:x is Sun's universal assignment. (1010) a:00:20:x:x:x would be a locally administered address. The first bit is the"individual/group" bit and used by multicasting (1001 = 09, odd number) and should be avoided.
You could also select a unique address from valid address ranges x00000000001 to x0007FFFFFFF where x can be 4, 5, 6, or 7. To manually change the ether address, use the ifconfig "ether" option if this is needed on a NIC that does not implement local-mac-address. Examples (use for qe, le and hme devices): ifconfig -a shows that hme0 is 8:0:20:77:dc:7b Command to change ether number on additional hme interfaces: (using first 3 bytes of 0a:0:20 and last 3 bytes of host-assigned address) ifconfig hme1 ether 0a:0:20:77:dc:7b ifconfig hme2 ether 0c:0:20:77:dc:7b Sequential numbering: ifconfig hme1 ether 0a:0:20:00:00:1 ifconfig hme2 ether 0a:0:20:00:00:2 Numbering scheme based on part of IP address: (hme1 =192.9.200.2 hme2 = 192.9.200.16; using 0a:0:20 for first 3 bytes and last 3 octets of IP number): ifconfig hme1 ether 0a:0:20:09:c8:2 ifconfig hme2 ether 0a:0:20:09:c8:10 This change can be permanently added in /etc/rcS.d/S30network.sh (Solaris 8 and above) or in /etc/rcS.d/S30rootusr.sh (Solaris 7 and below). You could also create a new script. The token ring manual provides an example for creating /etc/rcS.d/S20trLAA.
To add ifconfig command to inetsvc: # vi /etc/rc2.d/S72inetsvc (/etc/init.d/inetsvc startup script in Solaris 8) Add line 67: 66 /usr/sbin/ifconfig -auD4 netmask + broadcast + 67 /usr/sbin/ifconfig hme1 ether 0a:0:20:09:c8:2 <reboot>
To implement the /etc/rcS.d/S20trLAA script: # /sbin/sh case "$1" in 'start') echo "Configuring Interface LAA..." /sbin/ifconfig tr0 either 0a:00:20:09:c8:02 ;; 'stop') echo "Stop of LAA is not implemented." ;; *) echo "Usage: $0 { start | stop }" ;; esac To implement /etc/ether.IFACE# method in Solaris 8: # vi /etc/rcS.d/S30network.sh (Add lines 96-99) 95 /sbin/ifconfig $1 plumb 96 if [ -f /etc/ether\.$1 ] 97 then 98 /sbin/ifconfig $1 ether `cat /etc/ether\.$1` 99 fi # more /etc/ether.hme1 a:0:20:9:c8:88 <reboot>
To implement /etc/ether.IFACE# method in Solaris 7: # vi /etc/rcS.d/S30rootusr.sh (Add lines 50-53): 49 /sbin/ifconfig $1 plumb 50 if [ -f /etc/ether\.$1 ] 51 then 52 /sbin/ifconfig $1 ether `cat /etc/ether\.$1` 53 fi # more /etc/ether.hme1 a:0:20:9:c8:99 <reboot>
A crude method that is sometimes used to select a address is to ping the broadcast address and randomly choose a number that is not being used on the network in the form of 8:0:20:XX:XX:XX. Notes: Do not use an odd number (such as "09:") for the first byte due to the fact that if you are implementing multicasting, the 1st bit transmitted ("individual/group" bit) of a 1 represents a multicast address. See INFODOC ID: 15572 SYNOPSIS: Can I configure two Ethernet interfaces on the subnet? Additional notes: For security and network isolation, you can set ip_forwarding off and ip_strict_dst_multihoming on, if you are trying to prevent access to the other interfaces. "ndd /dev/ip ip_forwarding" determines if the workstation will route packets. "ndd /dev/ip ip_strict_dst_multihoming" determines whether to use Strict Destination Multihoming. If this variable is set to True, and ip_forwarding is turned off, then the machine will not accept packets destined for a different interface (RFC1122). If you need information on determining the actual ethernet address, see: Infodoc ID 43462 How do I find the ethernet MAC address in OBP or local-mac-address of an individual Network Interface Card? For a quick method to determine if local-mac-address is implemented on the NIC, use prtconf to examine local-mac-address value: (for on-board le or hme = host assigned HW address) $ prtconf -pv |grep idprom idprom: 01800800.208d7e88.00000000.8d7e88a9.00000000.00000000.00000000.00000000 ^^^^^^^^^^^^^ (New NICs have unique addresses as in the following qfe example) $ prtconf -pv |grep local-mac-address local-mac-address?: 'true' local-mac-address: 0800208d.7828 local-mac-address: 0800208d.7829 local-mac-address: 0800208d.782a local-mac-address: 0800208d.782b Caution: This infodoc only applies to ethernet interfaces. For token ring, atm, fddi refer to the documentation for these cards. For example, fddi has a "nf_macid nf<inst> " utility to display the on-board ethernet number.