On Tue, Mar 31, 2026 at 3:02 AM Dumitru Ceara <[email protected]> wrote: > > Add m_frr_ns_flags, m_config_external_frr_router_l3, and > m_config_host_frr_router_l3 helpers that were missing after > backporting commit 2d22689f6 ("northd: Fix L3 EVPN when remote > VTEP is not L2 adjacent"). > > Fixes: 2d22689f6515 ("northd: Fix L3 EVPN when remote VTEP is not L2 adjacent.") > Assisted-by: Claude, with model: claude-opus-4-6 > Signed-off-by: Dumitru Ceara <[email protected]> > --- > tests/multinode-bgp-macros.at | 143 ++++++++++++++++++++++++++++++++++ > 1 file changed, 143 insertions(+) > > diff --git a/tests/multinode-bgp-macros.at b/tests/multinode-bgp-macros.at > index 2fb4b9b2ff..74c56cca19 100644 > --- a/tests/multinode-bgp-macros.at > +++ b/tests/multinode-bgp-macros.at > @@ -4,6 +4,20 @@ > > OVS_START_SHELL_HELPERS > > +# m_frr_ns_flags NETNS > +# > +# Builds the argument flags string to be passed to FRR when running in a > +# network namespace. > +m_frr_ns_flags() { > + local ns=$1 > + > + if m_is_fedora; then > + echo "--vty_socket /run/frr/$ns" > + else > + echo "-N $ns" > + fi > +} > + > # 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 > @@ -140,6 +154,66 @@ m_config_external_frr_router() { > fi > } > > +# 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, 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_ip6=$5 bgp_mac=$6 vni=$7 > + local frr_flags=$(m_frr_ns_flags frr-ns) > + local br_name=br-$node > + > + # NOTE: we set "no bgp ebgp-requires-policy" to simplify EVPN deployments. > + echo "configure > + ip prefix-list accept-all seq 5 permit any > + > + vrf vrf-$vni > + vni $vni > + exit-vrf > + > + router bgp $bgp_as > + bgp router-id $bgp_router_id > + no bgp ebgp-requires-policy > + > + neighbor ext1 soft-reconfiguration inbound > + neighbor ext1 interface remote-as external > + > + address-family l2vpn evpn > + neighbor ext1 activate > + advertise-all-vni > + advertise-svi-ip > + exit-address-family > + exit > + > + router bgp $bgp_as vrf vrf-$vni > + bgp router-id $bgp_router_id > + no bgp ebgp-requires-policy > + > + address-family ipv4 unicast > + redistribute kernel > + 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 $frr_flags > + > + # Configure VRF. > + vxlan_ip=$(echo $bgp_ip | cut -f 1 -d '/') > + m_setup_external_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip frr-ns > + check m_as $node ip netns exec frr-ns ip -6 addr add dev br-$vni $bgp_ip6 > +} > + > # m_ovn_frr_router_name NODE > m_ovn_frr_router_name() { > local node=$1 > @@ -409,4 +483,73 @@ m_config_host_frr_router() { > m_setup_host_frr_vrf $node $vni $vxlan_ip $bgp_mac $bgp_ip > } > > +# m_config_host_frr_router_l3 NODE BGP_AS BGP_ROUTER_ID BGP_IP BGP_MAC VNI > +# > +# Sets up an FRR BGP speaker speaker for L3 EVPN in the default network > +# namespace on the ovn-fake-multinode node NODE. This speaker is running on > +# a ovs bridge interface (simulating the fabric connection). > +# > +# The BGP autonomous system is configured to be BGP_AS and the FRR instance > +# runs in vrf-VNI. > +m_config_host_frr_router_l3() { > + 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) > + local lrp=$(m_ovn_frr_router_port_name $node) > + local ls=$(m_ovn_frr_switch_name $node) > + local lsp=$(m_ovn_frr_switch_port_name $node) > + local lsp_bgp=$(m_ovn_frr_switch_bgp_port_name $node) > + local lsp_ln=$(m_ovn_frr_switch_localnet_port_name $node) > + > + # NOTE: we set "no bgp ebgp-requires-policy" to simplify EVPN deployments. > + echo "configure > + vrf vrf-$vni > + vni $vni > + exit-vrf > + > + ip prefix-list no-default seq 5 deny 0.0.0.0/0 > + ip prefix-list no-default seq 10 permit 0.0.0.0/0 le 32 > + > + ipv6 prefix-list no-default seq 5 deny ::/0 > + ipv6 prefix-list no-default seq 10 permit ::/0 le 128 > + > + router bgp ${bgp_as} > + bgp router-id $bgp_router_id > + no bgp ebgp-requires-policy > + neighbor $br_name interface remote-as external > + > + address-family l2vpn evpn > + neighbor $br_name activate > + advertise-all-vni > + advertise-svi-ip > + exit-address-family > + exit > + > + router bgp ${bgp_as} vrf vrf-$vni > + bgp router-id $bgp_router_id > + no bgp ebgp-requires-policy > + > + address-family ipv4 unicast > + redistribute kernel > + 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 > + > + # Configure VRF. > + 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 > -- > 2.53.0
Thanks Dumitru! Sorry for missing this when backporting. Best, Han _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
