diff options
author | adrian <adrian@FreeBSD.org> | 2014-12-18 05:17:18 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2014-12-18 05:17:18 +0000 |
commit | befcdd660f271babed582714f57d94b131da4af5 (patch) | |
tree | 8d1d536fc938365b8083b5d2355dd19f531bfe2e /sys/kern/kern_lockstat.c | |
parent | 06231125f019a24f487820bacef77591f2697c99 (diff) | |
download | FreeBSD-src-befcdd660f271babed582714f57d94b131da4af5.zip FreeBSD-src-befcdd660f271babed582714f57d94b131da4af5.tar.gz |
Fix the scan handling for 11b->11g upgrades in a world where, well,
it's not just 11b/11g.
The following was happening, and it's quite .. annoyingly grr-y.
* create vap, setup wpa_supplicant with no bgscanning, etc - there's
no call to ieee80211_media_change, so vap->iv_des_mode is
IEEE80211_MODE_AUTO;
* do ifconfig wlan0 scan - same thing, media_change doesn't get called,
iv_des_mode stays as auto.
* But then, run wpa_cli and do 'scan' - it'll do a media change.
* if you're on 11ng, vap->iv_des_mode gets changed to IEEE80211_MODE_11NG
* Then makescanlist() is called. There's a block of code that gets
called if iv_des_mode != IEEE80211_MODE_AUTO, and it does this:
if (vap->iv_des_mode != IEEE80211_MODE_11G ||
mode != IEEE80211_MODE_11B)
continue;
mode = IEEE80211_MODE_11G; /* upgrade */
* .. now, iv_des_mode is not IEEE80211_MODE_11G, so it always runs
'continue'
* .. and thus the scan list stays empty and no further channel
scans occur. Ever.(1)
If you then disassociate and try associating to something, your
scan table has likely been purged / aged out and you'll never
see anything in the scan list.
(1) You need to do 'ifconfig wlan0 mode auto' or just destroy/re-create
the VAP to get working wireless again.
Tested:
* iwn(4) - intel 5300 wifi; STA mode; using wpa_supplicant; bgscan
enabled -and- wpa_supplicant scanning.
Thanks to:
* Everyone who kept poking me about this and wondering why the hell
their wifi would eventually stop seeing scan lists. Grr.
I eventually snapped this evening and dug back into this code.
Diffstat (limited to 'sys/kern/kern_lockstat.c')
0 files changed, 0 insertions, 0 deletions