wifi-scripts: Fix parsing of Capabilities
authorHauke Mehrtens <hauke@hauke-m.de>
Fri, 22 Nov 2024 23:34:30 +0000 (00:34 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 24 Nov 2024 21:46:21 +0000 (22:46 +0100)
Fixup capabilities parsing in iw output.

In addition to the normal capabilities iw now also outputs HE MAC, HE
PHY and EHT MAC and EHT PHY capabilities. Exclude them in the parsing.

The grep returns this with mac80211-hwsim:
```
root@OpenWrt:~# iw phy phy0 info | grep 'Capabilities:'
Capabilities: 0x107e
HE PHY Capabilities: (0x02bfce0000000000000000):
EHT PHY Capabilities: (0x7c0000feffff7f01):
HE PHY Capabilities: (0x02bfce0000000000000000):
EHT PHY Capabilities: (0x7c0000feffff7f01):
HE PHY Capabilities: (0x02bf000000000000000000):
Capabilities: 0x107e
HE PHY Capabilities: (0x1cbfce0000000000000000):
EHT PHY Capabilities: (0xfc1f3ffeffff7f37):
HE PHY Capabilities: (0x1cbfce0000000000000000):
EHT PHY Capabilities: (0xfc1f3ffeffff7f37):
HE PHY Capabilities: (0x1cbf000000000000000000):
HE PHY Capabilities: (0x1cbfce0000000000000000):
EHT PHY Capabilities: (0xfefffffeffffff7f):
HE PHY Capabilities: (0x1cbfce0000000000000000):
EHT PHY Capabilities: (0xfefffffeffffff7f):
HE PHY Capabilities: (0x1cbf000000000000000000):
Capabilities: 0x107e
```

With busybox 1.36.1 the ht_cap_mask variable will be set to
-72057598332895361. With busybox 1.37.0 it will be set to -1.
Both values are wrong, after this change it will be set to 4222
(0x107E).

Link: https://github.com/openwrt/openwrt/pull/17043
(cherry picked from commit adf958c9192d94fbeeb0ec8e16800b0071455909)
Link: https://github.com/openwrt/openwrt/pull/17055
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh

index 9998e26ec131890aa7c655d7ea4d57cfa4c9dfe2..3d953eff74d2faabcfb12d21eda53bdfdc8f8b88 100755 (executable)
@@ -208,7 +208,7 @@ mac80211_hostapd_setup_base() {
                                dsss_cck_40:1
 
                        ht_cap_mask=0
-                       for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
+                       for cap in $(iw phy "$phy" info | grep -E '^\s*Capabilities:' | cut -d: -f2); do
                                ht_cap_mask="$(($ht_cap_mask | $cap))"
                        done