diff --git a/net/mwan3/files/lib/mwan3/common.sh b/net/mwan3/files/lib/mwan3/common.sh index 953cd6665e..d3597aaf8c 100644 --- a/net/mwan3/files/lib/mwan3/common.sh +++ b/net/mwan3/files/lib/mwan3/common.sh @@ -94,28 +94,40 @@ readfile() { mwan3_get_mwan3track_status() { - local track_ips pid + local interface=$1 + local track_ips pid cmdline started mwan3_list_track_ips() { track_ips="$1 $track_ips" } - config_list_foreach "$1" track_ip mwan3_list_track_ips + config_list_foreach "$interface" track_ip mwan3_list_track_ips - if [ -n "$track_ips" ]; then - pid="$(pgrep -f "mwan3track $1$")" - if [ -n "$pid" ]; then - if [ "$(cat /proc/"$(pgrep -P $pid)"/cmdline)" = "sleep${MAX_SLEEP}" ]; then - tracking="paused" - else - tracking="active" - fi - else - tracking="down" - fi - else - tracking="disabled" + if [ -z "$track_ips" ]; then + echo "disabled" + return fi - echo "$tracking" + readfile pid $MWAN3TRACK_STATUS_DIR/$interface/PID 2>/dev/null + if [ -z "$pid" ]; then + echo "down" + return + fi + readfile cmdline /proc/$pid/cmdline 2>/dev/null + if [ $cmdline != "/bin/sh/usr/sbin/mwan3track${interface}" ]; then + echo "down" + return + fi + readfile started $MWAN3TRACK_STATUS_DIR/$interface/STARTED + case "$started" in + 0) + echo "paused" + ;; + 1) + echo "active" + ;; + *) + echo "down" + ;; + esac } mwan3_init() diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 340d792775..e30ad5fedd 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -36,7 +36,7 @@ if_up() { LOG info "Detect ifup event on interface ${INTERFACE} (${DEVICE})" IFDOWN_EVENT=0 IFUP_EVENT=1 - STARTED=1 + started stop_subprocs } @@ -164,7 +164,7 @@ connecting() { disabled() { STATUS='disabled' echo "disabled" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS - STARTED=0 + stopped } firstconnect() { @@ -187,7 +187,7 @@ firstconnect() { LOG debug "firstconnect: called on $INTERFACE/$true_iface ($DEVICE). Status is $STATUS. SRC_IP is $SRC_IP" - STARTED=1 + started if [ "$STATUS" = "offline" ]; then disconnected 1 else @@ -195,6 +195,16 @@ firstconnect() { fi } +stopped() { + STARTED=0 + echo 0 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED +} + +started() { + STARTED=1 + echo 1 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED +} + update_status() { local track_ip=$1 @@ -214,13 +224,13 @@ main() { INTERFACE=$1 STATUS="" - STARTED=0 + mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE + echo $$ > $MWAN3TRACK_STATUS_DIR/$INTERFACE/PID + stopped TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT mwan3_init - mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE - trap clean_up TERM trap if_down USR1 trap if_up USR2