From: Andy Chiang Date: Sun, 26 Oct 2025 00:29:30 +0000 (+0700) Subject: wifi-scripts: ucode: fix start failed X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=00e881451a980a7e65d94e7f91029baa479dd8eb;p=openwrt%2Fstaging%2Fblocktrron.git wifi-scripts: ucode: fix start failed 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 Signed-off-by: Felix Fietkau --- diff --git a/package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh b/package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh index 23438a4cde..8aba81436e 100755 --- a/package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh +++ b/package/network/config/wifi-scripts/files-ucode/lib/netifd/wireless/mac80211.sh @@ -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)}`); diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc index c0a76bbd94..db3bffe9ef 100644 --- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc +++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc @@ -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'); }; diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc index 3ed05149f8..f796ae99a7 100644 --- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc +++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc @@ -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'); };