From c888e17e067edf36c4dc798771479170003f967d Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 5 Dec 2019 00:26:53 +0100 Subject: [PATCH] hostapd: manage instances via procd instead of pidfile Allows graceful restart of crashing hostapd/wpa_supplicant instances Signed-off-by: Felix Fietkau Signed-off-by: Daniel Golle [daniel@makrotopia.org: attempt to launch only present services] --- .../services/hostapd/files/hostapd.hotplug | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/package/network/services/hostapd/files/hostapd.hotplug b/package/network/services/hostapd/files/hostapd.hotplug index d568b3c85ac3..c319d42c1a6e 100644 --- a/package/network/services/hostapd/files/hostapd.hotplug +++ b/package/network/services/hostapd/files/hostapd.hotplug @@ -1,14 +1,46 @@ #!/bin/sh -[ ${ACTION} = "remove" -a -n "${DEVICENAME}" ] && { - kill $(cat /var/run/hostapd-${DEVICENAME}.pid) - rm -rf /var/run/hostapd-${DEVICENAME}.pid /var/run/hostapd-${DEVICENAME}/ - kill $(cat /var/run/wpa_supplicant-${DEVICENAME}.pid) - rm -rf /var/run/wpa_supplicant-${DEVICENAME}.pid /var/run/wpa_supplicant-${DEVICENAME}/ +initscript="$0" + +. /lib/functions.sh +. /lib/functions/procd.sh + +cd /sys/class/ieee80211 + +procd_lock() { + return 0 } -[ ${ACTION} = "add" -a -n "${DEVICENAME}" ] && { - /usr/sbin/hostapd -s -n ${DEVICENAME} -P /var/run/hostapd-${DEVICENAME}.pid -g /var/run/hostapd-${DEVICENAME}/global -B & - 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_triggers() { + return 0 } + +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 -- 2.30.2