From: Felix Fietkau <nbd@nbd.name>
Date: Wed, 4 Dec 2019 23:26:53 +0000 (+0100)
Subject: hostapd: manage instances via procd instead of pidfile
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c888e17e067edf36c4dc798771479170003f967d;p=openwrt%2Fstaging%2Fynezz.git

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]
---

diff --git a/package/network/services/hostapd/files/hostapd.hotplug b/package/network/services/hostapd/files/hostapd.hotplug
index d568b3c85a..c319d42c1a 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