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