From c101bb9d23aadd9dc7c00375def6ffecd3404686 Mon Sep 17 00:00:00 2001 From: Paul Stewart Date: Wed, 4 Sep 2013 08:59:52 -0700 Subject: [PATCH] hostapd: Add option to send OBSS scan params Add a parameter to send the overlapping BSS scan parameter information element. This will require clients to perform background scans to check for neigbors overlapping this HT40 BSS. Since the implementation is incomplete it should only be used for testing. Signed-hostap: Paul Stewart --- hostapd/config_file.c | 2 ++ hostapd/hostapd.conf | 7 +++++++ src/ap/ap_config.h | 1 + src/ap/ieee802_11_ht.c | 16 ++++++++++++++++ src/common/ieee802_11_defs.h | 11 +++++++++++ 5 files changed, 37 insertions(+) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index ef0d647e6..ae059176e 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -2422,6 +2422,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, } } else if (os_strcmp(buf, "require_ht") == 0) { conf->require_ht = atoi(pos); + } else if (os_strcmp(buf, "obss_interval") == 0) { + conf->obss_interval = atoi(pos); #endif /* CONFIG_IEEE80211N */ #ifdef CONFIG_IEEE80211AC } else if (os_strcmp(buf, "ieee80211ac") == 0) { diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index eeb005513..9b70d0fbe 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -468,6 +468,13 @@ wmm_ac_vo_acm=0 # Require stations to support HT PHY (reject association if they do not) #require_ht=1 +# If set non-zero, require stations to perform scans of overlapping +# channels to test for stations which would be affected by 40 MHz traffic. +# This parameter sets the interval in seconds between these scans. This +# is useful only for testing that stations properly set the OBSS interval, +# since the other parameters in the OBSS scan parameters IE are set to 0. +#obss_interval=0 + ##### IEEE 802.11ac related configuration ##################################### # ieee80211ac: Whether IEEE 802.11ac (VHT) is enabled diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index 8b7372482..09b2778e0 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -530,6 +530,7 @@ struct hostapd_config { int ieee80211n; int secondary_channel; int require_ht; + int obss_interval; u32 vht_capab; int ieee80211ac; int require_vht; diff --git a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c index 6483e1c30..2d53648c6 100644 --- a/src/ap/ieee802_11_ht.c +++ b/src/ap/ieee802_11_ht.c @@ -50,6 +50,22 @@ u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid) pos += sizeof(*cap); + if (hapd->iconf->obss_interval) { + struct ieee80211_obss_scan_parameters *scan_params; + + *pos++ = WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS; + *pos++ = sizeof(*scan_params); + + scan_params = (struct ieee80211_obss_scan_parameters *) pos; + os_memset(scan_params, 0, sizeof(*scan_params)); + scan_params->width_trigger_scan_interval = + host_to_le16(hapd->iconf->obss_interval); + + /* TODO: Fill in more parameters (supplicant ignores them) */ + + pos += sizeof(*scan_params); + } + return pos; } diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h index 8ce1bfb25..ca122d933 100644 --- a/src/common/ieee802_11_defs.h +++ b/src/common/ieee802_11_defs.h @@ -587,6 +587,17 @@ struct ieee80211_ht_operation { } STRUCT_PACKED; +struct ieee80211_obss_scan_parameters { + le16 scan_passive_dwell; + le16 scan_active_dwell; + le16 width_trigger_scan_interval; + le16 scan_passive_total_per_channel; + le16 scan_active_total_per_channel; + le16 channel_transition_delay_factor; + le16 scan_activity_threshold; +} STRUCT_PACKED; + + struct ieee80211_vht_capabilities { le32 vht_capabilities_info; struct {