mirror of
https://github.com/AMS-IX/arpsponge.git
synced 2024-09-21 07:47:08 +00:00
Don't really run if DEBUG is set. Fail if FIFO
creation fails. Only create notify FIFO if requested.
This commit is contained in:
parent
22be746885
commit
7fb1ac767b
@ -27,151 +27,171 @@ SPONGE_OPTIONS="@SPONGE_OPTIONS@"
|
||||
# Program defaults
|
||||
export DUMMY_MODE INIT_MODE SPONGE_NETWORK LEARNING
|
||||
export QUEUE_DEPTH RATE PENDING SWEEP GRATUITOUS AGE
|
||||
export PROBERATE
|
||||
export PROBERATE NOTIFY
|
||||
|
||||
# Defaults for all sponges.
|
||||
if test -f /etc/default/${PROG}/defaults ; then
|
||||
. /etc/default/${PROG}/defaults
|
||||
. /etc/default/${PROG}/defaults
|
||||
fi
|
||||
|
||||
eval_bool() {
|
||||
var=$1
|
||||
case $var in
|
||||
[1-9]*|0[1-9]*|y|yes|true|on|Y|YES|TRUE|ON)
|
||||
true
|
||||
return;;
|
||||
*)
|
||||
false
|
||||
return;;
|
||||
esac
|
||||
var=$1
|
||||
case $var in
|
||||
[1-9]*|0[1-9]*|y|yes|true|on|Y|YES|TRUE|ON)
|
||||
true
|
||||
return;;
|
||||
*)
|
||||
false
|
||||
return;;
|
||||
esac
|
||||
}
|
||||
|
||||
fatal() {
|
||||
echo "** arpsponge init error:" $@ >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
start_sponge() {
|
||||
file=$1
|
||||
export file
|
||||
(
|
||||
DEVICE=$(basename $file)
|
||||
unset NETWORK
|
||||
. $file
|
||||
opts=''
|
||||
eval_bool ${DUMMY_MODE} && opts="$opts --dummy"
|
||||
eval_bool ${SPONGE_NETWORK} && opts="$opts --sponge-network"
|
||||
eval_bool ${GRATUITOUS} && opts="$opts --gratuitous"
|
||||
[ -n "${INIT_MODE}" ] && opts="$opts --init=${INIT_MODE}"
|
||||
[ -n "${LEARNING}" ] && opts="$opts --learning=${LEARNING}"
|
||||
[ -n "${QUEUE_DEPTH}" ] && opts="$opts --queuedepth=${QUEUE_DEPTH}"
|
||||
[ -n "${RATE}" ] && opts="$opts --rate=${RATE}"
|
||||
[ -n "${PENDING}" ] && opts="$opts --pending=${PENDING}"
|
||||
[ -n "${SWEEP}" ] && opts="$opts --sweep=${SWEEP}"
|
||||
[ -n "${PROBERATE}" ] && opts="$opts --proberate=${PROBERATE}"
|
||||
[ -n "${AGE}" ] && opts="$opts --age=${AGE}"
|
||||
file=$1
|
||||
export file
|
||||
(
|
||||
DEVICE=$(basename $file)
|
||||
unset NETWORK
|
||||
. $file
|
||||
|
||||
if [ ! -n "${DEVICE}" ]
|
||||
then
|
||||
echo "** arpsponge init error: $file: no device specified">&2
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -n "${NETWORK}" ]
|
||||
then
|
||||
echo "** arpsponge init error: $file ($DEVICE): no network specified">&2
|
||||
exit 1
|
||||
fi
|
||||
notify="${SPONGE_VAR}/${DEVICE}/notify"
|
||||
status="${SPONGE_VAR}/${DEVICE}/status"
|
||||
pidfile="${SPONGE_VAR}/${DEVICE}/pid"
|
||||
|
||||
notify="${SPONGE_VAR}/${DEVICE}/notify"
|
||||
status="${SPONGE_VAR}/${DEVICE}/status"
|
||||
pidfile="${SPONGE_VAR}/${DEVICE}/pid"
|
||||
opts=''
|
||||
eval_bool ${NOTIFY} && opts="$opts --notify ${notify}"
|
||||
eval_bool ${DUMMY_MODE} && opts="$opts --dummy"
|
||||
eval_bool ${SPONGE_NETWORK} && opts="$opts --sponge-network"
|
||||
eval_bool ${GRATUITOUS} && opts="$opts --gratuitous"
|
||||
[ -n "${INIT_MODE}" ] && opts="$opts --init=${INIT_MODE}"
|
||||
[ -n "${LEARNING}" ] && opts="$opts --learning=${LEARNING}"
|
||||
[ -n "${QUEUE_DEPTH}" ] && opts="$opts --queuedepth=${QUEUE_DEPTH}"
|
||||
[ -n "${RATE}" ] && opts="$opts --rate=${RATE}"
|
||||
[ -n "${PENDING}" ] && opts="$opts --pending=${PENDING}"
|
||||
[ -n "${SWEEP}" ] && opts="$opts --sweep=${SWEEP}"
|
||||
[ -n "${PROBERATE}" ] && opts="$opts --proberate=${PROBERATE}"
|
||||
[ -n "${AGE}" ] && opts="$opts --age=${AGE}"
|
||||
|
||||
if eval_bool $SPONGE_DEBUG
|
||||
then
|
||||
echo ${BINDIR}/${PROG} ${opts} --daemon="${pidfile}" \
|
||||
--notify="${notify}" --statusfile="${status}" \
|
||||
${NETWORK} dev "${DEVICE}"
|
||||
else
|
||||
mkdir -p "${SPONGE_VAR}/${DEVICE}"
|
||||
if [ ! -n "${DEVICE}" ]
|
||||
then
|
||||
fatal "$file: no device specified"
|
||||
fi
|
||||
if [ ! -n "${NETWORK}" ]
|
||||
then
|
||||
fatal "$file ($DEVICE): no network specified"
|
||||
fi
|
||||
|
||||
# Create notification FIFO...
|
||||
[ -p "${notify}" ] || /usr/bin/mkfifo --mode=644 "${notify}"
|
||||
if eval_bool $SPONGE_DEBUG
|
||||
then
|
||||
echo "** DEBUG MODE:"
|
||||
echo "** command line:"
|
||||
echo "----"
|
||||
echo ${BINDIR}/${PROG} ${opts} \
|
||||
--daemon="${pidfile}" \
|
||||
--statusfile="${status}" \
|
||||
${NETWORK} dev "${DEVICE}"
|
||||
echo "----"
|
||||
echo "** DEBUG MODE: not executing"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
printf " %-10s " "${DEVICE}"
|
||||
mkdir -p "${SPONGE_VAR}/${DEVICE}"
|
||||
|
||||
${BINDIR}/${PROG} ${opts} --daemon="${pidfile}" \
|
||||
--notify="${notify}" --statusfile="${status}" \
|
||||
${NETWORK} dev "${DEVICE}" 2>/dev/null
|
||||
|
||||
[ $? -eq 0 ] && echo "[Ok]" || echo "[FAILED]"
|
||||
fi
|
||||
)
|
||||
if eval_bool ${NOTIFY}
|
||||
then
|
||||
# Create notification FIFO...
|
||||
if [ ! -p "${notify}" ]; then
|
||||
if ! /usr/bin/mkfifo --mode=644 "${notify}"; then
|
||||
fatal "cannot create ${notify} fifo"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
printf " %-10s " "${DEVICE}"
|
||||
|
||||
${BINDIR}/${PROG} ${opts} \
|
||||
--daemon="${pidfile}" \
|
||||
--statusfile="${status}" \
|
||||
${NETWORK} dev "${DEVICE}" 2>/dev/null
|
||||
|
||||
[ $? -eq 0 ] && echo "[Ok]" || echo "[FAILED]"
|
||||
)
|
||||
}
|
||||
|
||||
start() {
|
||||
SPONGES=`/bin/ls -1 /etc/default/${PROG}/eth* 2>/dev/null`
|
||||
if [ -n "${SPONGES}" ]
|
||||
then
|
||||
echo "Starting ${PROG}(s):"
|
||||
for file in ${SPONGES}
|
||||
do
|
||||
start_sponge ${file}
|
||||
done
|
||||
fi
|
||||
SPONGES=`/bin/ls -1 /etc/default/${PROG}/eth* 2>/dev/null`
|
||||
if [ -n "${SPONGES}" ]
|
||||
then
|
||||
echo "Starting ${PROG}(s):"
|
||||
for file in ${SPONGES}
|
||||
do
|
||||
start_sponge ${file}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo "Stopping ${PROG}(s):"
|
||||
pidfiles=`ls ${SPONGE_VAR}/*/pid 2>/dev/null`
|
||||
for pf in ${pidfiles}
|
||||
do
|
||||
pid=$(cat ${pf})
|
||||
iface=$(basename $(dirname ${pf}))
|
||||
printf " interface=%-10s pid=%-6s " ${iface} ${pid}
|
||||
kill -TERM ${pid}
|
||||
sleep 1
|
||||
if ps -p ${pid} > /dev/null 2>&1
|
||||
then
|
||||
kill -KILL ${pid}
|
||||
echo KILLED
|
||||
else
|
||||
echo terminated
|
||||
fi
|
||||
/bin/rm -f ${SPONGE_VAR}/${iface}/notify
|
||||
done
|
||||
echo "Stopping ${PROG}(s):"
|
||||
pidfiles=`ls ${SPONGE_VAR}/*/pid 2>/dev/null`
|
||||
for pf in ${pidfiles}
|
||||
do
|
||||
pid=$(cat ${pf})
|
||||
iface=$(basename $(dirname ${pf}))
|
||||
printf " interface=%-10s pid=%-6s " ${iface} ${pid}
|
||||
kill -TERM ${pid}
|
||||
sleep 1
|
||||
if ps -p ${pid} > /dev/null 2>&1
|
||||
then
|
||||
kill -KILL ${pid}
|
||||
echo KILLED
|
||||
else
|
||||
echo terminated
|
||||
fi
|
||||
/bin/rm -f ${SPONGE_VAR}/${iface}/notify
|
||||
done
|
||||
}
|
||||
|
||||
status() {
|
||||
if [ "X$1" = "Xre-init" ]
|
||||
then
|
||||
echo "Saving state:"
|
||||
else
|
||||
echo "Dumping status:"
|
||||
fi
|
||||
pidfiles=`ls ${SPONGE_VAR}/*/pid 2>/dev/null`
|
||||
for pf in ${pidfiles}
|
||||
do
|
||||
pid=$(cat ${pf})
|
||||
iface=$(basename $(dirname ${pf}))
|
||||
printf " interface=%-10s pid=%-6s " ${iface} ${pid}
|
||||
kill -USR1 ${pid} 2>/dev/null && echo "[Ok]" || echo "[FAILED]"
|
||||
done
|
||||
if [ "X$1" = "Xre-init" ]
|
||||
then
|
||||
echo "Saving state:"
|
||||
else
|
||||
echo "Dumping status:"
|
||||
fi
|
||||
pidfiles=`ls ${SPONGE_VAR}/*/pid 2>/dev/null`
|
||||
for pf in ${pidfiles}
|
||||
do
|
||||
pid=$(cat ${pf})
|
||||
iface=$(basename $(dirname ${pf}))
|
||||
printf " interface=%-10s pid=%-6s " ${iface} ${pid}
|
||||
kill -USR1 ${pid} 2>/dev/null && echo "[Ok]" || echo "[FAILED]"
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
restart|reload|force-reload)
|
||||
status re-init
|
||||
stop
|
||||
start re-init
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
|
||||
exit 1
|
||||
;;
|
||||
start)
|
||||
start
|
||||
;;
|
||||
restart|reload|force-reload)
|
||||
status re-init
|
||||
stop
|
||||
start re-init
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
Loading…
Reference in New Issue
Block a user