]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
wifi-scripts: fix reload handling with random macaddr
authorFelix Fietkau <nbd@nbd.name>
Mon, 25 Aug 2025 18:31:02 +0000 (20:31 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 26 Aug 2025 09:54:52 +0000 (11:54 +0200)
Allow initially generated MAC address to be preserved across reload

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 5bdb7a59906ee71d0178f78c4b3ce4c4ff4bb4e0)

package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh
package/network/services/hostapd/files/hostapd.uc

index 6c3d3f38b46b95c44d621a1c086edaa49f97e8a7..eea18e830efc947a7ca247520a5e0fbd2ca70ace 100755 (executable)
@@ -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"
index f4f479c0f672e8586f5194666b73eddb25b6fccf..5c172de5dfcc8e8273e29e1e7fc9ee178a8cb5de 100644 (file)
@@ -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])