From 9d544752a462ab986a092d059dab13cc525a51c9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Jan 2023 20:54:40 +0100 Subject: [PATCH] Various IPv6 fixes --- .../luasrc/controller/openmptcprouter.lua | 2 + .../root/etc/uci-defaults/openmptcprouter | 10 ++--- .../share/omr/post-tracking.d/post-tracking | 42 ++++++++++++++----- omr-tracker/files/bin/omr-tracker | 2 +- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 67e907243..4f79fda7e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -388,9 +388,11 @@ function wizard_add() if ip6addr ~= "" then ucic:set("network",intf,"ip6addr",ip6addr:gsub("%s+", "")) ucic:set("network",intf,"ip6gw",ip6gw:gsub("%s+", "")) + ucic:set("network",intf,"ipv6","1") else ucic:set("network",intf,"ip6addr","") ucic:set("network",intf,"ip6gw","") + ucic:set("network",intf,"ipv6","0") end if proto == "dhcpv6" then diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index f8a0dc21c..647c23303 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -135,11 +135,11 @@ _set_omr_ip() { server=$1 serverip="$(uci -q get openmptcprouter.${server}.ip)" if [ -n "$serverip" ]; then - uci -q batch <<-EOF >/dev/null - delete openmptcprouter.${server}.ip - add_list openmptcprouter.${server}.ip="${serverip}" - commit openmptcprouter - EOF + uci -q delete openmptcprouter.${server}.ip + for ip in ${serverip}; do + uci -q add_list openmptcprouter.${server}.ip="${ip}" + done + uci -q commit openmptcprouter fi } diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 9546be6ec..573973648 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1106,6 +1106,7 @@ if [ "$multipath_config" = "master" ]; 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 fi if ([ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then @@ -1119,12 +1120,12 @@ if [ "$multipath_config" = "master" ]; then #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_route server config_foreach set_server_default_route6 server fi 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" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && ([ "$(ip route show default | grep weight)" = "" ] || [ "$(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" ] && [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then @@ -1132,11 +1133,11 @@ if [ "$multipath_config" = "master" ]; then routesbalancingbackup="" nbintf=0 nbintfb=0 - nbintf6=0 - nbintfb6=0 + #nbintf6=0 + #nbintfb6=0 config_load network config_foreach set_route_balancing interface - config_foreach set_route_balancing6 interface + #config_foreach set_route_balancing6 interface [ -n "$routesbalancing" ] && { ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $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)" @@ -1145,18 +1146,37 @@ if [ "$multipath_config" = "master" ]; then [ "$(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 "$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 " ]) || ([ "$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" ] && [ "$(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 " ]) || ([ "$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 "$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" diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 61d328932..72decbe1a 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -292,7 +292,7 @@ while true; do if [ "$OMR_TRACKER_IPV6" = "1" ] || [ "$OMR_TRACKER_IPV6" = "auto" ]; then #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then - OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 fe80' | grep -m 1 inet6 | awk '{print $2}' | cut -d'/' -s -f1) + OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | sort -r | grep -m 1 inet6 | awk '{print $2}' | cut -d'/' -s -f1) #fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then OMR_TRACKER_DEVICE_GATEWAY6=$(uci -q get "network.$OMR_TRACKER_INTERFACE.ip6gw")