| From f0b058b61711ebf5be94d6865ca7b2c259b71d37 Mon Sep 17 00:00:00 2001 |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| Date: Wed, 28 Apr 2010 15:17:03 +0200 |
| Subject: mac80211: do not wip out old supported rates |
| |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| |
| commit f0b058b61711ebf5be94d6865ca7b2c259b71d37 upstream. |
| |
| Use old supported rates, if AP do not provide supported rates |
| information element in a new managment frame. |
| |
| Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/mac80211/scan.c | 21 +++++++++++---------- |
| 1 file changed, 11 insertions(+), 10 deletions(-) |
| |
| --- a/net/mac80211/scan.c |
| +++ b/net/mac80211/scan.c |
| @@ -60,7 +60,7 @@ ieee80211_bss_info_update(struct ieee802 |
| bool beacon) |
| { |
| struct ieee80211_bss *bss; |
| - int clen; |
| + int clen, srlen; |
| s32 signal = 0; |
| |
| if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) |
| @@ -92,23 +92,24 @@ ieee80211_bss_info_update(struct ieee802 |
| if (bss->dtim_period == 0) |
| bss->dtim_period = 1; |
| |
| - bss->supp_rates_len = 0; |
| + /* replace old supported rates if we get new values */ |
| + srlen = 0; |
| if (elems->supp_rates) { |
| - clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len; |
| + clen = IEEE80211_MAX_SUPP_RATES; |
| if (clen > elems->supp_rates_len) |
| clen = elems->supp_rates_len; |
| - memcpy(&bss->supp_rates[bss->supp_rates_len], elems->supp_rates, |
| - clen); |
| - bss->supp_rates_len += clen; |
| + memcpy(bss->supp_rates, elems->supp_rates, clen); |
| + srlen += clen; |
| } |
| if (elems->ext_supp_rates) { |
| - clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len; |
| + clen = IEEE80211_MAX_SUPP_RATES - srlen; |
| if (clen > elems->ext_supp_rates_len) |
| clen = elems->ext_supp_rates_len; |
| - memcpy(&bss->supp_rates[bss->supp_rates_len], |
| - elems->ext_supp_rates, clen); |
| - bss->supp_rates_len += clen; |
| + memcpy(bss->supp_rates + srlen, elems->ext_supp_rates, clen); |
| + srlen += clen; |
| } |
| + if (srlen) |
| + bss->supp_rates_len = srlen; |
| |
| bss->wmm_used = elems->wmm_param || elems->wmm_info; |
| |