mwan3: only send disconnected event if interface was connected before
authorFlorian Eckert <fe@dev.tdt.de>
Wed, 8 Sep 2021 09:33:55 +0000 (11:33 +0200)
committerFlorian Eckert <fe@dev.tdt.de>
Mon, 17 Oct 2022 13:17:31 +0000 (15:17 +0200)
Up to now on every interface down event a mwan3 disconnected event was
send. This is wrong because if the interface was never connected, then a
disconnected event should not get generated. This commit fixes this bug.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
net/mwan3/files/usr/sbin/mwan3track

index 2c535d59ffe2a00975da1c805ac7b8d97cb525df..89654f86ba05658cd23a6ab1008c8a48a137f1b5 100755 (executable)
@@ -105,14 +105,22 @@ validate_wrap() {
 }
 
 disconnected() {
+       local status="$(cat ${MWAN3TRACK_STATUS_DIR}/${INTERFACE}/STATUS)"
+
        STATUS='offline'
        echo "offline" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
        get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/OFFLINE
        echo "0" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/ONLINE
        score=0
        [ "$1" = 1 ] && return
-       LOG notice "Interface $INTERFACE ($DEVICE) is offline"
-       env -i ACTION="disconnected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+
+       # Only execute disconnectd action if status was online or disconnecting
+       if [ "$status" = "online" ] || [ "$status" = "disconnecting" ]; then
+               LOG notice "Interface $INTERFACE ($DEVICE) is offline"
+               env -i ACTION="disconnected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       else
+               LOG notice "Skip disconnected event for $INTERFACE ($DEVICE)"
+       fi
 }
 
 connected() {
@@ -391,8 +399,8 @@ main() {
 
                if [ "${IFDOWN_EVENT}" -eq 1 ]; then
                        LOG debug "Register ifdown event on interface ${INTERFACE} (${DEVICE})"
-                       disabled
                        disconnected
+                       disabled
                        IFDOWN_EVENT=0
                fi
                if [ "${IFUP_EVENT}" -eq 1 ]; then