From d8bb97831b197c543d9727f1c81539bb6fba127a Mon Sep 17 00:00:00 2001
From: Jan-Philipp Litza <janphilipp@litza.de>
Date: Thu, 8 Dec 2016 23:13:56 +0100
Subject: [PATCH] gluon-respondd: Use procd in initscript and to restart on
 network changes

---
 .../etc/hotplug.d/iface/10-gluon-respondd     | 16 -------
 .../files/etc/init.d/gluon-respondd           | 46 ++++++-------------
 .../gluon/core/mesh/setup.d/10-gluon-respondd |  2 -
 3 files changed, 13 insertions(+), 51 deletions(-)
 delete mode 100644 package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd
 delete mode 100755 package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd

diff --git a/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd b/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd
deleted file mode 100644
index 564559e70..000000000
--- a/package/gluon-respondd/files/etc/hotplug.d/iface/10-gluon-respondd
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-. /lib/functions/service.sh
-
-ifname_to_dev () {
-	ifstatus client "$1"|jsonfilter -e "@.device"
-}
-
-case "$ACTION" in
-	ifup)
-		DEVICE="$(ifname_to_dev "$INTERFACE")"
-
-		[ "$DEVICE" != "$(cat /lib/gluon/respondd/client.dev 2>/dev/null)" ] ||
-			/etc/init.d/gluon-respondd restart_if_running &
-		;;
-esac
diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd
index 49afef4fc..6b61d731a 100755
--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd
+++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd
@@ -1,48 +1,28 @@
 #!/bin/sh /etc/rc.common
 
-EXTRA_COMMANDS='restart_if_running'
-
+USE_PROCD=1
 START=50
 
-SERVICE_WRITE_PID=1
-SERVICE_DAEMONIZE=1
-
 DAEMON=/usr/bin/respondd
-LOCK=/var/run/gluon-respondd.lock
-
 
-do_start() {
+start_service() {
 	DEVS=""
 	for dev in $( ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device") $(cat /lib/gluon/respondd/client.dev 2>/dev/null)
 	do
 		DEVS="$DEVS -i $dev"
 	done
-	service_start $DAEMON -g ff02::2:1001 -p 1001 -d /lib/gluon/respondd $DEVS
-}
-
-do_stop() {
-	service_stop $DAEMON
+	procd_open_instance
+	procd_set_param command $DAEMON -g ff02::2:1001 -p 1001 -d /lib/gluon/respondd $DEVS
+	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	procd_set_param stderr 1
+	procd_close_instance
 }
 
-start() {
-	lock $LOCK
-	do_start
-	lock -u $LOCK
-}
-
-stop() {
-	lock $LOCK
-	do_stop
-	lock -u $LOCK
-}
-
-restart_if_running() {
-	lock $LOCK
-
-	if service_check $DAEMON; then
-		do_stop
-		do_start
-	fi
+service_triggers() {
+	local script=$(readlink "$initscript")
+	local name=$(basename ${script:-$initscript})
 
-	lock -u $LOCK
+	procd_open_trigger
+	procd_add_raw_trigger "interface.*" 0 "/etc/init.d/$name" reload
+	procd_close_trigger
 }
diff --git a/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd b/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd
deleted file mode 100755
index 811386e0d..000000000
--- a/package/gluon-respondd/files/lib/gluon/core/mesh/setup.d/10-gluon-respondd
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-/etc/init.d/gluon-respondd restart_if_running &
-- 
GitLab