#! /bin/sh # ### BEGIN INIT INFO # Provides: radvd # Required-Start: $remote_fs $named $syslog # Required-Stop: $remote_fs $named $syslog # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Description: router advertisement daemon ### END INIT INFO # Source function library. . /etc/init.d/functions PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/radvd NAME=radvd DESC=radvd CONFIG=/etc/radvd.conf SAVED_SETTINGS=/var/run/radvd/saved-settings PIDFILE=/var/run/radvd/radvd.pid OPTIONS="-u radvd -p $PIDFILE" test -x $DAEMON || exit 0 set -e # Check for IPv6 support in kernel if test \! -e /proc/sys/net/ipv6; then echo "IPv6 support must be enabled in the kernel for $DESC to work." exit fi save_settings() { local file=$1 rm -f $file for if_conf in /proc/sys/net/ipv6/conf/*; do echo -e "$if_conf/forwarding\t `cat $if_conf/forwarding`" >> $file done return 0 } restore_settings() { file=$1 if [ ! -f $file ]; then echo "$0: warning: cannot restore settings" return fi ( while read f value; do if [ -w $f ]; then echo $value > $f fi done ) < $file } chkconfig() { if [ ! -e $CONFIG -o ! -s $CONFIG ]; then echo "" echo "* $CONFIG does not exist or is empty." echo "* See /usr/share/doc/radvd/radvd.conf.example for a simple" echo "* configuration suitable for most systems, and radvd.conf(5)" echo "* for configuration file syntax. radvd will *not* be started." exit 0 fi } case "$1" in start) echo -n "Starting $DESC: " chkconfig save_settings $SAVED_SETTINGS # We must enable IPv6 forwarding for radvd to work echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # Check for stale pidfile; radvd won't start if one is lying around if [ -f $PIDFILE ] && ! ps `cat $PIDFILE` > /dev/null; then rm -f $PIDFILE fi if ! start-stop-daemon --oknodo --start --pidfile $PIDFILE \ --exec $DAEMON -- $OPTIONS; then echo "failed." && exit 1 fi echo "$NAME." ;; stop) echo -n "Stopping $DESC: " if ! [ -f $PIDFILE ] ; then echo "not running." exit 0 fi start-stop-daemon --oknodo --stop --pidfile $PIDFILE \ --exec $DAEMON restore_settings $SAVED_SETTINGS rm -f $SAVED_SETTINGS echo "$NAME." ;; status) status $DAEMON; exit $? ;; reload|force-reload) echo "Reloading $DESC configuration files." start-stop-daemon --stop --signal HUP --quiet --pidfile \ $PIDFILE --exec $DAEMON ;; restart) chkconfig echo -n "Restarting $DESC: " if ! start-stop-daemon --stop --quiet --pidfile \ $PIDFILE --exec $DAEMON; then # stop failed, so we were not running save_settings $SAVED_SETTINGS echo 1 > /proc/sys/net/ipv6/conf/all/forwarding fi sleep 1 start-stop-daemon --start --quiet --pidfile \ $PIDFILE --exec $DAEMON -- $OPTIONS echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|status|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0