From bcc592e44da8c6f2e2631730f3de1bcda47f5e17 Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 22 May 2008 22:17:27 +0000 Subject: ignore sw beacon miss while scanning, just reset the beacon count and timer Reviewed by: thompsa --- sys/net80211/ieee80211_proto.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'sys/net80211/ieee80211_proto.c') diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c index fe03b15..89f69af 100644 --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -1323,8 +1323,25 @@ void ieee80211_swbmiss(void *arg) { struct ieee80211vap *vap = arg; + struct ieee80211com *ic = vap->iv_ic; + + /* XXX sleep state? */ + KASSERT(vap->iv_state == IEEE80211_S_RUN, + ("wrong state %d", vap->iv_state)); - if (vap->iv_swbmiss_count == 0) { + if (ic->ic_flags & IEEE80211_F_SCAN) { + /* + * If scanning just ignore and reset state. If we get a + * bmiss after coming out of scan because we haven't had + * time to receive a beacon then we should probe the AP + * before posting a real bmiss (unless iv_bmiss_max has + * been artifiically lowered). A cleaner solution might + * be to disable the timer on scan start/end but to handle + * case of multiple sta vap's we'd need to disable the + * timers of all affected vap's. + */ + vap->iv_swbmiss_count = 0; + } else if (vap->iv_swbmiss_count == 0) { if (vap->iv_bmiss != NULL) vap->iv_bmiss(vap); if (vap->iv_bmiss_count == 0) /* don't re-arm timer */ -- cgit v1.1