CFT/CFR, possible fix for ifconfig scan hang
Bernhard Schmidt
bschmidt at techwires.net
Mon Jan 17 20:32:44 UTC 2011
Hi,
no objections so far. If non arise till this weekend, I going to commit this.
On Monday 27 December 2010 20:24:36 Bernhard Schmidt wrote:
> Hi,
>
> I recently received some complains about the infamous 'ifconfig scan hang'
> issue again. Finally looking into that I noticed a bunch of inconsistences,
> the most obvious one is that ifconfig(8) is talking about doing a
> background scan by default, which is simply not true according to the
> implementation.
>
> Anyways.. the generic use-case which triggers the 'hang' is, if 'ifconfig
> scan' is called while a scan is already in progress, net80211 will not
> start a new one which means that no scan flags are updated, though,
> ifconfig will loop until it receives a notification about the scan being
> done. This does always happen after an 'ifconfig up', because net80211
> will move the VAP into scan state by default, with the scan flags set in
> such a way that a scan is done until there is something to connect to.
> This also means that no notifications about the scan being done are sent
> to upper layers, because the scan is not finished..
>
> If we successfully moved from scan to run state, how so ever, and now want
> to call 'ifconfig scan' we're faced with another issue. Doing a scan while
> being associated means we have to move off our current channel, to do this
> without loosing any imported frames/information, we make use of the power
> save feature. Now if we want to send any traffic while doing the scan, the
> scan is temporary suspended, frames are sent, then the scan is restarted
> after receiving a beacon and there is no frame to send. For this to work
> though, we need to actually request a background scan so appropriate flags
> are set and the scan is actually restarted. Without this, we hang until
> the bgscan timer fires of at that next bgscanintval.
>
> I have a patch available which addresses both of the issues. It requests a
> background scan by default and also honors the return value of
> start_scan_locked():
> - for head
> http://techwires.net/~bschmidt/scan_hang_head.diff
> - for 8-stable/8.2-*:
> http://techwires.net/~bschmidt/scan_hang_stable.diff
>
> Please test and let me know if it works, or not.
>
> Thanks
>
--
Bernhard
More information about the freebsd-net
mailing list