1) beagle XM board has device " SMSC LAN9514 Ethernet HUB " and uses kernel driver drivers/net/usb/smsc95xx.c
2) igep board has device " SMSC LAN9221i " and uses driver drivers/net/smsc911x.c (igep is not relevant to this bug but using it as an opma3 family point of reference )
3) neither board have EEPROM so MAC addresses are not stored on board
4) both drivers call random_ether_addr() to generate the initial ethernet address.
5) random_ether_addr() clears multicast bits and sets the local assignment bit ( addr [0] |= 0x02; )
6) driver smsc95xx sets FLAG_ETHER flag to help denote the network address is an ethernet address (as oppose to a wlan address, etc.)
7) while following the initialization logic, stack traces, etc., usbnet_probe() is called to probe device and further set it up.
8) in this routine, the logic to determine if we use interface eth% versus usb% is based on FLAG_ETHER being set and the content of addr [0]. If FLAG_ETHER is set "and" bit 1 of addr [0] is "not" set, use eth% otherwise use usb%. In the case of the beagle XM board, FLAG_ETHER is set "and" so is bit 1 of addr [0] which means we end up using usb%.
Few notes and/or observations.....
1) beagle XM board has device " SMSC LAN9514 Ethernet HUB " and uses kernel driver drivers/ net/usb/ smsc95xx. c
2) igep board has device " SMSC LAN9221i " and uses driver drivers/ net/smsc911x. c (igep is not relevant to this bug but using it as an opma3 family point of reference )
3) neither board have EEPROM so MAC addresses are not stored on board
4) both drivers call random_ether_addr() to generate the initial ethernet address.
5) random_ether_addr() clears multicast bits and sets the local assignment bit ( addr [0] |= 0x02; )
6) driver smsc95xx sets FLAG_ETHER flag to help denote the network address is an ethernet address (as oppose to a wlan address, etc.)
7) while following the initialization logic, stack traces, etc., usbnet_probe() is called to probe device and further set it up.
8) in this routine, the logic to determine if we use interface eth% versus usb% is based on FLAG_ETHER being set and the content of addr [0]. If FLAG_ETHER is set "and" bit 1 of addr [0] is "not" set, use eth% otherwise use usb%. In the case of the beagle XM board, FLAG_ETHER is set "and" so is bit 1 of addr [0] which means we end up using usb%.
Sent email to driver writer for further analysis.