add preliminary 2.6.32 support
[openwrt.git] / 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  }