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;