[PATCH v3 1/7] hostapd_cli: wpa_cli: introduce a CMD to dump the driver capability flags2
Gokul Sivakumar
gokulkumar.sivakumar at infineon.com
Tue Aug 22 07:51:08 PDT 2023
Leverage the already available control socket cmd "DRIVER_FLAGS2" and
dump the driver capab "flags2" bitmask on triggering the new CLI CMD
"driver_flags2", similar to the already existing CLI CMD "driver_flags".
$ hostapd_cli -i wlan0 driver_flags2 (OR) $ wpa_cli -i wlan0 driver_flags2
0000000000000020:
BEACON_RATE_HE
Also added driver capab "flags2" bitmask to the "status driver" CLI CMD
result and other debug messages wherever only "flags" bitmask is printed.
$ hostapd_cli -i wlan0 status driver (OR) $ wpa_cli -i wlan0 status driver
...
capa.key_mgmt=0xf6f
capa.enc=0xfef
capa.auth=0x7
capa.flags=0x3a00fac4
capa.flags2=0x20
capa.rrm_flags=0x0
...
Populated the switch case in the driver_flag2_to_string() function with
the full list of feature MACROs represented with the "flags2" bitmask. And
renamed WPA_DRIVER_RADAR_DETECTED MACRO by including "FLAGS2" string in the
name, as this common prefix is expected in all the driver flags. Doing this
helps to return the FLAG2 name as a result for the CLI CMD "driver_flags2".
Signed-off-by: Gokul Sivakumar <gokulkumar.sivakumar at infineon.com>
---
hostapd/hostapd_cli.c | 7 +++++++
src/ap/dfs.c | 2 +-
src/drivers/driver.h | 2 +-
src/drivers/driver_common.c | 13 +++++++++++++
src/drivers/driver_nl80211.c | 2 ++
src/drivers/driver_nl80211_capa.c | 8 +++++---
src/drivers/driver_wext.c | 5 +++--
wpa_supplicant/wpa_cli.c | 8 ++++++++
8 files changed, 40 insertions(+), 7 deletions(-)
diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
index 646dfc598..95044d115 100644
--- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c
@@ -1385,6 +1385,11 @@ static int hostapd_cli_cmd_driver_flags(struct wpa_ctrl *ctrl, int argc,
return wpa_ctrl_command(ctrl, "DRIVER_FLAGS");
}
+static int hostapd_cli_cmd_driver_flags2(struct wpa_ctrl *ctrl, int argc,
+ char *argv[])
+{
+ return wpa_ctrl_command(ctrl, "DRIVER_FLAGS2");
+}
#ifdef CONFIG_DPP
@@ -1719,6 +1724,8 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = {
" = send FTM range request"},
{ "driver_flags", hostapd_cli_cmd_driver_flags, NULL,
" = show supported driver flags"},
+ { "driver_flags2", hostapd_cli_cmd_driver_flags2, NULL,
+ " = show supported driver flags2"},
#ifdef CONFIG_DPP
{ "dpp_qr_code", hostapd_cli_cmd_dpp_qr_code, NULL,
"report a scanned DPP URI from a QR Code" },
diff --git a/src/ap/dfs.c b/src/ap/dfs.c
index 414e546cf..9a5d3c80a 100644
--- a/src/ap/dfs.c
+++ b/src/ap/dfs.c
@@ -34,7 +34,7 @@ dfs_downgrade_bandwidth(struct hostapd_iface *iface, int *secondary_channel,
static bool dfs_use_radar_background(struct hostapd_iface *iface)
{
- return (iface->drv_flags2 & WPA_DRIVER_RADAR_BACKGROUND) &&
+ return (iface->drv_flags2 & WPA_DRIVER_FLAGS2_RADAR_BACKGROUND) &&
iface->conf->enable_background_radar;
}
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 5957567a9..6252529cb 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -2241,7 +2241,7 @@ struct wpa_driver_capa {
/** Driver handles SA Query procedures in AP mode */
#define WPA_DRIVER_FLAGS2_SA_QUERY_OFFLOAD_AP 0x0000000000000200ULL
/** Driver supports background radar/CAC detection */
-#define WPA_DRIVER_RADAR_BACKGROUND 0x0000000000000400ULL
+#define WPA_DRIVER_FLAGS2_RADAR_BACKGROUND 0x0000000000000400ULL
/** Driver supports secure LTF in STA mode */
#define WPA_DRIVER_FLAGS2_SEC_LTF_STA 0x0000000000000800ULL
/** Driver supports secure RTT measurement exchange in STA mode */
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index f3625e8c8..2e9548f30 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -358,6 +358,19 @@ const char * driver_flag2_to_string(u64 flag2)
switch (flag2) {
DF2S(CONTROL_PORT_RX);
DF2S(CONTROL_PORT_TX_STATUS);
+ DF2S(SEC_LTF_AP);
+ DF2S(SEC_RTT_AP);
+ DF2S(PROT_RANGE_NEG_AP);
+ DF2S(BEACON_RATE_HE);
+ DF2S(BEACON_PROTECTION_CLIENT);
+ DF2S(OCV);
+ DF2S(AP_SME);
+ DF2S(SA_QUERY_OFFLOAD_AP);
+ DF2S(RADAR_BACKGROUND);
+ DF2S(SEC_LTF_STA);
+ DF2S(SEC_RTT_STA);
+ DF2S(PROT_RANGE_NEG_STA);
+ DF2S(MLO);
}
return "UNKNOWN";
#undef DF2S
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 563ce61d7..7f6abb3ff 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -10780,6 +10780,7 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
"capa.enc=0x%x\n"
"capa.auth=0x%x\n"
"capa.flags=0x%llx\n"
+ "capa.flags2=0x%llx\n"
"capa.rrm_flags=0x%x\n"
"capa.max_scan_ssids=%d\n"
"capa.max_sched_scan_ssids=%d\n"
@@ -10804,6 +10805,7 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
drv->capa.enc,
drv->capa.auth,
(unsigned long long) drv->capa.flags,
+ (unsigned long long) drv->capa.flags2,
drv->capa.rrm_flags,
drv->capa.max_scan_ssids,
drv->capa.max_sched_scan_ssids,
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 5e6406885..5336aa0fd 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -677,7 +677,7 @@ static void wiphy_info_ext_feature_flags(struct wiphy_info_data *info,
if (ext_feature_isset(ext_features, len,
NL80211_EXT_FEATURE_RADAR_BACKGROUND))
- capa->flags2 |= WPA_DRIVER_RADAR_BACKGROUND;
+ capa->flags2 |= WPA_DRIVER_FLAGS2_RADAR_BACKGROUND;
if (ext_feature_isset(ext_features, len,
NL80211_EXT_FEATURE_SECURE_LTF)) {
@@ -1559,9 +1559,11 @@ int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
#endif /* CONFIG_DRIVER_NL80211_QCA */
wpa_printf(MSG_DEBUG,
- "nl80211: key_mgmt=0x%x enc=0x%x auth=0x%x flags=0x%llx rrm_flags=0x%x probe_resp_offloads=0x%x max_stations=%u max_remain_on_chan=%u max_scan_ssids=%d",
+ "nl80211: key_mgmt=0x%x enc=0x%x auth=0x%x flags=0x%llx flags2=0x%llx rrm_flags=0x%x "
+ "probe_resp_offloads=0x%x max_stations=%u max_remain_on_chan=%u max_scan_ssids=%d",
drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth,
- (unsigned long long) drv->capa.flags, drv->capa.rrm_flags,
+ (unsigned long long) drv->capa.flags,
+ (unsigned long long) drv->capa.flags2, drv->capa.rrm_flags,
drv->capa.probe_resp_offloads, drv->capa.max_stations,
drv->capa.max_remain_on_chan, drv->capa.max_scan_ssids);
return 0;
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index cf201fe86..b72c1f8c2 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1660,9 +1660,10 @@ static int wpa_driver_wext_get_range(void *priv)
drv->capa.max_scan_ssids = 1;
wpa_printf(MSG_DEBUG, " capabilities: key_mgmt 0x%x enc 0x%x "
- "flags 0x%llx",
+ "flags 0x%llx flags2 0x%llx",
drv->capa.key_mgmt, drv->capa.enc,
- (unsigned long long) drv->capa.flags);
+ (unsigned long long) drv->capa.flags,
+ (unsigned long long) drv->capa.flags2);
} else {
wpa_printf(MSG_DEBUG, "SIOCGIWRANGE: too old (short) data - "
"assuming WPA is not supported");
diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
index effc7b3bc..3dc1d779e 100644
--- a/wpa_supplicant/wpa_cli.c
+++ b/wpa_supplicant/wpa_cli.c
@@ -550,6 +550,11 @@ static int wpa_cli_cmd_driver_flags(struct wpa_ctrl *ctrl, int argc,
return wpa_ctrl_command(ctrl, "DRIVER_FLAGS");
}
+static int wpa_cli_cmd_driver_flags2(struct wpa_ctrl *ctrl, int argc,
+ char *argv[])
+{
+ return wpa_ctrl_command(ctrl, "DRIVER_FLAGS2");
+}
static int wpa_cli_cmd_get(struct wpa_ctrl *ctrl, int argc, char *argv[])
{
@@ -3375,6 +3380,9 @@ static const struct wpa_cli_cmd wpa_cli_commands[] = {
{ "driver_flags", wpa_cli_cmd_driver_flags, NULL,
cli_cmd_flag_none,
"= list driver flags" },
+ { "driver_flags2", wpa_cli_cmd_driver_flags2, NULL,
+ cli_cmd_flag_none,
+ "= list driver flags2" },
{ "logon", wpa_cli_cmd_logon, NULL,
cli_cmd_flag_none,
"= IEEE 802.1X EAPOL state machine logon" },
--
2.25.1
More information about the Hostap
mailing list