mac80211: restrict advertised HW scan rates
authorJohannes Berg <johannes.berg@intel.com>
Wed, 22 Jun 2011 14:43:48 +0000 (16:43 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 27 Jun 2011 19:09:39 +0000 (15:09 -0400)
Advertise only user-requested bitrates in a HW scan.
Note that the hw_scan API doesn't currently have a
way of asking for a specific probe request bitrate,
so we might end up using a bitrate that we don't
advertise as supported. I'll fix that later.

Also add a hexdump printk to hwsim to verify this.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mac80211_hwsim.c
net/mac80211/scan.c

index 7e1fa96..031cd89 100644 (file)
@@ -1130,6 +1130,8 @@ static int mac80211_hwsim_hw_scan(struct ieee80211_hw *hw,
        for (i = 0; i < req->n_channels; i++)
                printk(KERN_DEBUG "hwsim hw_scan freq %d\n",
                        req->channels[i]->center_freq);
+       print_hex_dump(KERN_DEBUG, "scan IEs: ", DUMP_PREFIX_OFFSET,
+                       16, 1, req->ie, req->ie_len, 1);
 
        ieee80211_queue_delayed_work(hw, &hsd->w, 2 * HZ);
 
index 1758b46..6403722 100644 (file)
@@ -228,6 +228,7 @@ ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
 static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
 {
        struct cfg80211_scan_request *req = local->scan_req;
+       struct ieee80211_sub_if_data *sdata = local->scan_sdata;
        enum ieee80211_band band;
        int i, ielen, n_chans;
 
@@ -251,8 +252,8 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
        local->hw_scan_req->n_channels = n_chans;
 
        ielen = ieee80211_build_preq_ies(local, (u8 *)local->hw_scan_req->ie,
-                                        req->ie, req->ie_len, band, (u32) -1,
-                                        0);
+                                        req->ie, req->ie_len, band,
+                                        sdata->rc_rateidx_mask[band], 0);
        local->hw_scan_req->ie_len = ielen;
 
        return true;