Changing a MAC Address

First some background on MAC addresses.

Almost all of what follows is taken from an email from Sun some time ago.

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 nic cards.

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 neccessary.

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 (hme) and SunFastEthernet 1.0 (be) and 2.0 Adapters (hme) use the host assigned address of the CPU OpenBoot PROM.

Sun Microsystems reserved ethernet range starts with 8:0:20:xx:xx:xx

The ones with local MAC addresses today are: (11-24-1998)

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
GEM/Sbus(Gigabit v2.0) x1140a
GEM/PCI(Gigabit v2.0) x1141a
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.0x1035a, 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. For use with the QFE (QuadFastEthernet) or newer ethernet NIC's listed above.

From the eeprom on the command line:

    # eeprom local-mac-address?=true
		

Section 3.2.3(4) of the IEEE 802.3 spec 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 local administer address. The first bit is "individual/group" bit and used by multicasting (1001 = 09, odd number) and should be avoided.

Use the ifconfig "ether" option if this is needed on a NIC that do 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
		  
sequencial 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
( ex: 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 permenantly added to /etc/rc2.d/S72inetsvc (/etc/init.d/inetsvc startup script) or a new script created.

A sometimes crude method 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 ( ex: "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.

Additional note: 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)

To determine if local-mac-address is implemented, 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
    ^^^^^^^^^^^^^
		  
(the new nic's have unique addresses, 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
		  

** This infodoc only applies to ethernet interfaces, for token ring, atm, fddi and other networks should refer to the documentation for these cards. For example fddi has a "nf_macid nf<inst>" utility to display the on-board ethernet number.


This web page is Copyright © 1997 - 2017, Stephen Hinchey
If you have comments or additions for these web pages please direct them to webmaster @ barbary.com