On Thu, 2009-04-16 at 09:14 +0300, Kalle Valo wrote: > Basically the problem is that if you scan in an area where there are no > or very few APs and scan takes more than two seconds (like abg band > scans usually take), sta->last_rx won't get updated because mac80211 is > not receiving any frames. This is why the beacon loss check will trigger > in ieee80211_associated(). > > The problem won't happen if there are lot of APs in the neighbourhood > distributed throughout the channels because then sta->last_rx is updated > often enough and the beacon loss check won't trigger. That doesn't make sense, why would our AP sta->last_rx be updated for other APs? I think you mean sdata->u.mgd.last_beacon, which is, probably wrongly, updated for all beacons. > I have been thinking two ways to fix this, either disabling the timer > for the duration of the scan or add a check for scan scan in > ieee80211_associated(). I started implementing the former but haven't > finished it yet. It would be great if someone else can fix it. But that doesn't make sense to me now. ieee80211_associated() is only run from the station work (ieee80211_sta_work) which doesn't do anything when we're scanning (and gets restarted on scan end). So even if last_rx or last_beacon isn't updated we should only run the evaluation of that after the scan finishes. I'll try to reproduce this. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part