packages/net/quicktun/files/quicktun.init
dingo f5bd258157 [patch-team] new package quicktun / nacl - signed off by mschiffer@universe-factory.net
git-svn-id: svn://svn.openwrt.org/openwrt/packages@25098 3c298f89-4303-0410-b956-a3cf2f4a3e73
2011-01-26 01:38:14 +00:00

139 lines
2.6 KiB
Bash

#!/bin/sh /etc/rc.common
# Quicktun init script
# Partly taken the the OpenVPN init script (Copyright (C) 2008 Jo-Philipp Wich)
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
START=95
BIN=/usr/sbin/quicktun
SSD=start-stop-daemon
EXTRA_COMMANDS="up down"
LIST_SEP="
"
append_opt() {
local p="$1"; local v="$2"; local p_uc
p_uc=$(echo "$p" | tr '[a-z]' '[A-Z]')
OPTS="$OPTS \"$p_uc=$v\""
}
append_opts() {
local p; local v; local s="$1"; shift
for p in $*; do
config_get v "$s" "$p"
[ -n "$v" ] && append_opt "$p" "$v"
done
}
start_service() {
local s="$1"
local enable=0
# disabled?
config_get_bool enable "$s" enable 0
[ "$enable" == 0 ] && return 0
PID="/var/run/quicktun-$s.pid"
OPTS=""
config_get interface "$s" interface
if [ -z "$interface" ]; then
echo "$s: interface not set"
return 1
fi
if ifconfig "$interface" >/dev/null 2>&1; then
echo "$s: interface $interface is already in use"
return 1
fi
append_opts "$s" interface local_address local_port remote_address remote_port \
protocol private_key public_key time_window
config_get_bool tun_mode "$s" tun_mode 0
[ "$tun_mode" == 1 ] && append_opt tun_mode 1
config_get_bool remote_float "$s" remote_float 0
[ "$remote_float" == 1 ] && append_opt remote_float 1
eval env $OPTS "$SSD" -q -b -p "$PID" -m -x "$BIN" -S
sleep 1
if ! ifconfig "$interface" >/dev/null 2>&1; then
echo "$s: daemon startup failed"
return 1
fi
config_get up "$s" up
[ -n "$up" ] && sh -c "$up" - "$interface"
}
stop_service() {
local s="$1"
local enable=0
# disabled?
config_get_bool enable "$s" enable 0
[ "$enable" == 0 ] && return 0
config_get interface "$s" interface
if [ -z "$interface" ]; then
echo "$s: interface not set"
return 1
fi
if ! ifconfig "$interface" >/dev/null 2>&1; then
echo "$s: interface $interface does not exist"
return 1
fi
config_get down "$s" down
[ -n "$down" ] && sh -c "$down" - "$interface"
PID="/var/run/quicktun-$s.pid"
$SSD -q -p $PID -x $BIN -K
rm -f "$PID"
}
start() {
config_load quicktun
config_foreach start_service quicktun
}
stop() {
config_load quicktun
config_foreach stop_service quicktun
}
restart() {
stop; start
}
up() {
local exists
local INSTANCE
config_load quicktun
for INSTANCE in "$@"; do
config_get exists "$INSTANCE" TYPE
if [ "$exists" == "quicktun" ]; then
start_service "$INSTANCE"
fi
done
}
down() {
local exists
local INSTANCE
config_load quicktun
for INSTANCE in "$@"; do
config_get exists "$INSTANCE" TYPE
if [ "$exists" == "quicktun" ]; then
stop_service "$INSTANCE"
fi
done
}