igmpproxy: update init.d script to procd and add a hotplug script
authorJohn Crispin <john@openwrt.org>
Wed, 4 Jun 2014 07:19:51 +0000 (07:19 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 4 Jun 2014 07:19:51 +0000 (07:19 +0000)
Signed-off-by: John Crispin <blogic@openwrt.org>
SVN-Revision: 40997

package/network/services/igmpproxy/Makefile
package/network/services/igmpproxy/files/igmpproxy.hotplug [new file with mode: 0644]
package/network/services/igmpproxy/files/igmpproxy.init

index 47b995bb5188c0438c1a279f0e6f640c3d727809..027fcb99d214bac94c36b934d80d02d7f45ca00d 100644 (file)
@@ -51,6 +51,8 @@ define Package/igmpproxy/install
        $(INSTALL_CONF) ./files/igmpproxy.config $(1)/etc/config/igmpproxy
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/igmpproxy.init $(1)/etc/init.d/igmpproxy
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_BIN) ./files/igmpproxy.hotplug $(1)/etc/hotplug.d/iface/igmpproxy
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/igmpproxy $(1)/usr/sbin/
 endef
diff --git a/package/network/services/igmpproxy/files/igmpproxy.hotplug b/package/network/services/igmpproxy/files/igmpproxy.hotplug
new file mode 100644 (file)
index 0000000..ebe353a
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/etc/init.d/igmpproxy reload
index a45978f5b681abd72aa9ea0e4bbdb504f4cdc2ff..75d111f3c06657d4a3b9cfad8629701ac1c43534 100644 (file)
@@ -1,11 +1,10 @@
 #!/bin/sh /etc/rc.common
-# Copyright (C) 2010-2012 OpenWrt.org
+# Copyright (C) 2010-2014 OpenWrt.org
 
 START=99
-STOP=10
-
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
+USE_PROCD=1
+PROG=/usr/sbin/igmpproxy
+CONFIGFILE=/var/etc/igmpproxy.conf
 
 # igmpproxy supports both a debug mode and verbosity, which are very useful
 # when something isn't working.
@@ -21,6 +20,7 @@ SERVICE_WRITE_PID=1
 # OPTIONS="-v" - be verbose, this will write aditional information to syslog
 
 OPTIONS=""
+UPSTREAM=0
 
 igmp_header() {
        local quickleave
@@ -34,30 +34,46 @@ igmp_header() {
 }
 
 igmp_add_phyint() {
-        local network direction altnets
+        local network direction altnets device up
 
         config_get network $1 network
         config_get direction $1 direction
         config_get altnets $1 altnet
 
-        device=$(uci_get_state network "$network" ifname "$network")
-        echo -e "\nphyint $device $direction ratelimit 0 threshold 1" >> /var/etc/igmpproxy.conf
+       json_load "$(ifstatus $network)"
+       json_get_var device l3_device
+       json_get_var up up
+       [ -n "$device" -a "$up" = "1" ] || return;
+
+       UPSTREAM=1
+
+       echo -e "\nphyint $device $direction ratelimit 0 threshold 1" >> /var/etc/igmpproxy.conf
+
+       if [ -n "$altnets" ]; then
+               local altnet
+               for altnet in $altnets; do
+                       echo -e "\taltnet $altnet" >> /var/etc/igmpproxy.conf
+               done
+       fi
+}
 
-        if [ -n "$altnets" ]; then
-                local altnet
-                for altnet in $altnets; do
-                        echo -e "\taltnet $altnet" >> /var/etc/igmpproxy.conf
-                done
-        fi
+service_triggers() {
+       procd_add_reload_trigger "igmpproxy"
 }
 
-start() {
+start_service() {
        config_load igmpproxy
+
        config_foreach igmp_header igmpproxy
        config_foreach igmp_add_phyint phyint
-       service_start /usr/sbin/igmpproxy $OPTIONS /etc/igmpproxy.conf
-}
 
-stop() {
-       service_stop /usr/sbin/igmpproxy
+       [ $UPSTREAM = 1 ] || return
+
+       procd_open_instance
+       procd_set_param command $PROG
+       [ -n "$OPTIONS" ] && procd_append_param $OPTIONS
+       procd_append_param command $CONFIGFILE
+       procd_set_param file $CONFIGFILE
+       procd_set_param respawn
+       procd_close_instance
 }