wpa_supplicant fails to find the NDIS adapter names
Scot Hetzel
swhetzel at gmail.com
Thu Mar 30 14:16:38 UTC 2006
In setting up my laptop (FreeBSD/amd64 6.1-BETA), I needed to use the
NDIS driver, since FreeBSD doesn't have a driver for my Broadcom card.
I added ifconfig_ndis0="WPA DHCP", created a /etc/wpa_supplicant.conf
and restarted the network (/etc/rc.d/netif stop|start). Except I
received this error:
NDIS: Failed to get adapter list (PacketGetAdapterNames)
Failed to initialize driver interface
Running wpa_supplicant manually with the following command, resulted
in the same error.
# wpa_supplicant -B -q -i ndis0 -D ndis -c /etc/wpa_supplicant.conf -P
/var/run/wpa_supplicant/ndis0.pid
Searching the sources, I found this routine being used in
src/contrib/wpa_supplicant/driver_ndis.c (wpa_driver_ndis_get_names).
In this section of source code:
res = PacketGetAdapterNames(names, &len);
if (!res && len > 8192) {
free(names);
names = malloc(len);
if (names == NULL)
return -1;
memset(names, 0, len);
res = PacketGetAdapterNames(names, &len);
}
if (!res) {
wpa_printf(MSG_ERROR, "NDIS: Failed to get adapter list "
"(PacketGetAdapterNames)");
free(names);
return -1;
}
I had added a couple of wpa_printf(MSG_DEBUG..); that printed the
value of res and names. This indicated that PacketGetAdapterNames was
returning with the name of the ndis interface and that res was being
set to zero.
The problem is that PacketGetAdapterNames is returning with a zero
value, which causes wpa_driver_ndis_get_names to print ths error
message and return with a -1.
I then found PacketGetAdapterNames routine in
usr.sbin/wpa/wpa_supplicant/Packet32.c. After replacing 'return(0)'
with 'return(1)', then recompiling and installing the new
wpa_supplicant, I was able to get wpa_supplicant to use the ndis0
interface.
I also noticed that PacketGetAdapterNames is returning with EIO,
ENOMEM, ENOSPC, since wpa_driver_ndis_get_names expects a boolean
value for the return code from PacketGetAdapterNames, should these
return values be changed to a zero also?
The only thing I have tested right now is that wpa_supplicant can find
the ndis0 interface. As I won't be near a wireless network until
tomorrow. If someone can test if replacing the return value in
Packet32.c works for them with the ndis driver.
NOTE: This problem affects both RELENG_6 and CURRENT since the import
and MFC of wpa_supplicant to version 0.4.8.
The only thing I'm not sure about is if my /etc/wpa_supplicant.conf
file is set up properly for this wireless network:
ctrl_interface=/var/run/wpa_supplicant
ctrl_intreface_group=wheel
network={
ssid="campuswpa"
key_mgmt=WPA-EAP
pairwise=TKIP
group=TKIP
eap=PEAP
identity="<username>"
password="<password>"
# phase1="peaplabel=1"
phase2="auth=MSCHAPV2"
priority=1
}
When I connect to this network thru Windows XP, the setup is as follows:
Network Authentication: WPA
Data encryption: TKIP
EAP Type: Protected EAP (PEAP)
Authentication Method: Secured password (EAP-MSCHAP v2)
Fast Reconnect: Enabled
Validate server certificate: Unchecked
Scot
--
DISCLAIMER:
No electrons were mamed while sending this message. Only slightly bruised.
More information about the freebsd-current
mailing list