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