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 227d5f982..86f186ee5 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -29,7 +29,7 @@ set_ss_route() { local server_ip config_get server_ip $1 server if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then - _log "Set server route via $OMR_TRACKER_DEVICE" + _log "Set server $server_ip route via $OMR_TRACKER_DEVICE" ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE fi } @@ -38,7 +38,7 @@ del_ss_route() { local server_ip config_get server_ip $1 server if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then - _log "Remove server route via $OMR_TRACKER_DEVICE" + _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" ip route delete $server_ip dev $OMR_TRACKER_DEVICE fi } @@ -47,26 +47,32 @@ sleep `expr $RANDOM % 10` # Get the current multipath status multipath_status="off" -case "$(multipath "$OMR_TRACKER_DEVICE")" in - *default*) multipath_status="on" ;; - *backup*) multipath_status="backup" ;; - *handover*) multipath_status="handover" ;; -esac +if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then + case "$(multipath "$OMR_TRACKER_DEVICE")" in + *default*) multipath_status="on" ;; + *backup*) multipath_status="backup" ;; + *handover*) multipath_status="handover" ;; + esac +fi default_gw=$(ip route show default | grep -v metric | awk '/default/ {print $3}') #current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") # An interface in error will never be used in MPTCP if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then - #[ "$multipath_status" = "off" ] && exit 0 - #_log "$OMR_TRACKER_DEVICE switched off" - multipath "$OMR_TRACKER_DEVICE" off + if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then + #[ "$multipath_status" = "off" ] && exit 0 + #_log "$OMR_TRACKER_DEVICE switched off" + multipath "$OMR_TRACKER_DEVICE" off + fi if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE fi - config_load shadowsocks-libev - config_foreach del_ss_route server + if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then + config_load shadowsocks-libev + config_foreach del_ss_route server + fi exit 0 fi