#!/bin/sh LOG="/usr/bin/logger -t $(basename "$0")[$$] -p" INTERFACE="" clean_up() { $LOG notice "Stopping mwan3track for interface \"${INTERFACE}\"" rm "/var/run/mwan3track-${INTERFACE}.pid" &> /dev/null exit 0 } main() { [ -z "$12" ] && echo "Error: should not be started manually" && exit 0 INTERFACE=$1 echo "$$" > /var/run/mwan3track-$1.pid trap clean_up SIGINT SIGTERM local score=$(($7+$8)) local track_ips=$(echo $* | cut -d ' ' -f 12-99) local host_up_count=0 local lost=0 local sleep_time=0 while true; do sleep_time=$6 for track_ip in $track_ips; do ping -I $2 -c $4 -W $5 -s $9 -q $track_ip &> /dev/null if [ $? -eq 0 ]; then let host_up_count++ else let lost++ fi done if [ $host_up_count -lt $3 ]; then let score-- if [ $score -lt $8 ]; then score=0 else sleep_time=$10 fi if [ $score -eq $8 ]; then $LOG notice "Interface $1 ($2) is offline" env -i ACTION=ifdown INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface score=0 fi else if [ $score -lt $(($7+$8)) ] && [ $lost -gt 0 ]; then $LOG info "Lost $(($lost*$4)) ping(s) on interface $1 ($2)" fi let score++ lost=0 if [ $score -gt $8 ]; then score=$(($7+$8)) elif [ $score -le $8 ]; then sleep_time=$11 fi if [ $score -eq $8 ]; then $LOG notice "Interface $1 ($2) is online" env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface rm /var/run/mwan3track-$1.pid exit 0 fi fi host_up_count=0 sleep $sleep_time done } main "$@"