[ltp] WG511 PCMCIA with 2 Mac addresses - need udev guru!
Richard Neill
linux-thinkpad@linux-thinkpad.org
Thu, 06 Apr 2006 19:40:28 +0100
Here is, at least, a decent workaround:
1)Put the true mac address into iftab and ifcfg-wlan
2)Create 2 udev naming rules in 10-network.rules:
#PCMCIA WLAN card. Bogus mac.
KERNEL=="eth*", SYSFS{address}=="00:30:b4:00:00:00", NAME="wlan",
RUN="/usr/local/sbin/firmware_fudge"
#Real mac.
KERNEL=="eth*", SYSFS{address}=="00:09:5b:c1:3a:b1", NAME="wlan"
[Then run udevstart]
3)When a card is detected with the wrong mac, firmware_fudge is invoked
by udev:
/usr/local/sbin/firmware_fudge
#!/bin/bash
/sbin/ifconfig wlan up
echo "Fudge to load firmware: wlan interface brought up (without ip
address assigned)"
/sbin/ifconfig wlan down
echo "wlan interface now down"
Best wishes,
Richard
Richard Neill wrote:
> Dear All,
>
> I'm getting a bit further here:
>
> 1)The kernel source confirms your suspicions: namely that the real mac
> address doesn't actually exist until the firmware is loaded.
> [drivers/net/wireless/prism54/islpci_dev.c ]
>
>
> 2)Looking at the output of udev's logging (syslog), I can see that
> the firmware is loaded by /sbin/firmware_helper.
>
>
> 3)However, Mandriva is doing this too late. In Mandriva, the firmware is
> loaded at the instant when the network device is brought up. It *should*
> be loaded as soon as the network device is detected.
>
>
> Now, I already have a (working) udev rule to name the device:
>
> KERNEL=="eth*", SYSFS{address}=="00:30:b4:00:00:00", NAME="wlan"
>
> so I think it should be a simple matter to run the firmware_helper
> program thus:
>
> KERNEL=="eth*", SYSFS{address}=="00:30:b4:00:00:00", NAME="wlan",
> RUN+="/sbin/firmware_helper"
>
> Unfortunately, I'm now stuck. firmware_helper has no documentation, and
> reading the source [udev-078/extras/firmware/firmware_helper.c]
> only tells me that some environment variables must be defined.
>
> I have tried manually running various permutations of the following:
>
> export ACTION=add ; export DEVPATH=/sys/class/net/wlan ; export
> FIRMWARE=isl3890 ; export PHYSDEVDRIVER=prism54; firmware_helper
>
> but firmware_helper keeps complaining with messages like:
>
> Apr 6 03:51:16 toffee-pecan firmware_helper[14971]: main: error loading
> '/lib/hotplug/firmware/isl3890' for device '/sys/class/net/wlan' with
> driver 'prism54'
>
>
> So....Can anyone tell me the magic incantation to make firmware_helper
> do its stuff? What should DEVPATH and PHYSDEVDRIVER be?
>
>
> Thanks,
>
> Richard
>
>
>
>
>
>
> Richard Neill wrote:
>
>>Dear Mauro,
>>
>>Thank you very much - that's really helpful.
>>
>>Conclusion 1):
>>There is (probably) a bug in the prism driver which causes the wrong MAC
>>address to be reported if the firmware isn't loaded. [This may be
>>deliberate, or it may be a hardware bug.]
>>
>>Inference 2)
>>I *think* that Gentoo and Mandriva operate slightly differently. Gentoo
>>probes the module, then loads the firmware, then checks the MAC address,
>>and uses this to configures the interface.
>>
>>Mandriva checks the MAC address, uses it to decide which module to
>>probe, then loads the firmware, and then configures the interface.
>>
>>Therefore, Mandriva is unlucky, and Gentoo is fortunate, in this
>>particular circumstance.
>>
>>
>>Regarding conclusion 1) I'm not sure what to do.
>>
>>Regarding inference (2), can you post the contents of your ifcfg-eth0
>>and /etc/iftab files? I'd like to know whether Gentoo uses the real or
>>the bogus mac addresses in these. [Mandriva uses the bogus one both times]
>>
>>
>>Lastly, do you have any ideas for a workaround?
>>
>>Best wishes,
>>
>>Richard
>>
>>
>>
>>
>>Mauro Maroni wrote:
>>
>>
>>>Richard:
>>>
>>>Here is what I found:
>>>
>>>gentoo mauro # /etc/init.d/net.eth0 stop
>>>* Unmounting network filesystems ...
>>>[ ok ]
>>>* Stopping eth0
>>>* Bringing down eth0
>>>* Shutting down eth0 ...
>>>[ ok ]
>>>
>>>After this, it is still showing the real MAC:
>>>
>>>gentoo mauro # cat /sys/class/net/eth0/address
>>>00:09:5b:e6:c5:aa
>>>
>>>gentoo mauro # rmmod prism54
>>>
>>>At this point, the card no longer exists in /sys/class/net.
>>>And ifconfig only shows the loopback interface
>>>
>>>gentoo mauro # cardctl eject
>>>
>>>If I reinsert the card at this point, it is detected, prism54 module is loaded
>>>and then eth0 comes up with the real MAC.
>>>
>>>So I did it all again but moving isl3890 firmware to another place.
>>>Reinserted the card, it is detected and prism54 loaded.
>>>eth0 does not come up (no firmware).And now yes, I get the bogus MAC:
>>>
>>>gentoo mauro # cat /sys/class/net/eth0/address
>>>00:30:b4:00:00:00
>>>
>>>Then I put isl3890 back in place and tried to bring the card up.
>>>It comes up without issues:
>>>
>>>gentoo mauro # /etc/init.d/net.eth0 start
>>>* Starting eth0
>>>* Configuring wireless network for eth0
>>>* eth0 connected to "NETGEAR" at 00:09:5B:DD:FA:6E
>>>* Bringing up eth0
>>>* 10.0.0.100
>>>[ ok ]
>>>* Adding routes
>>>* default gw 10.0.0.2 ...
>>>[ ok ]
>>>
>>>gentoo mauro # cat /sys/class/net/eth0/address
>>>00:09:5b:e6:c5:aa
>>>
>>>Hope this helps
>>>
>>>Mauro
>>>
>>>On Saturday 01 April 2006 20:46, Richard Neill wrote:
>>>
>>>
>>>
>>>>Mauro Maroni wrote:
>>>>
>>>>
>>>>
>>>>>I have a Netgear WG511 but never saw that behaviour...The only issue I
>>>>>have is that sometimes the card disconnects from the access point, but I
>>>>>only have to run '/etc/init.d/net.eth0 restart' (I am using Gentoo) in
>>>>>order to reconnect it. I will try to see if that issue is also related to
>>>>>a changing MAC address.
>>>>
>>>>Dear Mauro,
>>>>
>>>>Thanks very much for your help. That's interesting that it doesn't
>>>>happen on Gentoo. The question is, why?
>>>>a) Gentoo's ifup/ifcfg script is smarter than Mandriva's.
>>>>b) Your version of the prism driver always reports the true mac, even
>>>>without the firmware being uploaded.
>>>>c) We have different revisions of the hardware.
>>>>
>>>>Could you check for me what happens if you do the following:
>>>>[I'm assuming your interface is called eth0, although it could be eth1
>>>>or wlan]
>>>>
>>>>0)Stop ifplugd if you have it running.
>>>>
>>>>1)rmmod prism54; cardctl eject; physically eject the card.
>>>>
>>>>2)reinsert the card.
>>>>
>>>>[At this point, the eth0 interface will not be up]
>>>>
>>>>3)Check which MAC address you have with:
>>>>cat sys/class/net/wlan/address
>>>>and
>>>>ifconfig -a
>>>>
>>>>4)ifup wlan
>>>>
>>>>5)Repeat (3).
>>>>
>>>>6)Ifdown eth0;
>>>>
>>>>7)ifup eth0
>>>>
>>>>8)Repeat (3).
>>>>
>>>>
>>>>I would expect that the results are these:
>>>>
>>>>[3] 00:30:b4:00:00:00 #the "default" bogus mac.
>>>>
>>>>[5] your_real_mac_address
>>>>
>>>>[8] I don't know, because step 7) fails for me.
>>>>
>>>>
>>>>You might also try repeating steps 1-4 after temporarily moving
>>>>/usr/lib/hotplug/firmware/isl3890 somewhere where it cannot be found.
>>>>
>>>>Lastly, is the MAC you have in ifcfg-eth0 your real one, or the bogus
>>>>one?
>>>>
>>>>
>>>>Thanks very much,
>>>>
>>>>Richard
>>>>
>>>>
>>>>
>>>>
>>>>>Regards,
>>>>>Mauro
>>>>>
>>>>>On Friday 31 March 2006 21:28, Richard Neill wrote:
>>>>>
>>>>>
>>>>>
>>>>>>Dear All,
>>>>>>
>>>>>>I wonder whether I could consult the collective wisdom about this. My
>>>>>>Netgear WG511 card works perfectly with the prism54 driver, once the
>>>>>>binary firmware has been loaded.
>>>>>>
>>>>>>However, the MAC address (as reported by ifconfig, or udevinfo) changes
>>>>>>between 2 different values depending on status:
>>>>>>
>>>>>>1)Without the firmware installed, or before the network interface has
>>>>>>been brought up (for the first time since boot or plugging in the card):
>>>>>> 00:30:b4:00:00:00
>>>>>>
>>>>>>2)Once the firmware has been loaded, and the interface has been brought
>>>>>>up at least once:
>>>>>> 00:09:5b:c1:3a:b1
>>>>>>
>>>>>>The problem is that restarting the network no longer recognises the
>>>>>>card, since the MAC address has now changed:
>>>>>>"interface 'wlan' not foundDevice wlan has different MAC address
>>>>>>than expected, ignoring."
>>>>>>
>>>>>>
>>>>>>
>>>>>>All the config tools (iftab, ifcfg-wlan) need to refer to the first
>>>>>>(un-initialised) MAC. But once initialised, they don't recognise the
>>>>>>card anymore.
>>>>>>
>>>>>>The simple solution is to cardctl eject, and physically unplug/replug
>>>>>>the card each time I restart the network. But that's ugly! I think I
>>>>>>need to bind one interface name to 2 different MAC addresses.
>>>>>>
>>>>>>Does anyone know the correct solution, or can point me to an appropriate
>>>>>>resource?
>>>>>>
>>>>>>Thanks very much,
>>>>>>
>>>>>>Richard
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>--
>>>>>>rn214@hermes.cam.ac.uk ** http://www.richardneill.org
>>>>>>Richard Neill, Trinity College, Cambridge, CB21TQ, U.K.
>>
>>
>
--
rn214@hermes.cam.ac.uk ** http://www.richardneill.org
Richard Neill, Trinity College, Cambridge, CB21TQ, U.K.