f5bd258157
git-svn-id: svn://svn.openwrt.org/openwrt/packages@25098 3c298f89-4303-0410-b956-a3cf2f4a3e73
139 lines
2.6 KiB
Bash
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
|
|
}
|