hostapd: re-introduce process tracking
authorDaniel Golle <daniel@makrotopia.org>
Thu, 5 Dec 2019 17:35:36 +0000 (18:35 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Sun, 8 Dec 2019 18:52:39 +0000 (19:52 +0100)
Before commit 60fb4c92b6 ("hostapd: add ubus reload") netifd was
tracking hostapd/wpa_supplicant and restarting wifi in case of a
process crash. Restore this behaviour by tracking the PIDs of
hostapd and wpa_supplicant.
Also make sure hostapd and/or wpa_supplicant have been started before
emmitting ubus calls to them using ubus wait_for.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
package/network/services/hostapd/files/hostapd.sh

index dd2b09c4a00d5fe16e1558aad516c73fcb229738..06244bf0e314d568beba5cb602a6bcb07b0352d6 100644 (file)
@@ -940,7 +940,10 @@ drv_mac80211_setup() {
                        }
                else
                        add_ap=1
+                       ubus wait_for hostapd.$phy
                        ubus call hostapd.${phy} config_add "{\"iface\":\"$primary_ap\", \"config\":\"${hostapd_conf_file}\"}"
+                       local hostapd_pid=$(ubus call service list '{"name": "hostapd"}' | jsonfilter -l 1 -e "@['hostapd'].instances['hostapd-${phy}'].pid")
+                       wireless_add_process "$hostapd_pid" "/usr/sbin/hostapd" 1
                fi
                ret="$?"
                [ "$ret" != 0 ] && {
index f03b98ff85b8732bf5439d5b61bf9b58d725a7ba..4bf6a6c9712785f40d059445f80f19d4f2992f4b 100644 (file)
@@ -958,6 +958,7 @@ wpa_supplicant_run() {
 
        _wpa_supplicant_common "$ifname"
 
+       ubus wait_for wpa_supplicant.$phy
        ubus call wpa_supplicant.$phy config_add "{ \
                \"driver\": \"${_w_driver:-wext}\", \"ctrl\": \"$_rpath\", \
                \"iface\": \"$ifname\", \"config\": \"$_config\" \
@@ -969,6 +970,9 @@ wpa_supplicant_run() {
 
        [ "$ret" != 0 ] && wireless_setup_vif_failed WPA_SUPPLICANT_FAILED
 
+       local supplicant_pid=$(ubus call service list '{"name": "hostapd"}' | jsonfilter -l 1 -e "@['hostapd'].instances['supplicant-${phy}'].pid")
+       wireless_add_process "$supplicant_pid" "/usr/sbin/wpa_supplicant" 1
+
        return $ret
 }