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.


>  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?


>      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.

+        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.

Regards,
Ales
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to