xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.init (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# /etc/init.d/quagga -- start/stop the Quagga routing daemons
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# Based on debian version by Endre Hirling <endre@mail.elte.hu> and
6*4882a593Smuzhiyun# Christian Hammers <ch@debian.org>.
7*4882a593Smuzhiyun#
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun### BEGIN INIT INFO
10*4882a593Smuzhiyun# Provides: quagga
11*4882a593Smuzhiyun# Required-Start: $local_fs $network $remote_fs $syslog
12*4882a593Smuzhiyun# Required-Stop: $local_fs $network $remote_fs $syslog
13*4882a593Smuzhiyun# Default-Start:  2 3 4 5
14*4882a593Smuzhiyun# Default-Stop: 0 1 6
15*4882a593Smuzhiyun# Short-Description: start and stop the Quagga routing suite
16*4882a593Smuzhiyun# Description: Quagga is a routing suite for IP routing protocols like
17*4882a593Smuzhiyun#              BGP, OSPF, RIP and others. This script contols the main
18*4882a593Smuzhiyun#              daemon "quagga" as well as the individual protocol daemons.
19*4882a593Smuzhiyun### END INIT INFO
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun# NOTE: sbin must be before bin so we get the iproute2 ip and not the
22*4882a593Smuzhiyun# busybox ip command. The busybox one flushes all routes instead of just
23*4882a593Smuzhiyun# the dynamic routes
24*4882a593SmuzhiyunPATH=/sbin:/usr/sbin:/bin:/usr/bin:/sbin
25*4882a593SmuzhiyunD_PATH=/usr/sbin
26*4882a593SmuzhiyunC_PATH=/etc/quagga
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun# Keep zebra first and do not list watchquagga!
29*4882a593SmuzhiyunDAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd"
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun# Print the name of the pidfile.
32*4882a593Smuzhiyunpidfile()
33*4882a593Smuzhiyun{
34*4882a593Smuzhiyun	echo "/var/run/quagga/$1.pid"
35*4882a593Smuzhiyun}
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun# Check if daemon is started by using the pidfile.
38*4882a593Smuzhiyunstarted()
39*4882a593Smuzhiyun{
40*4882a593Smuzhiyun	[ -e `pidfile $1` ] && kill -0 `cat \`pidfile $1\`` 2> /dev/null && return 0
41*4882a593Smuzhiyun	return 1
42*4882a593Smuzhiyun}
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun# Loads the config via vtysh -b if configured to do so.
45*4882a593Smuzhiyunvtysh_b ()
46*4882a593Smuzhiyun{
47*4882a593Smuzhiyun	# Rember, that all variables have been incremented by 1 in convert_daemon_prios()
48*4882a593Smuzhiyun	if [ "$vtysh_enable" = 2 -a -f $C_PATH/Quagga.conf ]; then
49*4882a593Smuzhiyun		/usr/bin/vtysh -b
50*4882a593Smuzhiyun	fi
51*4882a593Smuzhiyun}
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun# Check if the daemon is activated and if its executable and config files
54*4882a593Smuzhiyun# are in place.
55*4882a593Smuzhiyun# params: 	daemon name
56*4882a593Smuzhiyun# returns:	0=ok, 1=error
57*4882a593Smuzhiyuncheck_daemon()
58*4882a593Smuzhiyun{
59*4882a593Smuzhiyun	# If the integrated config file is used the others are not checked.
60*4882a593Smuzhiyun	if [ -r "$C_PATH/Quagga.conf" ]; then
61*4882a593Smuzhiyun	  return 0
62*4882a593Smuzhiyun	fi
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	# check for config file
65*4882a593Smuzhiyun	if [ ! -r "$C_PATH/$1.conf" ]; then
66*4882a593Smuzhiyun	  return 1
67*4882a593Smuzhiyun	fi
68*4882a593Smuzhiyun	return 0
69*4882a593Smuzhiyun}
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun# Starts the server if it's not alrady running according to the pid file.
72*4882a593Smuzhiyun# The Quagga daemons creates the pidfile when starting.
73*4882a593Smuzhiyunstart()
74*4882a593Smuzhiyun{
75*4882a593Smuzhiyun	if ! check_daemon $1; then echo -n " (!$1)"; return; fi
76*4882a593Smuzhiyun	echo -n " $1"
77*4882a593Smuzhiyun	start-stop-daemon \
78*4882a593Smuzhiyun		--start \
79*4882a593Smuzhiyun		--pidfile=`pidfile $1` \
80*4882a593Smuzhiyun		--exec "$D_PATH/$1" \
81*4882a593Smuzhiyun		-- \
82*4882a593Smuzhiyun		`eval echo "$""$1""_options"`
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun}
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun# Stop the daemon given in the parameter, printing its name to the terminal.
87*4882a593Smuzhiyunstop()
88*4882a593Smuzhiyun{
89*4882a593Smuzhiyun    if ! started "$1" ; then
90*4882a593Smuzhiyun	echo -n " (!$1)"
91*4882a593Smuzhiyun	return 0
92*4882a593Smuzhiyun    else
93*4882a593Smuzhiyun	PIDFILE=`pidfile $1`
94*4882a593Smuzhiyun	PID=`cat $PIDFILE 2>/dev/null`
95*4882a593Smuzhiyun	start-stop-daemon --stop --quiet --exec "$D_PATH/$1"
96*4882a593Smuzhiyun	#
97*4882a593Smuzhiyun	#       Now we have to wait until $DAEMON has _really_ stopped.
98*4882a593Smuzhiyun	#
99*4882a593Smuzhiyun	if test -n "$PID" && kill -0 $PID 2>/dev/null; then
100*4882a593Smuzhiyun	    echo -n " (waiting) ."
101*4882a593Smuzhiyun	    cnt=0
102*4882a593Smuzhiyun	    while kill -0 $PID 2>/dev/null; do
103*4882a593Smuzhiyun		cnt=`expr $cnt + 1`
104*4882a593Smuzhiyun		if [ $cnt -gt 60 ]; then
105*4882a593Smuzhiyun		    # Waited 120 secs now, fail.
106*4882a593Smuzhiyun		    echo -n "Failed.. "
107*4882a593Smuzhiyun		    break
108*4882a593Smuzhiyun		fi
109*4882a593Smuzhiyun		sleep 2
110*4882a593Smuzhiyun		echo -n "."
111*4882a593Smuzhiyun		done
112*4882a593Smuzhiyun	    fi
113*4882a593Smuzhiyun	echo -n " $1"
114*4882a593Smuzhiyun	rm -f `pidfile $1`
115*4882a593Smuzhiyun    fi
116*4882a593Smuzhiyun}
117*4882a593Smuzhiyun
118*4882a593Smuzhiyunstop_all()
119*4882a593Smuzhiyun{
120*4882a593Smuzhiyun	local daemon_list
121*4882a593Smuzhiyun	daemon_list=${1:-$DAEMONS}
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun	echo -n "Stopping Quagga daemons:"
124*4882a593Smuzhiyun	for daemon_name in $daemon_list; do
125*4882a593Smuzhiyun		stop "$daemon_name"
126*4882a593Smuzhiyun	done
127*4882a593Smuzhiyun	echo "."
128*4882a593Smuzhiyun}
129*4882a593Smuzhiyun
130*4882a593Smuzhiyunstart_all()
131*4882a593Smuzhiyun{
132*4882a593Smuzhiyun	local daemon_list
133*4882a593Smuzhiyun	daemon_list=${1:-$DAEMONS}
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun	echo -n "Starting Quagga daemons:"
136*4882a593Smuzhiyun	for daemon_name in $daemon_list; do
137*4882a593Smuzhiyun		start "$daemon_name"
138*4882a593Smuzhiyun	done
139*4882a593Smuzhiyun	echo "."
140*4882a593Smuzhiyun}
141*4882a593Smuzhiyun
142*4882a593Smuzhiyunstatus_all()
143*4882a593Smuzhiyun{
144*4882a593Smuzhiyun	local daemon_list
145*4882a593Smuzhiyun	daemon_list=${1:-$DAEMONS}
146*4882a593Smuzhiyun	res=1
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun	echo -n "quagga: "
149*4882a593Smuzhiyun	for daemon_name in $daemon_list; do
150*4882a593Smuzhiyun	    if started "$daemon_name" ; then
151*4882a593Smuzhiyun		id=`cat \`pidfile $daemon_name\``
152*4882a593Smuzhiyun		echo -n "$daemon_name (pid $id) "
153*4882a593Smuzhiyun		res=0
154*4882a593Smuzhiyun	    fi
155*4882a593Smuzhiyun	done
156*4882a593Smuzhiyun	if [ $res -eq 0 ]; then
157*4882a593Smuzhiyun	    echo "is running..."
158*4882a593Smuzhiyun	else
159*4882a593Smuzhiyun	    echo "is stopped..."
160*4882a593Smuzhiyun	fi
161*4882a593Smuzhiyun	exit $res
162*4882a593Smuzhiyun}
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun#########################################################
165*4882a593Smuzhiyun# 		Main program 				#
166*4882a593Smuzhiyun#########################################################
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun# Load configuration
169*4882a593Smuzhiyuntest -f /etc/default/quagga && . /etc/default/quagga
170*4882a593Smuzhiyun
171*4882a593Smuzhiyuncase "$1" in
172*4882a593Smuzhiyun    start)
173*4882a593Smuzhiyun	cd $C_PATH/
174*4882a593Smuzhiyun	start_all $2
175*4882a593Smuzhiyun	vtysh_b
176*4882a593Smuzhiyun    	;;
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun    stop)
179*4882a593Smuzhiyun  	stop_all $2
180*4882a593Smuzhiyun	echo "Removing all routes made by zebra."
181*4882a593Smuzhiyun	ip route flush proto zebra
182*4882a593Smuzhiyun   	;;
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun    status)
185*4882a593Smuzhiyun  	status_all $2
186*4882a593Smuzhiyun   	;;
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun    restart|force-reload)
189*4882a593Smuzhiyun	$0 stop $2
190*4882a593Smuzhiyun	sleep 1
191*4882a593Smuzhiyun	$0 start $2
192*4882a593Smuzhiyun	;;
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun    *)
195*4882a593Smuzhiyun    	echo "Usage: /etc/init.d/quagga {start|stop|restart|status|force-reload} [daemon]"
196*4882a593Smuzhiyun	exit 1
197*4882a593Smuzhiyun	;;
198*4882a593Smuzhiyunesac
199*4882a593Smuzhiyun
200*4882a593Smuzhiyunexit 0
201