On Mon, Nov 3, 2025 at 1:44 PM Dumitru Ceara <[email protected]> wrote:

> This commit enhances the "ovn multinode bgp L3 EVPN" multinode test
> ensuring that OVN advertised logical router NAT and load balancer IPs
> are indeed accessible from external hosts through an L3 EVPN fabric.
>
> The functionality was already present, NAT/LB IP routes are advertised
> as regular OVN routes in the VRF that's monitored by FRR, since v25.03,
> so no code changes are required.  The FRR speaker further advertises
> these as Type-5 EVPN routes for the external BGP speaker to use.
>
> Reported-at: https://issues.redhat.com/browse/FDP-2079
> Signed-off-by: Dumitru Ceara <[email protected]>
> ---
>

Hi Dumitru,

thank you for the patch, I have just one question down below.


>  tests/multinode.at | 73 +++++++++++++++++++++++++++++++---------------
>  1 file changed, 49 insertions(+), 24 deletions(-)
>
> diff --git a/tests/multinode.at b/tests/multinode.at
> index 2c90e5d7d8..31b0ae47ef 100644
> --- a/tests/multinode.at
> +++ b/tests/multinode.at
> @@ -3687,10 +3687,14 @@ ext_bgp_ip_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_mac_gw1=00:00:00:01:00:$vni
> +nat_ip_gw1=42.10.$vni.13
> +lb_ip_gw1=42.10.$vni.14
>  ext_bgp_ip_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_mac_gw2=00:00:00:02:00:$vni
> +nat_ip_gw2=42.20.$vni.23
> +lb_ip_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
> @@ -3729,32 +3733,38 @@ 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 link set lo-wl-$vni up
>
> -check multinode_nbctl
>  \
> -    -- lr-add lr
> \
> -      -- set logical_router lr options:dynamic-routing=true
>  \
> -                               options:requested-tnl-key=$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-add lr lr-gw2 $host_bgp_mac_gw2 $host_bgp_ip_gw2/24
> \
> -        -- lrp-set-gateway-chassis lr-gw2 ovn-gw-2 10
>  \
> -      -- 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:requested-tnl-key=$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-add lr lr-gw2 $host_bgp_mac_gw2 $host_bgp_ip_gw2/24
>        \
> +        -- lrp-set-gateway-chassis lr-gw2 ovn-gw-2 10
>         \
> +      -- 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,nat,lb \
> +      -- 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,nat,lb \
> +    -- 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" \
> -    -- lsp-add ls-int2 w2                                   \
> -      -- lsp-set-addresses w2 "00:00:00:00:00:02 30.0.2.11"
> +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 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
> @@ -3809,6 +3819,21 @@ OVS_WAIT_FOR_OUTPUT([m_as ovn-gw-2 ovs-ofctl
> dump-flows br-int table=OFTABLE_GET
>  2
>  ])
>
> +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])
> +
> +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])
> +
>


Should we also check the route presence?

I know that the traffic should be a good enough indicator, but it still
might be a good idea to have an explicit check.


>  AT_CLEANUP
>
>  AT_SETUP([redirect-bridged to non-gw destination switch port])
> --
> 2.51.0
>
>
Regards,
Ales
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to