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

Reply via email to