mwan3: report an error code on status failure
authorAaron Goodman <aaronjg@stanford.edu>
Tue, 10 Nov 2020 13:51:07 +0000 (08:51 -0500)
committerAaron Goodman <aaronjg@stanford.edu>
Tue, 10 Nov 2020 13:51:07 +0000 (08:51 -0500)
Signed-off-by: Aaron Goodman <aaronjg@stanford.edu>
net/mwan3/files/lib/mwan3/mwan3.sh

index 5d200071a23d3a70b0201fd8bdb3618647d2cc8d..fcfda5b892e8be9ea140d4ee9ca4d1137f886e22 100644 (file)
@@ -1017,7 +1017,7 @@ mwan3_get_iface_hotplug_state() {
 
 mwan3_report_iface_status()
 {
-       local device result tracking IP IPT
+       local device result tracking IP IPT error
 
        mwan3_get_iface_id id "$1"
        network_get_device device "$1"
@@ -1036,11 +1036,23 @@ mwan3_report_iface_status()
 
        if [ -z "$id" ] || [ -z "$device" ]; then
                result="offline"
-       elif [ -n "$($IP rule | awk '$1 == "'$((id+1000)):'"')" ] && \
-                    [ -n "$($IP rule | awk '$1 == "'$((id+2000)):'"')" ] && \
-                    [ -n "$($IP rule | awk '$1 == "'$((id+3000)):'"')" ] && \
-                    [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] && \
-                    [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
+       else
+               error=0
+               [ -n "$($IP rule | awk '$1 == "'$((id+1000)):'"')" ] ||
+                       error=$((error+1))
+               [ -n "$($IP rule | awk '$1 == "'$((id+2000)):'"')" ] ||
+                       error=$((error+2))
+               [ -n "$($IP rule | awk '$1 == "'$((id+3000)):'"')" ] ||
+                       error=$((error+4))
+               [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] ||
+                       error=$((error+8))
+               [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ] ||
+                       error=$((error+16))
+       fi
+
+       if [ "$result" = "offline" ]; then
+               :
+       elif [ $error -eq 0 ]; then
                json_init
                json_add_string section interfaces
                json_add_string interface "$1"
@@ -1053,12 +1065,8 @@ mwan3_report_iface_status()
                online="$(printf '%02dh:%02dm:%02ds\n' $((online/3600)) $((online%3600/60)) $((online%60)))"
                uptime="$(printf '%02dh:%02dm:%02ds\n' $((uptime/3600)) $((uptime%3600/60)) $((uptime%60)))"
                result="$(mwan3_get_iface_hotplug_state $1) $online, uptime $uptime"
-       elif [ -n "$($IP rule | awk '$1 == "'$((id+1000)):'"')" ] || \
-                    [ -n "$($IP rule | awk '$1 == "'$((id+2000)):'"')" ] || \
-                    [ -n "$($IP rule | awk '$1 == "'$((id+3000)):'"')" ] || \
-                    [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] || \
-                    [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
-               result="error"
+       elif [ $error -gt 0 ] && [ $error -ne 31 ]; then
+               result="error (${error})"
        elif [ "$enabled" = "1" ]; then
                result="offline"
        else