#!/bin/sh # # Copyright (C)2006,2007 USAGI/WIDE Project. All rights reserved. # ### BEGIN INIT INFO # Provides: mip6d # Required-Start: $syslog # Required-Stop: $syslog # Should-Start: $local_fs # Should-Stop: $local_fs # Default-Start: 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/Stop mip6 daemon (MIPL) # Description: (empty) ### END INIT INFO MIP6D_BIN=/usr/sbin/mip6d MIP6D_CONF= MIP6D_PID=/var/run/mip6d.pid MIP6D_DEBUG_LOG=/var/log/mip6d.log conf=/etc/default/mip6d if [ -f $conf ]; then . $conf fi mip6d_delay=1 NAME="mip6d" DESC="MIPL daemon" . /lib/lsb/init-functions test -x $MIP6D_BIN || exit 5 _usage() { echo "Usage: $0 start|stop|restart|reload" } _start() { if [ -f $MIP6D_PID ]; then log_failure_msg "Already running" return 0 fi opts="" if [ x"$MIP6D_CONF" != x"" ]; then opts="${opts} -c ${MIP6D_CONF}" fi if [ x"$MIP6D_DEBUG_LOG" != x"" ]; then opts="${opts} -l ${MIP6D_DEBUG_LOG}" fi # start_daemon -p $MIP6D_PID $MIP6D_BIN $opts start-stop-daemon --start --pidfile $MIP6D_PID --make-pidfile \ --exec $MIP6D_BIN -- $opts ret=$? if [ $ret -eq 0 ]; then # # Sleep for delay to confirm starting MIPL daemon # sleep $mip6d_delay fi return $ret } _stop() { # killproc -p $MIP6D_PID $MIP6D_BIN start-stop-daemon --stop --exec $MIP6D_BIN rm -f $MIP6D_PID if [ x"$MIP6D_FORCECLEAN" = x"yes" ]; then # # clean-up XFRM (BCE/BUL) # ip xfrm policy flush ptype sub ip xfrm state flush proto hao ip xfrm state flush proto route2 if [ x"$MIP6D_HAMN" = x"yes" ]; then # # clean-up tunnel device # tnl_max=256 # XXX i=1 while [ $i -lt $tnl_max ] ; do tdev="ip6tnl${i}" ip -6 tunnel del $tdev >& /dev/null i=$((i + 1)) done fi # # clean-up neighbor cache # devices=`ip link | grep '^[0-9]' | awk '{print $2}' | sed -e 's/:$//'` for dev in $devices; do ip neigh flush dev $dev >& /dev/null done fi return 0 } _reload() { # killproc -p $MIP6D_PID $MIP6D_BIN SIGHUP start-stop-daemon --stop --exec $MIP6D_BIN --signal HUP return $? } # # main # status=$1 case $status in start) log_begin_msg "Starting Mobile IPv6" $NAME _start RETVAL=$? ;; dry-start) log_begin_msg "Dry-starting Mobile IPv6 (not started)" $NAME RETVAL=0 ;; stop) log_begin_msg "Stopping Mobile IPv6" $NAME _stop RETVAL=$? ;; reload) log_begin_msg "Reloading Mobile IPv6" $NAME _reload RETVAL=$? ;; restart) log_begin_msg "Restarting Mobile IPv6" $NAME _stop sleep $mip6d_delay _start RETVAL=$? ;; *) _usage exit 2 ;; esac log_end_msg $RETVAL exit $RETVAL