diff options
Diffstat (limited to 'openwrt/kamikaze/uanytun/files')
-rw-r--r-- | openwrt/kamikaze/uanytun/files/uanytun.config | 1 | ||||
-rwxr-xr-x | openwrt/kamikaze/uanytun/files/uanytun.init | 66 |
2 files changed, 49 insertions, 18 deletions
diff --git a/openwrt/kamikaze/uanytun/files/uanytun.config b/openwrt/kamikaze/uanytun/files/uanytun.config index e71bb9d..9cfe579 100644 --- a/openwrt/kamikaze/uanytun/files/uanytun.config +++ b/openwrt/kamikaze/uanytun/files/uanytun.config @@ -19,6 +19,7 @@ config "client1" # option dev 'anytun0' option type 'tun' option ifconfig '192.168.123.1/24' +# option post-up-script '/etc/uanytun/client1-post-up.sh' option remote_host 'example.com' option remote_port '4444' diff --git a/openwrt/kamikaze/uanytun/files/uanytun.init b/openwrt/kamikaze/uanytun/files/uanytun.init index 27296ca..9c1a928 100755 --- a/openwrt/kamikaze/uanytun/files/uanytun.init +++ b/openwrt/kamikaze/uanytun/files/uanytun.init @@ -2,15 +2,10 @@ START=50 BIN=uanytun +DAEMON=/usr/sbin/$BIN DESC=uanytun RUN_D=/var/run -uanytun() { - local name - name=${2%%.pid} - name=${name##/var/run/uanytun.} - echo "$name" > $2 -} option_cb() { local varname="$1" @@ -21,19 +16,28 @@ option_cb() { fi } +foreach_config_forced() { + foreach_config $1 "forced" +} + foreach_config() { local cfg="$1" local name local option local value - local DAEMONARGS="" + local args="" + local forced=0 + + if [ -n "$2" ] && [ "x$2" == "xforced" ]; then + forced=1 + fi config_get name "$cfg" TYPE for option in $CONFIG_OPTIONS do config_get value "$cfg" "$option" if [ "x$option" == "xdisabled" ]; then - if [ $value -eq 1 ]; then + if [ $forced -eq 0 ] && [ $value -eq 1 ]; then echo -n " $name(disabled)" return fi @@ -42,19 +46,40 @@ foreach_config() { option=`echo $option | tr '_' '-'` if [ -n "$value" ]; then - DAEMONARGS="$DAEMONARGS --$option $value" + args="$args --$option $value" fi done echo -n " $name" local status="OK" - $BIN --write-pid "$RUN_D/$BIN.$name.pid" $DAEMONARGS || status="failed" + $DAEMON --write-pid "$RUN_D/$BIN.$name.pid" $args || status="failed" + echo -n "($status)" +} + +stop_vpn() { + local name=$1 + local pidfile=$RUN_D/$BIN.$name.pid + echo -n " $name" + local status="OK" + if [ ! -f "$pidfile" ]; then + status="tunnel not active" + else + kill `cat $pidfile` > /dev/null 2>&1 || status="failed" + rm -f $pidfile + fi echo -n "($status)" } start() { echo -n "Starting $DESC:" config_load uanytun - config_foreach foreach_config "" + if [ $# -gt 0 ]; then + while [ $# -gt 0 ]; do + config_foreach foreach_config_forced "$1" + shift + done + else + config_foreach foreach_config "" + fi echo "." } @@ -63,12 +88,17 @@ stop() { local name local pidfile - for pidfile in `ls $RUN_D/$BIN.*.pid 2> /dev/null`; do - name=${pidfile%%.pid} - name=${name##$RUN_D/$BIN.} - echo -n " $name" - kill `cat $pidfile` || true - rm -f $pidfile - done + if [ $# -gt 0 ]; then + while [ $# -gt 0 ]; do + stop_vpn $1 + shift + done + else + for pidfile in `ls $RUN_D/$BIN.*.pid 2> /dev/null`; do + name=${pidfile%%.pid} + name=${name##$RUN_D/$BIN.} + stop_vpn $name + done + fi echo "." } |