madwifi: clean up tx status mrr handling and fix mrr parsing for 5416
[openwrt/svn-archive/archive.git] / package / madwifi / patches / 355-eap_auth_disassoc.patch
index 9b589649ff2e6efdc7ea9820e2be2bc6ea3f3c3c..8bb1e9323642c501fb5aabcb34df209756e9be2e 100644 (file)
@@ -5,28 +5,24 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -8328,6 +8328,18 @@
+@@ -8334,6 +8334,14 @@ ath_tx_processq(struct ath_softc *sc, st
  #endif
                                if (ts->ts_status & HAL_TXERR_XRETRY) {
                                        sc->sc_stats.ast_tx_xretries++;
-+                                      if (SKB_CB(bf->bf_skb)->auth_pkt && (ni->ni_vap->iv_opmode == IEEE80211_M_STA)) {
-+                                              struct ieee80211com *ic = &sc->sc_ic;
++                                      if (SKB_CB(bf->bf_skb)->auth_pkt &&
++                                              (ni->ni_vap->iv_opmode == IEEE80211_M_STA)) {
++                                              struct ieee80211vap *vap = ni->ni_vap;
 +
 +                                              /* if roaming is enabled, try reassociating, otherwise
 +                                               * disassociate and go back to the scan state */
-+                                              IEEE80211_VAPS_LOCK_BH(ic);
-+                                              if (ic->ic_roaming == IEEE80211_ROAMING_AUTO)
-+                                                      ni->ni_vap->iv_newstate(ni->ni_vap, IEEE80211_S_ASSOC, 1);
-+                                              else
-+                                                      ni->ni_vap->iv_newstate(ni->ni_vap, IEEE80211_S_SCAN, 0);
-+                                              IEEE80211_VAPS_UNLOCK_BH(ic);
++                                              vap->iv_mgtsend.function(vap->iv_mgtsend.data);
 +                                      }
                                        if (ni->ni_flags & IEEE80211_NODE_UAPSD_TRIG) {
                                                ni->ni_stats.ns_tx_eosplost++;
                                                DPRINTF(sc, ATH_DEBUG_UAPSD,
 --- a/net80211/ieee80211_linux.c
 +++ b/net80211/ieee80211_linux.c
-@@ -156,6 +156,7 @@
+@@ -156,6 +156,7 @@ ieee80211_getmgtframe(u_int8_t **frm, u_
                if (off != 0)
                        skb_reserve(skb, align - off);
  
@@ -36,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
                SKB_CB(skb)->next = NULL;
 --- a/net80211/ieee80211_linux.h
 +++ b/net80211/ieee80211_linux.h
-@@ -393,6 +393,7 @@
+@@ -393,6 +393,7 @@ typedef spinlock_t acl_lock_t;
        void            (*next_destructor)(struct sk_buff *skb);
  #endif
        struct sk_buff *next;                   /* fast frame sk_buf chain */
@@ -46,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
  
 --- a/net80211/ieee80211_output.c
 +++ b/net80211/ieee80211_output.c
-@@ -778,6 +778,8 @@
+@@ -778,6 +778,8 @@ ieee80211_encap(struct ieee80211_node *n
        else
                hdrsize = sizeof(struct ieee80211_frame);
  
@@ -55,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        switch (vap->iv_opmode) {
        case IEEE80211_M_IBSS:
        case IEEE80211_M_AHDEMO:
-@@ -1622,6 +1624,7 @@
+@@ -1622,6 +1624,7 @@ ieee80211_add_xr_param(u_int8_t *frm, st
        ie->param_len = frm - &ie->param_oui[0];
        return frm;
  }
@@ -63,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
  #endif
  /*
   * Send a probe request frame with the specified ssid
-@@ -1886,6 +1889,7 @@
+@@ -1886,6 +1889,7 @@ ieee80211_send_mgmt(struct ieee80211_nod
                                sizeof(u_int16_t)+IEEE80211_CHALLENGE_LEN : 0));
                if (skb == NULL)
                        senderr(ENOMEM, is_tx_nobuf);
@@ -71,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
  
                ((__le16 *)frm)[0] =
                        (is_shared_key) ? htole16(IEEE80211_AUTH_ALG_SHARED)
-@@ -1960,6 +1964,7 @@
+@@ -1960,6 +1964,7 @@ ieee80211_send_mgmt(struct ieee80211_nod
                        vap->app_ie[IEEE80211_APPIE_FRAME_ASSOC_REQ].length);
                if (skb == NULL)
                        senderr(ENOMEM, is_tx_nobuf);