hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#! /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