xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.init (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#! /bin/sh
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun### BEGIN INIT INFO
4*4882a593Smuzhiyun# Provides:       radvd
5*4882a593Smuzhiyun# Required-Start: $remote_fs $named $syslog
6*4882a593Smuzhiyun# Required-Stop:  $remote_fs $named $syslog
7*4882a593Smuzhiyun# Default-Start:  3 5
8*4882a593Smuzhiyun# Default-Stop:   0 1 2 6
9*4882a593Smuzhiyun# Description:    router advertisement daemon
10*4882a593Smuzhiyun### END INIT INFO
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun# Source function library.
13*4882a593Smuzhiyun. /etc/init.d/functions
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunPATH=/sbin:/bin:/usr/sbin:/usr/bin
16*4882a593SmuzhiyunDAEMON=/usr/sbin/radvd
17*4882a593SmuzhiyunNAME=radvd
18*4882a593SmuzhiyunDESC=radvd
19*4882a593SmuzhiyunCONFIG=/etc/radvd.conf
20*4882a593SmuzhiyunSAVED_SETTINGS=/var/run/radvd/saved-settings
21*4882a593SmuzhiyunPIDFILE=/var/run/radvd/radvd.pid
22*4882a593SmuzhiyunOPTIONS="-u radvd -p $PIDFILE"
23*4882a593Smuzhiyun
24*4882a593Smuzhiyuntest -x $DAEMON || exit 0
25*4882a593Smuzhiyun
26*4882a593Smuzhiyunset -e
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun# Check for IPv6 support in kernel
29*4882a593Smuzhiyunif test \! -e /proc/sys/net/ipv6; then
30*4882a593Smuzhiyun  echo "IPv6 support must be enabled in the kernel for $DESC to work."
31*4882a593Smuzhiyun  exit
32*4882a593Smuzhiyunfi
33*4882a593Smuzhiyun
34*4882a593Smuzhiyunsave_settings()
35*4882a593Smuzhiyun{
36*4882a593Smuzhiyun    local file=$1
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun    rm -f $file
39*4882a593Smuzhiyun    for if_conf in /proc/sys/net/ipv6/conf/*; do
40*4882a593Smuzhiyun	echo -e "$if_conf/forwarding\t `cat $if_conf/forwarding`" >> $file
41*4882a593Smuzhiyun    done
42*4882a593Smuzhiyun    return 0
43*4882a593Smuzhiyun}
44*4882a593Smuzhiyun
45*4882a593Smuzhiyunrestore_settings()
46*4882a593Smuzhiyun{
47*4882a593Smuzhiyun    file=$1
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun    if [ ! -f $file ]; then
50*4882a593Smuzhiyun	echo "$0: warning: cannot restore settings"
51*4882a593Smuzhiyun	return
52*4882a593Smuzhiyun    fi
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun    (
55*4882a593Smuzhiyun	while read f value; do
56*4882a593Smuzhiyun	    if [ -w $f ]; then
57*4882a593Smuzhiyun		echo $value > $f
58*4882a593Smuzhiyun	    fi
59*4882a593Smuzhiyun	done
60*4882a593Smuzhiyun    ) < $file
61*4882a593Smuzhiyun}
62*4882a593Smuzhiyun
63*4882a593Smuzhiyunchkconfig() {
64*4882a593Smuzhiyun    if [ ! -e $CONFIG -o ! -s $CONFIG ]; then
65*4882a593Smuzhiyun        echo ""
66*4882a593Smuzhiyun	echo "* $CONFIG does not exist or is empty."
67*4882a593Smuzhiyun	echo "* See /usr/share/doc/radvd/radvd.conf.example for a simple"
68*4882a593Smuzhiyun	echo "* configuration suitable for most systems, and radvd.conf(5)"
69*4882a593Smuzhiyun	echo "* for configuration file syntax. radvd will *not* be started."
70*4882a593Smuzhiyun	exit 0
71*4882a593Smuzhiyun    fi
72*4882a593Smuzhiyun}
73*4882a593Smuzhiyun
74*4882a593Smuzhiyuncase "$1" in
75*4882a593Smuzhiyun  start)
76*4882a593Smuzhiyun	echo -n "Starting $DESC: "
77*4882a593Smuzhiyun	chkconfig
78*4882a593Smuzhiyun	save_settings $SAVED_SETTINGS
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun        # We must enable IPv6 forwarding for radvd to work
81*4882a593Smuzhiyun	echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun	# Check for stale pidfile; radvd won't start if one is lying around
84*4882a593Smuzhiyun	if [ -f $PIDFILE ] && ! ps `cat  $PIDFILE` > /dev/null; then
85*4882a593Smuzhiyun	  rm -f $PIDFILE
86*4882a593Smuzhiyun	fi
87*4882a593Smuzhiyun	if ! start-stop-daemon --oknodo --start --pidfile $PIDFILE \
88*4882a593Smuzhiyun		--exec $DAEMON -- $OPTIONS; then
89*4882a593Smuzhiyun	  echo "failed." && exit 1
90*4882a593Smuzhiyun	fi
91*4882a593Smuzhiyun	echo "$NAME."
92*4882a593Smuzhiyun	;;
93*4882a593Smuzhiyun  stop)
94*4882a593Smuzhiyun	echo -n "Stopping $DESC: "
95*4882a593Smuzhiyun	if ! [ -f $PIDFILE ] ; then
96*4882a593Smuzhiyun		echo "not running."
97*4882a593Smuzhiyun		exit 0
98*4882a593Smuzhiyun	fi
99*4882a593Smuzhiyun	start-stop-daemon --oknodo --stop --pidfile $PIDFILE \
100*4882a593Smuzhiyun		--exec $DAEMON
101*4882a593Smuzhiyun	restore_settings $SAVED_SETTINGS
102*4882a593Smuzhiyun	rm -f $SAVED_SETTINGS
103*4882a593Smuzhiyun	echo "$NAME."
104*4882a593Smuzhiyun	;;
105*4882a593Smuzhiyun  status)
106*4882a593Smuzhiyun	status $DAEMON;
107*4882a593Smuzhiyun	exit $?
108*4882a593Smuzhiyun	;;
109*4882a593Smuzhiyun  reload|force-reload)
110*4882a593Smuzhiyun	echo "Reloading $DESC configuration files."
111*4882a593Smuzhiyun	start-stop-daemon --stop --signal HUP --quiet --pidfile \
112*4882a593Smuzhiyun	    $PIDFILE --exec $DAEMON
113*4882a593Smuzhiyun	;;
114*4882a593Smuzhiyun  restart)
115*4882a593Smuzhiyun	chkconfig
116*4882a593Smuzhiyun	echo -n "Restarting $DESC: "
117*4882a593Smuzhiyun	if ! start-stop-daemon --stop --quiet --pidfile \
118*4882a593Smuzhiyun		$PIDFILE --exec $DAEMON; then
119*4882a593Smuzhiyun	  # stop failed, so we were not running
120*4882a593Smuzhiyun	  save_settings $SAVED_SETTINGS
121*4882a593Smuzhiyun	  echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
122*4882a593Smuzhiyun	fi
123*4882a593Smuzhiyun	sleep 1
124*4882a593Smuzhiyun	start-stop-daemon --start --quiet --pidfile \
125*4882a593Smuzhiyun		$PIDFILE --exec $DAEMON -- $OPTIONS
126*4882a593Smuzhiyun	echo "$NAME."
127*4882a593Smuzhiyun	;;
128*4882a593Smuzhiyun  *)
129*4882a593Smuzhiyun	N=/etc/init.d/$NAME
130*4882a593Smuzhiyun	echo "Usage: $N {start|stop|status|restart|reload|force-reload}" >&2
131*4882a593Smuzhiyun	exit 1
132*4882a593Smuzhiyun	;;
133*4882a593Smuzhiyunesac
134*4882a593Smuzhiyun
135*4882a593Smuzhiyunexit 0
136