diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-10-27 15:59:55 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-10-30 16:49:19 -0400 |
commit | 4d36ec58239eec44d77839ef6c25108efcbbb58c (patch) | |
tree | 7074195389af214ba0081169afb4b64514f2419a /net/mac80211/ieee80211_i.h | |
parent | b59f04cbf8ab4dce63f0d2ed658624b0ad21c67d (diff) |
mac80211: split hardware scan by band
There's currently a very odd bug in mac80211 -- a
hardware scan that is done while the hardware is
really operating on 2.4 GHz will include CCK rates
in the probe request frame, even on 5 GHz (if the
driver uses the mac80211 IEs). Vice versa, if the
hardware is operating on 5 GHz the 2.4 GHz probe
requests will not include CCK rates even though
they should.
Fix this by splitting up cfg80211 scan requests by
band -- recalculating the IEs every time -- and
requesting only per-band scans from the driver.
Apparently this bug hasn't been a problem yet, but
it is imaginable that some older access points get
confused if confronted with such behaviour.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 60c2822802f0..6365079e6375 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -667,10 +667,9 @@ struct ieee80211_local { | |||
667 | unsigned long scanning; | 667 | unsigned long scanning; |
668 | struct cfg80211_ssid scan_ssid; | 668 | struct cfg80211_ssid scan_ssid; |
669 | struct cfg80211_scan_request *int_scan_req; | 669 | struct cfg80211_scan_request *int_scan_req; |
670 | struct cfg80211_scan_request *scan_req; | 670 | struct cfg80211_scan_request *scan_req, *hw_scan_req; |
671 | struct ieee80211_channel *scan_channel; | 671 | struct ieee80211_channel *scan_channel; |
672 | const u8 *orig_ies; | 672 | enum ieee80211_band hw_scan_band; |
673 | int orig_ies_len; | ||
674 | int scan_channel_idx; | 673 | int scan_channel_idx; |
675 | int scan_ies_len; | 674 | int scan_ies_len; |
676 | 675 | ||
@@ -1050,7 +1049,8 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | |||
1050 | u8 *extra, size_t extra_len, const u8 *bssid, | 1049 | u8 *extra, size_t extra_len, const u8 *bssid, |
1051 | const u8 *key, u8 key_len, u8 key_idx); | 1050 | const u8 *key, u8 key_len, u8 key_idx); |
1052 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, | 1051 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, |
1053 | const u8 *ie, size_t ie_len); | 1052 | const u8 *ie, size_t ie_len, |
1053 | enum ieee80211_band band); | ||
1054 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 1054 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, |
1055 | const u8 *ssid, size_t ssid_len, | 1055 | const u8 *ssid, size_t ssid_len, |
1056 | const u8 *ie, size_t ie_len); | 1056 | const u8 *ie, size_t ie_len); |