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>
This commit is contained in:

committed by
John W. Linville

parent
b59f04cbf8
commit
4d36ec5823
@@ -667,10 +667,9 @@ struct ieee80211_local {
|
||||
unsigned long scanning;
|
||||
struct cfg80211_ssid scan_ssid;
|
||||
struct cfg80211_scan_request *int_scan_req;
|
||||
struct cfg80211_scan_request *scan_req;
|
||||
struct cfg80211_scan_request *scan_req, *hw_scan_req;
|
||||
struct ieee80211_channel *scan_channel;
|
||||
const u8 *orig_ies;
|
||||
int orig_ies_len;
|
||||
enum ieee80211_band hw_scan_band;
|
||||
int scan_channel_idx;
|
||||
int scan_ies_len;
|
||||
|
||||
@@ -1050,7 +1049,8 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
|
||||
u8 *extra, size_t extra_len, const u8 *bssid,
|
||||
const u8 *key, u8 key_len, u8 key_idx);
|
||||
int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
|
||||
const u8 *ie, size_t ie_len);
|
||||
const u8 *ie, size_t ie_len,
|
||||
enum ieee80211_band band);
|
||||
void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
|
||||
const u8 *ssid, size_t ssid_len,
|
||||
const u8 *ie, size_t ie_len);
|
||||
|
Reference in New Issue
Block a user