aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2012-07-18 00:19:43 +0300
committerArik Nemtsov <arik@wizery.com>2012-07-30 17:48:04 +0300
commitab05c019cbdf5b0dc276aac98dbbb11cc21159d6 (patch)
treeefa1c66ed42f699afe617ccb6fe6091b7301b648
parent1cd9da6b88d7dd9b3c887b62a584aba4bb08299f (diff)
downloadexternal_wpa_supplicant_8_ti-ab05c019cbdf5b0dc276aac98dbbb11cc21159d6.zip
external_wpa_supplicant_8_ti-ab05c019cbdf5b0dc276aac98dbbb11cc21159d6.tar.gz
external_wpa_supplicant_8_ti-ab05c019cbdf5b0dc276aac98dbbb11cc21159d6.tar.bz2
SME: correctly check mode HT caps for enabling OBSS scan
Don't assume the 11g mode is always first in the list of mode (sometimes it isn't). Traverse the array of modes and check the HT40 capability is turned on for 11g. Signed-hostap: Arik Nemtsov <arik@wizery.com>
-rw-r--r--wpa_supplicant/sme.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index c7187e4..a82cb95 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -843,6 +843,8 @@ void sme_sched_obss_scan(struct wpa_supplicant *wpa_s, int enable)
const u8 *ie;
struct wpa_bss *bss = wpa_s->current_bss;
struct wpa_ssid *ssid = wpa_s->current_ssid;
+ struct hostapd_hw_modes *hw_mode = NULL;
+ int i;
eloop_cancel_timeout(sme_obss_scan_timeout, wpa_s, NULL);
wpa_s->sme.sched_obss_scan = 0;
@@ -853,9 +855,20 @@ void sme_sched_obss_scan(struct wpa_supplicant *wpa_s, int enable)
ssid->mode != IEEE80211_MODE_INFRA)
return; /* Not using station SME in wpa_supplicant */
- if (!wpa_s->hw.modes ||
- !(wpa_s->hw.modes->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))
- return; /* Driver does not support HT40 */
+ if (!wpa_s->hw.modes)
+ return;
+
+ /* only HT caps in 11g mode are relevant */
+ for (i = 0; i < wpa_s->hw.num_modes; i++) {
+ hw_mode = &wpa_s->hw.modes[i];
+ if (hw_mode->mode == HOSTAPD_MODE_IEEE80211G)
+ break;
+ }
+
+ /* Driver does not support HT40 for 11g or doesn't have 11g. */
+ if (i == wpa_s->hw.num_modes || !hw_mode ||
+ !(hw_mode->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))
+ return;
if (bss == NULL || bss->freq < 2400 || bss->freq > 2500)
return; /* Not associated on 2.4 GHz band */