5 LOG
="logger -t $(basename "$0")[$$] -p"
12 $LOG notice
"Stopping mwan3track for interface \"${INTERFACE}\""
13 if [ "$(pgrep -f "mwan3track
${INTERFACE}")" = "" ]; then
14 rm -rf "/var/run/mwan3track/${INTERFACE}" &> /dev
/null
16 if [ -z "$(ls -A "/var
/run
/mwan3track
")" ]; then
17 rm -rf "/var/run/mwan3track"
23 $LOG info
"Detect ifdown event on interface ${INTERFACE} (${DEVICE})"
27 validate_track_method
() {
30 # Assume that ping is installed
33 which arping
1>/dev
/null
2>&1 ||
{
34 $LOG warn
"Missing arping. Please install iputils-arping package."
39 which httping
1>/dev
/null
2>&1 ||
{
40 $LOG warn
"Missing httping. Please install httping package."
45 $LOG warn
"Unsupported tracking method: $track_method"
52 local reliability count timeout interval failure_interval
53 local recovery_interval down up size
55 [ -z "$3" ] && echo "Error: should not be started manually" && exit 0
59 mkdir
-p /var
/run
/mwan3track
/$1
60 trap clean_up SIGINT SIGTERM
64 config_get track_method
$1 track_method
ping
65 validate_track_method
$track_method ||
{
66 $LOG warn
"Using ping to track interface $INTERFACE avaliability"
69 config_get reliability
$1 reliability
1
70 config_get count
$1 count
1
71 config_get timeout
$1 timeout
4
72 config_get interval
$1 interval
10
73 config_get down
$1 down
5
75 config_get size
$1 size
56
76 config_get failure_interval
$1 failure_interval
$interval
77 config_get recovery_interval
$1 recovery_interval
$interval
79 local score
=$
(($down+$up))
80 local track_ips
=$
(echo $
* | cut
-d ' ' -f 4-99)
86 echo "offline" > /var
/run
/mwan3track
/$1/STATUS
91 for track_ip
in $track_ips; do
92 case "$track_method" in
94 ping -I $2 -c $count -W $timeout -s $size -q $track_ip &> /dev
/null
;;
96 arping
-I $2 -c $count -w $timeout -q $track_ip &> /dev
/null
;;
98 httping
-y $3 -c $count -t $timeout -q $track_ip &> /dev
/null
;;
100 if [ $?
-eq 0 ]; then
102 echo "up" > /var
/run
/mwan3track
/$1/TRACK_
${track_ip}
105 echo "down" > /var
/run
/mwan3track
/$1/TRACK_
${track_ip}
109 if [ $host_up_count -lt $reliability ]; then
112 if [ $score -lt $up ]; then
115 sleep_time
=$failure_interval
118 if [ $score -eq $up ]; then
119 echo "offline" > /var
/run
/mwan3track
/$1/STATUS
120 $LOG notice
"Interface $1 ($2) is offline"
121 env
-i ACTION
=ifdown INTERFACE
=$1 DEVICE
=$2 /sbin
/hotplug-call iface
125 if [ $score -lt $
(($down+$up)) ] && [ $lost -gt 0 ]; then
126 $LOG info
"Lost $(($lost*$count)) ping(s) on interface $1 ($2)"
132 if [ $score -gt $up ]; then
133 echo "online" > /var
/run
/mwan3track
/$1/STATUS
135 elif [ $score -le $up ]; then
136 sleep_time
=$recovery_interval
139 if [ $score -eq $up ]; then
140 $LOG notice
"Interface $1 ($2) is online"
141 env
-i ACTION
=ifup INTERFACE
=$1 DEVICE
=$2 /sbin
/hotplug-call iface
142 rm -rf "/var/run/mwan3track/${1}" &> /dev
/null
148 mkdir
-p "/var/run/mwan3track/${1}"
149 echo "${lost}" > /var
/run
/mwan3track
/$1/LOST
150 echo "${score}" > /var
/run
/mwan3track
/$1/SCORE
151 echo "${turn}" > /var
/run
/mwan3track
/$1/TURN
154 sleep "${sleep_time}" &
157 if [ "${IFDOWN_EVENT}" -eq 1 ]; then
159 echo "offline" > /var
/run
/mwan3track
/$1/STATUS