New upstream version 0.3.6
[anytun.git] / etc / init.d / anytun
1 #! /bin/sh
2 ### BEGIN INIT INFO
3 # Provides:          anytun
4 # Required-Start:    $remote_fs $network $named $syslog
5 # Required-Stop:     $remote_fs
6 # Default-Start:     2 3 4 5
7 # Default-Stop:      0 1 6
8 # Short-Description: Start anycast tunneling daemon at boot time
9 # Description:       Enables networking over vpn tunnel interfaces
10 ### END INIT INFO
11 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
12 DAEMON=anytun
13 LAUNCHER=/usr/local/lib/$DAEMON-launcher
14 DESC="secure anycast tunneling daemon"
15 CONFIG_DIR=/usr/local/etc/$DAEMON
16 VARCONTROL_DIR=/var/run/$DAEMON-controld
17 VARRUN_DIR=/var/run/$DAEMON/
18
19 # Include anytun defaults if available
20 if [ -f /etc/default/anytun ] ; then
21   . /etc/default/anytun
22 fi
23
24 . /lib/lsb/init-functions
25
26 start_vpn () {
27   STATUS="OK"
28   if [ -f $CONFIG_DIR/$1/config ] ; then
29     $LAUNCHER vpn $1 || STATUS="FAILED"
30   else
31     STATUS=" no config found"
32   fi
33   start_configd $1
34   echo -n "($STATUS)"
35 }
36 stop_vpn () {
37   kill `cat $PIDFILE` || true
38   rm $PIDFILE
39   stop_configd $1
40 }
41
42 start_configd () {
43   $LAUNCHER configd $1
44 }
45 stop_configd () {
46   if [ -d $CONFIG_DIR/$1/conf.d ] ; then
47     echo -n " ($1-controlld)"
48     kill `cat $VARCONTROL_DIR/$1.pid` || true
49     rm $VARCONTROL_DIR/$1.pid
50   fi
51 }
52
53 set -e
54 case "$1" in
55   start)
56     echo -n "Starting $DESC:"
57     if test -z "$2" ; then
58       if [ -f $CONFIG_DIR/autostart ] ; then
59         for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
60           echo -n " $NAME"
61           start_vpn $NAME
62         done
63       else
64         echo "no config found"
65         exit 1;
66       fi
67     else
68       while shift ; do
69         [ -z "$1" ] && break
70         echo -n " $1"
71         start_vpn $1
72       done
73     fi
74     echo "."
75     ;;
76   stop)
77     echo -n "Stoping $DESC:"
78     if test -z "$2" ; then
79       for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
80         NAME=`basename $PIDFILE`
81         NAME=${NAME%%.pid}
82         echo -n " $NAME"
83         stop_vpn $NAME
84       done
85     else
86       while shift ; do
87         [ -z "$1" ] && break
88         if test -e $VARRUN_DIR/$1.pid ; then
89           PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
90           NAME=`basename $PIDFILE`
91           NAME=${NAME%%.pid}
92           echo -n " $NAME"
93           stop_vpn $NAME
94         else
95           echo -n " (failure: No such tunnel is running: $1)"
96         fi
97       done
98     fi
99     echo "."
100     ;;
101   reload)
102     echo -n "Reloading $DESC:"
103     if test -z "$2" ; then
104       for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
105         NAME=`basename $PIDFILE`
106         NAME=${NAME%%.pid}
107         echo -n " $NAME"
108         if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
109           stop_vpn $NAME
110           start_vpn $NAME
111         else
112           stop_configd $NAME
113           start_configd $NAME
114         fi
115       done
116     else
117       while shift ; do
118         [ -z "$1" ] && break
119         if test -e $VARRUN_DIR/$1.pid ; then
120           PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
121           NAME=`basename $PIDFILE`
122           NAME=${NAME%%.pid}
123           echo -n " $NAME"
124           if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
125             stop_vpn $NAME
126             start_vpn $NAME
127           else
128             stop_configd $NAME
129             start_configd $NAME
130           fi
131         else
132           echo -n " (failure: No such tunnel is running: $1)"
133         fi
134       done
135     fi
136     echo "."
137     ;;
138   force-reload)
139     echo -n "Restarting $DESC:"
140     if test -z "$2" ; then
141       for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
142         NAME=`basename $PIDFILE`
143         NAME=${NAME%%.pid}
144         echo -n " $NAME"
145         stop_vpn $NAME
146         sleep 1
147         start_vpn $NAME
148       done
149     else
150       while shift ; do
151         [ -z "$1" ] && break
152         if test -e $VARRUN_DIR/$1.pid ; then
153           PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
154           NAME=`basename $PIDFILE`
155           NAME=${NAME%%.pid}
156           echo -n " $NAME"
157           stop_vpn $NAME
158           sleep 1
159           start_vpn $NAME
160         else
161           echo -n " (failure: No such tunnel is running: $1)"
162         fi
163       done
164     fi
165     echo "."
166     ;;
167   restart)
168     SCRIPT=$0
169     shift
170     $SCRIPT stop $*
171     sleep 1
172     $SCRIPT start $*
173     ;;
174   *)
175     N=/etc/init.d/$DAEMON
176     echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
177     exit 1
178     ;;
179 esac
180
181 exit 0