| 1 | --- a/net80211/ieee80211_beacon.c |
| 2 | +++ b/net80211/ieee80211_beacon.c |
| 3 | @@ -542,10 +542,10 @@ ieee80211_beacon_update(struct ieee80211 |
| 4 | vap->iv_flags &= ~IEEE80211_F_XRUPDATE; |
| 5 | } |
| 6 | #endif |
| 7 | - if ((ic->ic_flags_ext & IEEE80211_FEXT_ERPUPDATE) && |
| 8 | + if ((vap->iv_flags_ext & IEEE80211_FEXT_ERPUPDATE) && |
| 9 | (bo->bo_erp != NULL)) { |
| 10 | (void)ieee80211_add_erp(bo->bo_erp, ic); |
| 11 | - ic->ic_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE; |
| 12 | + vap->iv_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE; |
| 13 | } |
| 14 | } |
| 15 | /* if it is a mode change beacon for dynamic turbo case */ |
| 16 | --- a/net80211/ieee80211_input.c |
| 17 | +++ b/net80211/ieee80211_input.c |
| 18 | @@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap |
| 19 | /* Assume no ERP IE == 11b AP */ |
| 20 | if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) && |
| 21 | !(ic->ic_flags & IEEE80211_F_USEPROT)) { |
| 22 | + struct ieee80211vap *tmpvap; |
| 23 | |
| 24 | ic->ic_flags |= IEEE80211_F_USEPROT; |
| 25 | - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 26 | + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { |
| 27 | + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 28 | + } |
| 29 | } |
| 30 | } |
| 31 | |
| 32 | --- a/net80211/ieee80211_node.c |
| 33 | +++ b/net80211/ieee80211_node.c |
| 34 | @@ -2025,8 +2025,12 @@ ieee80211_node_join_11g(struct ieee80211 |
| 35 | } |
| 36 | |
| 37 | /* Update ERP element if this is first non ERP station */ |
| 38 | - if (ic->ic_nonerpsta == 1) |
| 39 | - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 40 | + if (ic->ic_nonerpsta == 1) { |
| 41 | + struct ieee80211vap *tmpvap; |
| 42 | + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { |
| 43 | + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 44 | + } |
| 45 | + } |
| 46 | } else |
| 47 | ni->ni_flags |= IEEE80211_NODE_ERP; |
| 48 | } |
| 49 | @@ -2229,6 +2233,8 @@ ieee80211_node_leave_11g(struct ieee8021 |
| 50 | IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni, |
| 51 | "non-ERP station leaves, count now %d", ic->ic_nonerpsta); |
| 52 | if (ic->ic_nonerpsta == 0) { |
| 53 | + struct ieee80211vap *tmpvap; |
| 54 | + |
| 55 | IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC, |
| 56 | "%s: disable use of protection\n", __func__); |
| 57 | ic->ic_flags &= ~IEEE80211_F_USEPROT; |
| 58 | @@ -2240,7 +2246,9 @@ ieee80211_node_leave_11g(struct ieee8021 |
| 59 | ic->ic_flags |= IEEE80211_F_SHPREAMBLE; |
| 60 | ic->ic_flags &= ~IEEE80211_F_USEBARKER; |
| 61 | } |
| 62 | - ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 63 | + TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) { |
| 64 | + tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE; |
| 65 | + } |
| 66 | } |
| 67 | } |
| 68 | } |
| 69 | |