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 <hauke@hauke-m.de>
This commit is contained in:
Hauke Mehrtens 2026-04-21 00:12:50 +02:00
parent 957b921721
commit 164428d2d6
2 changed files with 65 additions and 7 deletions

View File

@ -0,0 +1,58 @@
From d90618809e06e123241f57efdb7039a7a8a43d58 Mon Sep 17 00:00:00 2001
From: Alex Gavin <a_gavin@icloud.com>
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 <a_gavin@icloud.com>
Link: https://patch.msgid.link/20260316051646.18303-2-a_gavin@icloud.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
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,

View File

@ -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.");