Thread (1 message) 1 message, 1 author, 2012-12-06

Re: Random MAC address from smsc75xx: How to permanently set?

From: Bjørn Mork <hidden>
Date: 2012-12-06 19:44:16

Dan Williams [off-list ref] writes:
On Thu, 2012-12-06 at 18:35 +0000, Cunningham, Robert wrote:
quoted
I'm trying to bring up an OMAP4 system based on Variscite's OM44
module running Linaro's Ubuntu Precise in a headless configuration.
The system contains two SMSC LAN7500 USB-GigE chips (not dongles),
both of which are fully functional.

The GigE chips don't have EEPROMS, so no permanent MAC addresses can
be assigned in hardware.  As expected, the smsc75xx driver assigns a
random MAC address when the interface is discovered and initialized.
However, we need to provide consistent MAC addresses on these
interfaces.  (Yes, we could respin the board to add EEPROMS, but
that's a last, and expensive, resort.)

After the system boots, I'd like to change the MAC addresses to
specific values.  While there are multiple ways to do this (using
commands such as ifconfig, ip, macchanger, and others), it seems the
updated MAC address is always overridden when I do "ifconfig ethX
up", which causes yet another different random MAC address to be
created and assigned.  Simply repeating ifconfig up/down causes an
endless list of random MAC addresses to be generated.

I created a udev rule that I hoped would handle the situation, but it is also overridden:
/etc/udev/rules.d/99-mac-address.rules:
    SUBSYSTEM=="net", KERNEL=="eth0", RUN+="/sbin/ip link set dev %k address XX:XX:XX:XX:XX:00"
    SUBSYSTEM=="net", KERNEL=="eth1", RUN+="/sbin/ip link set dev %k address XX:XX:XX:XX:XX:01"

For a single interface, I can use u-boot variables or kernel boot
arguments, but they seem to work only for the first interface, and I
have two.
Just matching on interface name won't guarantee that you get the same
MAC assigned to the same physical interface each time you boot.  You
can't rely on bus probing order.  What you really want to do is enhance
the udev rule to match the network interfaces based on stuff like PCI
bus address, SDIO details, or whatever bus type the interfaces are
hanging off.
Creating a rule matching on the USB device should do, provided the
driver is fixed to prevent changing the address on every open.

quoted
I've searched extensively for other solutions, but have found none that will survive "ifconfig ethX up".

Is there a way to "permanently" tell the smsc75xx device driver to
use my desired MAC addresses instead of generating random ones every
time?  And to have the MAC addresses remain unchanged when I bring
the interfaces up and down?
Well, that is clearly a driver bug.  It should reuse the same address.
What do you think about something like the completely untested attached
patch, Steve?

You may want to go over the other parts of .reset as well.  It does a
lot, and I suspect most of it should be a onetime initialization thing
and not done on every device open.


Bjørn

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help