hostapd: manage instances via procd instead of pidfile

Allows graceful restart of crashing hostapd/wpa_supplicant instances

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
[daniel@makrotopia.org: attempt to launch only present services]
This commit is contained in:
Felix Fietkau 2019-12-05 00:26:53 +01:00 committed by Daniel Golle
parent 4225b83a76
commit c888e17e06

View File

@ -1,14 +1,46 @@
#!/bin/sh #!/bin/sh
[ ${ACTION} = "remove" -a -n "${DEVICENAME}" ] && { initscript="$0"
kill $(cat /var/run/hostapd-${DEVICENAME}.pid)
rm -rf /var/run/hostapd-${DEVICENAME}.pid /var/run/hostapd-${DEVICENAME}/ . /lib/functions.sh
kill $(cat /var/run/wpa_supplicant-${DEVICENAME}.pid) . /lib/functions/procd.sh
rm -rf /var/run/wpa_supplicant-${DEVICENAME}.pid /var/run/wpa_supplicant-${DEVICENAME}/
cd /sys/class/ieee80211
procd_lock() {
return 0
} }
[ ${ACTION} = "add" -a -n "${DEVICENAME}" ] && { service_triggers() {
/usr/sbin/hostapd -s -n ${DEVICENAME} -P /var/run/hostapd-${DEVICENAME}.pid -g /var/run/hostapd-${DEVICENAME}/global -B & return 0
mkdir -p /var/run/wpa_supplicant-${DEVICENAME}
/usr/sbin/wpa_supplicant -s -n ${DEVICENAME} -P /var/run/wpa_supplicant-${DEVICENAME}.pid -g /var/run/wpa_supplicant-${DEVICENAME}/global -B &
} }
service_data() {
return 0
}
procd_open_service hostapd
for phy in phy*; do
[ -d "$phy" ] || continue
mkdir -p /var/run/wpa_supplicant-$phy /var/run/hostapd-$phy
if [ -x "/usr/sbin/hostapd" ]; then
procd_open_instance hostapd-$phy
procd_set_param command /usr/sbin/hostapd -s -n $phy -g /var/run/hostapd-${phy}/global
procd_set_param CREATE_TIME="$(date -r $phy)" # force restart on recreated phy
procd_set_param respawn
procd_close_instance
fi
if [ -x "/usr/sbin/wpa_supplicant" ]; then
procd_open_instance supplicant-$phy
procd_set_param command /usr/sbin/wpa_supplicant -s -n $phy -g /var/run/wpa_supplicant-${phy}/global
procd_set_param CREATE_TIME="$(date -r $phy)" # force restart on recreated phy
procd_set_param respawn
procd_close_instance
fi
done
procd_close_service set