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@xxxxxxxxxxxx> --- 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 95edea876..f9db9974e 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 e8c5ec9ac..bfcbc1f09 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 101f98a72..2932eff80 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -2214,7 +2214,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 bbd1a7cef..ba28a6b27 100644 --- a/src/drivers/driver_common.c +++ b/src/drivers/driver_common.c @@ -356,6 +356,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 eb25730c5..a6b842f85 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -10621,6 +10621,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" @@ -10645,6 +10646,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 b904398ca..59f45989e 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)) { @@ -1551,9 +1551,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 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap