From 10356157316b7a183ba7d4f17250dbd2211bfbaf Mon Sep 17 00:00:00 2001 From: Aleksander Jan Bajkowski Date: Sat, 17 May 2025 10:01:27 +0200 Subject: [PATCH] wifi-scripts: ucode: export HE and EHT operation in scan results Export WiFi 6E (HE) and WiFi 7 (EHT) operation data in scan results. These additional data can be useful to check wifi channel utilization by nearby stations. Example: Cell 32 - Address: xx:xx:xx:xx:xx:xx Mode: Master Frequency: 6.115 GHz Band: 6 GHz Channel: 33 Signal: -14 dBm Quality: 70/70 Encryption: SAE (CCMP) HE Operation: Center Frequency 1: 39 Center Frequency 2: 47 Channel Width: 160 MHz EHT Operation: Center Frequency 1: 47 Center Frequency 2: 63 Channel Width: 320 MHz Signed-off-by: Aleksander Jan Bajkowski Link: https://github.com/openwrt/openwrt/pull/19208 Signed-off-by: Hauke Mehrtens --- .../wifi-scripts/files-ucode/usr/bin/iwinfo | 14 +++++++ .../files-ucode/usr/share/ucode/iwinfo.uc | 40 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/package/network/config/wifi-scripts/files-ucode/usr/bin/iwinfo b/package/network/config/wifi-scripts/files-ucode/usr/bin/iwinfo index 5b492d6cfac..204a6e5b308 100755 --- a/package/network/config/wifi-scripts/files-ucode/usr/bin/iwinfo +++ b/package/network/config/wifi-scripts/files-ucode/usr/bin/iwinfo @@ -91,6 +91,20 @@ function print_scan(cells) { printf('\t\tChannel Width: %s\n', cell.vht.chan_width); } + if (cell.he) { + printf('\t HE Operation:\n'); + printf('\t\tCenter Frequency 1: %d\n', cell.he.center_chan_1); + printf('\t\tCenter Frequency 2: %s\n', cell.he.center_chan_2); + printf('\t\tChannel Width: %s\n', cell.he.chan_width); + } + + if (cell.eht) { + printf('\t EHT Operation:\n'); + printf('\t\tCenter Frequency 1: %d\n', cell.eht.center_chan_1); + printf('\t\tCenter Frequency 2: %s\n', cell.eht.center_chan_2); + printf('\t\tChannel Width: %s\n', cell.eht.chan_width); + } + printf('\n'); } } diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc index 29d75b41309..73bd9515a06 100644 --- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc +++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc @@ -481,6 +481,42 @@ export function countrylist(dev) { return list; }; +function scan_extension(ext, cell) { + const eht_chan_width = [ '20 MHz', '40 MHz', '80 MHz', '160 MHz', '320 MHz']; + + switch(ord(ext, 0)) { + case 36: + let offset = 7; + + if (!(ord(ext, 3) & 0x2)) + break; + + if (ord(ext, 2) & 0x40) + offset += 3; + + if (ord(ext, 2) & 0x80) + offset += 1; + + cell.he = { + chan_width: eht_chan_width[ord(ext, offset + 1) & 0x3], + center_chan_1: ord(ext, offset + 2), + center_chan_2: ord(ext, offset + 3), + }; + break; + + case 106: + if (!(ord(ext, 1) & 0x1)) + break; + + cell.eht = { + chan_width: eht_chan_width[ord(ext, 6) & 0x7], + center_chan_1: ord(ext, 7), + center_chan_2: ord(ext, 8), + }; + break; + } +}; + export function scan(dev) { const rsn_cipher = [ 'NONE', 'WEP-40', 'TKIP', 'WRAP', 'CCMP', 'WEP-104', 'AES-OCB', 'CKIP', 'GCMP', 'GCMP-256', 'CCMP-256' ]; const ht_chan_offset = [ 'no secondary', 'above', '[reserved]', 'below' ]; @@ -591,6 +627,10 @@ export function scan(dev) { center_chan_2: ord(ie.data, 2), }; break; + + case 255: + scan_extension(ie.data, cell); + break; }; -- 2.47.3