Jesse Keating 2f82dda
From: Stanislaw Gruszka <sgruszka@redhat.com>
Jesse Keating 2f82dda
To: kernel@lists.fedoraproject.org, "John W. Linville" <linville@redhat.com>
Jesse Keating 2f82dda
Subject: [PATCH 3/4 2.6.32.y] mac80211: do not wip out old supported rates
Jesse Keating 2f82dda
Date: Fri, 11 Jun 2010 17:03:15 +0200
Jesse Keating 2f82dda
Jesse Keating 2f82dda
Use old supported rates, if some buggy AP do not provide
Jesse Keating 2f82dda
supported rates information element in managment frame.
Jesse Keating 2f82dda
Jesse Keating 2f82dda
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Jesse Keating 2f82dda
---
Jesse Keating 2f82dda
 net/mac80211/scan.c |   21 +++++++++++----------
Jesse Keating 2f82dda
 1 files changed, 11 insertions(+), 10 deletions(-)
Jesse Keating 2f82dda
Jesse Keating 2f82dda
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
Jesse Keating 2f82dda
index fd6411d..169111a 100644
Jesse Keating 2f82dda
--- a/net/mac80211/scan.c
Jesse Keating 2f82dda
+++ b/net/mac80211/scan.c
Jesse Keating 2f82dda
@@ -62,7 +62,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
Jesse Keating 2f82dda
 			  bool beacon)
Jesse Keating 2f82dda
 {
Jesse Keating 2f82dda
 	struct ieee80211_bss *bss;
Jesse Keating 2f82dda
-	int clen;
Jesse Keating 2f82dda
+	int clen, srlen;
Jesse Keating 2f82dda
 	s32 signal = 0;
Jesse Keating 2f82dda
 
Jesse Keating 2f82dda
 	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
Jesse Keating 2f82dda
@@ -94,23 +94,24 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
Jesse Keating 2f82dda
 	if (bss->dtim_period == 0)
Jesse Keating 2f82dda
 		bss->dtim_period = 1;
Jesse Keating 2f82dda
 
Jesse Keating 2f82dda
-	bss->supp_rates_len = 0;
Jesse Keating 2f82dda
+	/* replace old supported rates if we get new values */
Jesse Keating 2f82dda
+	srlen = 0;
Jesse Keating 2f82dda
 	if (elems->supp_rates) {
Jesse Keating 2f82dda
-		clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
Jesse Keating 2f82dda
+		clen = IEEE80211_MAX_SUPP_RATES;
Jesse Keating 2f82dda
 		if (clen > elems->supp_rates_len)
Jesse Keating 2f82dda
 			clen = elems->supp_rates_len;
Jesse Keating 2f82dda
-		memcpy(&bss->supp_rates[bss->supp_rates_len], elems->supp_rates,
Jesse Keating 2f82dda
-		       clen);
Jesse Keating 2f82dda
-		bss->supp_rates_len += clen;
Jesse Keating 2f82dda
+		memcpy(bss->supp_rates, elems->supp_rates, clen);
Jesse Keating 2f82dda
+		srlen += clen;
Jesse Keating 2f82dda
 	}
Jesse Keating 2f82dda
 	if (elems->ext_supp_rates) {
Jesse Keating 2f82dda
-		clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
Jesse Keating 2f82dda
+		clen = IEEE80211_MAX_SUPP_RATES - srlen;
Jesse Keating 2f82dda
 		if (clen > elems->ext_supp_rates_len)
Jesse Keating 2f82dda
 			clen = elems->ext_supp_rates_len;
Jesse Keating 2f82dda
-		memcpy(&bss->supp_rates[bss->supp_rates_len],
Jesse Keating 2f82dda
-		       elems->ext_supp_rates, clen);
Jesse Keating 2f82dda
-		bss->supp_rates_len += clen;
Jesse Keating 2f82dda
+		memcpy(bss->supp_rates + srlen, elems->ext_supp_rates, clen);
Jesse Keating 2f82dda
+		srlen += clen;
Jesse Keating 2f82dda
 	}
Jesse Keating 2f82dda
+	if (srlen)
Jesse Keating 2f82dda
+		bss->supp_rates_len = srlen;
Jesse Keating 2f82dda
 
Jesse Keating 2f82dda
 	bss->wmm_used = elems->wmm_param || elems->wmm_info;
Jesse Keating 2f82dda
 
Jesse Keating 2f82dda
-- 
Jesse Keating 2f82dda
1.6.2.5
Jesse Keating 2f82dda
Jesse Keating 2f82dda
_______________________________________________
Jesse Keating 2f82dda
kernel mailing list
Jesse Keating 2f82dda
kernel@lists.fedoraproject.org
Jesse Keating 2f82dda
https://admin.fedoraproject.org/mailman/listinfo/kernel
Jesse Keating 2f82dda