X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/941864737e10c281bade110ee7937f9f866b4bb6..3a63130e2ecff400e15c67bb2a1afc911b2881fe:/package/madwifi/patches/355-eap_auth_disassoc.patch diff --git a/package/madwifi/patches/355-eap_auth_disassoc.patch b/package/madwifi/patches/355-eap_auth_disassoc.patch index e85d93a78..8bb1e9323 100644 --- a/package/madwifi/patches/355-eap_auth_disassoc.patch +++ b/package/madwifi/patches/355-eap_auth_disassoc.patch @@ -5,28 +5,24 @@ Signed-off-by: Felix Fietkau --- a/ath/if_ath.c +++ b/ath/if_ath.c -@@ -8315,6 +8315,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 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 --- 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 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 #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 ((__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);