mirror of https://github.com/aredn/aredn.git
139 lines
3.3 KiB
Plaintext
139 lines
3.3 KiB
Plaintext
|
#!/bin/sh /etc/rc.common
|
||
|
# Copyright (C) 2006-2011 OpenWrt.org
|
||
|
|
||
|
START=84
|
||
|
STOP=85
|
||
|
|
||
|
CLIENT_CONF=/etc/vtund.conf
|
||
|
|
||
|
# Starting tun interface is tun50
|
||
|
TUNNUM=60
|
||
|
MAXTUNNUM=69
|
||
|
|
||
|
######### 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 ###########
|
||
|
|
||
|
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 -lt $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 pwd 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'
|
||
|
}
|
||
|
|
||
|
start() {
|
||
|
# only if vtun is installed
|
||
|
if [[ -x "/usr/sbin/vtund" ]]
|
||
|
then
|
||
|
apply_uci_config
|
||
|
config_load vtun
|
||
|
|
||
|
# Remove the current vtun config file
|
||
|
rm -f $CLIENT_CONF
|
||
|
|
||
|
# config_foreach network_config network
|
||
|
config_foreach options_config options "$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|tr -s ' '|cut -d' ' -f2`
|
||
|
#do
|
||
|
# s=`echo $s $x`
|
||
|
#done
|
||
|
#kill $s
|
||
|
killall vtund
|
||
|
fi
|
||
|
}
|