diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 5e5c3c190..27de22a17 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -115,7 +115,11 @@ default_gw=$(ip route show default | grep -v metric | awk '/default/ {print $3}' if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then [ "$multipath_status" = "off" ] || { - _log "$OMR_TRACKER_DEVICE switched off because $OMR_TRACKER_STATUS_MSG" + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + _log "$OMR_TRACKER_DEVICE switched off" + else + _log "$OMR_TRACKER_DEVICE switched off because $OMR_TRACKER_STATUS_MSG" + fi if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then multipath "$OMR_TRACKER_DEVICE" off fi @@ -136,7 +140,11 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then config_foreach set_route interface $OMR_TRACKER_INTERFACE fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then - _log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG" + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + _log "$OMR_TRACKER_INTERFACE down" + else + _log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG" + fi config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE #config_load shadowsocks-libev diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 581b2b832..66627fb20 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -141,6 +141,7 @@ while true; do OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_LATENCY= OMR_TRACKER_TIMEOUT=$((rto / 1000 + (rto % 1000 ? 1 : 0))) + OMT_TRACKER_LIST_HOSTS="" if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then # retrieve iface ip and gateway @@ -164,49 +165,61 @@ while true; do # execute specific tracker if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - _ping "$OMR_TRACKER_DEVICE_GATEWAY" "$OMR_TRACKER_DEVICE_IP" "no" - status=$? - if $(exit $status); then - if [ "$OMR_TRACKER_TYPE" = "none" ]; then + # setup loop variable + tries="$OMR_TRACKER_TRIES" + # loop until tries attempts have been reached + while [ "$tries" -gt 0 ]; do + _ping "$OMR_TRACKER_DEVICE_GATEWAY" "$OMR_TRACKER_DEVICE_IP" "no" + status=$? + if $(exit $status) && [ "$OMR_TRACKER_TYPE" = "none" ]; then + OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" + break else - # setup loop variable - tries="$OMR_TRACKER_TRIES" - # loop until tries attempts have been reached - while [ "$tries" -gt 0 ]; do - # Check if route is not used - while ! ip route add $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP > /dev/null 2&>1 - do - sleep 1 - _restart - done - if [ "$OMR_TRACKER_TYPE" = "ping" ]; then - _ping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" - status=$? - elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then - _httping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" - status=$? - elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then - _dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" - status=$? - fi - ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2&>1 - if $(exit $status); then - OMR_TRACKER_STATUS_MSG="" - OMR_TRACKER_STATUS="OK" - break - else - OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_TYPE to $OMR_TRACKER_HOST from $OMR_TRACKER_DEVICE_IP error" - fi - tries=$((tries - 1)) - OMR_TRACKER_TIMEOUT=$((OMR_TRACKER_TIMEOUT * 2)) + if $(exit $status); then + OMR_TRACKER_STATUS_MSG="gateway down" + fi + # Check if route is not used + while ! ip route add $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP > /dev/null 2&>1 + do sleep 1 _restart done + if [ "$OMR_TRACKER_TYPE" = "ping" ]; then + _ping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then + _httping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then + _dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + fi + ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2&>1 + if $(exit $statusb); then + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + else + if [ "$OMR_TRACKER_LIST_HOSTS" = "" ]; then + OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST" + else + OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_LIST_HOSTS,$OMR_TRACKER_HOST" + fi + fi fi - else - OMR_TRACKER_STATUS_MSG="gateway down" - fi + tries=$((tries - 1)) + #OMR_TRACKER_TIMEOUT=$((OMR_TRACKER_TIMEOUT * 2)) + _restart + done + fi + fi + + if [ "$OMR_TRACKER_LIST_HOSTS" != "" ]; then + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS)" + else + OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG and $OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS)" fi fi