[packages] ptunnel: Fix 'interface' option, handle multiple instances
authoracinonyx <acinonyx@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 19 Sep 2009 13:23:26 +0000 (13:23 +0000)
committeracinonyx <acinonyx@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 19 Sep 2009 13:23:26 +0000 (13:23 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/packages@17608 3c298f89-4303-0410-b956-a3cf2f4a3e73

net/ptunnel/files/ptunnel.conf
net/ptunnel/files/ptunnel.init

index ca645ff..bfc7495 100644 (file)
@@ -1,2 +1,2 @@
 config ptunnel
-        option interface 'br-lan'
+       option interface 'lan'
index b3aabb9..99252d5 100644 (file)
@@ -1,26 +1,40 @@
 #!/bin/sh /etc/rc.common
 # Copyright (C) 2007-2009 OpenWrt.org
+
 START=70
 BIN=ptunnel
+PIDCOUNT=0
 
 start() {
-    config_load ptunnel
-    config_foreach start_ptunnel ptunnel
+       include /lib/network
+       scan_interfaces
+
+       config_load ptunnel
+       config_foreach start_ptunnel ptunnel
+       iptables -I OUTPUT 1 -p icmp -j ACCEPT 2> /dev/null
 }
 
 start_ptunnel() {
-    local section="$1"
-    
-    include /lib/network
-    scan_interfaces
-    
-    iptables -I OUTPUT 1 -p icmp -j ACCEPT
-    config_get interface "$section" interface
-
-    $BIN -c "$interface" > /dev/null&
+       local section="$1"
+
+       config_get interface "$section" interface
+       config_get ifname "$interface" ifname
+
+       [ -z "$ifname" ] && {
+               echo "Error: Interface '$interface' not found" 1>&2
+               return 1
+       }
+
+       PIDCOUNT="$(( ${PIDCOUNT} + 1))"
+       ${BIN} -c "$ifname" -daemon /var/run/ptunnel."$PIDCOUNT".pid> /dev/null
 }
 
 stop() {
-        ps aux | grep ptunnel |  awk '{print }' | \
-            xargs kill 2> /dev/null
+       local pidfile
+
+       for pidfile in `ls /var/run/${BIN}.*.pid`
+       do
+               start-stop-daemon -K -s KILL -p "${pidfile}" -n "${BIN}" >/dev/null
+               rm -f "${pidfile}"
+       done
 }