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