This extends the existing multinode EVPN tests to make sure the feature also works fine for IPv6 logical networks.
NOTE: ideally we should also test with IPv6 underlays (IPv6 VXLAN tunnel endpoints) but that's not possible yet because we rely on FRR for the BGP control plane and FRR doesn't support IPv6 VTEPs in any of the available releases. In the future that should be possible though, once [0] is included in an official FRR release. [0] https://github.com/FRRouting/frr/pull/19498 Reported-at: https://issues.redhat.com/browse/FDP-2771 Signed-off-by: Dumitru Ceara <[email protected]> --- tests/multinode-bgp-macros.at | 30 ++-- tests/multinode-macros.at | 31 ++++ tests/multinode.at | 308 ++++++++++++++++++++++++---------- 3 files changed, 272 insertions(+), 97 deletions(-) diff --git a/tests/multinode-bgp-macros.at b/tests/multinode-bgp-macros.at index 2ea9136c7a..a036e08485 100644 --- a/tests/multinode-bgp-macros.at +++ b/tests/multinode-bgp-macros.at @@ -18,12 +18,12 @@ m_frr_ns_flags() { fi } -# m_setup_external_frr_vrf NODE VNI VXLAN_IP LOCAL_MAC LOCAL_IP NETNS +# m_setup_external_frr_vrf NODE VNI VXLAN_IP LOCAL_MAC LOCAL_IP LOCAL_IP6 NETNS # # Sets up a VRF in NETNS so that it can be used by FRR running in that # namespace to advertise EVPN routes. m_setup_external_frr_vrf() { - local node=$1 vni=$2 vxlan_ip=$3 local_mac=$4 local_ip=$5 ns=$6 + local node=$1 vni=$2 vxlan_ip=$3 local_mac=$4 local_ip=$5 local_ip6=$6 ns=$7 local ns_prefix="ip netns exec $ns " local vrf=vrf-$vni @@ -41,6 +41,7 @@ m_setup_external_frr_vrf() { check m_as $node $ns_prefix ip link set $br master $vrf addrgenmode none check m_as $node $ns_prefix ip link set $br address $local_mac check m_as $node $ns_prefix ip addr add dev $br $local_ip + check m_as $node $ns_prefix ip -6 addr add dev $br $local_ip6 check m_as $node $ns_prefix ip link set dev $br up # Add VXLAN VTEP for the VNI. @@ -110,14 +111,14 @@ m_setup_external_frr_router() { check m_as $node systemctl start frr } -# m_config_external_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_MAC [VNI] +# m_config_external_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_IP6 BGP_MAC [VNI] # # Configures an external FRR BGP speaker in a network namespace on the # ovn-fake-multinode node NODE. The BGP autonomous system is configured to be -# BGP_AS. The speaker uses as BGP IP address, BGP_IP and BGP_MAC as mac +# BGP_AS. The speaker uses as BGP IP address, BGP_IP, BGP_IP6 and BGP_MAC as mac # address. m_config_external_frr_router() { - local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_mac=$5 vni=$6 + local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_ip6=$5 bgp_mac=$6 vni=$7 local frr_flags=$(m_frr_ns_flags frr-ns) local br_name=br-$node @@ -146,18 +147,18 @@ m_config_external_frr_router() { # Configure VRF, if any provided. vxlan_ip=$(echo $bgp_ip | cut -f 1 -d '/') if [[[ -n "$vni" ]]]; then - m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip frr-ns + m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip $bgp_ip6 frr-ns fi } -# m_config_external_frr_router_l3 NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_MAC VNI +# m_config_external_frr_router_l3 NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_IP6 BGP_MAC VNI # # Configures an external FRR BGP speaker for L3 EVPN in a network namespace # on the ovn-fake-multinode node NODE. The BGP autonomous system is -# configured to be BGP_AS. The speaker uses as BGP IP address, BGP_IP and -# BGP_MAC as mac address. +# configured to be BGP_AS. The speaker uses as BGP IP address, BGP_IP, BGP_IP6 +# and BGP_MAC as mac address. m_config_external_frr_router_l3() { - local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_mac=$5 vni=$6 + local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_ip6=$5 bgp_mac=$6 vni=$7 local frr_flags=$(m_frr_ns_flags frr-ns) local br_name=br-$node @@ -199,13 +200,14 @@ m_config_external_frr_router_l3() { address-family l2vpn evpn advertise ipv4 unicast + advertise ipv6 unicast exit-address-family exit " | podman exec -i $node vtysh $frr_flags # Configure VRF, if any provided. vxlan_ip=$(echo $bgp_ip | cut -f 1 -d '/') - m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip frr-ns + m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip $bgp_ip6 frr-ns } # m_ovn_frr_router_name NODE @@ -529,8 +531,14 @@ m_config_host_frr_router_l3() { redistribute connected exit-address-family + address-family ipv6 unicast + redistribute kernel + redistribute connected + exit-address-family + address-family l2vpn evpn advertise ipv4 unicast + advertise ipv6 unicast exit-address-family exit " | podman exec -i $node vtysh diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at index ddd79287f3..0cce13ac9b 100644 --- a/tests/multinode-macros.at +++ b/tests/multinode-macros.at @@ -100,6 +100,37 @@ m4_define([OVN_ROUTE_EQUAL], [OVN_ROUTE_EQUAL_([$1], [], [$2], [$3])]) # and "proto 84" is converted to "proto ovn" for compatibility. m4_define([NS_OVN_ROUTE_EQUAL], [OVN_ROUTE_EQUAL_([$1], [$2], [$3], [$4])]) +# OVN_ROUTE_V6_EQUAL_([fake_node], [ns], [vrf], [string to compare]) +# +# Will dump all v6 routes in the mentioned vrf. Trailing spaces will be removed +# and "proto 84" is converted to "proto ovn" for compatibility. +m4_define([OVN_ROUTE_V6_EQUAL_], + [ + if test -n "$2"; then + ns_prefix="ip netns exec $2" + else + ns_prefix="" + fi + prefix="podman exec $1 $ns_prefix" + OVS_WAIT_UNTIL_EQUAL([$prefix ip -6 route list vrf $3 | \ + grep -v multicast | \ + sed -e 's|[[[[:space:]]]]*$||g' -e 's|proto 84|proto ovn|' | \ + sed -e 's|nhid [[0-9]]* ||g'], [$4]) + ] +) + +# OVN_ROUTE_V6_EQUAL([fake_node], [vrf], [string to compare]) +# +# Will dump all v6 routes in the mentioned vrf. Trailing spaces will be removed +# and "proto 84" is converted to "proto ovn" for compatibility. +m4_define([OVN_ROUTE_V6_EQUAL], [OVN_ROUTE_V6_EQUAL_([$1], [], [$2], [$3])]) + +# NS_OVN_ROUTE_V6_EQUAL([fake_node], [ns], [vrf], [string to compare]) +# +# Will dump all v6 routes in the mentioned vrf. Trailing spaces will be removed +# and "proto 84" is converted to "proto ovn" for compatibility. +m4_define([NS_OVN_ROUTE_V6_EQUAL], [OVN_ROUTE_V6_EQUAL_([$1], [$2], [$3], [$4])]) + OVS_START_SHELL_HELPERS m_as() { diff --git a/tests/multinode.at b/tests/multinode.at index 488e98b4a7..28c767441d 100644 --- a/tests/multinode.at +++ b/tests/multinode.at @@ -2879,14 +2879,14 @@ add_guest_vm_and_connections() { } m_setup_external_frr_router ovn-gw-1 41.41.41.41/32 -m_config_external_frr_router ovn-gw-1 4200000100 41.41.41.41 41.41.41.41/32 12:fb:d6:66:99:0c -m_setup_ovn_frr_router ovn-gw-1 12:fb:d6:66:99:1c 10 -m_config_ovn_frr_router ovn-gw-1 4210000000 14.14.14.14 10 +m_config_external_frr_router ovn-gw-1 4200000100 41.41.41.41 41.41.41.41/32 41::41/64 12:fb:d6:66:99:0c +m_setup_ovn_frr_router ovn-gw-1 12:fb:d6:66:99:1c 10 +m_config_ovn_frr_router ovn-gw-1 4210000000 14.14.14.14 10 m_setup_external_frr_router ovn-gw-2 42.42.42.42/32 -m_config_external_frr_router ovn-gw-2 4200000200 42.42.42.42 42.42.42.42/32 22:fb:d6:66:99:0c -m_setup_ovn_frr_router ovn-gw-2 22:fb:d6:66:99:2c 20 -m_config_ovn_frr_router ovn-gw-2 4210000000 24.24.24.24 20 +m_config_external_frr_router ovn-gw-2 4200000200 42.42.42.42 42.42.42.42/32 42::42/64 22:fb:d6:66:99:0c +m_setup_ovn_frr_router ovn-gw-2 22:fb:d6:66:99:2c 20 +m_config_ovn_frr_router ovn-gw-2 4210000000 24.24.24.24 20 OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp vrf ovnvrf20 neighbors' | grep -qE 'Connections established 1']) OVS_WAIT_UNTIL([m_as ovn-gw-1 vtysh -c 'show bgp vrf ovnvrf10 neighbors' | grep -qE 'Connections established 1']) @@ -3441,10 +3441,12 @@ CHECK_VRF() vni=10 ext_bgp_ip_gw1=42.42.$vni.11 +ext_bgp_ip6_gw1=42:42:$vni::11 ext_bgp_mac_gw1=00:00:01:00:00:$vni host_bgp_ip_gw1=42.42.$vni.12 host_bgp_mac_gw1=00:00:00:01:00:$vni ext_bgp_ip_gw2=42.42.$vni.21 +ext_bgp_ip6_gw2=42:42:$vni::21 ext_bgp_mac_gw2=00:00:02:00:00:$vni host_bgp_ip_gw2=42.42.$vni.22 host_bgp_mac_gw2=00:00:00:02:00:$vni @@ -3459,14 +3461,14 @@ host_bgp_mac_gw2=00:00:00:02:00:$vni check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-evpn-vxlan-ports=4789 m_setup_external_frr_router ovn-gw-1 $ext_bgp_ip_gw1/24 -m_config_external_frr_router ovn-gw-1 4200000100 $ext_bgp_ip_gw1 $ext_bgp_ip_gw1/24 $ext_bgp_mac_gw1 $vni -m_setup_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni -m_config_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni +m_config_external_frr_router ovn-gw-1 4200000100 $ext_bgp_ip_gw1 $ext_bgp_ip_gw1/24 $ext_bgp_ip6_gw1/64 $ext_bgp_mac_gw1 $vni +m_setup_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni +m_config_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni m_setup_external_frr_router ovn-gw-2 $ext_bgp_ip_gw2/24 -m_config_external_frr_router ovn-gw-2 4200000200 $ext_bgp_ip_gw2 $ext_bgp_ip_gw2/24 $ext_bgp_mac_gw2 $vni -m_setup_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni -m_config_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni +m_config_external_frr_router ovn-gw-2 4200000200 $ext_bgp_ip_gw2 $ext_bgp_ip_gw2/24 $ext_bgp_ip6_gw2/64 $ext_bgp_mac_gw2 $vni +m_setup_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni +m_config_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni OVS_WAIT_UNTIL([m_as ovn-gw-1 vtysh -c 'show bgp neighbors' | grep -qE 'Connections established 1']) OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp neighbors' | grep -qE 'Connections established 1']) @@ -3475,13 +3477,13 @@ check multinode_nbctl ls-add ls \ -- lsp-add-localnet-port ls ls-ln public # Configure "workloads" (VIF LSPs) on both chassis. -check multinode_nbctl lsp-add ls w1 \ - -- lsp-set-addresses w1 "00:00:00:00:00:01 10.0.0.11" -check multinode_nbctl lsp-add ls w2 \ - -- lsp-set-addresses w2 "00:00:00:00:00:02 10.0.0.12" +check multinode_nbctl lsp-add ls w1 \ + -- lsp-set-addresses w1 "00:00:00:00:00:01 10.0.0.11 10::11" +check multinode_nbctl lsp-add ls w2 \ + -- lsp-set-addresses w2 "00:00:00:00:00:02 10.0.0.12 10::12" -check m_as ovn-gw-1 /data/create_fake_vm.sh w1 w1 00:00:00:00:00:01 1500 10.0.0.11 24 10.0.0.1 1000::11/64 1000::1 -check m_as ovn-gw-2 /data/create_fake_vm.sh w2 w2 00:00:00:00:00:02 1500 10.0.0.12 24 10.0.0.1 1000::12/64 1000::1 +check m_as ovn-gw-1 /data/create_fake_vm.sh w1 w1 00:00:00:00:00:01 1500 10.0.0.11 24 10.0.0.1 10::11/64 10::1 +check m_as ovn-gw-2 /data/create_fake_vm.sh w2 w2 00:00:00:00:00:02 1500 10.0.0.12 24 10.0.0.1 10::12/64 10::1 m_wait_for_ports_up # Enable EVPN support for the distributed logical switch and redistribute @@ -3514,10 +3516,13 @@ check m_as ovn-gw-1 ip netns exec frr-ns ip link set evpn_host_peer up check m_as ovn-gw-1 ip link set netns fabric_workload evpn_host check m_as ovn-gw-1 ip netns exec fabric_workload ip link set evpn_host addr 00:00:00:00:01:00 check m_as ovn-gw-1 ip netns exec fabric_workload ip addr add dev evpn_host 10.0.0.41/24 +check m_as ovn-gw-1 ip netns exec fabric_workload ip -6 addr add dev evpn_host 10::41/64 check m_as ovn-gw-1 ip netns exec fabric_workload ip link set evpn_host up check m_as ovn-gw-1 ip netns exec fabric_workload ip r a default via 10.0.0.1 +check m_as ovn-gw-1 ip netns exec fabric_workload ip -6 r a default via 10::1 check m_as ovn-gw-1 ip netns exec frr-ns ip link set address 00:00:10:00:00:81 dev br-10 check m_as ovn-gw-1 ip netns exec frr-ns ip a a dev br-10 10.0.0.81/24 +check m_as ovn-gw-1 ip netns exec frr-ns ip -6 a a dev br-10 10::81/64 check m_as ovn-gw-2 ip netns add fabric_workload on_exit "m_as ovn-gw-2 ip netns del fabric_workload" @@ -3529,10 +3534,13 @@ check m_as ovn-gw-2 ip netns exec frr-ns ip link set evpn_host_peer up check m_as ovn-gw-2 ip link set netns fabric_workload evpn_host check m_as ovn-gw-2 ip netns exec fabric_workload ip link set evpn_host addr 00:00:00:00:02:00 check m_as ovn-gw-2 ip netns exec fabric_workload ip addr add dev evpn_host 10.0.0.42/24 +check m_as ovn-gw-2 ip netns exec fabric_workload ip -6 addr add dev evpn_host 10::42/64 check m_as ovn-gw-2 ip netns exec fabric_workload ip link set evpn_host up check m_as ovn-gw-2 ip netns exec fabric_workload ip r a default via 10.0.0.1 +check m_as ovn-gw-2 ip netns exec fabric_workload ip -6 r a default via 10::1 check m_as ovn-gw-2 ip netns exec frr-ns ip link set address 00:00:10:00:00:82 dev br-10 check m_as ovn-gw-2 ip netns exec frr-ns ip a a dev br-10 10.0.0.82/24 +check m_as ovn-gw-2 ip netns exec frr-ns ip -6 a a dev br-10 10::82/64 AS_BOX([Checking EVPN MACs and IPs on External BGP host]) OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-1 ip netns exec frr-ns vtysh --vty_socket /run/frr/frr-ns -c 'show evpn mac vni all'], [0], [dnl @@ -3562,6 +3570,8 @@ OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-1 ip netns exec frr-ns vtysh --vty_socket /run/ 42.42.10.12 0 4210000000 i *> [[2]]:[[0]]:[[48]]:[[00:00:00:00:00:01]]:[[32]]:[[10.0.0.11]] 42.42.10.12 0 4210000000 i + *> [[2]]:[[0]]:[[48]]:[[00:00:00:00:00:01]]:[[128]]:[[10::11]] + 42.42.10.12 0 4210000000 i ]) OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-2 ip netns exec frr-ns vtysh --vty_socket /run/frr/frr-ns -c 'show bgp l2vpn evpn route' | \ grep --no-group-separator -A1 00:00:00:00:00:02], [0], [dnl @@ -3569,39 +3579,47 @@ OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-2 ip netns exec frr-ns vtysh --vty_socket /run/ 42.42.10.22 0 4210000000 i *> [[2]]:[[0]]:[[48]]:[[00:00:00:00:00:02]]:[[32]]:[[10.0.0.12]] 42.42.10.22 0 4210000000 i + *> [[2]]:[[0]]:[[48]]:[[00:00:00:00:00:02]]:[[128]]:[[10::12]] + 42.42.10.22 0 4210000000 i ]) AS_BOX([Check traffic to "fabric" hosts - ping from fabric]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec fabric_workload ping -W 1 -c 1 10.0.0.11]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec fabric_workload ping -W 1 -c 1 10.0.0.12]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec fabric_workload ping -W 1 -c 1 10.0.0.11]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec fabric_workload ping -6 -W 1 -c 1 10::11]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec fabric_workload ping -W 1 -c 1 10.0.0.12]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec fabric_workload ping -6 -W 1 -c 1 10::12]) AS_BOX([Check type-2 MAC+IP EVPN route advertisements]) # Ping from the frr-ns to the fabric workload so that its IP is learned on # the fabric EVPN peer (and advertised to OVN). -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 1 10.0.0.41]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 1 10.0.0.42]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 1 10.0.0.41]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -6 -W 1 -c 1 10::41]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 1 10.0.0.42]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -6 -W 1 -c 1 10::42]) # Check that OVN learned the ARPs. OVS_WAIT_FOR_OUTPUT_UNQUOTED([m_as ovn-gw-1 ovn-appctl evpn/vtep-arp-list | cut -d',' -f2- | sort], [0], [dnl VNI: 10, MAC: 00:00:00:00:01:00, IP: 10.0.0.41, dp_key: $dp_key + VNI: 10, MAC: 00:00:00:00:01:00, IP: 10::41, dp_key: $dp_key ]) OVS_WAIT_FOR_OUTPUT_UNQUOTED([m_as ovn-gw-2 ovn-appctl evpn/vtep-arp-list | cut -d',' -f2- | sort], [0], [dnl VNI: 10, MAC: 00:00:00:00:02:00, IP: 10.0.0.42, dp_key: $dp_key + VNI: 10, MAC: 00:00:00:00:02:00, IP: 10::42, dp_key: $dp_key ]) AS_BOX([Check that OVN routers used ARP entries learned through type-2 EVPN MAC+IP routes]) # Add an OVN router with an internal switch and internal workload. -check multinode_nbctl --wait=hv \ - -- lr-add lr \ - -- lrp-add lr lr-ls 00:00:00:01:00:00 10.0.0.1/24 \ - -- lrp-add lr lr-ls-int 00:00:00:02:00:00 20.0.0.1/24 \ - -- lsp-add-router-port ls ls-lr lr-ls \ - -- ls-add ls-int \ - -- lsp-add-router-port ls-int ls-int-lr lr-ls-int \ - -- lsp-add ls-int w-int1 \ - -- lsp-set-addresses w-int1 "00:00:00:02:00:01 20.0.0.11" \ - -- lsp-add ls-int w-int2 \ - -- lsp-set-addresses w-int2 "00:00:00:02:00:02 20.0.0.12" +check multinode_nbctl --wait=hv \ + -- lr-add lr \ + -- lrp-add lr lr-ls 00:00:00:01:00:00 10.0.0.1/24 10::1/64 \ + -- lrp-add lr lr-ls-int 00:00:00:02:00:00 20.0.0.1/24 2000::1/64 \ + -- lsp-add-router-port ls ls-lr lr-ls \ + -- ls-add ls-int \ + -- lsp-add-router-port ls-int ls-int-lr lr-ls-int \ + -- lsp-add ls-int w-int1 \ + -- lsp-set-addresses w-int1 "00:00:00:02:00:01 20.0.0.11 2000::11" \ + -- lsp-add ls-int w-int2 \ + -- lsp-set-addresses w-int2 "00:00:00:02:00:02 20.0.0.12 2000::12" rtr_dp_key=$(m_fetch_column Datapath tunnel_key external_ids:name=lr) rtr_port_key=$(m_fetch_column Port_Binding tunnel_key logical_port=lr-ls) @@ -3617,6 +3635,7 @@ AT_CHECK_UNQUOTED([m_as ovn-gw-1 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_B priority=100,reg0=0xa00000b,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:00:01,load:0x1->NXM_NX_REG10[[6]] priority=100,reg0=0xa00000c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:00:02,load:0x1->NXM_NX_REG10[[6]] priority=200,reg0=0xa000029,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:01:00,load:0x1->NXM_NX_REG10[[6]] +priority=200,reg4=0x100000,reg5=0,reg6=0,reg7=0x41,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:01:00,load:0x1->NXM_NX_REG10[[6]] ]) AT_CHECK_UNQUOTED([m_as ovn-gw-1 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | grep priority | \ @@ -3624,6 +3643,7 @@ AT_CHECK_UNQUOTED([m_as ovn-gw-1 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_L priority=100,arp,reg0=0xa00000b,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:00:01 actions=load:0x1->NXM_NX_REG10[[6]] priority=100,arp,reg0=0xa00000c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:00:02 actions=load:0x1->NXM_NX_REG10[[6]] priority=200,arp,reg0=0xa000029,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:01:00 actions=load:0x1->NXM_NX_REG10[[6]] +priority=200,icmp6,reg0=0x100000,reg1=0,reg2=0,reg3=0x41,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:01:00,icmp_code=0 actions=load:0x1->NXM_NX_REG10[[6]] ]) AT_CHECK_UNQUOTED([m_as ovn-gw-2 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | grep priority | \ @@ -3631,6 +3651,7 @@ AT_CHECK_UNQUOTED([m_as ovn-gw-2 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_B priority=100,reg0=0xa00000b,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:00:01,load:0x1->NXM_NX_REG10[[6]] priority=100,reg0=0xa00000c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:00:02,load:0x1->NXM_NX_REG10[[6]] priority=200,reg0=0xa00002a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:02:00,load:0x1->NXM_NX_REG10[[6]] +priority=200,reg4=0x100000,reg5=0,reg6=0,reg7=0x42,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key actions=mod_dl_dst:00:00:00:00:02:00,load:0x1->NXM_NX_REG10[[6]] ]) AT_CHECK_UNQUOTED([m_as ovn-gw-2 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | grep priority | \ @@ -3638,15 +3659,20 @@ AT_CHECK_UNQUOTED([m_as ovn-gw-2 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_L priority=100,arp,reg0=0xa00000b,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:00:01 actions=load:0x1->NXM_NX_REG10[[6]] priority=100,arp,reg0=0xa00000c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:00:02 actions=load:0x1->NXM_NX_REG10[[6]] priority=200,arp,reg0=0xa00002a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:02:00 actions=load:0x1->NXM_NX_REG10[[6]] +priority=200,icmp6,reg0=0x100000,reg1=0,reg2=0,reg3=0x42,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=00:00:00:00:02:00,icmp_code=0 actions=load:0x1->NXM_NX_REG10[[6]] ]) AS_BOX([Check traffic to "fabric" hosts - ping from internal hosts]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec w-int1 ping -W 1 -c 1 10.0.0.41]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec w-int2 ping -W 1 -c 1 10.0.0.42]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec w-int1 ping -W 1 -c 1 10.0.0.41]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec w-int1 ping -6 -W 1 -c 1 10::41]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec w-int2 ping -W 1 -c 1 10.0.0.42]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec w-int2 ping -6 -W 1 -c 1 10::42]) AS_BOX([Check traffic to "fabric" hosts - ping from VNI bridge]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 3 10.0.0.11]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 3 10.0.0.12]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 3 10.0.0.11]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-10 ping -6 -W 1 -c 3 10::11]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -W 1 -c 3 10.0.0.12]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-10 ping -6 -W 1 -c 3 10::12]) # Check if the dynamic FDB was created. OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-1 ovs-ofctl dump-flows br-int table=OFTABLE_GET_REMOTE_FDB,dl_dst=00:00:10:00:00:81 | grep -c "cookie"], [0], [dnl @@ -3701,17 +3727,25 @@ CHECK_VRF() vni=10 ext_bgp_ip_gw1=42.10.$vni.11 +ext_bgp_ip6_gw1=42:10:$vni::11 ext_bgp_mac_gw1=00:00:01:00:00:$vni host_bgp_ip_gw1=42.10.$vni.12 +host_bgp_ip6_gw1=42:10:$vni::12 host_bgp_mac_gw1=00:00:00:01:00:$vni nat_ip_gw1=42.10.$vni.13 +nat_ip6_gw1=42:10:$vni::13 lb_ip_gw1=42.10.$vni.14 +lb_ip6_gw1=42:10:$vni::14 ext_bgp_ip_gw2=42.20.$vni.21 +ext_bgp_ip6_gw2=42:20:$vni::21 ext_bgp_mac_gw2=00:00:02:00:00:$vni host_bgp_ip_gw2=42.20.$vni.22 +host_bgp_ip6_gw2=42:20:$vni::22 host_bgp_mac_gw2=00:00:00:02:00:$vni nat_ip_gw2=42.20.$vni.23 +nat_ip6_gw2=42:20:$vni::23 lb_ip_gw2=42.20.$vni.24 +lb_ip6_gw2=42:20:$vni::24 # Create a flat, distributed OVN localnet switch, with EVPN configured. check m_as ovn-gw-1 ovs-vsctl set open . external-ids:ovn-bridge-mappings=public:br-ex @@ -3723,14 +3757,14 @@ lb_ip_gw2=42.20.$vni.24 check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-evpn-vxlan-ports=4789 m_setup_external_frr_router ovn-gw-1 $ext_bgp_ip_gw1/24 -m_config_external_frr_router_l3 ovn-gw-1 4200000100 $ext_bgp_ip_gw1 $ext_bgp_ip_gw1/24 $ext_bgp_mac_gw1 $vni -m_setup_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni -m_config_host_frr_router_l3 ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni +m_config_external_frr_router_l3 ovn-gw-1 4200000100 $ext_bgp_ip_gw1 $ext_bgp_ip_gw1/24 $ext_bgp_ip6_gw1/64 $ext_bgp_mac_gw1 $vni +m_setup_host_frr_router ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni +m_config_host_frr_router_l3 ovn-gw-1 4210000000 $host_bgp_ip_gw1 $host_bgp_ip_gw1/24 $host_bgp_mac_gw1 $vni m_setup_external_frr_router ovn-gw-2 $ext_bgp_ip_gw2/24 -m_config_external_frr_router_l3 ovn-gw-2 4200000200 $ext_bgp_ip_gw2 $ext_bgp_ip_gw2/24 $ext_bgp_mac_gw2 $vni -m_setup_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni -m_config_host_frr_router_l3 ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni +m_config_external_frr_router_l3 ovn-gw-2 4200000200 $ext_bgp_ip_gw2 $ext_bgp_ip_gw2/24 $ext_bgp_ip6_gw2/64 $ext_bgp_mac_gw2 $vni +m_setup_host_frr_router ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni +m_config_host_frr_router_l3 ovn-gw-2 4210000000 $host_bgp_ip_gw2 $host_bgp_ip_gw2/24 $host_bgp_mac_gw2 $vni OVS_WAIT_UNTIL([m_as ovn-gw-1 vtysh -c 'show bgp neighbors' | grep -qE 'Connections established 1']) OVS_WAIT_UNTIL([m_as ovn-gw-2 vtysh -c 'show bgp neighbors' | grep -qE 'Connections established 1']) @@ -3741,6 +3775,7 @@ on_exit "m_as ovn-gw-1 ip link del lo-wl-$vni" check m_as ovn-gw-1 ip link set lo-wl-$vni address 00:01:01:01:01:$vni check m_as ovn-gw-1 ip link set lo-wl-$vni master vrf-$vni check m_as ovn-gw-1 ip a a dev lo-wl-$vni 77.77.1.$vni/32 +check m_as ovn-gw-1 ip -6 a a dev lo-wl-$vni 77:77::1:$vni/64 check m_as ovn-gw-1 ip link set lo-wl-$vni up check m_as ovn-gw-2 ip link add name lo-wl-$vni type dummy @@ -3748,47 +3783,54 @@ on_exit "m_as ovn-gw-2 ip link del lo-wl-$vni" check m_as ovn-gw-2 ip link set lo-wl-$vni address 00:02:02:02:02:$vni check m_as ovn-gw-2 ip link set lo-wl-$vni master vrf-$vni check m_as ovn-gw-2 ip a a dev lo-wl-$vni 77.77.2.$vni/32 +check m_as ovn-gw-2 ip -6 a a dev lo-wl-$vni 77:77::2:$vni/64 check m_as ovn-gw-2 ip link set lo-wl-$vni up -check multinode_nbctl \ - -- lr-add lr \ - -- set logical_router lr options:dynamic-routing=true \ - options:dynamic-routing-vrf-id=$vni \ - -- lrp-add lr lr-gw1 $host_bgp_mac_gw1 $host_bgp_ip_gw1/24 \ - -- lrp-set-gateway-chassis lr-gw1 ovn-gw-1 10 \ - -- lrp-set-options lr-gw1 dynamic-routing-redistribute=nat,lb \ - -- lrp-add lr lr-gw2 $host_bgp_mac_gw2 $host_bgp_ip_gw2/24 \ - -- lrp-set-gateway-chassis lr-gw2 ovn-gw-2 10 \ - -- lrp-set-options lr-gw2 dynamic-routing-redistribute=nat,lb \ - -- lrp-add lr lr-int1 00:00:00:00:01:02 30.0.1.1/24 \ - -- lrp-set-options lr-int1 dynamic-routing-redistribute=connected \ - -- lrp-add lr lr-int2 00:00:00:00:01:02 30.0.2.1/24 \ - -- lrp-set-options lr-int2 dynamic-routing-redistribute=connected \ - -- ls-add ls \ - -- lsp-add-localnet-port ls ls-ln public \ - -- lsp-add-router-port ls ls-lr-gw1 lr-gw1 \ - -- lsp-add-router-port ls ls-lr-gw2 lr-gw2 \ - -- ls-add ls-int1 \ - -- lsp-add-router-port ls-int1 ls-int1-lr lr-int1 \ - -- ls-add ls-int2 \ +check multinode_nbctl \ + -- lr-add lr \ + -- set logical_router lr options:dynamic-routing=true \ + options:dynamic-routing-vrf-id=$vni \ + -- lrp-add lr lr-gw1 $host_bgp_mac_gw1 $host_bgp_ip_gw1/24 $host_bgp_ip6_gw1/64 \ + -- lrp-set-gateway-chassis lr-gw1 ovn-gw-1 10 \ + -- lrp-set-options lr-gw1 dynamic-routing-redistribute=nat,lb \ + -- lrp-add lr lr-gw2 $host_bgp_mac_gw2 $host_bgp_ip_gw2/24 $host_bgp_ip6_gw2/64 \ + -- lrp-set-gateway-chassis lr-gw2 ovn-gw-2 10 \ + -- lrp-set-options lr-gw2 dynamic-routing-redistribute=nat,lb \ + -- lrp-add lr lr-int1 00:00:00:00:01:02 30.0.1.1/24 30:1::1/64 \ + -- lrp-set-options lr-int1 dynamic-routing-redistribute=connected \ + -- lrp-add lr lr-int2 00:00:00:00:01:02 30.0.2.1/24 30:2::1/64 \ + -- lrp-set-options lr-int2 dynamic-routing-redistribute=connected \ + -- ls-add ls \ + -- lsp-add-localnet-port ls ls-ln public \ + -- lsp-add-router-port ls ls-lr-gw1 lr-gw1 \ + -- lsp-add-router-port ls ls-lr-gw2 lr-gw2 \ + -- ls-add ls-int1 \ + -- lsp-add-router-port ls-int1 ls-int1-lr lr-int1 \ + -- ls-add ls-int2 \ -- lsp-add-router-port ls-int2 ls-int2-lr lr-int2 -check multinode_nbctl \ - -- lsp-add ls-int1 w1 \ - -- lsp-set-addresses w1 "00:00:00:00:00:01 30.0.1.11" \ - -- lr-nat-add lr dnat_and_snat $nat_ip_gw1 30.0.1.11 w1 00:00:00:00:01:11 \ - -- lb-add lb1 $lb_ip_gw1 30.0.1.11 \ - -- lr-lb-add lr lb1 \ - -- lsp-add ls-int2 w2 \ - -- lsp-set-addresses w2 "00:00:00:00:00:02 30.0.2.11" \ - -- lr-nat-add lr dnat_and_snat $nat_ip_gw2 30.0.2.11 w2 00:00:00:00:02:11 \ - -- lb-add lb2 $lb_ip_gw2 30.0.2.11 \ - -- lr-lb-add lr lb2 +check multinode_nbctl \ + -- lsp-add ls-int1 w1 \ + -- lsp-set-addresses w1 "00:00:00:00:00:01 30.0.1.11 30:1::11" \ + -- lr-nat-add lr dnat_and_snat $nat_ip_gw1 30.0.1.11 w1 00:00:00:00:01:11 \ + -- lr-nat-add lr dnat_and_snat $nat_ip6_gw1 30:1::11 w1 00:00:00:00:01:11 \ + -- lb-add lb1 $lb_ip_gw1 30.0.1.11 \ + -- lb-add lb2 $lb_ip6_gw1 30:1::11 \ + -- lr-lb-add lr lb1 \ + -- lr-lb-add lr lb2 \ + -- lsp-add ls-int2 w2 \ + -- lsp-set-addresses w2 "00:00:00:00:00:02 30.0.2.11 30:2::11" \ + -- lr-nat-add lr dnat_and_snat $nat_ip_gw2 30.0.2.11 w2 00:00:00:00:02:11 \ + -- lr-nat-add lr dnat_and_snat $nat_ip6_gw2 30:2::11 w2 00:00:00:00:02:11 \ + -- lb-add lb3 $lb_ip_gw2 30.0.2.11 \ + -- lb-add lb4 $lb_ip6_gw2 30:2::11 \ + -- lr-lb-add lr lb3 \ + -- lr-lb-add lr lb4 check m_as ovn-gw-1 /data/create_fake_vm.sh w1 w1 \ - 00:00:00:00:00:01 1500 30.0.1.11 24 30.0.1.1 1000::11/64 1000::1 + 00:00:00:00:00:01 1500 30.0.1.11 24 30.0.1.1 30:1::11/64 30:1::1 check m_as ovn-gw-2 /data/create_fake_vm.sh w2 w2 \ - 00:00:00:00:00:02 1500 30.0.2.11 24 30.0.2.1 1000::11/64 1000::1 + 00:00:00:00:00:02 1500 30.0.2.11 24 30.0.2.1 30:2::11/64 30:2::1 m_wait_for_ports_up @@ -3812,8 +3854,10 @@ IP: $ext_bgp_ip_gw2, port: 4789, vni: 10 ]) AS_BOX([Check traffic to "fabric" hosts - ping from fabric]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 30.0.1.11]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 30.0.1.11]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 30:1::11]) OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 30.0.2.11]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 30:2::11]) # Check that OVN learned the ARPs. OVS_WAIT_FOR_OUTPUT_UNQUOTED([m_as ovn-gw-1 ovn-appctl evpn/vtep-arp-list | cut -d',' -f2- | sort], [0], [dnl @@ -3839,10 +3883,14 @@ OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-2 ovs-ofctl dump-flows br-int table=OFTABLE_GET ]) AS_BOX([Check traffic to "fabric" hosts - ping from fabric towards NAT/LB IPs]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw1]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw1]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw2]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $nat_ip6_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $lb_ip6_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $nat_ip6_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $lb_ip6_gw2]) # Check routes on the external speaker, they should include: # - internal OVN subnets (30.0.x.0/24) @@ -3858,6 +3906,16 @@ NS_OVN_ROUTE_EQUAL([ovn-gw-1], [frr-ns], [vrf-10], [dnl 42.20.10.24 via 42.10.10.12 dev br-10 proto bgp metric 20 onlink 77.77.1.10 via 42.10.10.12 dev br-10 proto bgp metric 20 onlink]) +NS_OVN_ROUTE_V6_EQUAL([ovn-gw-1], [frr-ns], [vrf-10], [dnl +30:1::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +30:2::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::13 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::14 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::/64 dev br-10 proto kernel metric 256 pref medium +42:20:10::23 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::24 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +77:77::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium]) + NS_OVN_ROUTE_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl 30.0.1.0/24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink 30.0.2.0/24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink @@ -3868,6 +3926,16 @@ NS_OVN_ROUTE_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl 42.20.10.24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink 77.77.2.10 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink]) +NS_OVN_ROUTE_V6_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl +30:1::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +30:2::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::13 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::14 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::23 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::24 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::/64 dev br-10 proto kernel metric 256 pref medium +77:77::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium]) + # Check routes on the OVN speaker. OVN_ROUTE_EQUAL([ovn-gw-1], [vrf-10], [dnl blackhole 30.0.1.0/24 proto ovn metric 1000 @@ -3880,6 +3948,19 @@ blackhole 42.20.10.23 proto ovn metric 1000 blackhole 42.20.10.24 proto ovn metric 100 blackhole 42.20.10.24 proto ovn metric 1000]) +OVN_ROUTE_V6_EQUAL([ovn-gw-1], [vrf-10], [dnl +blackhole 30:1::/64 dev lo proto ovn metric 1000 pref medium +blackhole 30:2::/64 dev lo proto ovn metric 1000 pref medium +blackhole 42:10:10::13 dev lo proto ovn metric 100 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 100 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 1000 pref medium +42:10:10::/64 via ::ffff:42.10.10.11 dev br-10 proto bgp metric 20 onlink pref medium +blackhole 42:20:10::23 dev lo proto ovn metric 1000 pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 100 pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 1000 pref medium +77:77::/64 dev lo-wl-10 proto kernel metric 256 pref medium +fe80::/64 dev lo-wl-10 proto kernel metric 256 pref medium]) + OVN_ROUTE_EQUAL([ovn-gw-2], [vrf-10], [dnl blackhole 30.0.1.0/24 proto ovn metric 1000 blackhole 30.0.2.0/24 proto ovn metric 1000 @@ -3891,14 +3972,31 @@ blackhole 42.20.10.23 proto ovn metric 100 blackhole 42.20.10.24 proto ovn metric 100 blackhole 42.20.10.24 proto ovn metric 1000]) +OVN_ROUTE_V6_EQUAL([ovn-gw-2], [vrf-10], [dnl +blackhole 30:1::/64 dev lo proto ovn metric 1000 pref medium +blackhole 30:2::/64 dev lo proto ovn metric 1000 pref medium +blackhole 42:10:10::13 dev lo proto ovn metric 1000 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 100 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 1000 pref medium +blackhole 42:20:10::23 dev lo proto ovn metric 100 pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 100 pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 1000 pref medium +42:20:10::/64 via ::ffff:42.20.10.21 dev br-10 proto bgp metric 20 onlink pref medium +77:77::/64 dev lo-wl-10 proto kernel metric 256 pref medium +fe80::/64 dev lo-wl-10 proto kernel metric 256 pref medium]) + check multinode_nbctl --wait=hv set logical_router lr \ options:dynamic-routing-redistribute-local-only=true AS_BOX([Check traffic to "fabric" hosts - ping from fabric towards NAT/LB IPs - local-only=true]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw1]) -OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw1]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw2]) -OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $nat_ip6_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-1 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $lb_ip6_gw1]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $nat_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $nat_ip6_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -c1 $lb_ip_gw2]) +OVS_WAIT_UNTIL([m_as ovn-gw-2 ip netns exec frr-ns ip vrf exec vrf-$vni ping -6 -c1 $lb_ip6_gw2]) NS_OVN_ROUTE_EQUAL([ovn-gw-1], [frr-ns], [vrf-10], [dnl 30.0.1.0/24 via 42.10.10.12 dev br-10 proto bgp metric 20 onlink @@ -3909,6 +4007,15 @@ NS_OVN_ROUTE_EQUAL([ovn-gw-1], [frr-ns], [vrf-10], [dnl 42.20.10.24 via 42.10.10.12 dev br-10 proto bgp metric 20 onlink 77.77.1.10 via 42.10.10.12 dev br-10 proto bgp metric 20 onlink]) +NS_OVN_ROUTE_V6_EQUAL([ovn-gw-1], [frr-ns], [vrf-10], [dnl +30:1::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +30:2::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::13 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::14 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::/64 dev br-10 proto kernel metric 256 pref medium +42:20:10::24 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium +77:77::/64 via ::ffff:42.10.10.12 dev br-10 proto bgp metric 20 onlink pref medium]) + NS_OVN_ROUTE_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl 30.0.1.0/24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink 30.0.2.0/24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink @@ -3918,6 +4025,15 @@ NS_OVN_ROUTE_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl 42.20.10.24 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink 77.77.2.10 via 42.20.10.22 dev br-10 proto bgp metric 20 onlink]) +NS_OVN_ROUTE_V6_EQUAL([ovn-gw-2], [frr-ns], [vrf-10], [dnl +30:1::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +30:2::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:10:10::14 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::23 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::24 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium +42:20:10::/64 dev br-10 proto kernel metric 256 pref medium +77:77::/64 via ::ffff:42.20.10.22 dev br-10 proto bgp metric 20 onlink pref medium]) + # Check routes on the OVN speaker. OVN_ROUTE_EQUAL([ovn-gw-1], [vrf-10], [dnl blackhole 30.0.1.0/24 proto ovn metric 1000 @@ -3927,6 +4043,16 @@ blackhole 42.10.10.13 proto ovn metric 100 blackhole 42.10.10.14 proto ovn metric 100 blackhole 42.20.10.24 proto ovn metric 100]) +OVN_ROUTE_V6_EQUAL([ovn-gw-1], [vrf-10], [dnl +blackhole 30:1::/64 dev lo proto ovn metric 1000 pref medium +blackhole 30:2::/64 dev lo proto ovn metric 1000 pref medium +blackhole 42:10:10::13 dev lo proto ovn metric 100 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 100 pref medium +42:10:10::/64 via ::ffff:42.10.10.11 dev br-10 proto bgp metric 20 onlink pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 100 pref medium +77:77::/64 dev lo-wl-10 proto kernel metric 256 pref medium +fe80::/64 dev lo-wl-10 proto kernel metric 256 pref medium]) + OVN_ROUTE_EQUAL([ovn-gw-2], [vrf-10], [dnl blackhole 30.0.1.0/24 proto ovn metric 1000 blackhole 30.0.2.0/24 proto ovn metric 1000 @@ -3935,6 +4061,16 @@ blackhole 42.10.10.14 proto ovn metric 100 blackhole 42.20.10.23 proto ovn metric 100 blackhole 42.20.10.24 proto ovn metric 100]) +OVN_ROUTE_V6_EQUAL([ovn-gw-2], [vrf-10], [dnl +blackhole 30:1::/64 dev lo proto ovn metric 1000 pref medium +blackhole 30:2::/64 dev lo proto ovn metric 1000 pref medium +blackhole 42:10:10::14 dev lo proto ovn metric 100 pref medium +blackhole 42:20:10::23 dev lo proto ovn metric 100 pref medium +blackhole 42:20:10::24 dev lo proto ovn metric 100 pref medium +42:20:10::/64 via ::ffff:42.20.10.21 dev br-10 proto bgp metric 20 onlink pref medium +77:77::/64 dev lo-wl-10 proto kernel metric 256 pref medium +fe80::/64 dev lo-wl-10 proto kernel metric 256 pref medium]) + AT_CLEANUP AT_SETUP([redirect-bridged to non-gw destination switch port]) -- 2.51.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
