wifi-scripts: fix race in wireless interface creation
authorNick Hainke <vincent@systemli.org>
Sat, 27 Dec 2025 12:43:47 +0000 (13:43 +0100)
committerNick Hainke <vincent@systemli.org>
Sat, 27 Dec 2025 15:26:25 +0000 (16:26 +0100)
When wdev interfaces and hostapd interfaces are mixed, race conditions
can occur. Sometimes all interfaces are started correctly, sometimes only
the wdev interface and some of the hostapd interfaces, and sometimes only
the wdev interface.

Fix this by creating the wdev interfaces first, before processing
wpa_supplicant or hostapd interfaces.

Link: https://github.com/openwrt/openwrt/pull/21303
Signed-off-by: Nick Hainke <vincent@systemli.org>
package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh

index dcfdcd2cc85f442dfc4e2d8d00ac509e76e4b5d0..6230f9028768e788a4fe5faa7ab6ba217621b517 100755 (executable)
@@ -288,12 +288,6 @@ function setup() {
                wdev_data[v.config.ifname] = config;
        }
 
-       if (fs.access('/usr/sbin/wpa_supplicant', 'x'))
-               supplicant.setup(supplicant_data, data);
-
-       if (fs.access('/usr/sbin/hostapd', 'x'))
-               hostapd.setup(data);
-
        for (let ifname in active_ifnames) {
                if (!wdev_data[ifname])
                        continue;
@@ -304,6 +298,12 @@ function setup() {
                system(`ucode /usr/share/hostap/wdev.uc ${data.phy}${data.phy_suffix} set_config '${if_config}'`);
        }
 
+       if (fs.access('/usr/sbin/wpa_supplicant', 'x'))
+               supplicant.setup(supplicant_data, data);
+
+       if (fs.access('/usr/sbin/hostapd', 'x'))
+               hostapd.setup(data);
+
        if (length(supplicant_data) > 0)
                supplicant.start(data);