#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=arpwatch DAEMON=/usr/sbin/$NAME DESC="Ethernet/FDDI station monitor daemon" DATADIR=/var/lib/$NAME RETVAL=0 . /etc/init.d/functions ### You shouldn't touch anything below unless you know what you are doing. [ -f /etc/default/arpwatch ] && . /etc/default/arpwatch # Decide whether we have to deal with multiple interfaces. CONF=/etc/arpwatch.conf MULTIPLE=0 if [ -r $CONF ]; then grep -c '^[a-z]' $CONF 2>&1 >/dev/null && MULTIPLE=1 fi # Check whether we have to drop privileges. if [ -n "$RUNAS" ]; then if getent passwd "$RUNAS" >/dev/null; then ARGS="-u ${RUNAS} $ARGS" else RUNAS="" fi fi start_instance () { IFACE=$1 INSTANCE=${NAME}-${IFACE} DATAFILE=$DATADIR/${IFACE}.dat IFACE_OPTS="-P /var/run/${INSTANCE}.pid -i ${IFACE} -f ${DATAFILE} $2" echo -n "Starting $DESC: " if [ ! -f $DATAFILE ]; then echo -n "(creating $DATAFILE) " :> $DATAFILE fi if [ -n "$RUNAS" ]; then echo -n "(chown $RUNAS $DATAFILE) " chown $RUNAS $DATAFILE fi start-stop-daemon --start --quiet \ --pidfile /var/run/${INSTANCE}.pid \ --exec $DAEMON -- $IFACE_OPTS $ARGS echo "${INSTANCE}." ps h -C $NAME -o pid,args | \ awk "/$IFACE/ { print \$1 }" > /var/run/${INSTANCE}.pid } stop_instance () { IFACE=$1 INSTANCE=${NAME}-${IFACE} [ -f /var/run/${INSTANCE}.pid ] || return 0 echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --oknodo \ --pidfile /var/run/${INSTANCE}.pid echo "${INSTANCE}." rm -f /var/run/${INSTANCE}.pid } process_loop_break_line () { __IFACE=$1 shift __IOPTS="$@" } process_loop () { OPERATION=$1 grep '^[a-z]' $CONF 2>/dev/null | \ while read LINE do process_loop_break_line $LINE I=$__IFACE I_OPTS="$__IOPTS" $OPERATION $I "$I_OPTS" done } startup () { process_loop start_instance } shutdown () { process_loop stop_instance } case "$1" in start) startup ;; stop) shutdown ;; reload) echo "Reload operation not supported -- use restart." RETVAL=2 ;; restart|force-reload) # # If the "reload" option is implemented, move the "force-reload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # shutdown sleep 1 startup ;; status) status_of_proc $DAEMON $NAME ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload}" >&2 RETVAL=2 ;; esac exit $RETVAL