diff options
author | Felix Fietkau <nbd@openwrt.org> | 2008-07-25 22:37:06 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2008-07-25 22:37:06 +0000 |
commit | 21dbb0d64d98760590e4bda1d4ee4391aa6f6516 (patch) | |
tree | aed9e8d6da2c3a58d2df85e9b7233d3d6e1231c7 /package/madwifi/patches | |
parent | 8aab13b562a7ba4807e3766db1e58bf1d05b8be2 (diff) | |
download | upstream-21dbb0d64d98760590e4bda1d4ee4391aa6f6516.tar.gz upstream-21dbb0d64d98760590e4bda1d4ee4391aa6f6516.tar.bz2 upstream-21dbb0d64d98760590e4bda1d4ee4391aa6f6516.zip |
madwifi: preserve WPA IEs received in probe responses and prefer them over beacon information improves reliability when using wpa_supplicant to connect to aps with hidden ssid and dynamic encryption settings
SVN-Revision: 11928
Diffstat (limited to 'package/madwifi/patches')
-rw-r--r-- | package/madwifi/patches/368-sta_ie_preserve.patch | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/package/madwifi/patches/368-sta_ie_preserve.patch b/package/madwifi/patches/368-sta_ie_preserve.patch new file mode 100644 index 0000000000..7094a43258 --- /dev/null +++ b/package/madwifi/patches/368-sta_ie_preserve.patch @@ -0,0 +1,49 @@ +--- a/net80211/ieee80211_scan_sta.c ++++ b/net80211/ieee80211_scan_sta.c +@@ -201,8 +201,10 @@ + } + + static void +-saveie(u_int8_t **iep, const u_int8_t *ie) ++saveie(u_int8_t **iep, const u_int8_t *ie, int preserve) + { ++ if (preserve && *iep) ++ return; + if (ie == NULL) + *iep = NULL; + else +@@ -304,10 +306,10 @@ + (const struct ieee80211_tim_ie *) sp->tim; + ise->se_dtimperiod = tim->tim_period; + } +- saveie(&ise->se_wme_ie, sp->wme); +- saveie(&ise->se_wpa_ie, sp->wpa); +- saveie(&ise->se_rsn_ie, sp->rsn); +- saveie(&ise->se_ath_ie, sp->ath); ++ saveie(&ise->se_wme_ie, sp->wme, 0); ++ saveie(&ise->se_wpa_ie, sp->wpa, !sp->isprobe); ++ saveie(&ise->se_rsn_ie, sp->rsn, !sp->isprobe); ++ saveie(&ise->se_ath_ie, sp->ath, 0); + + /* clear failure count after STA_FAIL_AGE passes */ + if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) { +--- a/net80211/ieee80211_input.c ++++ b/net80211/ieee80211_input.c +@@ -3106,6 +3106,7 @@ + */ + IEEE80211_VERIFY_LENGTH(efrm - frm, 12); + memset(&scan, 0, sizeof(scan)); ++ scan.isprobe = (subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP) && IEEE80211_ADDR_EQ(wh->i_addr2, vap->iv_myaddr); + scan.tstamp = frm; + frm += 8; + scan.bintval = le16toh(*(__le16 *)frm); +--- a/net80211/ieee80211_scan.h ++++ b/net80211/ieee80211_scan.h +@@ -133,6 +133,7 @@ + u_int8_t erp; + u_int16_t bintval; + u_int8_t timoff; ++ u_int8_t isprobe; + u_int8_t *tim; + u_int8_t *tstamp; + u_int8_t *country; |