On 12/12/25 9:24 AM, Ales Musil wrote:
> On Thu, Dec 11, 2025 at 6:30 PM Dumitru Ceara via dev <
> [email protected]> wrote:
>
>> 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]>
>> ---
>>
>
> Hi Dumitru,
>
> thank you for the test update, I have some minor comments down below.
>
Hi Ales,
Thanks for the review!
>
>> 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
>>
>
> Shouldn't we set nodad?
>
Good point, I will.
>
>> 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 | \
>>
>
> Not related to this patch, but I think it would be good
> to also exclude multicast in the system-tests.
>
Ack, I'll add it as a separate commit to v2.
> + 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
>> <http://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
>> <http://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
>>
>
> nit: nodad
>
>
>> 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
>>
>
> nit: nodad
>
>
>>
>> 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
>>
>
> nit: nodad
>
>
>> 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
>>
>
> nit: nodad
>
>
>>
>> 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
>>
>
> nit: nodad
>
>
>> 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
>>
>
> nit: nodad
>
>
>> 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
>>
>>
> Other than that it looks good.
>
I'll be posting v2 soon.
Thanks,
Dumitru
> Regards,
> Ales
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev