mac80211: fix basic rates setting from association response
authorTomas Winkler <tomas.winkler@intel.com>
Thu, 30 Oct 2008 15:08:08 +0000 (17:08 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 10 Nov 2008 20:17:40 +0000 (15:17 -0500)
In previous code all the rates were marked as basic.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/mlme.c

index 708eb45..dee6448 100644 (file)
@@ -1291,29 +1291,35 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
 
        for (i = 0; i < elems.supp_rates_len; i++) {
                int rate = (elems.supp_rates[i] & 0x7f) * 5;
+               bool is_basic = !!(elems.supp_rates[i] & 0x80);
 
                if (rate > 110)
                        have_higher_than_11mbit = true;
 
                for (j = 0; j < sband->n_bitrates; j++) {
-                       if (sband->bitrates[j].bitrate == rate)
+                       if (sband->bitrates[j].bitrate == rate) {
                                rates |= BIT(j);
-                       if (elems.supp_rates[i] & 0x80)
-                               basic_rates |= BIT(j);
+                               if (is_basic)
+                                       basic_rates |= BIT(j);
+                               break;
+                       }
                }
        }
 
        for (i = 0; i < elems.ext_supp_rates_len; i++) {
                int rate = (elems.ext_supp_rates[i] & 0x7f) * 5;
+               bool is_basic = !!(elems.supp_rates[i] & 0x80);
 
                if (rate > 110)
                        have_higher_than_11mbit = true;
 
                for (j = 0; j < sband->n_bitrates; j++) {
-                       if (sband->bitrates[j].bitrate == rate)
+                       if (sband->bitrates[j].bitrate == rate) {
                                rates |= BIT(j);
-                       if (elems.ext_supp_rates[i] & 0x80)
-                               basic_rates |= BIT(j);
+                               if (is_basic)
+                                       basic_rates |= BIT(j);
+                               break;
+                       }
                }
        }