On Fri, Apr 3, 2026 at 10:32 PM Han Zhou <[email protected]> wrote: > > > > 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.
Forgot to add: Acked-by: Han Zhou <[email protected]> > > Best, > Han > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
