Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | # |
| 3 | ### BEGIN INIT INFO |
| 4 | # Provides: radvd |
| 5 | # Required-Start: $remote_fs $named $syslog |
| 6 | # Required-Stop: $remote_fs $named $syslog |
| 7 | # Default-Start: 3 5 |
| 8 | # Default-Stop: 0 1 2 6 |
| 9 | # Description: router advertisement daemon |
| 10 | ### END INIT INFO |
| 11 | |
| 12 | # Source function library. |
| 13 | . /etc/init.d/functions |
| 14 | |
| 15 | PATH=/sbin:/bin:/usr/sbin:/usr/bin |
| 16 | DAEMON=/usr/sbin/radvd |
| 17 | NAME=radvd |
| 18 | DESC=radvd |
| 19 | CONFIG=/etc/radvd.conf |
| 20 | SAVED_SETTINGS=/var/run/radvd/saved-settings |
| 21 | PIDFILE=/var/run/radvd/radvd.pid |
| 22 | OPTIONS="-u radvd -p $PIDFILE" |
| 23 | |
| 24 | test -x $DAEMON || exit 0 |
| 25 | |
| 26 | set -e |
| 27 | |
| 28 | # Check for IPv6 support in kernel |
| 29 | if test \! -e /proc/sys/net/ipv6; then |
| 30 | echo "IPv6 support must be enabled in the kernel for $DESC to work." |
| 31 | exit |
| 32 | fi |
| 33 | |
| 34 | save_settings() |
| 35 | { |
| 36 | local file=$1 |
| 37 | |
| 38 | rm -f $file |
| 39 | for if_conf in /proc/sys/net/ipv6/conf/*; do |
| 40 | echo -e "$if_conf/forwarding\t `cat $if_conf/forwarding`" >> $file |
| 41 | done |
| 42 | return 0 |
| 43 | } |
| 44 | |
| 45 | restore_settings() |
| 46 | { |
| 47 | file=$1 |
| 48 | |
| 49 | if [ ! -f $file ]; then |
| 50 | echo "$0: warning: cannot restore settings" |
| 51 | return |
| 52 | fi |
| 53 | |
| 54 | ( |
| 55 | while read f value; do |
| 56 | if [ -w $f ]; then |
| 57 | echo $value > $f |
| 58 | fi |
| 59 | done |
| 60 | ) < $file |
| 61 | } |
| 62 | |
| 63 | chkconfig() { |
| 64 | if [ ! -e $CONFIG -o ! -s $CONFIG ]; then |
| 65 | echo "" |
| 66 | echo "* $CONFIG does not exist or is empty." |
| 67 | echo "* See /usr/share/doc/radvd/radvd.conf.example for a simple" |
| 68 | echo "* configuration suitable for most systems, and radvd.conf(5)" |
| 69 | echo "* for configuration file syntax. radvd will *not* be started." |
| 70 | exit 0 |
| 71 | fi |
| 72 | } |
| 73 | |
| 74 | case "$1" in |
| 75 | start) |
| 76 | echo -n "Starting $DESC: " |
| 77 | chkconfig |
| 78 | save_settings $SAVED_SETTINGS |
| 79 | |
| 80 | # We must enable IPv6 forwarding for radvd to work |
| 81 | echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
| 82 | |
| 83 | # Check for stale pidfile; radvd won't start if one is lying around |
| 84 | if [ -f $PIDFILE ] && ! ps `cat $PIDFILE` > /dev/null; then |
| 85 | rm -f $PIDFILE |
| 86 | fi |
| 87 | if ! start-stop-daemon --oknodo --start --pidfile $PIDFILE \ |
| 88 | --exec $DAEMON -- $OPTIONS; then |
| 89 | echo "failed." && exit 1 |
| 90 | fi |
| 91 | echo "$NAME." |
| 92 | ;; |
| 93 | stop) |
| 94 | echo -n "Stopping $DESC: " |
| 95 | if ! [ -f $PIDFILE ] ; then |
| 96 | echo "not running." |
| 97 | exit 0 |
| 98 | fi |
| 99 | start-stop-daemon --oknodo --stop --pidfile $PIDFILE \ |
| 100 | --exec $DAEMON |
| 101 | restore_settings $SAVED_SETTINGS |
| 102 | rm -f $SAVED_SETTINGS |
| 103 | echo "$NAME." |
| 104 | ;; |
| 105 | status) |
| 106 | status $DAEMON; |
| 107 | exit $? |
| 108 | ;; |
| 109 | reload|force-reload) |
| 110 | echo "Reloading $DESC configuration files." |
| 111 | start-stop-daemon --stop --signal HUP --quiet --pidfile \ |
| 112 | $PIDFILE --exec $DAEMON |
| 113 | ;; |
| 114 | restart) |
| 115 | chkconfig |
| 116 | echo -n "Restarting $DESC: " |
| 117 | if ! start-stop-daemon --stop --quiet --pidfile \ |
| 118 | $PIDFILE --exec $DAEMON; then |
| 119 | # stop failed, so we were not running |
| 120 | save_settings $SAVED_SETTINGS |
| 121 | echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
| 122 | fi |
| 123 | sleep 1 |
| 124 | start-stop-daemon --start --quiet --pidfile \ |
| 125 | $PIDFILE --exec $DAEMON -- $OPTIONS |
| 126 | echo "$NAME." |
| 127 | ;; |
| 128 | *) |
| 129 | N=/etc/init.d/$NAME |
| 130 | echo "Usage: $N {start|stop|status|restart|reload|force-reload}" >&2 |
| 131 | exit 1 |
| 132 | ;; |
| 133 | esac |
| 134 | |
| 135 | exit 0 |