On 10/15/25 12:51 PM, Ales Musil wrote:
> On Tue, Oct 14, 2025 at 2:14 PM Dumitru Ceara via dev <
> [email protected]> wrote:
> 
>> While the existing tests don't really need this explicitly, an upcoming
>> commit (adding a multinode L3 EVPN test) will need it.  It's better to
>> have fixed addresses anyway.
>>
>> Signed-off-by: Dumitru Ceara <[email protected]>
>> ---
>>  tests/multinode-bgp-macros.at | 35 ++++++++++++++++++++---------------
>>  tests/multinode.at            | 20 ++++++++++++--------
>>  2 files changed, 32 insertions(+), 23 deletions(-)
>>
>> diff --git a/tests/multinode-bgp-macros.at b/tests/multinode-bgp-macros.at
>> index 95273af847..d41892b5eb 100644
>> --- a/tests/multinode-bgp-macros.at
>> +++ b/tests/multinode-bgp-macros.at
>> @@ -4,12 +4,12 @@
>>
>>  OVS_START_SHELL_HELPERS
>>
>> -# m_setup_external_frr_vrf NODE VNI LOCAL_IP NETNS
>> +# m_setup_external_frr_vrf NODE VNI VXLAN_IP LOCAL_MAC LOCAL_IP 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 local_ip=$3 ns=$4
>> +    local node=$1 vni=$2 vxlan_ip=$3 local_mac=$4 local_ip=$5 ns=$6
>>
>>      local ns_prefix="ip netns exec $ns "
>>      local vrf=vrf-$vni
>> @@ -25,10 +25,13 @@ m_setup_external_frr_vrf() {
>>      check m_as $node $ns_prefix ip link add $br type bridge
>>      on_exit "m_as $node $ns_prefix ip link del $br"
>>      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 link set dev $br up
>>
>>      # Add VXLAN VTEP for the VNI.
>> -    check m_as $node $ns_prefix ip link add $vxlan type vxlan id $vni
>> dstport 4789 local $local_ip nolearning
>> +    check m_as $node $ns_prefix ip link add $vxlan type vxlan \
>> +        id $vni dstport 4789 local $vxlan_ip nolearning
>>      on_exit "m_as $node $ns_prefix ip link del $vxlan"
>>      check m_as $node $ns_prefix ip link set dev $vxlan up
>>      check m_as $node $ns_prefix ip link set $vxlan master $br
>> @@ -41,13 +44,14 @@ m_setup_external_frr_vrf() {
>>      check m_as $node $ns_prefix ip link set $lo up
>>  }
>>
>> -# m_setup_external_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP [VNI]
>> +# m_setup_external_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_MAC
>> [VNI]
>>  #
>>  # Sets up 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
>> +# BGP_AS.  The speaker uses as BGP IP address, BGP_IP and BGP_MAC as mac
>> +# address.
>>  m_setup_external_frr_router() {
>> -    local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 vni=$5
>> +    local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_mac=$5 vni=$6
>>      local br_name=br-$node
>>
>>      check m_as $node ovs-vsctl add-br $br_name
>> @@ -120,9 +124,9 @@ m_setup_external_frr_router() {
>>      " | podman exec -i $node vtysh $frr_flags
>>
>>      # Configure VRF, if any provided.
>> -    bgp_ip=$(echo $bgp_ip | cut -f 1 -d '/')
>> +    vxlan_ip=$(echo $bgp_ip | cut -f 1 -d '/')
>>      if [[[ -n "$vni" ]]]; then
>> -        m_setup_external_frr_vrf $node $vni $bgp_ip frr-ns
>> +        m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip
>> frr-ns
>>      fi
>>  }
>>
>> @@ -266,12 +270,12 @@ m_setup_ovn_frr_router() {
>>      " | podman exec -i $node vtysh
>>  }
>>
>> -# m_setup_host_frr_vrf NODE VNI LOCAL_IP
>> +# m_setup_host_frr_vrf NODE VNI VXLAN_IP LOCAL_MAC LOCAL_IP
>>  #
>>  # Sets up a VRF in the default net namespace so that it can be used by OVN
>>  # and FRR to advertise EVPN routes.
>>  m_setup_host_frr_vrf() {
>> -    local node=$1 vni=$2 local_ip=$3
>> +    local node=$1 vni=$2 vxlan_ip=$3 local_mac=$4 local_ip=$5
>>
>>      local vrf=vrf-$vni
>>      local br=br-$vni
>> @@ -288,6 +292,7 @@ m_setup_host_frr_vrf() {
>>      check m_as $node ip link add $br type bridge
>>      on_exit "m_as $node ip link del $br"
>>      check m_as $node ip link set $br master $vrf addrgenmode none
>> +    check m_as $node ip link set $br address $local_mac
>>      check m_as $node ip link set dev $br up
>>
>>      # Add VXLAN VTEP for the VNI (linked to the OVS vxlan_sys_<port>
>> interface).
>> @@ -298,7 +303,7 @@ m_setup_host_frr_vrf() {
>>      local dstport=$((60000 + $vni))
>>      check m_as $node ip link add $vxlan type vxlan   \
>>          dev vxlan_sys_${vxlan_port}                  \
>> -        id $vni dstport $dstport local $local_ip nolearning
>> +        id $vni dstport $dstport local $vxlan_ip nolearning
>>      on_exit "m_as $node ip link del $vxlan"
>>      check m_as $node ip link set dev $vxlan up
>>      check m_as $node ip link set $vxlan master $br
>> @@ -311,7 +316,7 @@ m_setup_host_frr_vrf() {
>>      check m_as $node ip link set $lo up
>>  }
>>
>> -# m_setup_host_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP VNI
>> +# m_setup_host_frr_router NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_MAC VNI
>>  #
>>  # Sets up an FRR BGP speaker in the default network namespace on the
>>  # ovn-fake-multinode node NODE.  This speaker is running on a ovs bridge
>> @@ -320,7 +325,7 @@ m_setup_host_frr_vrf() {
>>  # The BGP autonomous system is configured to be BGP_AS and the FRR
>> instance
>>  # runs in vrf-VNI.
>>  m_setup_host_frr_router() {
>> -    local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 vni=$5
>> +    local node=$1 bgp_as=$2 bgp_router_id=$3 bgp_ip=$4 bgp_mac=$5 vni=$6
>>
>>      local br_name=br-$node physnet=physnet_${node}_ext0
>>      local lr=$(m_ovn_frr_router_name $node)
>> @@ -363,8 +368,8 @@ m_setup_host_frr_router() {
>>      " | podman exec -i $node vtysh
>>
>>      # Configure VRF.
>> -    bgp_ip=$(echo $bgp_ip | cut -f 1 -d '/')
>> -    m_setup_host_frr_vrf $node $vni $bgp_ip
>> +    vxlan_ip=$(echo $bgp_ip | cut -f 1 -d '/')
>> +    m_setup_host_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip
>>  }
>>
>>  OVS_END_SHELL_HELPERS
>> diff --git a/tests/multinode.at b/tests/multinode.at
>> index c6a414af3f..de61903d71 100644
>> --- a/tests/multinode.at
>> +++ b/tests/multinode.at
>> @@ -3055,11 +3055,11 @@ add_guest_vm_and_connections() {
>>          $default_route $default_route_gw $lrp_guest_join
>>  }
>>
>> -m_setup_external_frr_router ovn-gw-1 4200000100 41.41.41.41
>> 41.41.41.41/32
>> -m_setup_ovn_frr_router <http://41.41.41.41/32-m_setup_ovn_frr_router>
>>   ovn-gw-1 4210000000 14.14.14.14 12:fb:d6:66:99:1c 10
>> +m_setup_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 4210000000 14.14.14.14
>>   12:fb:d6:66:99:1c 10
>>
>> -m_setup_external_frr_router ovn-gw-2 4200000200 42.42.42.42
>> 42.42.42.42/32
>> -m_setup_ovn_frr_router <http://42.42.42.42/32-m_setup_ovn_frr_router>
>>   ovn-gw-2 4210000000 24.24.24.24 22:fb:d6:66:99:2c 20
>> +m_setup_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 4210000000 24.24.24.24
>>   22:fb:d6:66:99:2c 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'])
>> @@ -3624,9 +3624,13 @@ CHECK_VRF()
>>
>>  vni=10
>>  ext_bgp_ip_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_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
>>
>>  # Create an 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
>> @@ -3637,11 +3641,11 @@ host_bgp_ip_gw2=42.42.$vni.22
>>   check m_as ovn-gw-1 ovs-vsctl set open .
>> external-ids:ovn-evpn-vxlan-ports=4789
>>   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 4200000100 $ext_bgp_ip_gw1
>> $ext_bgp_ip_gw1/24 $vni
>> -m_setup_host_frr_router     ovn-gw-1 4210000000 $host_bgp_ip_gw1
>> $host_bgp_ip_gw1/24 $vni
>> +m_setup_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_setup_external_frr_router ovn-gw-2 4200000200 $ext_bgp_ip_gw2
>> $ext_bgp_ip_gw2/24 $vni
>> -m_setup_host_frr_router     ovn-gw-2 4210000000 $host_bgp_ip_gw2
>> $host_bgp_ip_gw2/24 $vni
>> +m_setup_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
>>
>>  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'])
>> --
>> 2.51.0
>>
>> _______________________________________________
>> dev mailing list
>> [email protected]
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>>
> Looks good to me, thanks.
> Acked-by: Ales Musil <[email protected]>
> 

Thanks, Ales, for the review!  Applied to main and 25.09.

Regards,
Dumitru


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

Reply via email to