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