diff --git a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking deleted file mode 100755 index 90996fe58..000000000 --- a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking +++ /dev/null @@ -1,1350 +0,0 @@ -SETROUTE=false - -. /lib/functions/network.sh - -find_network_device() { - local device="${1}" - local device_section="" - - check_device() { - local cfg="${1}" - local device="${2}" - - local type name - config_get name "${cfg}" name - - [ "${name}" = "${device}" ] && device_section="${cfg}" - } - if [ ! -z "$device" ]; then - config_load network - config_foreach check_device device "$(uci -q network.${device}.device)" - fi - echo "${device_section}" -} - -set_route() { - local multipath_config_route interface_gw interface_if - INTERFACE=$1 - PREVINTERFACE=$2 - SETDEFAULT=$3 - [ -z "$SETDEFAULT" ] && SETDEFAULT="yes" - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "${INTERFACE}" | jsonfilter -q -e '@["device"]') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && [ "$SETDEFAULT" = "yes" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && [ "$SETDEFAULT" != "yes" ] && _log "$PREVINTERFACE down. Replace default in table 991337 route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip route replace default scope global metric 1 via $interface_gw dev $interface_if $initcwrwnd 2>&1 >/dev/null - ip route replace default via $interface_gw dev $interface_if table 991337 $initcwrwnd 2>&1 >/dev/null && SETROUTE=true - fi - fi -} - -set_route6() { - local multipath_config_route interface_gw interface_if - INTERFACE=$1 - PREVINTERFACE=$2 - SETDEFAULT=$3 - [ -z "$SETDEFAULT" ] && SETDEFAULT="yes" - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep ':')" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip -6 route replace default scope metric 1 global nexthop via $interface_gw dev $interface_if 2>&1 >/dev/null - ip -6 route replace default via $interface_gw dev $interface_if table 991337 2>&1 >/dev/null && SETROUTE=true - fi - fi -} - -set_server_default_route() { - local server=$1 - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - [ -z "$OMR_TRACKER_INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY" - if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then - ip r delete $serverip >/dev/null 2>&1 - fi - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 $initcwrwnd 2>&1 >/dev/null - fi - } - config_list_foreach $server ip server_route -} - -set_server_default_route6() { - local server=$1 - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - [ -z "$OMR_TRACKER_INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY6" - if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then - ip -6 r delete $serverip >/dev/null 2>&1 - fi - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 2>&1 >/dev/null - fi - } - config_list_foreach $server ip server_route -} - -delete_server_default_route() { - local server=$1 - delete_route() { - local serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - [ -n "$(ip route show $serverip metric 1)" ] && ip route del $serverip metric 1 >/dev/null 2>&1 - fi - } - config_list_foreach $server ip delete_route -} - -delete_server_default_route6() { - local server=$1 - delete_route() { - local serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - [ -n "$(ip -6 route show $serverip metric 1)" ] && ip -6 route del $serverip metric 1 >/dev/null 2>&1 - fi - } - config_list_foreach $server ip delete_route -} - -set_routes_intf() { - local multipath_config_route - local INTERFACE=$1 - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && ifname=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep 'deactivated') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - #if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$serverip" ] && [ "$(ip route show $serverip | grep $interface_if)" = "" ]; then - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -z "$(echo $interface_gw | grep :)" ]; then - if [ "$multipath_config_route" = "master" ]; then - weight=100 - else - weight=1 - fi - if [ "$multipath_config_route" = "backup" ]; then - nbintfb=$((nbintfb+1)) - if [ -z "$routesintfbackup" ]; then - routesintfbackup="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesintfbackup="$routesintfbackup nexthop via $interface_gw dev $interface_if weight $weight" - fi - else - nbintf=$((nbintf+1)) - if [ -z "$routesintf" ]; then - routesintf="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesintf="$routesintf nexthop via $interface_gw dev $interface_if weight $weight" - fi - fi - fi - fi -} - -set_routes_intf6() { - local multipath_config_route - local INTERFACE=$1 - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep 'deactivated') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.ip6gw)" - interface_ip6="$(uci -q get network.$INTERFACE.ip6)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - #if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$serverip" ] && [ "$(ip -6 route show $serverip | grep $interface_if)" = "" ]; then - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then - if [ "$multipath_config_route" = "master" ]; then - weight=100 - else - weight=1 - fi - if [ "$multipath_config_route" = "backup" ]; then - nbintfb6=$((nbintfb6+1)) - if [ -z "$routesintfbackup6" ]; then - routesintfbackup6="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesintfbackup6="$routesintfbackup6 nexthop via $interface_gw dev $interface_if weight $weight" - fi - else - nbintf6=$((nbintf6+1)) - if [ -z "$routesintf6" ]; then - routesintf6="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesintf6="$routesintf6 nexthop via $interface_gw dev $interface_if weight $weight" - fi - fi - fi - fi -} - -set_route_balancing() { - local multipath_config_route interface_gw interface_if - INTERFACE=$1 - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then - if [ "$(uci -q get network.$INTERFACE.weight)" != "" ]; then - weight=$(uci -q get network.$INTERFACE.weight) - elif [ "$(uci -q get openmtpcprouter.$INTERFACE.weight)" != "" ]; then - weight=$(uci -q get openmtpcprouter.$INTERFACE.weight) - elif [ "$multipath_config_route" = "master" ]; then - weight=100 - else - weight=1 - fi - if [ "$multipath_config_route" = "backup" ]; then - nbintfb=$((nbintfb+1)) - if [ -z "$routesbalancingbackup" ]; then - routesbalancingbackup="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesbalancingbackup="$routesbalancingbackup nexthop via $interface_gw dev $interface_if weight $weight" - fi - else - nbintf=$((nbintf+1)) - if [ -z "$routesbalancing" ]; then - routesbalancing="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesbalancing="$routesbalancing nexthop via $interface_gw dev $interface_if weight $weight" - fi - fi - fi - fi -} - -set_route_balancing6() { - local multipath_config_route interface_gw interface_if - INTERFACE=$1 - [ -z "$INTERFACE" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') - interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") - interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" - interface_ip6="$(uci -q get network.$INTERFACE.ip6)" - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop" | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") - fi - if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") - fi - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then - if [ "$(uci -q get network.$INTERFACE.weight)" != "" ]; then - weight=$(uci -q get network.$INTERFACE.weight) - elif [ "$(uci -q get openmtpcprouter.$INTERFACE.weight)" != "" ]; then - weight=$(uci -q get openmtpcprouter.$INTERFACE.weight) - elif [ "$multipath_config_route" = "master" ]; then - weight=100 - else - weight=1 - fi - if [ "$multipath_config_route" = "backup" ]; then - nbintfb6=$((nbintfb6+1)) - if [ -z "$routesbalancingbackup6" ]; then - routesbalancingbackup6="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesbalancingbackup6="$routesbalancingbackup6 nexthop via $interface_gw dev $interface_if weight $weight" - fi - else - nbintf6=$((nbintf6+1)) - if [ -z "$routesbalancing6" ]; then - routesbalancing6="nexthop via $interface_gw dev $interface_if weight $weight" - else - routesbalancing6="$routesbalancing6 nexthop via $interface_gw dev $interface_if weight $weight" - fi - fi - fi - fi -} - -set_server_all_routes() { - local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then - routesintf="" - routesintfbackup="" - nbintf=0 - nbintfb=0 - config_load network - config_foreach set_routes_intf interface - uintf="$(echo $routesintf | awk '{print $5}')" - uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintf | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then - while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do - ip r del $serverip - done - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip route replace $serverip scope global metric 1 $routesintf 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" - fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintfbackup | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" - ip route replace $serverip scope global metric 999 $routesintfbackup 2>&1 >/dev/null - fi - fi - } - config_load openmptcprouter - config_list_foreach $server ip server_route -} - -set_server_all_routes6() { - local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then - routesintf="" - routesintfbackup="" - nbintf6=0 - nbintfb6=0 - config_load network - config_foreach set_routes_intf6 interface - uintf="$(echo $routesintf6 | awk '{print $5}')" - uintfb="$(echo $routesintfbackup6 | awk '{print $5}')" - if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 1 | tr -d '\t' | sort | tr -d '\n' | sed 's/ *$//')" != "$(echo $serverip $routesintf6 | sort | sed 's/ *$//')" ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then - while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do - ip -6 r del $serverip - done - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6" - ip -6 route replace $serverip scope global metric 1 $routesintf6 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" - fi - if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" - ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 2>&1 >/dev/null - fi - fi - } - config_load openmptcprouter - config_list_foreach $server ip server_route -} - - - -set_server_route() { - local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - local metric=$2 - [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep "deactivated") - interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") - #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then - if [ "$serverip" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd 2>&1 >/dev/null - fi - } - config_list_foreach $server ip server_route - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$metric" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd 2>&1 >/dev/null - fi -} - -set_server_route6() { - local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return - server_route() { - local serverip multipath_config_route - serverip=$1 - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - local metric=$2 - [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep "deactivated") - interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") - #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null - fi - } - config_list_foreach $server ip server_route - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null - fi -} - -del_server_route() { - local server=$1 - remove_route() { - local serverip="$1" - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route to $serverip dev $OMR_TRACKER_DEVICE" - local metric - if [ -z "$OMR_TRACKER_INTERFACE" ]; then - metric=0 - else - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - fi - [ -n "$metric" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip | grep $OMR_TRACKER_DEVICE)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - } - config_list_foreach $server ip remove_route - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - [ -n "$(ip route show default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE)" ] && ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - elif [ -n "$OMR_TRACKER_DEVICE" ]; then - [ -n "$(ip route show default dev $OMR_TRACKER_DEVICE)" ] && ip route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - fi -} - -del_server_route6() { - local server=$1 - remove_route() { - local serverip="$1" - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route to $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" - local metric - if [ -z "$OMR_TRACKER_INTERFACE" ]; then - metric=0 - else - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - fi - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$serverip" ] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$serverip" ] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - } - config_list_foreach $server ip remove_route - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - [ -n "$(ip -6 route show default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - elif [ -n "$OMR_TRACKER_DEVICE" ]; then - [ -n "$(ip -6 route show default dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - fi -} - -disable_pihole() { - local server=$1 - if [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '#53' | grep '10.255.25')" ]; then - _log "Disable Pi-Hole..." - uci -q del_list dhcp.@dnsmasq[0].server="$(uci -q get dhcp.@dnsmasq[0].server | tr ' ' '\n' | grep '#53' | grep '10.255.25')" - if [ -z "$(uci -q get dhcp.@dnsmasq[0].server | grep '127.0.0.1#5353')" ]; then - uci -q batch <<-EOF >/dev/null - add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353' - commit dhcp - EOF - fi - /etc/init.d/dnsmasq restart 2>&1 >/dev/null - fi -} - -enable_pihole() { - local server=$1 - nbserver=$((nbserver+1)) - if [ -n "$server" ] && [ "$(uci -q get openmptcprouter.${server}.pihole)" = "1" ] && [ "$(uci -q get dhcp.@dnsmasq[0].server | grep '127.0.0.1#5353')" != "" ]; then - piholeenabled=$((piholeenabled+1)) - fi -} - -dns_flush() { - unbound-control flush-negative >/dev/null 2>&1 - unbound-control flush-bogus >/dev/null 2>&1 -} - -#if [ -n "$RANDOM" ]; then -# sleep `expr $RANDOM % 10` -#else -# sleep `awk 'BEGIN{srand();print int(rand()*9)}'` -#fi - -# Get the current multipath status -multipath_status="off" -[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null -[ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null -if [ -e "/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 | awk '/default/ {print $3}') -#default_gw6=$(ip -6 route show default | awk '/default/ {print $3}') -default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') -default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') -#current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") - -initcwrwnd="" -interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then - metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then - _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - exit 0 - fi -fi - -# An interface in error will never be used in MPTCP -if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]); then - interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') - interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') - interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') - interface_error=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["errors"][0].code') - - #if [ "$interface_available" = "true" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]) && [ "$interface_error" != "MM_PINCODE_REQUIRED" ] && [ "$interface_error" != "MM_FAILED_REASON_SIM_MISSING" ]; then - #if [ "$interface_available" = "true" ] && [ "$interface_up" = "false" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]); then - # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" - # _log "Set $OMR_TRACKER_INTERFACE down" - # ifdown $OMR_TRACKER_INTERFACE - # sleep 5 - # _log "Set $OMR_TRACKER_INTERFACE up" - # ifup $OMR_TRACKER_INTERFACE - # sleep 30 - #if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_up" = "false" ] && [ "$interface_available" = "false" ] && [ "$interface_pending" = "false" ] && [ "$interface_autostart" = "true" ]; then - if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ]; then - modemfind="0" - device="$(uci -q get network.$OMR_TRACKER_INTERFACE.device)" - . /usr/share/ModemManager/modemmanager.common - [ -n "$device" ] && MODEM_STATUS="$(timeout 3 mmcli -m $device -K)" - modem=$device - if [ -n "$MODEM_STATUS" ]; then - modemfind="1" - mm_state=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state") - if [ "$mm_state" = "failed" ]; then - mm_state_failed=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state-failed-reason") - if [ "$mm_state_failed" = "unknown-capabilities" ]; then - _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null - sleep 30 - elif false && [ "$mm_state_failed" = "sim-missing" ]; then - _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null - #_log "Interface $OMR_TRACKER_INTERFACE in failed state sim-missing in ModemManager, reset modem..." - #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") - #mbimcli -p -d /dev/$mm_primary_port --ms-device-reset 2>&1 >/dev/null - fi - elif [ "$mm_state" = "connected" ] || [ "$mm_state" = "enabled" ]; then - _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" - _log "Set $OMR_TRACKER_INTERFACE down" - ifdown $OMR_TRACKER_INTERFACE - sleep 5 - _log "Set $OMR_TRACKER_INTERFACE up" - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "disabled" ]; then - # [ -n "$(echo $modeminfo | grep 'modem.3gpp.registration-state ' | grep home)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) disabled, set it up" - /usr/bin/mmcli -m ${modem} -e 2>&1 >/dev/null - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "registered" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) registered, set it up" - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "locked" ]; then - mm_unlock_required=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.unlock-required") - mm_generic_sim=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.sim") - #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") - #mm_drivers=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.drivers") - mm_unlock_retries=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.unlock-retries" | awk '{print substr($2,2,length($2)-2)}') - if [ "$mm_unlock_required" = "sim-pin" ]; then - # Sometimes PIN is not correctly sent to modem - if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - if [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PIN" - mmcli -a -m ${modem} -i $mm_generic_sim --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null - sleep 20 - ifup $OMR_TRACKER_INTERFACE - fi - fi - elif [ "$mm_unlock_required" = "sim-puk" ] && [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode)" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PUK" - mmcli -i $mm_generic_sim --puk=$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode) --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null - sleep 30 - fi - fi - fi - if [ "$modemfind" = "0" ]; then - #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, rescan modem..." - #/usr/bin/mmcli -S 2>&1 >/dev/null - #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, restart modemmanager..." - _log "Can't find $OMR_TRACKER_INTERFACE in ModemManager" - #/etc/init.d/modemmanager restart - sleep 30 - fi - fi - #elif [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_available" = "false" ]; then - # for modem in $(timeout 3 mmcli -L | awk -F/ '{ print $6}' | awk '{print $1}'); do - # if [ -n "$(timeout 2 mmcli -m $modem -K | grep $OMR_TRACKER_DEVICE)" ]; then - # modem_device=$(timeout 2 mmcli -m $modem -K | grep 'modem.generic.device ' | awk '{print $3}') - # [ -n "$modem_device" ] && modem_interface=$(uci -q show network | grep $modem_device | awk -F. '{print $2}') - # [ -n "$modem_interface" ] && { - # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart associed interface $modem_interface" - # ifdown $modem_interface - # sleep 5 - # ifup $modem_interface - # sleep 30 - # } - # fi - # done - #fi - - # This part must be done after modems restart because we have no idea when modems will be ready again... (another solution would be to check ModemManager status) - if [ "$OMR_TRACKER_PREV_STATUS" = "$OMR_TRACKER_STATUS" ]; then - exit 0 - fi - - if [ "$multipath_status" != "off" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ]); then - if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then - _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off (interface up status: $interface_up - Tracker status: $OMR_TRACKER_STATUS)" - else - _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off because $OMR_TRACKER_STATUS_MSG" - fi - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='down' - fi - #if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then - # multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1 - #fi - if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1 - fi - if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1 - fi - if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ] && [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ]; then - VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)" - VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") - if [ -n "$VPN_BASE_INTF" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.$VPN_BASE_INTF.local=$VPN_BASE_INTF_IP - commit openvpn - EOF - fi - [ -z "VPN_BASE_INTF" ] && VPN_BASE_INTF="omr" - /etc/init.d/openvpn restart $VPN_BASE_INTF 2>&1 >/dev/null - fi - config_load openmptcprouter - config_foreach del_server_route server - config_foreach del_server_route6 server - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New routes $(ip r)" - elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" - elif [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$(ip r show table 991337 | grep "$OMR_TRACKER_DEVICE ")" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" - fi - fi - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route (current: $(ip r) )" - config_foreach set_server_all_routes server - config_foreach set_server_all_routes6 server - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route done (new: $(ip r) )" - fi - fi - - mail_alert="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" - fi - [ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" - [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { - OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" - if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then - mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" - mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" - mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) - else - echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nConnection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) - fi - } - script_alert_down="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - script_alert_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_down)" - fi - [ -n "$script_alert_down" ] && eval $script_alert_down - - restart_down="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - restart_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.restart_down)" - fi - [ -z "$restart_down" ] && restart_down="$(uci -q get omr-tracker.defaults.restart_down)" - [ "$restart_down" = "1" ] && { - _log "Restart $OMR_TRACKER_INTERFACE" - ifdown $OMR_TRACKER_INTERFACE 2>&1 >/dev/null - sleep 5 - ifup $OMR_TRACKER_INTERFACE 2>&1 >/dev/null - } - - if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then - if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then - _log "$OMR_TRACKER_INTERFACE down" - else - _log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG" - fi - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE - else - _log "Default gateway disabled, no default gateway set" - fi - if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi1.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then - _log "Tunnel down use ShadowSocks for UDP" - uci -q set shadowsocks-libev.ss_rules.redir_udp='hi1' - if /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev rules_down 2>&1 >/dev/null - /etc/init.d/shadowsocks-libev rules_up 2>&1 >/dev/null - fi - fi - if [ "$(uci -q get dsvpn.vpn.enable)" = "1" ]; then - _log "DSVPN down, restart it" - /etc/init.d/dsvpn restart 2>&1 >/dev/null - fi - if [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then - _log "MLVPN down, restart it" - /etc/init.d/mlvpn restart 2>&1 >/dev/null - fi - if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then - _log "Glorytun VPN down, restart it" - /etc/init.d/glorytun restart 2>&1 >/dev/null - fi - if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then - _log "Glorytun UDP VPN down, restart it" - /etc/init.d/glorytun-udp restart 2>&1 >/dev/null - fi - if [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then - _log "OpenVPN down, restart it" - /etc/init.d/openvpn restart omr 2>&1 >/dev/null - fi - config_load openmptcprouter - config_foreach disable_pihole server - #if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then - config_foreach set_server_default_route server - config_foreach set_server_default_route6 server - fi - fi - dns_flush - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc - fi - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - #ubus call network reload - - # Set a little sleep after an interface error -# if [ -n "$RANDOM" ]; then -# sleep `expr $RANDOM % 100` -# else -# sleep `awk 'BEGIN{srand();print int(rand()*20)}'` -# fi - - exit 0 -fi - -if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then - if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ -n "$(uci -q get shadowsocks-libev.sss0)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi1" ]; then - _log "Tunnel up disable use of ShadowSocks for UDP" - uci -q delete shadowsocks-libev.ss_rules.redir_udp - if /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev rules_down >/dev/null 2>&1 - /etc/init.d/shadowsocks-libev rules_up >/dev/null 2>&1 - fi - fi - if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then - _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE (was $default_gw)" - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw : $default_gw - Current route: $(ip r)" - ip route replace default scope global via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd 2>&1 >/dev/null - if [ "$(pgrep -f openmptcprouter-vps)" = "" ]; then - /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & - fi - [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" - fi - - # Set VPN MTU - if [ -n "$OMR_TRACKER_LATENCY" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]); then - local serverip=$(uci -q get shadowsocks-libev.sss0.server) - [ -z "$serverip" ] && serverip=$(uci -q get shadowsocks-rust.sss0.server) - [ -z "$serverip" ] && serverip=$(uci -q get v2ray.omrout.s_vless_address) - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - if [ "$serverip" = "192.168.1.3" ] || [ "$serverip" = "127.0.0.1" ]; then - serverip="" - fi - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE="interface" - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - #if [ "$(uci -q get glorytun.vpn.enable)" != "1" ] || [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then - OMR_NETWORK_DEVICE=$(find_network_device ${OMR_TRACKER_INTERFACE}) - #_log "OMR_NETWORK_DEVICE: $OMR_NETWORK_DEVICE for $OMR_TRACKER_DEVICE - $OMR_TRACKER_INTERFACE" - if [ -n "$OMR_NETWORK_DEVICE" ] && [ -n "$(uci -q get network.$OMR_NETWORK_DEVICE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - mtu=$(uci -q get network.$OMR_NETWORK_DEVICE.mtu) - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu - [ -n "$mtu" ] && [ "$(ip --json link show dev eth3 | jsonfilter -e '@[0].mtu' | tr -d '\n')" != "$mtu" ] && ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - elif [ -z "$(uci -q get openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) - #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } - else - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } - fi - else - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - fi - #else - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - #fi - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - fi - nbserver=0 - piholeenabled=0 - config_load openmptcprouter - config_foreach enable_pihole server - #config_foreach delete_server_default_route server - [ "$nbserver" = "$piholeenabled" ] && /etc/init.d/openmptcprouter-vps set_pihole 2>&1 >/dev/null - #ubus call network reload - exit 0 -fi - -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" != "up" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - fi - exit 0 -fi - -if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR_TRACKER_STATUS" ] && [ -n "$OMR_TRACKER_INTERFACE" ]; then - _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched up" - mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" - [ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" - [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { - OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" - if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then - mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" - mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" - mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) - else - echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up\n\nDetected that connection $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up again." | sendmail $(uci -q get mail.default.to) - fi - } - script_alert_up="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_up)" - [ -n "$script_alert_up" ] && eval $script_alert_up -fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" != "up" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' - uci -q commit openmptcprouter - dns_flush -fi - -if [ -n "$OMR_TRACKER_INTERFACE" ]; then - multipath_config=$(uci -q get "openmtpcprouter.$OMR_TRACKER_INTERFACE.multipath") - [ -z "$multipath_config" ] && multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } -fi - -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then - _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - fi -fi - -if [ "$multipath_config" = "master" ]; then - #if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && ([ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]); then - if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then - omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") - [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") - if [ -n "$omrvpn_intf" ] && [ "$(ip route show default metric 0 | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global metric 1 via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd 2>&1 >/dev/null - fi - config_load openmptcprouter - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - # config_foreach set_server_all_routes server - if [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then - config_foreach set_server_default_route server - #config_foreach set_server_default_route6 server - fi - ip route flush cache 2>&1 >/dev/null - fi - if ([ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then - omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") - [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") - if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" - ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null - fi - config_load openmptcprouter - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - # config_foreach set_server_all_routes server - if [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then - #config_foreach set_server_default_route server - config_foreach set_server_default_route6 server - fi - ip -6 route flush cache 2>&1 >/dev/null - fi - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && (([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ "$(ip route show default | grep weight)" = "" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ "$(ip -6 route show default | grep weight)" = "" ])) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") - [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") - if [ -n "$omrvpn_intf" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ "$(ip route show default metric 0 | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then - routesbalancing="" - routesbalancingbackup="" - nbintf=0 - nbintfb=0 - #nbintf6=0 - #nbintfb6=0 - config_load network - config_foreach set_route_balancing interface - #config_foreach set_route_balancing6 interface - [ -n "$routesbalancing" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default via $routesbalancing" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default $routesbalancing" ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ])) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { - _log "Change in routes, set ip route replace default scope global $routesbalancing (omrvpn_intf: $omrvpn_intf)" - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Current route: $(ip r)" - ip route replace default scope global metric 1 $routesbalancing 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" - } - } - #[ -n "$routesbalancing6" ] && { - # ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { - # _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" - # ip -6 route replace default scope global metric 1 $routesbalancing6 2>&1 >/dev/null - # } - #} - [ -n "$routesbalancingbackup" ] && { - ([ "$nbintfb" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ])) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { - _log "Set backup ip route replace default scope global metric 999 $routesbalancingbackup" - ip route replace default scope global metric 999 $routesbalancingbackup 2>&1 >/dev/null - } - } - #[ -n "$routesbalancingbackup6" ] && { - # ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { - # _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" - # ip -6 route replace default scope global metric 999 $routesbalancingbackup6 2>&1 >/dev/null - # } - #} - elif [ -n "$omrvpn_intf" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ "$(ip -6 route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then - routesbalancing6="" - routesbalancingbackup6="" - nbintf6=0 - nbintfb6=0 - config_load network - config_foreach set_route_balancing6 interface - [ -n "$routesbalancing6" ] && { - ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ "$(ip -6 r show default metric 1 | grep omr6in4)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { - _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" - ip -6 route replace default scope global metric 1 $routesbalancing6 2>&1 >/dev/null - } - } - [ -n "$routesbalancingbackup6" ] && { - ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { - _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" - ip -6 route replace default scope global metric 999 $routesbalancingbackup6 2>&1 >/dev/null - } - } - fi - #ip route flush cache 2>&1 >/dev/null - #ip -6 route flush cache 2>&1 >/dev/null - fi - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE " ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd 2>&1 >/dev/null - #ip route flush cache 2>&1 >/dev/null - fi - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE " ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd 2>&1 >/dev/null - #ip -6 route flush cache 2>&1 >/dev/null - fi - if ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ]) || [ $(($(date +"%s") + $((10 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then - [ "$(pgrep -f openmptcprouter-vps)" = "" ] && { - /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - uci -q commit openmptcprouter.$OMR_TRACKER_INTERFACE - } - fi - multipath_config="on" -fi - -if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - config_load openmptcprouter - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - config_foreach set_server_all_routes server - elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then - config_foreach set_server_route server - fi - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then - _log "Interface route not yet set, set route ip r add default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - ip r add default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 - ip route flush cache 2>&1 >/dev/null - fi -fi -if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then - config_load openmptcprouter - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - config_foreach set_server_all_routes6 server - elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then - config_foreach set_server_route6 server - fi - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then - ip -6 r replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 6$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 - ip -6 route flush cache 2>&1 >/dev/null - fi -fi - -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]); then - download="$(uci -q get network.$OMR_TRACKER_INTERFACE.downloadspeed)" - [ -z "$download" ] && download="$(uci -q get sqm.$OMR_TRACKER_INTERFACE.download)" - upload="$(uci -q get network.$OMR_TRACKER_INTERFACE.uploadspeed)" - [ -z "$upload" ] && upload="$(uci -q get sqm.$OMR_TRACKER_INTERFACE.upload)" - if [ "$(uci -q show | grep mptcpr)" = "" ]; then - touch /etc/config/openmptcprouter - fi - glorytunudppath() { - gtudp_port="$(uci -q get glorytun-udp.vpn.port)" - gtudp_dev="$(uci -q get glorytun-udp.vpn.dev)" - addpath() { - serverip=$1 - #gtudpst="up" - #[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && gtudpst="backup" - if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP | grep running)" = "" ] && [ -n "$(resolveip -4 -t 5 $serverip)" ]; then - serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then - if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 - else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 - fi - else - if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 - else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 - fi - fi - fi - if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6 | grep running)" = "" ] && [ -n "$(resolveip -6 -t 5 $serverip)" ]; then - serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then - if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 - else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 - fi - else - if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 - else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 - fi - fi - fi -# if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then -# glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1 - # fi - [ "$multipath_config" = "backup" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && { - [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$(resolveip -4 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1 - [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$(resolveip -6 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1 - } - } - config_list_foreach $1 ip addpath - } - config_load openmptcprouter - config_foreach glorytunudppath server -fi -[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$(uci -q get network.globals.mptcp_force_multipath)" != "0" ] && { - [ "$multipath_status" = "$multipath_config" ] || { - if [ "$(sysctl -qen net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ] || [ "$(sysctl -qen net.mptcp.enabled | tr -d '\n')" = "1" ]; then - if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.force_link)" != "0" ]; then - _log "Reload MPTCP config for $OMR_TRACKER_DEVICE" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - fi - _log "Multipath $OMR_TRACKER_DEVICE ($OMR_TRACKER_INTERFACE) switched to $multipath_config (from $multipath_status)" - multipath "$OMR_TRACKER_DEVICE" "$multipath_config" - fi - } -} -#ubus call network reload diff --git a/mptcp/files/usr/share/omr/post-tracking.d/020-status b/mptcp/files/usr/share/omr/post-tracking.d/020-status deleted file mode 100755 index c675a3f7f..000000000 --- a/mptcp/files/usr/share/omr/post-tracking.d/020-status +++ /dev/null @@ -1,278 +0,0 @@ -# -# Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# This script save settings for status page usage - -[ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ -z "$OMR_TRACKER_INTERFACE" ] && exit 0 -interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') -[ "$interface_up" != "true" ] && exit 0 - -# Save wan settings for status page -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..." - local ipaddr="" - local ip6addr="" - if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then - [ -n "$OMR_TRACKER_DEVICE_IP" ] && ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)" - [ -n "$OMR_TRACKER_DEVICE_IP6" ] && ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)" - else - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state="up" - fi - [ -n "$ipaddr" ] && { - # Check if we can get a IPv6 address, if yes enable RA else disable - #local check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" - #[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com/" - #local ip6addr="$(curl -s -6 -m 2 $check_ipv6_website)" - #[ -z "$ip6addr" ] && { - # local ip6addr="$(curl -s -6 -m 2 http://ifconfig.me/)" - #} - #if [ "$(uci -q get openmptcprouter.settings.ipv6_disable)" = "0" ]; then - # if [ -n "$ip6addr" ] && [ "$(uci -q get dhcp.lan.ra_default)" != 1 ]; then - # _log "Enable IPv6 RA" - # uci -q set dhcp.lan.ra=server - # uci -q set dhcp.lan.ra_default=1 - # uci -q set dhcp.lan.dhcpv6=server - # /etc/init.d/odhcpd start > /dev/null 2>&1 - # /etc/init.d/odhcpd enable > /dev/null 2>&1 - # elif [ -z "$ip6addr" ] && [ "$(uci -q set dhcp.lan.ra_default)" = 1 ]; then - # _log "Disable IPv6 RA" - # uci -q delete dhcp.lan.ra - # uci -q delete dhcp.lan.dhcpv6 - # /etc/init.d/odhcpd start > /dev/null 2>&1 - # /etc/init.d/odhcpd enable > /dev/null 2>&1 - # fi - #fi - if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then - #local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')" - #[ -z "$asn" ] && { - local asn="$(timeout 2 whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" - #} - fi - [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface - } - if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -4 -s -m 3 https://55860.com/bak/version.json)" - [ -n "$latestversions" ] && { - uci -q set openmptcprouter.latest_versions=latest_versions - uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')-$(ubus call system board | jsonfilter -e '@.kernel' | cut -d'.' -f1,2) - uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps') - uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") - } - fi - [ -n "$ipaddr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ipaddr" ] && { - previousip="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" - if [ -n "$previousip" ]; then - _log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ipaddr (previous: $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip))" - else - _log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ipaddr (First public IP detected)" - fi - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" - /etc/init.d/mptcp enabled && { - _log "Reload MPTCP for $OMR_TRACKER_DEVICE" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" 2>&1 >/dev/null - } - } - [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - [ -n "$asn" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.asn)" != "$asn" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" - } - - # Routing loop detection - local lanip="$(uci -q get network.lan.ipaddr)" - local masterip - get_master_ip() { - if [ -n "$1" ] && [ "$(uci -q get openmptcprouter.$1.multipath)" = "master" ]; then - masterip="$(uci -q get openmptcprouter.$1.publicip)" - fi - } - config_load openmptcprouter - config_foreach get_master_ip interface - if [ -n "$lanip" ] && [ -n "$masterip" ] && [ -n "$ipaddr" ] && [ "$ipaddr" = "$masterip" ] && [ "$(uci -q get openmptcprouter.settings.disableloopdetection)" != "1" ]; then - loop=0 - routingloop() { - vpsip="" - [ -n "$1"] && vpsip="$(uci -q get openmptcprouter.$1.ip)" - if [ -n "$vpsip" ] && [ "$(omr-routing-loop $vpsip $lanip $OMR_TRACKER_DEVICE)" = "detected" ]; then - loop=1 - fi - } - config_load openmptcprouter - config_foreach routingloop server - if [ "$loop" = "1" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.loop='1' - else - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.loop - fi - else - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.loop - fi - - local omrtracebox - traceboxmtutest() { - omr_tracebox_mtu() { - local serverip=$1 - [ "$serverip" != "${1#*[0-9].[0-9]}" ] && serverip="" - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { - omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" - [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" - } - #if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - if [ -n "$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu)" ]; then - network_device=$(find_network_device ${OMR_TRACKER_INTERFACE}) - mtu="" - [ -n "$network_device" ] && mtu=$(uci -q get network.${network_device}.mtu) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) - [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { - mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) - [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - } - } || { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) - [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { - mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) - [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - } - } - fi - fi - } - config_list_foreach $1 ip omr_tracebox_mtu - } - config_load openmptcprouter - config_foreach traceboxmtutest server - [ "$(uci -q get openmptcprouter.settings.tracebox)" = "0" ] && [ -n "$OMR_TRACKER_DEVICE" ] && { - mptcpsupport="$(omr-mptcp-intf $OMR_TRACKER_DEVICE)" - [ -n "$mptcpsupport" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$mptcpsupport" - } - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } - [ -n "$ip6addr" ] && { - if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then - local asn="$(whois $ip6addr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" - fi - [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface - } - if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -6 -s -m 3 https://55860.com/bak/version.json)" - [ -n "$latestversions" ] && { - uci -q set openmptcprouter.latest_versions=latest_versions - uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr') - uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps') - uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") - } - fi - [ -n "$ip6addr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ip6addr" ] && { - _log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ip6addr" - /etc/init.d/mptcp enabled && { - _log "Reload MPTCP for $OMR_TRACKER_DEVICE" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" 2>&1 >/dev/null - } - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ip6addr" - } - [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - [ -n "$asn" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" - } - local omrtracebox - traceboxmtutest() { - omr_tracebox_mtu() { - local serverip=$1 - [ "$serverip" != "${1#*:[0-9a-fA-F]}" ] && serverip="" - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { - omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" - [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" - } - #if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - network_device=$(find_network_device ${OMR_TRACKER_INTERFACE}) - if [ -n "$network_device" ] && [ -n "$(uci -q get network.${network_device}.mtu)" ]; then - mtu=$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - local mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 $serverip) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - } || { - local mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 2606:4700:4700::1111) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - } - } - fi - fi - } - config_list_foreach $1 ip omr_tracebox_mtu - } - config_load openmptcprouter - config_foreach traceboxmtutest server - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } - if [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get openmptcprouter.settings.external_check)" = "0" ]; then - if ping -B -I $OMR_TRACKER_DEVICE -c 1 $(uci -q get shadowsocks-libev.sss0.server) 2>&1 >/dev/null; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - fi - fi - proto="$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" - #if [ "$proto" = "qmi" ]; then - # intfdata="$(omr-qmi $OMR_TRACKER_DEVICE all | tr -d '\n')" - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.operator=$(echo $intfdata | awk -F";" '{print $2}') - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.number=$(echo $intfdata | awk -F";" '{print $3}') - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state=$(echo $intfdata | awk -F";" '{print $4}') - #elif [ "$proto" = "modemmanager" ]; then - # intfdata="$(omr-modemmanager $OMR_TRACKER_DEVICE all)" - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.operator=$(echo $intfdata | awk -F";" '{print $2}') - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.number=$(echo $intfdata | awk -F";" '{print $3}') - # uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state=$(echo $intfdata | awk -F";" '{print $4}') - #else - if [ "$proto" != "qmi" ] && [ "$proto" != "modemmanager" ]; then - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$(curl --interface $OMR_TRACKER_DEVICE_IP -s -m 2 -X GET http://$OMR_TRACKER_DEVICE_GATEWAY/api/webserver/SesTokInfo)" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.manufacturer='huawei' - else - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.manufacturer - fi - fi - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(( $(date +"%s") - 3400 )) - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Failed" - uci -q commit openmptcprouter - else - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Done" - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && ( [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ] ); then - _log "Check API configuration..." - /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & - uci -q set openmptcprouter.settings.apilc=$(date +"%s") - _log "Check API configuration... Done" - fi - fi - dns_flush -fi - diff --git a/mptcp/files/usr/share/omr/post-tracking.d/021-latencies b/mptcp/files/usr/share/omr/post-tracking.d/021-latencies deleted file mode 100755 index f89d70288..000000000 --- a/mptcp/files/usr/share/omr/post-tracking.d/021-latencies +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# This script save latencies and set additionnal latencies if set on interface - -[ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ -z "$OMR_TRACKER_INTERFACE" ] && exit 0 -interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') -[ "$interface_up" != "true" ] && exit 0 - -[ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_LATENCY" ] && { - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency)" != "" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_previous="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency)" - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - #[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max="$OMR_TRACKER_LATENCY" - #[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max)" -lt "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max="$OMR_TRACKER_LATENCY" - if [ "$multipath_config" = "on" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)" != "master" ] && ([ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] || ( ( [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ] ) && [ "$(uci -q get openmptcprouter.settings.master_lcintf | grep $OMR_TRACKER_INTERFACE)" = "" ] ) ); then - masterintf="$(uci -q show openmptcprouter | grep -m 1 multipath=\'master\' | cut -d'.' -f2)" - [ -z "$masterintf" ] && masterintf="$(uci -q show network | grep -m 1 multipath=\'master\' | cut -d'.' -f2)" - masterlatency="$(uci -q get openmptcprouter.$masterintf.latency | tr -d '\n')" - if [ -z "$masterlatency" ] || ([ -n "$masterintf" ] && [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]); then - masterlatency=1000 - fi - if [ -n "$masterintf" ] && ([ "$masterlatency" != "" ] || [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]); then - if ( ( [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ] ) && [ "$OMR_TRACKER_LATENCY" -lt $(awk "BEGIN {printf \"%i\",${masterlatency}/1.5}") ] ) || ( [ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] && [ "$OMR_TRACKER_LATENCY" -lt "$((masterlatency/2))" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_previous)" -lt "$((masterlatency/2))" ] ); then - uci -q set network.$masterintf.multipath='on' - uci -q set openmptcprouter.$masterintf.multipath='on' - uci -q set network.$OMR_TRACKER_INTERFACE.multipath='master' - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.multipath='master' - if [ "$(uci -q get openmptcprouter.settings.master_lcintf | grep $OMR_TRACKER_INTERFACE)" = "" ]; then - uci -q add_list openmptcprouter.settings.master_lcintf="$OMR_TRACKER_INTERFACE" - fi - if [ "$(uci -q get openmptcprouter.settings.master)" = "" ]; then - uci -q set openmptcprouter.settings.master="change" - fi - if [ "$(uci -q get openmptcprouter.settings.master)" != "dynamic" ]; then - [ -n "$(uci -q changes network)" ] && uci -q commit network - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - fi - _log "Change master interface from $masterintf ($masterlatency ms) to $OMR_TRACKER_INTERFACE ($OMR_TRACKER_LATENCY ms)" - fi - fi - fi - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter -} - -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - addlatency=$(uci -q get network.${OMR_TRACKER_INTERFACE}.addlatency) - [ -z "$addlatency" ] && addlatency="0" - if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | grep delay)" != "" ]; then - tc qdisc del dev ${OMR_TRACKER_DEVICE} root netem 2>&1 >/dev/null - fi - if [ "$addlatency" != "0" ]; then - if [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | grep delay)" = "" ]; then - tc qdisc add dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms 2>&1 >/dev/null - elif [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then - tc qdisc replace dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms 2>&1 >/dev/null - fi - fi -fi - diff --git a/mptcp/files/usr/share/omr/post-tracking.d/022-speedtest b/mptcp/files/usr/share/omr/post-tracking.d/022-speedtest deleted file mode 100755 index 3b2f2b70e..000000000 --- a/mptcp/files/usr/share/omr/post-tracking.d/022-speedtest +++ /dev/null @@ -1,65 +0,0 @@ -# -# Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# This script launch a speedtest if the option is enabled on the interface - -[ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ -z "$OMR_TRACKER_INTERFACE" ] && exit 0 -interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') -[ "$interface_up" != "true" ] && exit 0 - -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(pgrep -f omr-test-speed-server)" = "" ] && [ "$(uci -q get openmptcprouter.${OMR_TRACKER_INTERFACE}.testspeed)" = "1" ] && [ -z "$(uci -q get openmptcprouter.${OMR_TRACKER_INTERFACE}.testspeed_lc)" ]; then - launch_speedtest() { - local server=$1 - [ "$(uci -q get openmptcprouter.${server}.current)" != "1" ] && return - download_speed=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest) - download_speed2=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest) - download_speed3=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest) - [ "$download_speed2" -gt "$download_speed" ] && download_speed=${download_speed2} - [ "$download_speed3" -gt "$download_speed" ] && download_speed=${download_speed3} - download_speed=$((download_speed*8/1000)) - if [ -n "$download_speed" ] && [ "$download_speed" != "0" ]; then - upload_speed=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest upload) - upload_speed2=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest upload) - upload_speed3=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest upload) - [ "$upload_speed2" -gt "$upload_speed" ] && upload_speed=${upload_speed2} - [ "$upload_speed3" -gt "$upload_speed" ] && upload_speed=${upload_speed3} - - # Set Download speed settings - if [ "$(uci -q get sqm.${OMR_TRACKER_INTERFACE}.autorate)" = "1" ]; then - uci -q set sqm.${OMR_TRACKER_INTERFACE}.download=$((download_speed*65/100)) - uci -q set sqm.${OMR_TRACKER_INTERFACE}.max_download=${download_speed} - uci -q set sqm.${OMR_TRACKER_INTERFACE}.min_download=$((download_speed*10/100)) - else - uci -q set sqm.${OMR_TRACKER_INTERFACE}.download=$((download_speed*95/100)) - fi - _log "Calculated ${OMR_TRACKER_INTERFACE} download speed: ${download_speed}" - uci -q set network.${OMR_TRACKER_INTERFACE}.downloadspeed=${download_speed} - - # Set Upload speed settings - upload_speed=$((upload_speed*8/1000)) - if [ -n "$upload_speed" ] && [ "$upload_speed" != "0" ]; then - if [ "$(uci -q get sqm.${OMR_TRACKER_INTERFACE}.autorate)" = "1" ]; then - uci -q set sqm.${OMR_TRACKER_INTERFACE}.upload=$((upload_speed*65/100)) - uci -q set sqm.${OMR_TRACKER_INTERFACE}.max_upload=${upload_speed} - uci -q set sqm.${OMR_TRACKER_INTERFACE}.min_upload=$((upload_speed*10/100)) - else - uci -q set sqm.${OMR_TRACKER_INTERFACE}.upload=$((upload_speed*95/100)) - fi - _log "Calculated ${OMR_TRACKER_INTERFACE} upload speed: ${upload_speed}" - uci -q set network.${OMR_TRACKER_INTERFACE}.uploadspeed=${upload_speed} - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.testspeed_lc=$(date +"%s") - uci commit network - uci commit sqm - uci commit openmptcprouter - fi - fi - } - config_load openmptcprouter - config_foreach launch_speedtest server - - sleep 5 -fi - diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 937b85602..63a88279e 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # shellcheck disable=SC1091,SC1090 # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : @@ -34,9 +34,10 @@ export OMR_TRACKER_INTERVAL_TRIES export OMR_TRACKER_INTERVAL export OMR_TRACKER_NO_BIND -dscp=56 # set DSCP CS7 (56) in outgoing packets -initial_hosts="$OMR_TRACKER_HOSTS" -initial_hosts6="$OMR_TRACKER_HOSTS6" +#dscp=56 # set DSCP CS7 (56) in outgoing packets + +#initial_hosts="$OMR_TRACKER_HOSTS" +#initial_hosts6="$OMR_TRACKER_HOSTS6" initial_timeout="$OMR_TRACKER_TIMEOUT" wait_test=${OMR_TRACKER_WAIT_TEST:-0} @@ -102,15 +103,15 @@ _post_tracking() { } _ping_server() { - local servername=$1 + local servername="$1" [ -z "$servername" ] && return - local disabled=$(uci -q get openmptcprouter.$1.disabled) - local device=$2 + local disabled=$(uci -q get openmptcprouter."$servername".disabled) + local device="$2" if [ -n "$device" ] && [ "$disabled" != "1" ]; then check_ping() { - serverip=$1 + serverip="$1" if [ -n "$serverip" ]; then - _ping $serverip $device "yes" + _ping "$serverip" "$device" "yes" statusp=$? if $(exit $statusp); then serverip_ping=true @@ -119,21 +120,21 @@ _ping_server() { fi } config_load openmptcprouter - config_list_foreach ${servername} ip check_ping + config_list_foreach "${servername}" ip check_ping fi } _httping_server() { - local servername=$1 + local servername="$1" [ -z "$servername" ] && return - local disabled=$(uci -q get openmptcprouter.$1.disabled) - local port=$(uci -q get openmptcprouter.$1.port) - local device=$2 + local disabled=$(uci -q get openmptcprouter."$servername".disabled) + local port=$(uci -q get openmptcprouter."$servername".port) + local device="$2" if [ -n "$device" ] && [ "$disabled" != "1" ]; then check_ping() { - serverip=$1 + serverip="$1" if [ -n "$serverip" ]; then - _httping "${serverip}:${port}" $device "yes" true + _httping "${serverip}:${port}" "$device" "yes" true statusp=$? if $(exit $statusp); then serverip_ping=true @@ -142,15 +143,15 @@ _httping_server() { fi } config_load openmptcprouter - config_list_foreach ${servername} ip check_ping + config_list_foreach "${servername}" ip check_ping fi } _ping() { - local host=$1 + local host="$1" [ -z "$host" ] && return - local device=$2 - local localip=$3 + local device="$2" + local localip="$3" if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$OMR_TRACKER_NO_BIND" = "1" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; }; then ret=$(ping -I "${device}" \ -w "$OMR_TRACKER_TIMEOUT" \ @@ -162,7 +163,7 @@ _ping() { ) && echo "$ret" | grep -sq " 0% packet loss" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -184,7 +185,7 @@ _ping() { latency=$(echo "$ret" | grep rtt | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') [ -n "$latency" ] && { OMR_TRACKER_LATENCY="$latency" - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" } OMR_TRACKER_LOSS="$loss" fi @@ -208,7 +209,7 @@ _httping() { ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -220,7 +221,7 @@ _httping() { ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -238,7 +239,7 @@ _dns() { one.one.one.one ) && echo "$ret" | grep -sq "1.1.1.1" && { OMR_TRACKER_LATENCY=$(echo "$ret" | awk '/Query time/{print $4}') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" return } false @@ -267,8 +268,8 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY6= serverip_ping=false [ -z "$OMR_TRACKER_DEVICE" ] && { - network_get_device OMR_TRACKER_DEVICE $OMR_TRACKER_INTERFACE - [ -z "$OMR_TRACKER_DEVICE" ] && network_get_physdev OMR_TRACKER_DEVICE $OMR_TRACKER_INTERFACE + network_get_device OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" + [ -z "$OMR_TRACKER_DEVICE" ] && network_get_physdev OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" [ -z "$OMR_TRACKER_DEVICE" ] && OMR_TRACKER_DEVICE=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["l3_device"]') [ -z "$OMR_TRACKER_DEVICE" ] && OMR_TRACKER_DEVICE=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" | jsonfilter -q -e '@["l3_device"]') #[ -z "$OMR_TRACKER_DEVICE" ] && config_get OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" device @@ -278,7 +279,7 @@ while true; do if [ -n "$OMR_TRACKER_DEVICE" ] && [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then if [ -n "$(ip link show $OMR_TRACKER_DEVICE | grep 'state UP')" ] || [ -n "$(ip link show $OMR_TRACKER_DEVICE | grep 'state UNKNOWN')" ]; then # retrieve iface ip and gateway - if ([ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]) && [ "$OMR_TRACKER_INTERFACE_PROTO" != "dhcpv6" ]; then + if { [ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]; } && [ "$OMR_TRACKER_INTERFACE_PROTO" != "dhcpv6" ]; then OMR_TRACKER_DEVICE_IP=$(ip -4 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index fe7fc0b12..a69d9e9b1 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : name=$0 @@ -41,7 +41,7 @@ _check_server() { local host=$1 local port=$2 local k=0 - local valid_ip6=$(valid_subnet6 $host) + local valid_ip6=$(valid_subnet6 "$host") while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do if [ "$valid_ip6" != "ok" ]; then ret=$(curl \ @@ -67,7 +67,7 @@ _check_server() { _check_server_intf() { local host=$1 local port=$2 - local valid_ip6=$(valid_subnet6 $host) + local valid_ip6=$(valid_subnet6 "$host") for intf in $(multipath 2>/dev/null | awk '/default/ {print $1}'); do local k=0 while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do @@ -76,7 +76,7 @@ _check_server_intf() { --max-time "$OMR_TRACKER_TIMEOUT" \ -s \ -k \ - --interface $intf \ + --interface "$intf" \ "https://${host}:${port}/" ) else @@ -99,7 +99,7 @@ _check_server_intf() { _get_server_name() { local serverid=$1 local serverip=$2 - config_get serveripc $serverid server + config_get serveripc "$serverid" server if [ "$serveripc" = "$serverip" ]; then servername=$serverid fi @@ -107,25 +107,25 @@ _get_server_name() { _disable_current() { local serv=$1 - uci -q set openmptcprouter.${server}.current=0 + uci -q set openmptcprouter."${server}".current=0 } _disable_redir() { - local redir=$1 - local serverdisable=$2 + local redir="$1" + local serverdisable="$2" local shadowsocks="$3" - config_get serverss $redir server + config_get serverss "$redir" server if [ "$serverss" = "$serverdisable" ]; then - uci -q set ${shadowsocks}.${redir}.disabled=1 + uci -q set "${shadowsocks}"."${redir}".disabled=1 fi } _enable_redir() { - local redir=$1 + local redir="$1" local shadowsocks="$2" - config_get serverss $redir server + config_get serverss "$redir" server if [ "$serverss" = "sss${count}" ]; then - uci -q set ${shadowsocks}.${redir}.disabled=0 + uci -q set "${shadowsocks}"."${redir}".disabled=0 fi } @@ -164,7 +164,7 @@ _check_master() { set_ip() { ip="$serverip" if [ "$server_ping" = true ]; then - if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then + if { [ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]; }; then logger -t "OMR-Tracker-Server" "Master server ${name} up ($ip), set it back" changes="1" #logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip" @@ -217,7 +217,7 @@ _check_master() { set openmptcprouter.${name}.current='1' commit openmptcprouter EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/openmptcprouter-vps get_openvpn_key "$name" >/dev/null 2>/dev/null #/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/xray restart >/dev/null 2>/dev/null @@ -259,11 +259,11 @@ _check_master() { servername="" config_load shadowsocks-libev config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-libev" servername="" config_load shadowsocks-rust config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-rust" if [ -n "$(uci -q get openvpn.omr.remote | grep $ip)" ]; then uci -q batch <<-EOF >/dev/null @@ -329,10 +329,10 @@ _check_backup() { local count=0 local countips=0 local changes="0" - config_get backup $1 backup - config_get ip $1 ip - config_get port $1 port - config_get disabled $1 disabled + config_get backup "$1" backup + config_get ip "$1" ip + config_get port "$1" port + config_get disabled "$1" disabled serverip="" [ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { check_ip() { @@ -359,7 +359,7 @@ _check_backup() { ip="$serverip" #[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break if [ "$server_ping" = true ]; then - if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then + if { [ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]; }; then logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" changes="1" uci -q batch <<-EOF >/dev/null @@ -407,7 +407,7 @@ _check_backup() { set openmptcprouter.${name}.current='1' commit openmptcprouter EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/openmptcprouter-vps get_openvpn_key "$name" >/dev/null 2>/dev/null #/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/xray restart >/dev/null 2>/dev/null @@ -452,11 +452,11 @@ _check_backup() { EOF config_load shadowsocks-libev config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-libev" servername="" config_load shadowsocks-rust config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-rust" OMR_TRACKER_STATUS_MSG="No answer to ping and to API check" mail_alert="$(uci -q get omr-tracker.server.mail_alert)" diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 67b0f7215..5b1ebfc57 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -1,7 +1,6 @@ -#!/bin/sh +#!/bin/bash # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -name=$0 basename="$(basename $0)" if [ -e /usr/sbin/iptables-nft ]; then @@ -79,11 +78,11 @@ interval=${OMR_TRACKER_INTERVAL:-10} retry=${OMR_TRACKER_TRIES:-4} proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} -hosts6=${OMR_TRACKER_HOSTS6} +#hosts6=${OMR_TRACKER_HOSTS6} wait_test=${OMR_TRACKER_WAIT_TEST:-0} server=${OMR_TRACKER_SERVER:-sss0} type=${OMR_TRACKER_SS_TYPE:-libev} -nodns=0 +#nodns=0 last=0 nocontact="" @@ -98,7 +97,7 @@ while true; do [ "$host" = "$hosts" ] || { hosts="${hosts#* } $host" } - if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then + if [ "$(curl -s -I -w %{http_code} --socks5 "${proxy}" --max-time "${timeout}" "$host" -o /dev/null)" != "000" ]; then nocontact="" [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_${server})" = "" ] && { _log "Shadowsocks $type ${server} is up (can contact via http ${host})" @@ -127,26 +126,26 @@ while true; do _log "Reload Shadowsocks rules" /etc/init.d/shadowsocks-libev rules_up 2> /dev/null if ! /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-libev restart >/dev/null 2>&1 fi _get_ip elif [ "$type" = "rust" ] && [ "$(uci -q get shadowsocks-rust.ss_rules.disabled)" != "1" ]; then _log "Reload Shadowsocks Rust rules" /etc/init.d/shadowsocks-rust rules_up 2> /dev/null if ! /etc/init.d/shadowsocks-rust rules_exist ; then - /etc/init.d/shadowsocks-rust restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 fi _get_ip fi fi - [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || ([ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]) && _get_ip + [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || { [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]; } && _get_ip last=0 OMR_TRACKER_STATUS="OK" else last=$((last + 1 )) [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" [ "${last}" -ge "${retry}" ] && { - if [ "$OMR_TRACKER_PREV_STATUS" != "ERROR" ] && ([ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ss_r)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ssr_r)" ]); then + if [ "$OMR_TRACKER_PREV_STATUS" != "ERROR" ] && { [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ss_r)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ssr_r)" ]; }; then _log "Shadowsocks $type ${server} is down (can't contact via http ${nocontact})" OMR_TRACKER_STATUS_MSG="Shadowsocks $type ${server} is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.ss_${server}="down" diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize index 7d58e5d9a..a83fe1e52 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize @@ -5,6 +5,11 @@ [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath "$OMR_TRACKER_DEVICE" off >/dev/null 2>&1 if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then + if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.disabled)" = "1" ]; then + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" + /etc/init.d/omr-tracker restart + exit 0 + fi metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" @@ -12,9 +17,4 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TR /etc/init.d/omr-tracker restart exit 0 fi - if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.disabled)" = "1" ]; then - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - exit 0 - fi fi diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error index 6e422d69a..f31612110 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error @@ -2,9 +2,6 @@ . /lib/functions/network.sh -default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') -default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') # An interface in error will never be used in MPTCP @@ -165,6 +162,8 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || { [ "$OMR_TRACKER_INTERFACE" != "omrvp #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then if [ -n "$OMR_TRACKER_INTERFACE" ]; then + default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') + default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') if { [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]; } && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" config_load network diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up index aed7c3eee..6b4dc1f3d 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up @@ -733,17 +733,6 @@ default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}' initcwrwnd="" interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then - metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then - _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - exit 0 - fi -fi - - if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ -n "$(uci -q get shadowsocks-libev.sss0)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi1" ]; then _log "Tunnel up disable use of ShadowSocks for UDP"