From db63757dbc93dc4c7893dd7697b9c28d17737722 Mon Sep 17 00:00:00 2001 From: Paul Stewart Date: Wed, 12 Mar 2014 15:28:39 -0700 Subject: [PATCH] hostapd: Supply default parameters for OBSS scan For some client OBSS implementations that are performed in firmware, all OBSS parameters need to be set to valid values. Do this, as well as supplying the "20/40 Coex Mgmt Support" flag in the extended capabilities IE. Signed-hostap: Paul Stewart --- src/ap/ieee802_11_ht.c | 15 ++++++++++++++- src/ap/ieee802_11_shared.c | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c index a16617833..138d04973 100644 --- a/src/ap/ieee802_11_ht.c +++ b/src/ap/ieee802_11_ht.c @@ -54,7 +54,20 @@ u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid) scan_params->width_trigger_scan_interval = host_to_le16(hapd->iconf->obss_interval); - /* TODO: Fill in more parameters (supplicant ignores them) */ + /* Fill in default values for remaining parameters + * (IEEE Std 802.11-2012, 8.4.2.61 and MIB defval) */ + scan_params->scan_passive_dwell = + host_to_le16(20); + scan_params->scan_active_dwell = + host_to_le16(10); + scan_params->scan_passive_total_per_channel = + host_to_le16(200); + scan_params->scan_active_total_per_channel = + host_to_le16(20); + scan_params->channel_transition_delay_factor = + host_to_le16(5); + scan_params->scan_activity_threshold = + host_to_le16(25); pos += sizeof(*scan_params); } diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c index b78fd010e..12403f99a 100644 --- a/src/ap/ieee802_11_shared.c +++ b/src/ap/ieee802_11_shared.c @@ -170,6 +170,8 @@ static void hostapd_ext_capab_byte(struct hostapd_data *hapd, u8 *pos, int idx) switch (idx) { case 0: /* Bits 0-7 */ + if (hapd->iconf->obss_interval) + *pos |= 0x01; /* Bit 0 - Coexistence management */ break; case 1: /* Bits 8-15 */ break; @@ -223,6 +225,8 @@ u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid) len = 4; if (len < 3 && hapd->conf->wnm_sleep_mode) len = 3; + if (len < 1 && hapd->iconf->obss_interval) + len = 1; if (len < 7 && hapd->conf->ssid.utf8_ssid) len = 7; #ifdef CONFIG_WNM