[openwrt/openwrt] wifi-scripts: fix reload handling with random macaddr

LEDE Commits lede-commits at lists.infradead.org
Tue Aug 26 02:54:02 PDT 2025


nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/5bdb7a59906ee71d0178f78c4b3ce4c4ff4bb4e0

commit 5bdb7a59906ee71d0178f78c4b3ce4c4ff4bb4e0
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Mon Aug 25 20:31:02 2025 +0200

    wifi-scripts: fix reload handling with random macaddr
    
    Allow initially generated MAC address to be preserved across reload
    
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 .../config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc      | 2 ++
 .../config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc   | 4 +++-
 .../config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh       | 3 +++
 package/network/services/hostapd/files/hostapd.uc                   | 6 +++++-
 4 files changed, 13 insertions(+), 2 deletions(-)

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 16a2c67afe..bbd907c234 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
@@ -508,4 +508,6 @@ export function generate(interface, data, config, vlans, stas, phy_features) {
 
 	if (config.default_macaddr)
 		append_raw('#default_macaddr');
+	else if (config.random_macaddr)
+		append_raw('#random_macaddr');
 };
diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc
index 46af3b8a61..dd3143f0cd 100644
--- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc
+++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc
@@ -243,8 +243,10 @@ export function prepare(data, phy, num_global_macaddr, macaddr_base) {
 
 		data.default_macaddr = true;
 		mac_idx++;
-	} else if (data.macaddr == 'random')
+	} else if (data.macaddr == 'random') {
 		data.macaddr = macaddr_random();
+		data.random_macaddr = true;
+	}
 
 	log(`Preparing interface: ${data.ifname} with MAC: ${data.macaddr}`);
 };
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 2e939852b6..30d08a3015 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 a28c282493..7b3862e0e2 100644
--- a/package/network/services/hostapd/files/hostapd.uc
+++ b/package/network/services/hostapd/files/hostapd.uc
@@ -574,7 +574,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;
@@ -918,6 +920,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])




More information about the lede-commits mailing list