summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan Chen2026-01-18 02:51:14 +0000
committerRobert Marko2026-01-21 21:30:05 +0000
commita8bdb1e6d65adac21d2dc1b40cdbae1af2af4d15 (patch)
treed68f2bf0b6396a5a1421b3abb801222f01c8556c
parentb300a9e63dedb05df2535e65791fb3a898622b0c (diff)
downloadopenwrt-a8bdb1e6d65adac21d2dc1b40cdbae1af2af4d15.tar.gz
wifi-scripts: fix WiFi 6E discovery for 6GHz 320MHz operation
WiFi 6E (802.11ax) clients cannot discover 6GHz APs operating at 320MHz because the HE Operation element contains uninitialized center frequency values. For EHT320 mode, the code sets eht_oper_centr_freq_seg0_idx but not the corresponding HE values. Later, the HE values are copied from VHT values, but VHT is not used on 6GHz, leaving he_oper_chwidth and he_oper_centr_freq_seg0_idx at 0. This causes WiFi 6E clients to see incorrect channel width information, making the AP invisible to them during scanning. Fix this by: 1. Setting he_oper_chwidth to 3 (160MHz) for EHT320 mode 2. Computing he_oper_centr_freq_seg0_idx based on the 160MHz segment that contains the primary channel 3. Preserving these pre-set values instead of overwriting them with uninitialized VHT values WiFi 7 clients continue to see 320MHz operation via the EHT Operation element, while WiFi 6E clients can now discover and connect at 160MHz. Signed-off-by: Ryan Chen <rchen14b@gmail.com> Link: https://github.com/openwrt/openwrt/pull/21588 Signed-off-by: Robert Marko <robimarko@gmail.com>
-rw-r--r--package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc22
1 files changed, 20 insertions, 2 deletions
diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc
index 33eaa0ee15..61570d76f2 100644
--- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc
+++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc
@@ -283,6 +283,17 @@ function device_htmode_append(config) {
}
config.op_class = 137;
config.eht_oper_chwidth = 7;
+
+ /*
+ * Set HE operation values for 160MHz backward compatibility
+ * with WiFi 6E clients. Pick the 160MHz half that contains
+ * the primary channel.
+ */
+ config.he_oper_chwidth = 3;
+ if (config.channel < config.eht_oper_centr_freq_seg0_idx)
+ config.he_oper_centr_freq_seg0_idx = config.eht_oper_centr_freq_seg0_idx - 16;
+ else
+ config.he_oper_centr_freq_seg0_idx = config.eht_oper_centr_freq_seg0_idx + 16;
break;
case 'HE40':
@@ -383,8 +394,15 @@ function device_htmode_append(config) {
config.ieee80211ax = true;
if (config.hw_mode == 'a') {
- config.he_oper_chwidth = config.vht_oper_chwidth;
- config.he_oper_centr_freq_seg0_idx = config.vht_oper_centr_freq_seg0_idx;
+ /*
+ * Only set HE values from VHT if not already set.
+ * For 6GHz 320MHz, these are pre-set for 160MHz backward
+ * compatibility with WiFi 6E clients.
+ */
+ if (!config.he_oper_chwidth)
+ config.he_oper_chwidth = config.vht_oper_chwidth;
+ if (!config.he_oper_centr_freq_seg0_idx)
+ config.he_oper_centr_freq_seg0_idx = config.vht_oper_centr_freq_seg0_idx;
}
if (config.band == "6g") {