diff options
| author | Rany Hany | 2025-11-08 16:48:13 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2025-11-30 23:44:12 +0000 |
| commit | c16d83184b42ce2a0bb61a09e6270e2b96c0deb0 (patch) | |
| tree | 2e5e0f0440bccab56dbce18090afec13188d065a | |
| parent | ea6ee930601cfc260e6477f573513850f1806012 (diff) | |
| download | openwrt-c16d83184b42ce2a0bb61a09e6270e2b96c0deb0.tar.gz | |
wifi-scripts: change wifi-station's mac option into list
In the past PR[1] to add SAE wifi-station support, a commenter[2] requested
that the mac option be changed into a list. After trying to migrate my old
RADIUS setup I found myself wanting this change as well as it would simplify
my config. This patch does precisely that. Old configs that specify
`option mac ....` still work without any issues.
This change was done for both PSK and SAE. The schema was updated as well.
[1]: https://github.com/openwrt/openwrt/pull/17145
[2]: https://github.com/openwrt/openwrt/pull/17145#issuecomment-2523507953
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/17650
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
4 files changed, 37 insertions, 24 deletions
diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-station.json b/package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-station.json index 527c63c068..b594da8b4a 100644 --- a/package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-station.json +++ b/package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-station.json @@ -5,9 +5,12 @@ "type": "object", "properties": { "mac": { - "description": "The stations MAC", - "type": "string", - "default": "00:00:00:00:00:00" + "description": "The station's MAC addresses", + "type": "array", + "items": { + "type": "string" + }, + "default": ["00:00:00:00:00:00"] }, "key": { "description": "The passphrase that shall be used", diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc index 71064d7bc6..4ec8e8f815 100644 --- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc +++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc @@ -312,10 +312,12 @@ function iface_wpa_stations(config, stas) { let file = fs.open(path, 'w'); for (let k, sta in stas) if (sta.config.mac && sta.config.key) { - let station = `${sta.config.mac} ${sta.config.key}\n`; - if (sta.config.vid) - station = `vlanid=${sta.config.vid} ` + station; - file.write(station); + for (let mac in sta.config.mac) { + let station = `${mac} ${sta.config.key}\n`; + if (sta.config.vid) + station = `vlanid=${sta.config.vid} ` + station; + file.write(station); + } } file.close(); @@ -328,15 +330,16 @@ function iface_sae_stations(config, stas) { let file = fs.open(path, 'w'); for (let k, sta in stas) if (sta.config.mac && sta.config.key) { - let mac = sta.config.mac; - if (mac == '00:00:00:00:00:00') - mac = 'ff:ff:ff:ff:ff:ff'; - - let station = `${sta.config.key}|mac=${mac}`; - if (sta.config.vid) - station = station + `|vlanid=${sta.config.vid}`; - station = station + '\n'; - file.write(station); + for (let mac in sta.config.mac) { + if (mac == '00:00:00:00:00:00') + mac = 'ff:ff:ff:ff:ff:ff'; + + let station = `${sta.config.key}|mac=${mac}`; + if (sta.config.vid) + station = station + `|vlanid=${sta.config.vid}`; + station = station + '\n'; + file.write(station); + } } file.close(); diff --git a/package/network/config/wifi-scripts/files/lib/netifd/hostapd.sh b/package/network/config/wifi-scripts/files/lib/netifd/hostapd.sh index 9f40680f46..b0061cf4c3 100644 --- a/package/network/config/wifi-scripts/files/lib/netifd/hostapd.sh +++ b/package/network/config/wifi-scripts/files/lib/netifd/hostapd.sh @@ -426,10 +426,13 @@ hostapd_set_psk_file() { local vlan="$2" local vlan_id="" - json_get_vars mac vid key - set_default mac "00:00:00:00:00:00" + json_get_vars vid key + json_get_values mac_list mac + set_default mac_list "00:00:00:00:00:00" [ -n "$vid" ] && vlan_id="vlanid=$vid " - echo "${vlan_id} ${mac} ${key}" >> /var/run/hostapd-${ifname}.psk + for mac in $mac_list; do + echo "${vlan_id} ${mac} ${key}" >> /var/run/hostapd-${ifname}.psk + done } hostapd_set_psk() { @@ -448,11 +451,14 @@ hostapd_set_sae_file() { local vlan="$2" local vlan_id="" - json_get_vars mac vid key - set_default mac "ff:ff:ff:ff:ff:ff" - [ -n "$mac" ] && mac="|mac=$mac" + json_get_vars vid key + json_get_values mac_list mac + set_default mac_list "ff:ff:ff:ff:ff:ff" [ -n "$vid" ] && vlan_id="|vlanid=$vid" - printf '%s%s%s\n' "${key}" "${mac}" "${vlan_id}" >> /var/run/hostapd-${ifname}.sae + for mac in $mac_list; do + mac="|mac=$mac" + printf '%s%s%s\n' "${key}" "${mac}" "${vlan_id}" >> /var/run/hostapd-${ifname}.sae + done } hostapd_set_sae() { diff --git a/package/network/config/wifi-scripts/files/lib/netifd/netifd-wireless.sh b/package/network/config/wifi-scripts/files/lib/netifd/netifd-wireless.sh index 873787360c..ac11905fac 100644 --- a/package/network/config/wifi-scripts/files/lib/netifd/netifd-wireless.sh +++ b/package/network/config/wifi-scripts/files/lib/netifd/netifd-wireless.sh @@ -399,7 +399,8 @@ _wdev_common_vlan_config() { } _wdev_common_station_config() { - config_add_string mac key vid iface + config_add_string key vid iface + config_add_array mac } init_wireless_driver() { |