aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-06-22 10:43:48 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-06-27 15:09:39 -0400
commit8ee3108075c9e9e2701493a245a754b8b0db8e57 (patch)
tree0aca6192c6c79618ca97daebf33413708698e589
parent04b7dcf979d71e870683c804802e44287a802760 (diff)
mac80211: restrict advertised HW scan rates
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>
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c2
-rw-r--r--net/mac80211/scan.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 7e1fa9671277..031cd89b1768 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1130,6 +1130,8 @@ static int mac80211_hwsim_hw_scan(struct ieee80211_hw *hw,
1130 for (i = 0; i < req->n_channels; i++) 1130 for (i = 0; i < req->n_channels; i++)
1131 printk(KERN_DEBUG "hwsim hw_scan freq %d\n", 1131 printk(KERN_DEBUG "hwsim hw_scan freq %d\n",
1132 req->channels[i]->center_freq); 1132 req->channels[i]->center_freq);
1133 print_hex_dump(KERN_DEBUG, "scan IEs: ", DUMP_PREFIX_OFFSET,
1134 16, 1, req->ie, req->ie_len, 1);
1133 1135
1134 ieee80211_queue_delayed_work(hw, &hsd->w, 2 * HZ); 1136 ieee80211_queue_delayed_work(hw, &hsd->w, 2 * HZ);
1135 1137
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 1758b463c583..6403722da603 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -228,6 +228,7 @@ ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
228static bool ieee80211_prep_hw_scan(struct ieee80211_local *local) 228static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
229{ 229{
230 struct cfg80211_scan_request *req = local->scan_req; 230 struct cfg80211_scan_request *req = local->scan_req;
231 struct ieee80211_sub_if_data *sdata = local->scan_sdata;
231 enum ieee80211_band band; 232 enum ieee80211_band band;
232 int i, ielen, n_chans; 233 int i, ielen, n_chans;
233 234
@@ -251,8 +252,8 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
251 local->hw_scan_req->n_channels = n_chans; 252 local->hw_scan_req->n_channels = n_chans;
252 253
253 ielen = ieee80211_build_preq_ies(local, (u8 *)local->hw_scan_req->ie, 254 ielen = ieee80211_build_preq_ies(local, (u8 *)local->hw_scan_req->ie,
254 req->ie, req->ie_len, band, (u32) -1, 255 req->ie, req->ie_len, band,
255 0); 256 sdata->rc_rateidx_mask[band], 0);
256 local->hw_scan_req->ie_len = ielen; 257 local->hw_scan_req->ie_len = ielen;
257 258
258 return true; 259 return true;