summaryrefslogtreecommitdiffstats
path: root/package/madwifi/patches/312-erpupdate.patch
blob: 2af36af264cc3ca6a0a535a6d4b8d31bc75dc772 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Index: madwifi-trunk-r3314/net80211/ieee80211_beacon.c
===================================================================
--- madwifi-trunk-r3314.orig/net80211/ieee80211_beacon.c
+++ madwifi-trunk-r3314/net80211/ieee80211_beacon.c
@@ -542,10 +542,10 @@
 			vap->iv_flags &= ~IEEE80211_F_XRUPDATE;
 		}
 #endif
-		if ((ic->ic_flags_ext & IEEE80211_FEXT_ERPUPDATE) && 
+		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-trunk-r3314/net80211/ieee80211_input.c
===================================================================
--- madwifi-trunk-r3314.orig/net80211/ieee80211_input.c
+++ madwifi-trunk-r3314/net80211/ieee80211_input.c
@@ -3431,9 +3431,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-trunk-r3314/net80211/ieee80211_node.c
===================================================================
--- madwifi-trunk-r3314.orig/net80211/ieee80211_node.c
+++ madwifi-trunk-r3314/net80211/ieee80211_node.c
@@ -2025,8 +2025,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;
 }
@@ -2229,6 +2233,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;
@@ -2240,7 +2246,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;
+			}
 		}
 	}
 }