[<prev] [next>] [day] [month] [year] [list]
Message-ID: <87ip8f9d9r.fsf@nemi.mork.no>
Date: Thu, 06 Dec 2012 20:44:16 +0100
From: Bjørn Mork <bjorn@...k.no>
To: Steve Glendinning <steve.glendinning@...well.net>
Cc: Dan Williams <dcbw@...hat.com>,
"Cunningham\, Robert" <RCunningham@...surveillance.com>,
<netdev@...r.kernel.org>, <linux-usb@...r.kernel.org>
Subject: Re: Random MAC address from smsc75xx: How to permanently set?
Dan Williams <dcbw@...hat.com> writes:
> On Thu, 2012-12-06 at 18:35 +0000, Cunningham, Robert wrote:
>
>> 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.
>> 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
View attachment "0001-smsc75xx-dont-reset-macaddress-in-open.patch" of type "text/x-diff" (1887 bytes)
Powered by blists - more mailing lists