| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | 
							- #!/bin/sh
 
- ### BEGIN INIT INFO
 
- # Provides:          softflowd
 
- # Required-Start:    $network $remote_fs $syslog
 
- # Required-Stop:     $network $remote_fs $syslog
 
- # Default-Start:     2 3 4 5
 
- # Default-Stop:      0 1 6
 
- # Short-Description: Flow-based network traffic analyser
 
- # Description:       Manage all softflowd exports defined in
 
- #                    /etc/softflowd/*.conf
 
- ### END INIT INFO
 
- PATH=/sbin:/usr/sbin:/bin:/usr/bin
 
- NAME=softflowd
 
- DESC='Flow-based network traffic analyser'
 
- SOFTFLOWD="/usr/sbin/$NAME"
 
- PIDDIR="/var/run/$NAME/"
 
- PRIVDROP_CHROOT_DIR='/var/run/softflowd/chroot'
 
- [ -x "$SOFTFLOWD" ] || exit 0
 
- if [ "$1" = 'start' ] ; then
 
-     mkdir -p "$PRIVDROP_CHROOT_DIR"
 
-     if [ -e /var/run/softflowd.ctl ] ; then
 
-         [ -L /var/run/softflowd.ctl ] || rm /var/run/softflowd.ctl
 
-     fi
 
-     [ -e /var/run/softflowd.ctl ] || ln -s /var/run/softflowd/default.ctl /var/run/softflowd.ctl
 
-     install -D -p /etc/protocols "$PRIVDROP_CHROOT_DIR/etc/protocols"
 
- fi
 
- # Load the VERBOSE setting and other rcS variables
 
- . /lib/init/vars.sh
 
- # Define LSB functions
 
- . /lib/lsb/init-functions
 
- # Start a softflowd instance
 
- #
 
- # Return
 
- #   0 if daemon has been started
 
- #   1 if daemon was already running
 
- #   2 if daemon could not be started
 
- do_start () {
 
-     local INSTANCE="$1"
 
-     local CONFIG="$2"
 
-     sh -n "$CONFIG" 2>/dev/null || return 2
 
-     interface=
 
-     options=
 
-     . "$CONFIG"
 
-     [ "$interface" ] || return 2
 
-     local PIDFILE="$PIDDIR$INSTANCE.pid"
 
-     local CTLSOCK="$PIDDIR$INSTANCE.ctl"
 
-     start-stop-daemon --start --quiet \
 
-         --pidfile "$PIDFILE" --exec "$SOFTFLOWD" --test > /dev/null \
 
-         || return 1
 
-     start-stop-daemon --start --quiet \
 
-         --pidfile "$PIDFILE" \
 
-         --exec "$SOFTFLOWD" -- \
 
-         -p "$PIDFILE" -c "$CTLSOCK" \
 
-         -i "$interface" $options \
 
-         || return 2
 
-     sleep 1
 
-     start-stop-daemon --start --quiet \
 
-         --pidfile "$PIDFILE" --exec "$SOFTFLOWD" --test > /dev/null \
 
-         && return 2
 
- }
 
- # Stop a softflowd instance
 
- #
 
- # Return
 
- #   0 if daemon has been stopped
 
- #   1 if daemon was already stopped
 
- #   2 if daemon could not be stopped
 
- #   other if a failure occurred
 
- do_stop () {
 
-     local INSTANCE="$1"
 
-     local PIDFILE="$PIDDIR/$INSTANCE.pid"
 
-     start-stop-daemon --stop --quiet \
 
-         --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name "$NAME"
 
-     RETVAL="$?"
 
-     [ "$RETVAL" = 2 ] && return 2
 
-     # Many daemons don't delete their pidfiles when they exit.
 
-     rm -f "$PIDFILE"
 
-     return "$RETVAL"
 
- }
 
- EXIT=0
 
- do_action () {
 
-     local CONFIG="$1"
 
-     INSTANCE="$(basename "${CONFIG%%.conf}")"
 
-     case "$ACTION" in
 
-         start)
 
-             [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$INSTANCE"
 
-             do_start "$INSTANCE" "$CONFIG"
 
-             case "$?" in
 
-                 0|1)    [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 
-                 2)
 
-                     [ "$VERBOSE" != no ] && log_end_msg 1
 
-                     EXIT=1
 
-                     ;;
 
-             esac
 
-             ;;
 
-         stop)
 
-             [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$INSTANCE"
 
-             do_stop "$INSTANCE"
 
-             case "$?" in
 
-                 0|1)    [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 
-                 2)
 
-                     [ "$VERBOSE" != no ] && log_end_msg 1
 
-                     EXIT=1
 
-                     ;;
 
-             esac
 
-             ;;
 
-         status)
 
-             status_of_proc -p "$PIDDIR/$INSTANCE.pid" "$SOFTFLOWD" "softflowd instance $INSTANCE" || EXIT=$?
 
-             ;;
 
-         restart|force-reload)
 
-             log_daemon_msg "Restarting $DESC" "$INSTANCE"
 
-             do_stop "$INSTANCE"
 
-             case "$?" in
 
-                 0|1)
 
-                     do_start "$INSTANCE" "$CONFIG"
 
-                     case "$?" in
 
-                         0)  log_end_msg 0 ;;
 
-                         *)
 
-                             # Old process is still running or
 
-                             # failed to start
 
-                             log_end_msg 1 ;;
 
-                     esac
 
-                     ;;
 
-                 *)
 
-                     # Failed to stop
 
-                     log_end_msg 1
 
-                     ;;
 
-                 esac
 
-             ;;
 
-         *)
 
-             echo "Usage: /etc/init.d/softflowd {start|stop|status|restart|force-reload} [<instance> ...]" >&2
 
-             exit 3
 
-             ;;
 
-     esac
 
- }
 
- ACTION="$1"
 
- shift
 
- if [ "$1" ] ; then
 
-     while [ "$1" ] ; do
 
-         CONFIG="/etc/softflowd/$1.conf"
 
-         if [ -f "$CONFIG" ] ; then
 
-             do_action "$CONFIG"
 
-         fi
 
-         shift
 
-     done
 
- else
 
-     for CONFIG in /etc/softflowd/*.conf ; do
 
-         if [ -f "$CONFIG" ] ; then
 
-             do_action "$CONFIG"
 
-         fi
 
-     done
 
- fi
 
- exit $EXIT
 
 
  |