On 11/4/25 7:30 AM, Ales Musil wrote:
> 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,
> 

Hi Ales,

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

Thanks for the review!

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

It's better indeed.  I'll prepare a v2.

Thanks,
Dumtiru

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

Reply via email to