#! /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 
 |