mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-15 03:51:51 +00:00
98 lines
4.1 KiB
Bash
Executable file
98 lines
4.1 KiB
Bash
Executable file
# vim: set ft=sh noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
|
|
|
|
SETROUTE=false
|
|
set_route() {
|
|
local multipath_config interface_gw interface_if
|
|
INTERFACE=$1
|
|
PREVINTERFACE=$2
|
|
multipath_config=$(uci -q get "network.$INTERFACE.multipath" || echo "off")
|
|
interface_if=$(uci -q get "network.$INTERFACE.ifname")
|
|
multipath_current_config=$(multipath $interface_if | grep deactivated)
|
|
if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then
|
|
#if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then
|
|
#if [ "$multipath_config" != "off" ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$SETROUTE" != true ]; then
|
|
interface_gw=$(uci -q get "network.$INTERFACE.gateway")
|
|
if [ -z $interface_gw ]; then
|
|
$interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n")
|
|
fi
|
|
if [ -z $interface_gw ]; then
|
|
$interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@.inactive.route[0].nexthop' | tr -d "\n")
|
|
fi
|
|
if [ "$interface_gw" != "" ]; then
|
|
_log "Replace default route by $interface_gw dev $interface_if"
|
|
ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
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"
|
|
ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
|
fi
|
|
}
|
|
|
|
del_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 "Remove server route via $OMR_TRACKER_DEVICE"
|
|
ip route delete $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
|
fi
|
|
}
|
|
|
|
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
|
|
|
|
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 [ "$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
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ]; then
|
|
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
|
_log "Tunnel up : Replace default route by $current_interface_gw dev $OMR_TRACKER_DEVICE"
|
|
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off")
|
|
if [ "$multipath_config" = "master" ]; then
|
|
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
|
if [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep tun)" = "" ]; then
|
|
_log "Master up : Replace default route by $current_interface_gw dev $OMR_TRACKER_DEVICE"
|
|
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
|
else
|
|
config_load shadowsocks-libev
|
|
config_foreach set_ss_route server
|
|
fi
|
|
fi
|
|
multipath_config="on"
|
|
fi
|
|
[ "$multipath_config" = "master" ] && [ "$multipath_status" = "on" ] && exit 0
|
|
[ "$multipath_status" = "$multipath_config" ] && exit 0
|
|
_log "Multipath $OMR_TRACKER_DEVICE switched to $multipath_config"
|
|
|
|
multipath "$OMR_TRACKER_DEVICE" "$multipath_config"
|