RT2860 NDIS needs rate.bin, where is it?

Jack Twilley jmt at twilley.org
Mon Mar 23 17:33:18 PDT 2009


Paul B. Mahol wrote:
> On 3/23/09, Jack Twilley <jmt at twilley.org> wrote:
>> NDIS finally works again in 8.0-CURRENT so I thought I'd try to get my
>> RT2860 wireless working.  I built the rt2860_sys.ko using ndisgen and
>> copied rt2860.bin into /compat/ndis and kldloaded the new module.  NDIS
>> complains that it can't open /compat/ndis/rate.bin with errno 2.  I
>> don't have a rate.bin to give it, there wasn't one in the Windows bundle
>> or the Linux one though it is referenced in the Linux driver source
>> code.  I tried copying rt2860.bin to rate.bin but that didn't work.
>>
>> I tried starting wpa_supplicant anyway, and got this:
>>
>> Starting wpa_supplicant.
>> ioctl[SIOCG80211, op 98, len 32]: Invalid argument
>> ELOOP: remaining socket: sock=5 eloop_data=0x28407140
>> user_data=0x2840e040 handler=0x8069f40
>> /etc/rc.d/wpa_supplicant: WARNING: failed to start wpa_supplicant
> 
> Please, tell me that you start wpa_supplicant with -Dndis flag.
> 

I ran 'sh -x /etc/rc.d/wpa_supplicant start ndis0' to see how the script 
was starting the program.  Here is the original command line:

/usr/sbin/wpa_supplicant -s -B -i ndis0 -c /etc/wpa_supplicant.conf -D 
bsd -P /var/run/wpa_supplicant/ndis0.pid

I replaced '-D bsd' with '-D ndis' and still got a return code of 255. 
I double-checked to ensure the module was loaded, and adding '-dd' did 
not increase the debug output.

I also read the /etc/rc.d/wpa_supplicant script to see how it detected 
whether or not to use '-D ndis'.  Turns out it calls a function named 
'is_ndis_interface()' which checks a sysctl named 
'net.wlan.${1#wlan}.%parent' but there is no 'net.wlan.ndis0.%parent', 
nor is there any 'net.wlan.ndis0' keys.  There *is* 'net.ndis.0.%parent' 
which is set to pci1 and 'net.ndis.0.%driver' which is set to ndis -- 
the latter sounds like a possibly sensible test for '-D ndis' if you ask 
me.

Anyway, the fact that the sysctl wasn't present makes me think the 
failure to load /compat/ndis/rate.bin might have caused 'ndis_attach()' 
to not call 'ndis_create_sysctls()', or 'ndis_attach_pci()' to not call 
'ndis_attach()', or so on -- but I can't tell where 'NdisOpenFile()' 
gets called so I'm not sure.

Does this sound reasonable?  What do you think?

Jack.


More information about the freebsd-mobile mailing list