From 164428d2d6167a555e35f2258277fc5a457fb75b Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Tue, 21 Apr 2026 00:12:50 +0200 Subject: [PATCH] iw: backport scan print of RSN Element Override IEs Backport upstream iw commit d90618809e06 ("iw: scan: print RSN Element Override IEs") as 001-*.patch so `iw scan` decodes the RSNOE (vendor WFA type 41) and RSNO2E (type 42) elements that hostapd emits for WPA3 Compatibility / RSN Overriding APs. Also refresh the hunk offsets in 200-reduce_size.patch. Link: https://github.com/openwrt/openwrt/pull/23009 Signed-off-by: Hauke Mehrtens --- ...-scan-print-RSN-Element-Override-IEs.patch | 58 +++++++++++++++++++ .../utils/iw/patches/200-reduce_size.patch | 14 ++--- 2 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 package/network/utils/iw/patches/001-iw-scan-print-RSN-Element-Override-IEs.patch diff --git a/package/network/utils/iw/patches/001-iw-scan-print-RSN-Element-Override-IEs.patch b/package/network/utils/iw/patches/001-iw-scan-print-RSN-Element-Override-IEs.patch new file mode 100644 index 0000000000..12b31c5494 --- /dev/null +++ b/package/network/utils/iw/patches/001-iw-scan-print-RSN-Element-Override-IEs.patch @@ -0,0 +1,58 @@ +From d90618809e06e123241f57efdb7039a7a8a43d58 Mon Sep 17 00:00:00 2001 +From: Alex Gavin +Date: Sun, 15 Mar 2026 22:16:46 -0700 +Subject: iw: scan: print RSN Element Override IEs + +Parse body of RSN Element Override IEs as RSN IEs +using existing code. + +RSN IEs are a minimum size of 4 octets, as detailed +in IEEE802.11-2024, 9.4.2.23.1 + +Example output: +RSN Element Override: + * Version: 1 + * Group cipher: CCMP + * Pairwise ciphers: CCMP + * Authentication suites: SAE + * Capabilities: 16-PTKSA-RC 1-GTKSA-RC MFP-required MFP-capable (0x00cc) +RSN Element Override 2: + * Version: 1 + * Group cipher: CCMP + * Pairwise ciphers: GCMP-256 + * Authentication suites: SAE-EXT-KEY + * Capabilities: 16-PTKSA-RC 1-GTKSA-RC MFP-required MFP-capable (0x00cc) + +Signed-off-by: Alex Gavin +Link: https://patch.msgid.link/20260316051646.18303-2-a_gavin@icloud.com +Signed-off-by: Johannes Berg +--- + scan.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/scan.c ++++ b/scan.c +@@ -1893,6 +1893,14 @@ static void print_wifi_osen(const uint8_ + print_osen_ie("OSEN", "OSEN", len, data); + } + ++static void print_wifi_rsn_override(const uint8_t type, uint8_t len, ++ const uint8_t *data, ++ const struct ie_context *ctx) ++{ ++ printf("\n\t"); ++ print_rsn_ie("CCMP", "IEEE802.1X", len, data); ++} ++ + static bool print_wifi_wmm_param(const uint8_t *data, uint8_t len) + { + int i; +@@ -2344,6 +2352,8 @@ static const struct ie_print wfa_printer + [16] = { "HotSpot 2.0 Indication", print_hs20_ind, 1, 255, BIT(PRINT_SCAN), }, + [18] = { "HotSpot 2.0 OSEN", print_wifi_osen, 1, 255, BIT(PRINT_SCAN), }, + [28] = { "OWE Transition Mode", print_wifi_owe_tarns, 7, 255, BIT(PRINT_SCAN), }, ++ [41] = { "RSN Element Override", print_wifi_rsn_override, 4, 255, BIT(PRINT_SCAN), }, ++ [42] = { "RSN Element Override 2", print_wifi_rsn_override, 4, 255, BIT(PRINT_SCAN), }, + }; + + static void print_vendor(unsigned char len, unsigned char *data, diff --git a/package/network/utils/iw/patches/200-reduce_size.patch b/package/network/utils/iw/patches/200-reduce_size.patch index 3a4864fc9c..56b5c4e632 100644 --- a/package/network/utils/iw/patches/200-reduce_size.patch +++ b/package/network/utils/iw/patches/200-reduce_size.patch @@ -200,7 +200,7 @@ }; static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data, -@@ -2213,8 +2218,10 @@ static void print_wifi_wps(const uint8_t +@@ -2221,8 +2226,10 @@ static void print_wifi_wps(const uint8_t static const struct ie_print wifiprinters[] = { [1] = { "WPA", print_wifi_wpa, 2, 255, BIT(PRINT_SCAN), }, @@ -211,7 +211,7 @@ }; static inline void print_p2p(const uint8_t type, uint8_t len, -@@ -2377,6 +2384,10 @@ static void print_vendor(unsigned char l +@@ -2387,6 +2394,10 @@ static void print_vendor(unsigned char l return; } @@ -222,7 +222,7 @@ if (len >= 4 && memcmp(data, wfa_oui, 3) == 0) { if (data[3] < ARRAY_SIZE(wfa_printers) && wfa_printers[data[3]].name && -@@ -2576,6 +2587,7 @@ static void print_capa_non_dmg(__u16 cap +@@ -2586,6 +2597,7 @@ static void print_capa_non_dmg(__u16 cap printf(" ESS"); if (capa & WLAN_CAPABILITY_IBSS) printf(" IBSS"); @@ -230,7 +230,7 @@ if (capa & WLAN_CAPABILITY_CF_POLLABLE) printf(" CfPollable"); if (capa & WLAN_CAPABILITY_CF_POLL_REQUEST) -@@ -2604,6 +2616,7 @@ static void print_capa_non_dmg(__u16 cap +@@ -2614,6 +2626,7 @@ static void print_capa_non_dmg(__u16 cap printf(" DelayedBACK"); if (capa & WLAN_CAPABILITY_IMM_BACK) printf(" ImmediateBACK"); @@ -238,7 +238,7 @@ } static int print_bss_handler(struct nl_msg *msg, void *arg) -@@ -2694,8 +2707,10 @@ static int print_bss_handler(struct nl_m +@@ -2704,8 +2717,10 @@ static int print_bss_handler(struct nl_m else printf("\tfreq: %d\n", freq); @@ -249,7 +249,7 @@ } if (bss[NL80211_BSS_BEACON_INTERVAL]) printf("\tbeacon interval: %d TUs\n", -@@ -2889,6 +2904,7 @@ static int handle_stop_sched_scan(struct +@@ -2899,6 +2914,7 @@ static int handle_stop_sched_scan(struct return 0; } @@ -257,7 +257,7 @@ COMMAND(scan, sched_start, SCHED_SCAN_OPTIONS, NL80211_CMD_START_SCHED_SCAN, 0, CIB_NETDEV, handle_start_sched_scan, -@@ -2899,3 +2915,4 @@ COMMAND(scan, sched_start, +@@ -2909,3 +2925,4 @@ COMMAND(scan, sched_start, COMMAND(scan, sched_stop, "", NL80211_CMD_STOP_SCHED_SCAN, 0, CIB_NETDEV, handle_stop_sched_scan, "Stop an ongoing scheduled scan.");