wifi-scripts: ucode: fix start failed
authorAndy Chiang <[email protected]>
Sun, 26 Oct 2025 00:29:30 +0000 (07:29 +0700)
committerFelix Fietkau <[email protected]>
Wed, 12 Nov 2025 12:45:50 +0000 (13:45 +0100)
When using wpad-openssl/wpad-basic-openssl, wpa_supplicant/hostapd may not be ready because of openssl.
This cause supplicant.setup and hostapd.setup to be failed.
Therefore, wait for wpa_supplicant/hostapd to be ready before supplicant.setup and hostapd.setup.

Run-tested: mediatek/filogic GL-MT3000
fixes: #20361

Signed-off-by: Andy Chiang <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh
package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc
package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc

index 23438a4cde3c391628326a5bfbe6b7cfa67a7312..8aba81436ee296156156a2e0a07924d15505fde6 100755 (executable)
@@ -288,8 +288,11 @@ function setup() {
                wdev_data[v.config.ifname] = config;
        }
 
-       supplicant.setup(supplicant_data, data);
-       hostapd.setup(data);
+       if (fs.access('/usr/sbin/wpa_supplicant', 'x'))
+               supplicant.setup(supplicant_data, data);
+
+       if (fs.access('/usr/sbin/hostapd', 'x'))
+               hostapd.setup(data);
 
        system(`ucode /usr/share/hostap/wdev.uc ${data.phy}${data.phy_suffix} set_config '${printf("%J", wdev_data)}' ${join(' ', active_ifnames)}`);
 
index c0a76bbd948523a766c57a3ccbc3d008b87ad62f..db3bffe9ef884f10869128fe570748c9d1d6db60 100644 (file)
@@ -571,10 +571,12 @@ export function setup(data) {
                config: has_ap ? file_name : "",
                prev_config: file_name + '.prev'
        };
+       if (!global.ubus.list('hostapd'))
+               system('ubus wait_for hostapd');
        let ret = global.ubus.call('hostapd', 'config_set', msg);
 
        if (ret)
                netifd.add_process('/usr/sbin/hostapd', ret.pid, true, true);
-       else if (fs.access('/usr/sbin/hostapd', 'x'))
+       else
                netifd.setup_failed('HOSTAPD_START_FAILED');
 };
index 3ed05149f8eac427a7ca248bfe2851ca788340d4..f796ae99a79461be07aaf67d107dd01e0ade3635 100644 (file)
@@ -270,6 +270,8 @@ export function generate(config_list, data, interface) {
 };
 
 export function setup(config, data) {
+       if (!global.ubus.list('wpa_supplicant'))
+               system('ubus wait_for wpa_supplicant');
        let ret = global.ubus.call('wpa_supplicant', 'config_set', {
                phy: data.phy,
                radio: data.config.radio,
@@ -281,7 +283,7 @@ export function setup(config, data) {
 
        if (ret)
                netifd.add_process('/usr/sbin/wpa_supplicant', ret.pid, true, true);
-       else if (fs.access('/usr/sbin/wpa_supplicant', 'x'))
+       else
                netifd.setup_failed('SUPPLICANT_START_FAILED');
 };