[PATCH] wpa_supplicant/hostapd: add an option to only advertise FTM responder
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Mon Dec 5 06:43:36 PST 2022
From: Avraham Stern <avraham.stern at intel.com>
When configuring FTM responder, wpa_supplicant/hostapd configures the
driver to operate as a responder. However, it is possible that it is
only needed to advertise the FTM responder capabilties, but not
configure the driver to operate as a responder (e.g. when a usespace
daemon operates as a responder). Add an option to only advertise the
FTM responder capabilities without configuring the driver.
Signed-off-by: Avraham Stern <avraham.stern at intel.com>
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
hostapd/config_file.c | 2 ++
src/ap/ap_config.h | 1 +
src/ap/ieee802_11_shared.c | 3 ++-
wpa_supplicant/ap.c | 1 +
wpa_supplicant/config.c | 1 +
wpa_supplicant/config.h | 14 +++++++++++++-
wpa_supplicant/config_file.c | 3 +++
wpa_supplicant/wpa_supplicant.c | 3 ++-
8 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index b5393fd6c7..01454e1c6c 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -4427,6 +4427,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
conf->stationary_ap = atoi(pos);
} else if (os_strcmp(buf, "ftm_responder") == 0) {
bss->ftm_responder = atoi(pos);
+ } else if (os_strcmp(buf, "ftm_responder_capab_only") == 0) {
+ bss->ftm_responder_capab_only = atoi(pos);
} else if (os_strcmp(buf, "ftm_initiator") == 0) {
bss->ftm_initiator = atoi(pos);
#ifdef CONFIG_FILS
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 46b7a47816..456387d9b5 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -731,6 +731,7 @@ struct hostapd_bss_config {
#endif /* CONFIG_MBO */
int ftm_responder;
+ int ftm_responder_capab_only;
int ftm_initiator;
#ifdef CONFIG_FILS
diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c
index a7ab3a2d77..c94f0d942e 100644
--- a/src/ap/ieee802_11_shared.c
+++ b/src/ap/ieee802_11_shared.c
@@ -404,7 +404,8 @@ static void hostapd_ext_capab_byte(struct hostapd_data *hapd, u8 *pos, int idx,
case 7: /* Bits 56-63 */
break;
case 8: /* Bits 64-71 */
- if (hapd->conf->ftm_responder)
+ if (hapd->conf->ftm_responder ||
+ hapd->conf->ftm_responder_capab_only)
*pos |= 0x40; /* Bit 70 - FTM responder */
if (hapd->conf->ftm_initiator)
*pos |= 0x80; /* Bit 71 - FTM initiator */
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 653f15f54d..6a96550a19 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -785,6 +785,7 @@ no_wps:
}
bss->ftm_responder = wpa_s->conf->ftm_responder;
+ bss->ftm_responder_capab_only = wpa_s->conf->ftm_responder_capab_only;
bss->ftm_initiator = wpa_s->conf->ftm_initiator;
bss->transition_disable = ssid->transition_disable;
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index a2e21431c2..4b228c1a0d 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -5461,6 +5461,7 @@ static const struct global_parse_data global_fields[] = {
#endif /* CONFIG_MBO */
{ INT(gas_address3), 0 },
{ INT_RANGE(ftm_responder, 0, 1), 0 },
+ { INT_RANGE(ftm_responder_capab_only, 0, 1), 0 },
{ INT_RANGE(ftm_initiator, 0, 1), 0 },
{ INT(gas_rand_addr_lifetime), 0 },
{ INT_RANGE(gas_rand_mac_addr, 0, 2), 0 },
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 87cbb1ea2f..01dfad051c 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -1586,17 +1586,29 @@ struct wpa_config {
/**
* ftm_responder - Publish FTM (fine timing measurement)
- * responder functionality
+ * responder functionality and configure the driver as a FTM responder
*
* Values:
* 0 - do not publish FTM responder functionality (Default)
* 1 - publish FTM responder functionality in
* bit 70 of Extended Capabilities element
+ * and configure the driver as a FTM responder
* Note, actual FTM responder operation is managed outside
* wpa_supplicant.
*/
int ftm_responder;
+ /**
+ * ftm_responder_capab_only - Publish FTM (fine timing measurement)
+ * responder functionality but don't configure the driver as a responder
+ *
+ * Values:
+ * 0 - do not publish FTM responder functionality (Default)
+ * 1 - publish FTM responder functionality in
+ * bit 70 of Extended Capabilities element
+ */
+ int ftm_responder_capab_only;
+
/**
* ftm_initiator - Publish FTM (fine timing measurement)
* initiator functionality
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index 4d50f44a86..af9c391e84 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -1550,6 +1550,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
if (config->ftm_responder)
fprintf(f, "ftm_responder=%d\n", config->ftm_responder);
+ if (config->ftm_responder_capab_only)
+ fprintf(f, "ftm_responder_capab_only=%d\n",
+ config->ftm_responder_capab_only);
if (config->ftm_initiator)
fprintf(f, "ftm_initiator=%d\n", config->ftm_initiator);
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 7849b40296..35be751154 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -2110,7 +2110,8 @@ static void wpas_ext_capab_byte(struct wpa_supplicant *wpa_s, u8 *pos, int idx)
case 7: /* Bits 56-63 */
break;
case 8: /* Bits 64-71 */
- if (wpa_s->conf->ftm_responder)
+ if (wpa_s->conf->ftm_responder ||
+ wpa_s->conf->ftm_responder_capab_only)
*pos |= 0x40; /* Bit 70 - FTM responder */
if (wpa_s->conf->ftm_initiator)
*pos |= 0x80; /* Bit 71 - FTM initiator */
--
2.25.1
More information about the Hostap
mailing list