This prints out the NL80211_* enum name for extended features
rather than a hex string.
---
monitor/nlmon.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 81 insertions(+), 1 deletion(-)
diff --git a/monitor/nlmon.c b/monitor/nlmon.c
index 5b0cad89..78e0ed8b 100644
--- a/monitor/nlmon.c
+++ b/monitor/nlmon.c
@@ -5415,6 +5415,85 @@ static void print_eapol(unsigned int level, const char *label,
print_hexdump(level + 1, data, size);
}
+#define EXT_ENTRY(a) #a
+
+static const char *ext_feature_map[] = {
+ EXT_ENTRY(NL80211_EXT_FEATURE_VHT_IBSS),
+ EXT_ENTRY(NL80211_EXT_FEATURE_RRM),
+ EXT_ENTRY(NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCAN_START_TIME),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BSS_PARENT_TSF),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SET_SCAN_DWELL),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_RATE_LEGACY),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_RATE_HT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_RATE_VHT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_FILS_STA),
+ EXT_ENTRY(NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA),
+ EXT_ENTRY(NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI),
+ EXT_ENTRY(NL80211_EXT_FEATURE_CQM_RSSI_LIST),
+ EXT_ENTRY(NL80211_EXT_FEATURE_FILS_SK_OFFLOAD),
+ EXT_ENTRY(NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK),
+ EXT_ENTRY(NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X),
+ EXT_ENTRY(NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME),
+ EXT_ENTRY(NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP),
+ EXT_ENTRY(NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE),
+ EXT_ENTRY(NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION),
+ EXT_ENTRY(NL80211_EXT_FEATURE_MFP_OPTIONAL),
+ EXT_ENTRY(NL80211_EXT_FEATURE_LOW_SPAN_SCAN),
+ EXT_ENTRY(NL80211_EXT_FEATURE_LOW_POWER_SCAN),
+ EXT_ENTRY(NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN),
+ EXT_ENTRY(NL80211_EXT_FEATURE_DFS_OFFLOAD),
+ EXT_ENTRY(NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211),
+ EXT_ENTRY(NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_TXQS),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCAN_RANDOM_SN),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_CAN_REPLACE_PTK0),
+ EXT_ENTRY(NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER),
+ EXT_ENTRY(NL80211_EXT_FEATURE_AIRTIME_FAIRNESS),
+ EXT_ENTRY(NL80211_EXT_FEATURE_AP_PMKSA_CACHING),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD),
+ EXT_ENTRY(NL80211_EXT_FEATURE_EXT_KEY_ID),
+ EXT_ENTRY(NL80211_EXT_FEATURE_STA_TX_PWR),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SAE_OFFLOAD),
+ EXT_ENTRY(NL80211_EXT_FEATURE_VLAN_OFFLOAD),
+ EXT_ENTRY(NL80211_EXT_FEATURE_AQL),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_PROTECTION),
+ EXT_ENTRY(NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH),
+ EXT_ENTRY(NL80211_EXT_FEATURE_PROTECTED_TWT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_DEL_IBSS_STA),
+ EXT_ENTRY(NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SCAN_FREQ_KHZ),
+ EXT_ENTRY(NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS),
+ EXT_ENTRY(NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION),
+ EXT_ENTRY(NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK),
+ EXT_ENTRY(NL80211_EXT_FEATURE_SAE_OFFLOAD_AP),
+ EXT_ENTRY(NL80211_EXT_FEATURE_FILS_DISCOVERY),
+ EXT_ENTRY(NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP),
+ EXT_ENTRY(NL80211_EXT_FEATURE_BEACON_RATE_HE),
+};
+
+static void print_ext_features(unsigned int level, const char *label,
+ const void *data, uint16_t size)
+{
+ int i;
+ uint16_t bits;
+
+ if (L_ARRAY_SIZE(ext_feature_map) < size * 8)
+ bits = L_ARRAY_SIZE(ext_feature_map);
+ else
+ bits = size * 8;
+
+ print_attr(level, "Extended Features:");
+
+ for (i = 0; i < bits; i++) {
+ if (test_bit(data, i))
+ print_attr(level + 1, "%s", ext_feature_map[i]);
+ }
+}
+
/*
* Control Port sends a EAPoL frame inside ATTR_FRAME and not a management
* frame. So a separate table with all the possible attributes is provided
@@ -5911,7 +5990,8 @@ static const struct attr_entry attr_table[] = {
{ NL80211_ATTR_USE_RRM,
"Use RRM", ATTR_FLAG },
{ NL80211_ATTR_EXT_FEATURES,
- "Extended Features" },
+ "Extended Features", ATTR_CUSTOM,
+ { .function = print_ext_features} },
{ NL80211_ATTR_FILS_KEK,
"FILS KEK" },
{ NL80211_ATTR_FILS_NONCES,
--
2.26.2