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

Reply via email to