aredn/files/etc/init.d/vtund

172 lines
4.3 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=84
STOP=85
CLIENT_CONF=/tmp/vtun/vtund.conf
# Starting tun interface is tun50
TUNNUM=$((`uci get aredn.@tunnel[0].maxclients 2> /dev/null` + 50))
MAXTUNNUM=$((`uci get aredn.@tunnel[0].maxservers 2> /dev/null` + $TUNNUM - 1))
######### UTILITY FUNCTIONS ###########
# return the number of "type" sections
uci_type_count() {
local t="$1"
local rc="$2"
local count=`uci show vtun|egrep "@$t\[.\]=$t"|wc -l`
eval "$rc=$count"
}
######### UTILITY FUNCTIONS END ###########
default_config() {
local cfg="$1"
local new_file="$2"
local persist
config_get persist "$persist" persist "yes"
echo "default {" >> $new_file
echo " persist $persist;" >> $new_file
echo "}" >> $new_file
echo " " >> $new_file
}
options_config() {
local cfg="$1"
local new_file="$2"
local port timeout syslog ppp ifconfig route firewall ip
config_get port "$cfg" port "5525"
config_get timeout "$cfg" timeout "60"
config_get syslog "$cfg" syslog "daemon"
config_get ppp "$cfg" ppp "/usr/sbin/pppd"
config_get ifconfig "$cfg" ifconfig "/sbin/ifconfig"
config_get route "$cfg" route "/sbin/route"
config_get firewall "$cfg" firewall "/usr/sbin/iptables"
config_get ip "$cfg" ip "/sbin/ip"
echo "options {" >> $new_file
echo " port $port;" >> $new_file
echo " timeout $timeout;" >> $new_file
echo " syslog $syslog;" >> $new_file
echo " ppp $ppp;" >> $new_file
echo " ifconfig $ifconfig;" >> $new_file
echo " route $route;" >> $new_file
echo " firewall $firewall;" >> $new_file
echo " ip $ip;" >> $new_file
echo "}" >> $new_file
echo " " >> $new_file
}
# CONNECT THIS CLIENT TO A SERVER
to_server_config() {
local cfg="$1"
local new_file="$2"
local enabled host pwd net node netip clientip serverip
if [ $TUNNUM -le $MAXTUNNUM ]
then
config_get_bool enabled "$cfg" enabled
config_get node "$cfg" node
config_get host "$cfg" host
config_get passwd "$cfg" passwd
config_get netip "$cfg" netip
config_get clientip "$cfg" clientip
config_get serverip "$cfg" serverip
if [ $enabled -eq 1 ]
then
echo "$node {" >> $new_file
echo " passwd $passwd;" >> $new_file
echo " device tun${TUNNUM};" >> $new_file
echo " up {" >> $new_file
echo -e " ifconfig \"%% ${clientip} netmask 255.255.255.252 pointopoint ${serverip} mtu 1450\";" >> $new_file
echo -e " route \"add -net ${netip}/30 gw ${serverip}\";" >> $new_file
echo " };" >> $new_file
echo " down {" >> $new_file
echo " };" >> $new_file
echo "}" >> $new_file
echo " " >> $new_file
TUNNUM=$(( TUNNUM + 1 ))
fi
else
echo "## TOO MANY TUNNEL CONNECTIONS (${TUNNUM}) ##" >> $new_file
fi
}
start_clients() {
local cfg="$1"
local new_file="$2"
local enabled host passwd net node netip clientip serverip
config_get_bool enabled "$cfg" enabled
if [ $enabled -eq 1 ]
then
config_get node "$cfg" node
config_get host "$cfg" host
/usr/sbin/vtund -p -f $CLIENT_CONF ${node} $host
fi
}
apply_uci_config() {
# sh -c '. /lib/functions.sh; include /lib/config; uci_apply_defaults'
sh -c '. /lib/functions.sh; include /lib/config'
}
start() {
# only if vtun is installed and ind mesh mode
configmode=$(uci -q -c /etc/local/uci/ get hsmmmesh.settings.config)
if [ -x "/usr/sbin/vtund" -a "$configmode" = "mesh" ]
then
apply_uci_config
config_load vtun
#if options section doesn't exist, add it
j=`uci get vtun.@options[0]`
if [ $? -ne 0 ]
then
j=`uci add vtun options`
j='uci commit vtun'
config_load vtun
fi
#if default section doesn't exist, add it
j=`uci get vtun.@default[0]`
if [ $? -ne 0 ]
then
j=`uci add vtun default`
j='uci commit vtun'
config_load vtun
fi
# Remove the current vtun config file
mkdir -p /tmp/vtun
rm -f $CLIENT_CONF
# config_foreach network_config network
config_foreach options_config options "$CLIENT_CONF"
config_foreach default_config default "$CLIENT_CONF"
config_foreach to_server_config server "$CLIENT_CONF"
# STARTUP CLIENT TO SERVER CONNECTIONS
config_foreach start_clients server "$CLIENT_CONF"
fi
}
stop() {
# only if vtun is installed
if [[ -x "/usr/sbin/vtund" ]]
then
# find all the vtund CLIENT processess...
for x in `ps -w|grep -F 'vtund[c]:'|grep -v grep|awk '{print $1}'`
do
s=`echo $s $x`
done
kill $s
fi
}