Root/package/madwifi/patches/312-erpupdate.patch

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

Archive Download this file



interactive