From: Felix Fietkau Date: Mon, 25 Aug 2025 18:31:02 +0000 (+0200) Subject: wifi-scripts: fix reload handling with random macaddr X-Git-Tag: v24.10.3~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76eb96c875fce2f8b83f3e2a7a675aade308c5c9;p=thirdparty%2Fopenwrt.git wifi-scripts: fix reload handling with random macaddr Allow initially generated MAC address to be preserved across reload Signed-off-by: Felix Fietkau (cherry picked from commit 5bdb7a59906ee71d0178f78c4b3ce4c4ff4bb4e0) --- diff --git a/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh b/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh index 6c3d3f38b46..eea18e830ef 100755 --- a/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh +++ b/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh @@ -563,6 +563,7 @@ mac80211_hostapd_setup_bss() { $hostapd_cfg bssid=$macaddr ${default_macaddr:+#default_macaddr} +${random_macaddr:+#random_macaddr} ${dtim_period:+dtim_period=$dtim_period} ${max_listen_int:+max_listen_interval=$max_listen_int} EOF @@ -691,12 +692,14 @@ mac80211_prepare_vif() { json_add_string _ifname "$ifname" default_macaddr= + random_macaddr= if [ -z "$macaddr" ]; then macaddr="$(mac80211_generate_mac $phy)" macidx="$(($macidx + 1))" default_macaddr=1 elif [ "$macaddr" = 'random' ]; then macaddr="$(macaddr_random)" + random_macaddr=1 fi json_add_string _macaddr "$macaddr" json_add_string _default_macaddr "$default_macaddr" diff --git a/package/network/services/hostapd/files/hostapd.uc b/package/network/services/hostapd/files/hostapd.uc index f4f479c0f67..5c172de5dfc 100644 --- a/package/network/services/hostapd/files/hostapd.uc +++ b/package/network/services/hostapd/files/hostapd.uc @@ -485,7 +485,9 @@ function iface_reload_config(name, phydev, config, old_config) // try to preserve MAC address of this BSS by reassigning another // BSS if necessary - if (cur_config.default_macaddr && + if ((cur_config.default_macaddr || cur_config.random_macaddr) && + cur_config.random_macaddr == prev_config.random_macaddr && + cur_config.default_macaddr == prev_config.default_macaddr && !macaddr_list[prev_config.bssid]) { macaddr_list[prev_config.bssid] = i; cur_config.bssid = prev_config.bssid; @@ -761,6 +763,8 @@ function iface_load_config(phy, radio, filename) while ((line = rtrim(f.read("line"), "\n")) != null) { if (line == "#default_macaddr") bss.default_macaddr = true; + if (line == "#random_macaddr") + bss.random_macaddr = true; let val = split(line, "=", 2); if (!val[0])