Index: madwifi-dfs-r3053/net80211/ieee80211_beacon.c =================================================================== --- madwifi-dfs-r3053.orig/net80211/ieee80211_beacon.c 2008-01-10 10:51:31.406580318 +0100 +++ madwifi-dfs-r3053/net80211/ieee80211_beacon.c 2008-01-10 10:56:54.040966203 +0100 @@ -538,9 +538,9 @@ vap->iv_flags &= ~IEEE80211_F_XRUPDATE; } #endif - if ((ic->ic_flags_ext & IEEE80211_FEXT_ERPUPDATE) && (bo->bo_erp != NULL)) { + if ((vap->iv_flags_ext & IEEE80211_FEXT_ERPUPDATE) && (bo->bo_erp != NULL)) { (void) ieee80211_add_erp(bo->bo_erp, ic); - ic->ic_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE; + vap->iv_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE; } } /* if it is a mode change beacon for dynamic turbo case */ Index: madwifi-dfs-r3053/net80211/ieee80211_input.c =================================================================== --- madwifi-dfs-r3053.orig/net80211/ieee80211_input.c 2008-01-10 10:51:31.558588981 +0100 +++ madwifi-dfs-r3053/net80211/ieee80211_input.c 2008-01-10 10:55:51.565405916 +0100 @@ -3315,9 +3315,12 @@ /* Assume no ERP IE == 11b AP */ if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) && !(ic->ic_flags & IEEE80211_F_USEPROT)) { + struct ieee80211vap *tmpvap; ic->ic_flags |= IEEE80211_F_USEPROT; - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + } } } Index: madwifi-dfs-r3053/net80211/ieee80211_node.c =================================================================== --- madwifi-dfs-r3053.orig/net80211/ieee80211_node.c 2008-01-10 10:51:31.622592626 +0100 +++ madwifi-dfs-r3053/net80211/ieee80211_node.c 2008-01-10 10:54:58.398376106 +0100 @@ -1998,8 +1998,12 @@ } /* Update ERP element if this is first non ERP station */ - if (ic->ic_nonerpsta == 1) - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + if (ic->ic_nonerpsta == 1) { + struct ieee80211vap *tmpvap; + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + } + } } else ni->ni_flags |= IEEE80211_NODE_ERP; } @@ -2202,6 +2206,8 @@ IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni, "non-ERP station leaves, count now %d", ic->ic_nonerpsta); if (ic->ic_nonerpsta == 0) { + struct ieee80211vap *tmpvap; + IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC, "%s: disable use of protection\n", __func__); ic->ic_flags &= ~IEEE80211_F_USEPROT; @@ -2213,7 +2219,9 @@ ic->ic_flags |= IEEE80211_F_SHPREAMBLE; ic->ic_flags &= ~IEEE80211_F_USEBARKER; } - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; + } } } }