1d89b0d9d745ce7ec33484da188663576e807bf5
[feed/packages.git] / net / mwan3 / files / usr / sbin / mwan3track
1 #!/bin/sh
2
3 [ -z "$12" ] && echo "Error: should not be started manually" && exit 0
4
5 if [ -e /var/run/mwan3track-$1.pid ] ; then
6 kill $(cat /var/run/mwan3track-$1.pid) &> /dev/null
7 rm /var/run/mwan3track-$1.pid &> /dev/null
8 fi
9
10 echo "$$" > /var/run/mwan3track-$1.pid
11
12 score=$(($7+$8))
13 track_ips=$(echo $* | cut -d ' ' -f 12-99)
14 host_up_count=0
15 lost=0
16 sleep_time=0
17
18 while true; do
19
20 sleep_time=$6
21
22 for track_ip in $track_ips; do
23 ping -I $2 -c $4 -W $5 -s $9 -q $track_ip &> /dev/null
24 if [ $? -eq 0 ]; then
25 let host_up_count++
26 else
27 let lost++
28 fi
29 done
30
31 if [ $host_up_count -lt $3 ]; then
32 let score--
33
34 if [ $score -lt $8 ]; then
35 score=0
36 else
37 sleep_time=$10
38 fi
39
40 if [ $score -eq $8 ]; then
41
42 logger -t mwan3track -p notice "Interface $1 ($2) is offline"
43 env -i ACTION=ifdown INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface
44 score=0
45
46 fi
47
48 else
49
50 if [ $score -lt $(($7+$8)) ] && [ $lost -gt 0 ]; then
51
52 logger -t mwan3track -p info "Lost $(($lost*$4)) ping(s) on interface $1 ($2)"
53
54 fi
55
56 let score++
57 lost=0
58
59 if [ $score -gt $8 ]; then
60 score=$(($7+$8))
61 elif [ $score -le $8 ]; then
62 sleep_time=$11
63 fi
64
65 if [ $score -eq $8 ]; then
66
67 logger -t mwan3track -p notice "Interface $1 ($2) is online"
68 env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface
69 rm /var/run/mwan3track-$1.pid
70 exit 0
71 fi
72 fi
73
74 host_up_count=0
75 sleep $sleep_time
76 done
77
78 exit 1