From faecb39236f79f2b3f23d20d85b0353c6541f580 Mon Sep 17 00:00:00 2001 From: Lior David Date: Wed, 3 Aug 2016 17:41:53 +0300 Subject: [PATCH] hostapd: Allow FTM functionality to be published Add configuration options that control publishing of fine timing measurement (FTM) responder and initiator functionality via bits 70, 71 of Extended Capabilities element. Typically, FTM functionality is controlled by a location framework outside hostapd. When framework is activated, it will use hostapd to configure the AP to publish the FTM functionality. See IEEE P802.11-REVmc/D7.0, 9.4.2.27. Signed-off-by: Lior David --- hostapd/config_file.c | 4 ++++ hostapd/hostapd.conf | 10 ++++++++++ src/ap/ap_config.h | 3 +++ src/ap/ieee802_11_shared.c | 9 +++++++++ 4 files changed, 26 insertions(+) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index fa08234e6..5079f69e3 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -3487,6 +3487,10 @@ static int hostapd_config_fill(struct hostapd_config *conf, WLAN_RRM_CAPS_NEIGHBOR_REPORT; } else if (os_strcmp(buf, "gas_address3") == 0) { bss->gas_address3 = atoi(pos); + } else if (os_strcmp(buf, "ftm_responder") == 0) { + bss->ftm_responder = atoi(pos); + } else if (os_strcmp(buf, "ftm_initiator") == 0) { + bss->ftm_initiator = atoi(pos); } else { wpa_printf(MSG_ERROR, "Line %d: unknown configuration item '%s'", diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index 4fc32786f..fa9a855a6 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -1916,6 +1916,16 @@ own_ip_addr=127.0.0.1 # Enable neighbor report via radio measurements #rrm_neighbor_report=1 +# Publish fine timing measurement (FTM) responder functionality +# This parameter only controls publishing via Extended Capabilities element. +# Actual functionality is managed outside hostapd. +#ftm_responder=0 + +# Publish fine timing measurement (FTM) initiator functionality +# This parameter only controls publishing via Extended Capabilities element. +# Actual functionality is managed outside hostapd. +#ftm_initiator=0 + ##### TESTING OPTIONS ######################################################### # # The options in this section are only available when the build configuration diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index b16286b58..8c8f7e286 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -592,6 +592,9 @@ struct hostapd_bss_config { #ifdef CONFIG_MBO int mbo_enabled; #endif /* CONFIG_MBO */ + + int ftm_responder; + int ftm_initiator; }; diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c index af858f09e..259413bd1 100644 --- a/src/ap/ieee802_11_shared.c +++ b/src/ap/ieee802_11_shared.c @@ -218,6 +218,12 @@ static void hostapd_ext_capab_byte(struct hostapd_data *hapd, u8 *pos, int idx) if (hapd->conf->ssid.utf8_ssid) *pos |= 0x01; /* Bit 48 - UTF-8 SSID */ break; + case 8: /* Bits 64-71 */ + if (hapd->conf->ftm_responder) + *pos |= 0x40; /* Bit 70 - FTM responder */ + if (hapd->conf->ftm_initiator) + *pos |= 0x80; /* Bit 71 - FTM initiator */ + break; } } @@ -237,6 +243,9 @@ u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid) len = 1; if (len < 7 && hapd->conf->ssid.utf8_ssid) len = 7; + if (len < 9 && + (hapd->conf->ftm_initiator || hapd->conf->ftm_responder)) + len = 9; #ifdef CONFIG_WNM if (len < 4) len = 4;