summaryrefslogtreecommitdiffstats
path: root/debian/vyatta-quagga.init.d
blob: 26051d22cfbaf75125cc95079d37c67518a69f8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: vyatta-quagga
# Required-Start: $local_fs $network $remote_fs $syslog
# Required-Stop: $local_fs $network $remote_fs $syslog
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop the Quagga routing suite
# Description: Quagga is a routing suite for IP routing protocols like 
#              BGP, OSPF, RIP and others. This script contols the main 
#              daemon "quagga" as well as the individual protocol daemons.
#              FIXME! this init script will be deprecated as daemon start/stop
#                     is integrated with vyatta-cfg-quagga
### END INIT INFO
#

. /lib/lsb/init-functions

declare progname=${0##*/}
declare action=$1; shift

pid_dir=/var/run/vyatta/quagga
log_dir=/var/log/vyatta/quagga

for dir in $pid_dir $log_dir ; do
    if [ ! -d $dir ]; then
	mkdir -p $dir
	chown quagga:quagga $dir
	chmod 755 $dir
    fi
done

declare -a common_args=( -d -P 0 )
declare -a watchlink_args=( -s -d -i $pid_dir/watchlink.pid )
declare -a zebra_args=( ${common_args[@]} -l -s 1048576 -i $pid_dir/zebra.pid )
declare -a ripd_args=( ${common_args[@]} -i $pid_dir/ripd.pid )
declare -a ripngd_args=( ${common_args[@]} -i $pid_dir/ripngd.pid )
declare -a ospfd_args=( ${common_args[@]} -i $pid_dir/ospfd.pid )
declare -a ospf6d_args=( ${common_args[@]} -i $pid_dir/ospf6d.pid )
declare -a isisd_args=( ${common_args[@]} -i $pid_dir/isisd.pid )
declare -a bgpd_args=( ${common_args[@]} -i $pid_dir/bgpd.pid )

vyatta_quagga_start ()
{
    local -a daemons
    if [ $# -gt 0 ] ; then
	daemons=( $* )
    else
#	daemons+=( watchlink )
	daemons+=( zebra )
	daemons+=( ripd )
#	daemons+=( ripngd )
	daemons+=( ospfd )
#	daemons+=( ospf6d )
#	daemons+=( isisd )
	daemons+=( bgpd )
    fi

    log_action_begin_msg "Starting Quagga"
    for daemon in ${daemons[@]} ; do
	[ "$daemon" != zebra ] && \
	    log_action_cont_msg "$daemon"
	start-stop-daemon \
	    --start \
	    --quiet \
	    --oknodo \
	    --pidfile=$pid_dir/${daemon}.pid \
	    --chdir $log_dir \
	    --exec "/usr/sbin/vyatta-${daemon}" \
	    -- `eval echo "$""{${daemon}_args[@]}"` || \
	    ( log_action_end_msg 1 ; return 1 )
    done
    log_action_end_msg 0
}

vyatta_quagga_stop ()
{
    local -a daemons

    if [ $# -gt 0 ] ; then
	daemons=( $* )
    else
	daemons=( watchlink bgpd isisd ospf6d ospfd ripngd ripd zebra )
    fi
    log_action_begin_msg "Stopping Quagga"
    for daemon in ${daemons[@]} ; do
	pidfile=$pid_dir/${daemon}.pid
	if [ -r $pidfile ] ; then
	    pid=`cat $pidfile 2>/dev/null`
	else
	    pid=`ps -o pid= -C vyatta-${daemon}`
	fi
	if [ -n "$pid" ] ; then
	    [ "$daemon" != zebra ] && \
		log_action_cont_msg "$daemon"
	    start-stop-daemon \
		--stop \
		--quiet \
		--oknodo \
		--exec /usr/sbin/vyatta-${daemon}
#
# Now we have to wait until $DAEMON has _really_ stopped.
#
	    for (( tries=0; tries<30; tries++ )) ; do
		if [[ -d /proc/$pid ]] ; then
		    sleep 3
		    kill -0 $pid 2>/dev/null
		else
		    break
		fi
	    done
	    rm -f $pidfile
	fi
    done
    log_action_end_msg $?
    if echo ${daemons[@]} | grep -q zebra ; then
	log_begin_msg "Removing all Quagga Routes"
	ip route flush proto zebra
	log_end_msg $?
    fi
}

case "$action" in
    start)
	# Try to load this necessary (at least for 2.6) module.
	if [ -d /lib/modules/`uname -r` ] ; then
	    log_begin_msg "Loading capability module if not yet done"
	    set +e; \
		LC_ALL=C \
		modprobe -a capability 2>&1 | \
		egrep -v "(not found|Can't locate)"; \
		set -e
	    log_end_msg 0
	fi
	vyatta_quagga_start $*
    	;;
	
    stop|0)
	vyatta_quagga_stop $*
   	;;

    restart|force-reload)
	vyatta_quagga_stop $*
	sleep 2
	vyatta_quagga_start $*
	;;

    *)
    	echo "Usage: $progname {start|stop|restart|force-reload} [daemon...]"
	exit 1
	;;
esac