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")"
["$(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 >/dev/null 2>&1
ip route replace default via $interface_gw dev $interface_if table 991337$initcwrwnd >/dev/null 2>&1&&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")"
["$(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 >/dev/null 2>&1
ip -6 route replace default via $interface_gw dev $interface_if table 6991337 >/dev/null 2>&1&&SETROUTE=true
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 >/dev/null 2>&1
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 >/dev/null 2>&1
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_if
localINTERFACE=$1
[ -z "$INTERFACE"]&&return
["$INTERFACE"="omrvpn"]&&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")"
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_if
localINTERFACE=$1
[ -z "$INTERFACE"]&&return
["$INTERFACE"="omr6in4"]&&return
["$INTERFACE"="omrvpn"]&&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")"
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
["$INTERFACE"="omrvpn"]&&continue
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")"
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["$(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
["$INTERFACE"="omr6in4"]&&continue
["$INTERFACE"="omrvpn"]&&continue
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")"
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)"
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath ||echo"off")
[ -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[ -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 >/dev/null 2>&1
["$(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 >/dev/null 2>&1
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")"
[ -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")"
[ -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")"
[ -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
[ -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
[ -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
[ -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
}
enable_pihole(){
localserver=$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