From b69b7fe7589c5eea9a274859fd48ea430c8f3a3e Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Sun, 21 Sep 2008 22:24:07 +0000 Subject: [PATCH] Always update ic_lastnonht so we track overlapping legacy bss properly; was doing this only on a change in the protection mode so the advertised protection mode in the beacon would oscillate. Submitted by: Chris Zimmermann --- sys/net80211/ieee80211_ht.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index 2304bc47cada..5356a66b5844 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -1080,22 +1080,21 @@ void ieee80211_htprot_update(struct ieee80211com *ic, int protmode) { #define OPMODE(x) SM(x, IEEE80211_HTINFO_OPMODE) - if (protmode == ic->ic_curhtprotmode) - return; - if (OPMODE(ic->ic_curhtprotmode) == IEEE80211_HTINFO_OPMODE_MIXED && - OPMODE(protmode) == IEEE80211_HTINFO_OPMODE_PROTOPT) - return; - IEEE80211_LOCK(ic); + /* track non-HT station presence */ KASSERT(protmode & IEEE80211_HTINFO_NONHT_PRESENT, - ("missing NONHT_PRESENT")); + ("protmode 0x%x", protmode)); ic->ic_flags_ext |= IEEE80211_FEXT_NONHT_PR; ic->ic_lastnonht = ticks; - /* push beacon update */ - ic->ic_curhtprotmode = protmode; - htinfo_notify(ic); + if (protmode != ic->ic_curhtprotmode && + (OPMODE(ic->ic_curhtprotmode) != IEEE80211_HTINFO_OPMODE_MIXED || + OPMODE(protmode) == IEEE80211_HTINFO_OPMODE_PROTOPT)) { + /* push beacon update */ + ic->ic_curhtprotmode = protmode; + htinfo_notify(ic); + } IEEE80211_UNLOCK(ic); #undef OPMODE }