On Dec 11, Dumitru Ceara wrote:
> On 12/4/25 6:17 PM, Lorenzo Bianconi wrote:
> > Introduce the capability to specify the names used for EVPN devices:
> > - bridge device (default: br-$vni)
> > - vxlan device (default: vxlan-$vni)
> > - advertise device (default: lo-$vni)
> > 
> > Reported-at: https://issues.redhat.com/browse/FDP-2730
> > Signed-off-by: Lorenzo Bianconi <[email protected]>
> > ---
> 
> Hi Lorenzo,

Hi Dumitru,

thx for the review.

> 
> Thanks for the patch!  This is a new feature and a user visible change,
> do you mind adding a NEWS entry for it too please?

ack, I will add it.

> 
> Please see some more comments below.
> 
> >  controller/neighbor.c               |  31 +++--
> >  northd/en-datapath-logical-switch.c |  19 ++++
> >  ovn-nb.xml                          |  21 ++++
> >  tests/system-ovn.at                 | 171 +++++++++++++++-------------
> >  4 files changed, 157 insertions(+), 85 deletions(-)
> > 
> > diff --git a/controller/neighbor.c b/controller/neighbor.c
> > index 545f01a87..075e672fa 100644
> > --- a/controller/neighbor.c
> > +++ b/controller/neighbor.c
> > @@ -31,13 +31,20 @@ static const char *neighbor_interface_prefixes[] = {
> >      [NEIGH_IFACE_LOOPBACK] = "lo-",
> >  };
> >  
> > +static const char *neighbor_opt_name[] = {
> > +    [NEIGH_IFACE_BRIDGE] = "dynamic-routing-bridge-ifname",
> > +    [NEIGH_IFACE_VXLAN] = "dynamic-routing-vxlan-ifname",
> > +    [NEIGH_IFACE_LOOPBACK] = "dynamic-routing-advertise-ifname",
> > +};
> > +
> >  static void neighbor_interface_monitor_destroy(
> >      struct neighbor_interface_monitor *);
> >  static bool neighbor_interface_with_vni_exists(
> >      struct vector *monitored_interfaces,
> >      uint32_t vni);
> >  static struct neighbor_interface_monitor *
> > -neighbor_interface_monitor_alloc(enum neighbor_family family,
> > +neighbor_interface_monitor_alloc(struct local_datapath *ld,
> > +                                 enum neighbor_family family,
> >                                   enum neighbor_interface_type type,
> >                                   uint32_t vni);
> >  static void neighbor_collect_mac_to_advertise(
> > @@ -98,22 +105,22 @@ neighbor_run(struct neighbor_ctx_in *n_ctx_in,
> >          }
> >  
> >          struct neighbor_interface_monitor *vxlan =
> > -            neighbor_interface_monitor_alloc(NEIGH_AF_BRIDGE,
> > +            neighbor_interface_monitor_alloc(ld, NEIGH_AF_BRIDGE,
> >                                               NEIGH_IFACE_VXLAN, vni);
> >          vector_push(n_ctx_out->monitored_interfaces, &vxlan);
> >  
> >          struct neighbor_interface_monitor *lo =
> > -            neighbor_interface_monitor_alloc(NEIGH_AF_BRIDGE,
> > +            neighbor_interface_monitor_alloc(ld, NEIGH_AF_BRIDGE,
> >                                               NEIGH_IFACE_LOOPBACK, vni);
> >          vector_push(n_ctx_out->monitored_interfaces, &lo);
> >  
> >          struct neighbor_interface_monitor *br_v4 =
> > -            neighbor_interface_monitor_alloc(NEIGH_AF_INET,
> > +            neighbor_interface_monitor_alloc(ld, NEIGH_AF_INET,
> >                                               NEIGH_IFACE_BRIDGE, vni);
> >          vector_push(n_ctx_out->monitored_interfaces, &br_v4);
> >  
> >          struct neighbor_interface_monitor *br_v6 =
> > -            neighbor_interface_monitor_alloc(NEIGH_AF_INET6,
> > +            neighbor_interface_monitor_alloc(ld, NEIGH_AF_INET6,
> >                                               NEIGH_IFACE_BRIDGE, vni);
> >          vector_push(n_ctx_out->monitored_interfaces, &br_v6);
> >  
> > @@ -193,7 +200,8 @@ neighbor_interface_with_vni_exists(struct vector 
> > *monitored_interfaces,
> >  }
> >  
> >  static struct neighbor_interface_monitor *
> > -neighbor_interface_monitor_alloc(enum neighbor_family family,
> > +neighbor_interface_monitor_alloc(struct local_datapath *ld,
> > +                                 enum neighbor_family family,
> >                                   enum neighbor_interface_type type,
> >                                   uint32_t vni)
> >  {
> > @@ -204,8 +212,15 @@ neighbor_interface_monitor_alloc(enum neighbor_family 
> > family,
> >          .type = type,
> >          .vni = vni,
> >      };
> > -    snprintf(nim->if_name, sizeof nim->if_name, "%s%"PRIu32,
> > -             neighbor_interface_prefixes[type], vni);
> > +
> > +    const char *if_name = smap_get(&ld->datapath->external_ids,
> > +                                   neighbor_opt_name[type]);
> > +    if (if_name) {
> > +        snprintf(nim->if_name, sizeof nim->if_name, "%s", if_name);
> 
> The 'nim->if_name' buffer is sized to IFNAMSIZ + 1. If the user provides
> a name longer than that, 'snprintf' will truncate it. While this avoids
> a buffer overflow, it might lead to confusing behavior if the truncated
> name collides with another interface or just doesn't match what the user
> expects.
> 
> Should we perhaps warn if the provided name is too long and ignore the
> config?  We should probably do that early, in northd.

ack, fine. I will fix it.

> 
> > +    } else {
> > +        snprintf(nim->if_name, sizeof nim->if_name, "%s%"PRIu32,
> > +                 neighbor_interface_prefixes[type], vni);
> > +    }
> >      return nim;
> >  }
> >  
> > diff --git a/northd/en-datapath-logical-switch.c 
> > b/northd/en-datapath-logical-switch.c
> > index c3fefd100..800a4e860 100644
> > --- a/northd/en-datapath-logical-switch.c
> > +++ b/northd/en-datapath-logical-switch.c
> > @@ -92,6 +92,25 @@ gather_external_ids(const struct nbrec_logical_switch 
> > *nbs,
> >          smap_add(external_ids, "dynamic-routing-vni", vni);
> >      }
> >  
> > +    const char *bridge_ifname = smap_get(&nbs->other_config,
> > +                                         "dynamic-routing-bridge-ifname");
> > +    if (bridge_ifname) {
> > +        smap_add(external_ids, "dynamic-routing-bridge-ifname", 
> > bridge_ifname);
> > +    }
> > +
> > +    const char *vxlan_ifname = smap_get(&nbs->other_config,
> > +                                        "dynamic-routing-vxlan-ifname");
> > +    if (vxlan_ifname) {
> > +        smap_add(external_ids, "dynamic-routing-vxlan-ifname", 
> > vxlan_ifname);
> > +    }
> > +
> > +    const char *adv_ifname = smap_get(&nbs->other_config,
> > +                                      "dynamic-routing-advertise-ifname");
> > +    if (adv_ifname) {
> > +        smap_add(external_ids, "dynamic-routing-advertise-ifname",
> > +                 adv_ifname);
> > +    }
> > +
> >      const char *redistribute =
> >          smap_get(&nbs->other_config, "dynamic-routing-redistribute");
> >      if (redistribute) {
> > diff --git a/ovn-nb.xml b/ovn-nb.xml
> > index b5fe44e53..638cf756d 100644
> > --- a/ovn-nb.xml
> > +++ b/ovn-nb.xml
> > @@ -795,6 +795,27 @@
> >        <column name="external_ids" key="neutron:network_name">
> >          Another name for the logical switch.
> >        </column>
> > +
> > +      <column name="other_config" key="dynamic-routing-bridge-ifname">
> > +       Set the interface name for the bridge used for EVPN integration.
> > +       The default name is <code>br-$vni</code>.
> > +       Only relevant if <ref column="other_config" 
> > key="dynamic-routing-vni"
> > +                             table="Logical_switch"/> is set to valid VNI.
> > +      </column>
> > +
> > +      <column name="other_config" key="dynamic-routing-vxlan-ifname">
> > +       Set the interface name for the vxlan device used for EVPN 
> > integration.
> > +       The default name is <code>vxlan-$vni</code>.
> > +       Only relevant if <ref column="other_config" 
> > key="dynamic-routing-vni"
> > +                             table="Logical_switch"/> is set to valid VNI.
> > +      </column>
> > +
> > +      <column name="other_config" key="dynamic-routing-advertise-ifname">
> > +       Set the interface name for the advertise device used for EVPN
> > +       integration. The default name is <code>lo-$vni</code>.
> > +       Only relevant if <ref column="other_config" 
> > key="dynamic-routing-vni"
> > +                             table="Logical_switch"/> is set to valid VNI.
> > +      </column>
> >      </group>
> >  
> >      <group title="IP Address Assignment">
> > diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> > index 0d70f8ca2..bb9b19ee7 100644
> > --- a/tests/system-ovn.at
> > +++ b/tests/system-ovn.at
> > @@ -17605,14 +17605,16 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
> > patch-.*/d
> >  AT_CLEANUP
> >  ])
> >  
> > +m4_define([EVPN_SWICTH_TESTS],[
> 
> Typo: SWICTH -> SWITCH.

ack. I will fix it.

> 
> >  OVN_FOR_EACH_NORTHD([
> > -AT_SETUP([dynamic-routing - EVPN])
> > +AT_SETUP([dynamic-routing - EVPN $1 naming])
> >  AT_KEYWORDS([dynamic-routing])
> >  
> >  CHECK_VRF()
> >  CHECK_CONNTRACK()
> >  CHECK_CONNTRACK_NAT()
> >  
> > +IFNAME=$1
> >  vni=10
> >  VRF_RESERVE([$vni])
> >  ovn_start
> > @@ -17636,14 +17638,25 @@ start_daemon ovn-controller
> >  
> >  OVS_WAIT_WHILE([ip link | grep -q ovnvrf$vni:.*UP])
> >  
> > -check ovn-nbctl                                                    \
> > -    -- ls-add ls-evpn                                              \
> > -    -- lsp-add ls-evpn workload1                                   \
> > -    -- lsp-set-addresses workload1 "f0:00:0f:16:01:10 172.16.1.10" \
> > -    -- lsp-add ls-evpn workload2                                   \
> > -    -- lsp-set-addresses workload2 "f0:00:0f:16:01:20 172.16.1.20" \
> > +check ovn-nbctl                                                            
> >                \
> > +    -- ls-add ls-evpn                                                      
> >                \
> > +    -- lsp-add ls-evpn workload1                                           
> >                \
> > +    -- lsp-set-addresses workload1 "f0:00:0f:16:01:10 172.16.1.10"         
> >                \
> > +    -- lsp-add ls-evpn workload2                                           
> >                \
> > +    -- lsp-set-addresses workload2 "f0:00:0f:16:01:20 172.16.1.20"         
> >                \
> >      -- lsp-add-localnet-port ls-evpn ln_port phynet
> 
> Unrelated change?
> 
> >  
> > +[[ $IFNAME = "default" ]] && BR_NAME=br-$vni || BR_NAME=br-evpn
> > +[[ $IFNAME = "default" ]] && VXLAN_NAME=vxlan-$vni || VXLAN_NAME=vxlan-evpn
> > +[[ $IFNAME = "default" ]] && LO_NAME=lo-$vni || LO_NAME=lo-evpn
> > +
> > +if [[ $IFNAME != "default" ]]; then
> > +    check ovn-nbctl                                                        
> >                  \
> > +        -- set logical_switch ls-evpn 
> > other_config:dynamic-routing-bridge-ifname=$BR_NAME   \
> > +        -- set logical_switch ls-evpn 
> > other_config:dynamic-routing-vxlan-ifname=$VXLAN_NAME \
> > +        -- set logical_switch ls-evpn 
> > other_config:dynamic-routing-advertise-ifname=$LO_NAME
> > +fi
> > +
> >  ADD_NAMESPACES(workload1)
> >  ADD_VETH(workload1, workload1, br-int, "172.16.1.10/24", 
> > "f0:00:0f:16:01:10", \
> >           "172.16.1.1")
> > @@ -17662,10 +17675,10 @@ on_exit "ip link del vrf-$vni"
> >  check ip link set vrf-$vni up
> >  
> >  # Add VNI bridge.
> > -check ip link add br-$vni type bridge
> > -on_exit "ip link del br-$vni"
> > -check ip link set br-$vni master vrf-$vni addrgenmode none
> > -check ip link set dev br-$vni up
> > +check ip link add $BR_NAME type bridge
> > +on_exit "ip link del $BR_NAME"
> > +check ip link set $BR_NAME master vrf-$vni addrgenmode none
> > +check ip link set dev $BR_NAME up
> >  
> >  # Add VXLAN VTEP for the VNI (linked to the OVS vxlan_sys_<port> 
> > interface).
> >  # Use a dstport different than the one used by OVS.
> > @@ -17673,18 +17686,18 @@ check ip link set dev br-$vni up
> >  # the $vxlan interface.  FRR should read the dstport from the linked
> >  # vxlan_sys_${vxlan_port} device.
> >  dstport=$((60000 + $vni))
> > -check ip link add vxlan-$vni type vxlan \
> > +check ip link add $VXLAN_NAME type vxlan \
> >      id $vni dstport $dstport local 169.0.0.1 nolearning
> > -on_exit "ip link del vxlan-$vni"
> > -check ip link set dev vxlan-$vni up
> > -check ip link set vxlan-$vni master br-$vni
> > +on_exit "ip link del $VXLAN_NAME"
> > +check ip link set dev $VXLAN_NAME up
> > +check ip link set $VXLAN_NAME master $BR_NAME
> >  
> >  # Add a dummy loopback to the VNI bridge to be used for advertising local
> >  # MACs.
> > -check ip link add name lo-$vni type dummy
> > -on_exit "ip link del lo-$vni"
> > -check ip link set lo-$vni master br-$vni
> > -check ip link set lo-$vni up
> > +check ip link add name $LO_NAME type dummy
> > +on_exit "ip link del $LO_NAME"
> > +check ip link set $LO_NAME master $BR_NAME
> > +check ip link set $LO_NAME up
> >  
> >  AS_BOX([L2 EVPN VTEP and FDB learning])
> >  
> > @@ -17702,7 +17715,7 @@ AT_CHECK([ovn-appctl 
> > evpn/vtep-multicast-group-list], [0], [dnl
> >  ])
> >  
> >  # Simulate remote VTEP.
> > -check bridge fdb append 00:00:00:00:00:00 dev vxlan-$vni dst 169.0.0.10 
> > static permanent
> > +check bridge fdb append 00:00:00:00:00:00 dev $VXLAN_NAME dst 169.0.0.10 
> > static permanent
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/remote-vtep-list], [0], [dnl
> >  IP: 169.0.0.10, port: 4789, vni: $vni
> > @@ -17717,12 +17730,12 @@ OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl 
> > evpn/vtep-multicast-group-list | cut -d
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_PHY_TO_LOG | 
> > grep priority=1050 | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> 
> I think now that this is inside an m4_define the "proper" way is to
> escape this way:
> 
> $[7], $[8]
> 
> This comment also applies to all other instances below.

ack. I will fix it.

> 
> >  
> > priority=1050,tun_id=0xa,tun_src=169.0.0.10,tun_dst=169.0.0.1,in_port=$ofport
> >  
> > actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000001->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_REMOTE_VTEP_OUTPUT | grep output | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=50,reg15=0x8000,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],output:$ofport,resubmit(,OFTABLE_LOCAL_OUTPUT)
> >  priority=50,reg15=0x80000001,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
> >  priority=50,reg15=0x8001,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],output:$ofport,resubmit(,OFTABLE_LOCAL_OUTPUT)
> > @@ -17731,13 +17744,13 @@ 
> > priority=55,reg10=0x1/0x1,reg15=0x80000001,metadata=0x$dp_key 
> > actions=load:0xa90
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | strip_cookie | sort], [0], [dnl
> >  priority=100,reg14=0x80000001,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  ])
> >  
> >  # Simulate more remote VTEPs.
> > -check bridge fdb append 00:00:00:00:00:00 dev vxlan-$vni dst 169.0.0.20 
> > static permanent
> > -check bridge fdb append 00:00:00:00:00:01 dev vxlan-$vni dst 169.0.0.30 
> > extern_learn
> > +check bridge fdb append 00:00:00:00:00:00 dev $VXLAN_NAME dst 169.0.0.20 
> > static permanent
> > +check bridge fdb append 00:00:00:00:00:01 dev $VXLAN_NAME dst 169.0.0.30 
> > extern_learn
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/remote-vtep-list | sort], 
> > [0], [dnl
> >  IP: 169.0.0.10, port: 4789, vni: $vni
> > @@ -17759,7 +17772,7 @@ AT_CHECK([ovn-appctl evpn/vtep-multicast-group-list 
> > | wc -l], [0], [1
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_PHY_TO_LOG | 
> > grep priority=1050 | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=1050,tun_id=0xa,tun_src=169.0.0.10,tun_dst=169.0.0.1,in_port=$ofport
> >  
> > actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000001->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
> >  
> > priority=1050,tun_id=0xa,tun_src=169.0.0.20,tun_dst=169.0.0.1,in_port=$ofport
> >  
> > actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000002->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
> >  
> > priority=1050,tun_id=0xa,tun_src=169.0.0.30,tun_dst=169.0.0.1,in_port=$ofport
> >  
> > actions=load:0x$dp_key->OXM_OF_METADATA[[0..31]],load:0x80000003->NXM_NX_REG14[[]],resubmit(,OFTABLE_LEARN_REMOTE_FDB),resubmit(,OFTABLE_LOG_INGRESS_PIPELINE)
> > @@ -17767,7 +17780,7 @@ 
> > priority=1050,tun_id=0xa,tun_src=169.0.0.30,tun_dst=169.0.0.1,in_port=$ofport
> >  ac
> >  
> >  ovs-ofctl dump-flows br-int table=OFTABLE_REMOTE_VTEP_OUTPUT > 
> > oftable_remote_vtep_output
> >  AT_CHECK_UNQUOTED([grep "output" oftable_remote_vtep_output | grep -v 
> > resubmit | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=50,reg15=0x80000001,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900000a->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
> >  priority=50,reg15=0x80000002,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa9000014->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
> >  priority=50,reg15=0x80000003,metadata=0x$dp_key 
> > actions=load:0xa9000001->NXM_NX_TUN_IPV4_SRC[[]],load:0xa900001e->NXM_NX_TUN_IPV4_DST[[]],load:0xa->NXM_NX_TUN_ID[[0..23]],output:$ofport
> > @@ -17777,7 +17790,7 @@ 
> > priority=55,reg10=0x1/0x1,reg15=0x80000003,metadata=0x$dp_key 
> > actions=load:0xa90
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | strip_cookie | sort], [0], [dnl
> >  priority=100,reg14=0x80000001,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000002,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000003,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> > @@ -17792,9 +17805,9 @@ AT_CHECK([grep "resubmit" 
> > oftable_remote_vtep_output | grep -c "load:0xa900001e"
> >  ])
> >  
> >  # Simulate remote workload.
> > -check bridge fdb add f0:00:0f:16:10:50 dev vxlan-$vni dst 169.0.0.10 
> > static extern_learn
> > -check bridge fdb add f0:00:0f:16:10:60 dev vxlan-$vni dst 169.0.0.20 
> > static extern_learn
> > -check bridge fdb add f0:00:0f:16:10:70 dev vxlan-$vni dst 169.0.0.30 
> > static extern_learn
> > +check bridge fdb add f0:00:0f:16:10:50 dev $VXLAN_NAME dst 169.0.0.10 
> > static extern_learn
> > +check bridge fdb add f0:00:0f:16:10:60 dev $VXLAN_NAME dst 169.0.0.20 
> > static extern_learn
> > +check bridge fdb add f0:00:0f:16:10:70 dev $VXLAN_NAME dst 169.0.0.30 
> > static extern_learn
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' 
> > -f2- | sort], [0], [dnl
> >   MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: 
> > $dp_key
> > @@ -17804,7 +17817,7 @@ OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl 
> > evpn/vtep-fdb-list | cut -d',' -f2- | s
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_GET_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=0 actions=load:0->NXM_NX_REG1[[]]
> >  priority=150,metadata=0x$dp_key,dl_dst=00:00:00:00:00:01 
> > actions=load:0x80000003->NXM_NX_REG1[[]]
> >  priority=150,metadata=0x$dp_key,dl_dst=f0:00:0f:16:10:50 
> > actions=load:0x80000001->NXM_NX_REG1[[]]
> > @@ -17813,7 +17826,7 @@ 
> > priority=150,metadata=0x$dp_key,dl_dst=f0:00:0f:16:10:70 
> > actions=load:0x80000003
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | strip_cookie | sort], [0], [dnl
> >  priority=100,reg14=0x80000001,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000002,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000003,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> > @@ -17842,27 +17855,27 @@ check diff -q fdb_before fdb_after
> >  AS_BOX([L2 EVPN FDB advertising])
> >  
> >  check ovn-nbctl --wait=hv set logical_switch ls-evpn 
> > other_config:dynamic-routing-redistribute=fdb
> > -OVS_WAIT_FOR_OUTPUT([bridge fdb show | grep "lo-10" | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > -f0:00:0f:16:01:10 dev lo-10 master br-10 static
> > -f0:00:0f:16:01:10 dev lo-10 vlan 1 master br-10 static
> > -f0:00:0f:16:01:20 dev lo-10 master br-10 static
> > -f0:00:0f:16:01:20 dev lo-10 vlan 1 master br-10 static
> > +OVS_WAIT_FOR_OUTPUT_UNQUOTED([bridge fdb show | grep $LO_NAME | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > +f0:00:0f:16:01:10 dev $LO_NAME master $BR_NAME static
> > +f0:00:0f:16:01:10 dev $LO_NAME vlan 1 master $BR_NAME static
> > +f0:00:0f:16:01:20 dev $LO_NAME master $BR_NAME static
> > +f0:00:0f:16:01:20 dev $LO_NAME vlan 1 master $BR_NAME static
> >  ])
> >  
> >  check ovn-nbctl --wait=hv lsp-del workload2
> > -OVS_WAIT_FOR_OUTPUT([bridge fdb show | grep "lo-10" | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > -f0:00:0f:16:01:10 dev lo-10 master br-10 static
> > -f0:00:0f:16:01:10 dev lo-10 vlan 1 master br-10 static
> > +OVS_WAIT_FOR_OUTPUT_UNQUOTED([bridge fdb show | grep $LO_NAME | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > +f0:00:0f:16:01:10 dev $LO_NAME master $BR_NAME static
> > +f0:00:0f:16:01:10 dev $LO_NAME vlan 1 master $BR_NAME static
> >  ])
> >  
> >  check ovn-nbctl --wait=hv remove logical_switch ls-evpn other_config 
> > dynamic-routing-redistribute
> > -OVS_WAIT_FOR_OUTPUT([bridge fdb show | grep "lo-10" | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > +OVS_WAIT_FOR_OUTPUT_UNQUOTED([bridge fdb show | grep $LO_NAME | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> >  ])
> >  
> >  check ovn-nbctl --wait=hv set logical_switch ls-evpn 
> > other_config:fdb_age_threshold=300
> >  ovs-ofctl dump-flows br-int table=OFTABLE_LEARN_REMOTE_FDB
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | strip_cookie | sort], [0], [dnl
> >  priority=100,reg14=0x80000001,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000002,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000003,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,hard_timeout=300,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> > @@ -17874,7 +17887,7 @@ 
> > priority=150,reg14=0x80000003,metadata=0x$dp_key,dl_src=f0:00:0f:16:10:70 
> > action
> >  
> >  check ovn-nbctl --wait=hv remove logical_switch ls-evpn other_config 
> > fdb_age_threshold
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int 
> > table=OFTABLE_LEARN_REMOTE_FDB | grep priority | \
> > -                   awk '{print $7, $8}' | strip_cookie | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | strip_cookie | sort], [0], [dnl
> >  priority=100,reg14=0x80000001,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000002,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> >  priority=100,reg14=0x80000003,metadata=0x$dp_key 
> > actions=learn(table=OFTABLE_GET_REMOTE_FDB,priority=150,delete_learned,OXM_OF_METADATA[[]],NXM_OF_ETH_DST[[]]=NXM_OF_ETH_SRC[[]],load:NXM_NX_REG14[[]]->NXM_NX_REG1[[]])
> > @@ -17898,9 +17911,9 @@ rtr_port_key=$(fetch_column Port_Binding tunnel_key 
> > logical_port=lr-ls-evpn)
> >  # ovn-controller needs to add OF rules for ARP lookup but no rules for
> >  # MAC_CACHE use.  These entries do not age out automatically, their 
> > lifetime
> >  # is controlled by the BGP-EVPN control plane.
> > -check ip neigh add dev br-10 172.16.1.50 lladdr f0:00:0f:16:10:50 nud 
> > noarp extern_learn
> > -check ip neigh add dev br-10 172.16.1.60 lladdr f0:00:0f:16:10:60 nud 
> > noarp extern_learn
> > -check ip neigh add dev br-10 172.16.1.70 lladdr f0:00:0f:16:10:70 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.50 lladdr f0:00:0f:16:10:50 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.60 lladdr f0:00:0f:16:10:60 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.70 lladdr f0:00:0f:16:10:70 nud 
> > noarp extern_learn
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d',' 
> > -f2- | sort], [0], [dnl
> >   VNI: 10, MAC: f0:00:0f:16:10:50, IP: 172.16.1.50, dp_key: $dp_key
> > @@ -17912,7 +17925,7 @@ AS_BOX([Check 
> > dynamic-routing-arp-prefer-local=true])
> >  check ovn-nbctl --wait=hv set Logical_Switch ls-evpn 
> > other_config:dynamic-routing-arp-prefer-local=true
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
> >  priority=20,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
> >  priority=20,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> > @@ -17920,7 +17933,7 @@ 
> > priority=20,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=20,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=20,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> > @@ -17928,7 +17941,7 @@ 
> > priority=20,arp,reg0=0xac100146,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE 
> > | grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
> >  actions=drop
> >  
> > priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
> >  actions=drop
> >  ])
> > @@ -17937,7 +17950,7 @@ AS_BOX([Check 
> > dynamic-routing-arp-prefer-local=false])
> >  check ovn-nbctl --wait=hv set Logical_Switch ls-evpn 
> > other_config:dynamic-routing-arp-prefer-local=false
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
> >  priority=200,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
> >  priority=200,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> > @@ -17945,7 +17958,7 @@ 
> > priority=200,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > action
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=200,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=200,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> > @@ -17953,7 +17966,7 @@ 
> > priority=200,arp,reg0=0xac100146,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE 
> > | grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
> >  actions=drop
> >  
> > priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
> >  actions=drop
> >  ])
> > @@ -17969,25 +17982,25 @@ ovn-appctl evpn/vtep-arp-list > arp_after
> >  check diff -q arp_before arp_after
> >  
> >  # Remove remote workload ARP entries and check ovn-controller's state.
> > -check ip neigh del dev br-10 172.16.1.50
> > -check ip neigh del dev br-10 172.16.1.60
> > -check ip neigh del dev br-10 172.16.1.70
> > +check ip neigh del dev $BR_NAME 172.16.1.50
> > +check ip neigh del dev $BR_NAME 172.16.1.60
> > +check ip neigh del dev $BR_NAME 172.16.1.70
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d',' 
> > -f2- | sort], [0], [dnl
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE 
> > | grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
> >  actions=drop
> >  
> > priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
> >  actions=drop
> >  ])
> > @@ -17995,9 +18008,9 @@ 
> > priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:
> >  # Re-add the remote workload ARPs, remove the router, check that flows are
> >  # removed (vtep-arp-list should still list the ARPs as they're learned on
> >  # the logical switch that still exists).
> > -check ip neigh add dev br-10 172.16.1.50 lladdr f0:00:0f:16:10:50 nud 
> > noarp extern_learn
> > -check ip neigh add dev br-10 172.16.1.60 lladdr f0:00:0f:16:10:60 nud 
> > noarp extern_learn
> > -check ip neigh add dev br-10 172.16.1.70 lladdr f0:00:0f:16:10:70 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.50 lladdr f0:00:0f:16:10:50 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.60 lladdr f0:00:0f:16:10:60 nud 
> > noarp extern_learn
> > +check ip neigh add dev $BR_NAME 172.16.1.70 lladdr f0:00:0f:16:10:70 nud 
> > noarp extern_learn
> >  
> >  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-arp-list | cut -d',' 
> > -f2- | sort], [0], [dnl
> >   VNI: 10, MAC: f0:00:0f:16:10:50, IP: 172.16.1.50, dp_key: $dp_key
> > @@ -18006,7 +18019,7 @@ OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl 
> > evpn/vtep-arp-list | cut -d',' -f2- | s
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  priority=100,reg0=0xac10010a,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:01:10,load:0x1->NXM_NX_REG10[[6]]
> >  priority=200,reg0=0xac100132,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:50,load:0x1->NXM_NX_REG10[[6]]
> >  priority=200,reg0=0xac10013c,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > actions=mod_dl_dst:f0:00:0f:16:10:60,load:0x1->NXM_NX_REG10[[6]]
> > @@ -18014,7 +18027,7 @@ 
> > priority=200,reg0=0xac100146,reg15=0x$rtr_port_key,metadata=0x$rtr_dp_key 
> > action
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  
> > priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=200,arp,reg0=0xac100132,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> >  
> > priority=200,arp,reg0=0xac10013c,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60
> >  actions=load:0x1->NXM_NX_REG10[[6]]
> > @@ -18029,11 +18042,11 @@ AT_CHECK_UNQUOTED([ovn-appctl evpn/vtep-arp-list 
> > | cut -d',' -f2- | sort], [0],
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_BINDING | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  ])
> >  
> >  AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_LOOKUP | 
> > grep priority | \
> > -                   awk '{print $7, $8}' | sort], [0], [dnl
> > +                   awk '{print $ 7, $ 8}' | sort], [0], [dnl
> >  ])
> >  
> >  AS_BOX([L2 EVPN ARP advertising])
> > @@ -18048,32 +18061,32 @@ check ovn-nbctl --wait=hv set logical_switch 
> > ls-evpn other_config:dynamic-routin
> >  check_row_count Advertised_MAC_Binding 1 ip=172.16.1.10 
> > mac='f0\:00\:0f\:16\:01\:10' datapath=$ls_evpn_uuid
> >  check_row_count Advertised_MAC_Binding 1 ip=172.16.1.1 
> > mac='f0\:00\:0f\:16\:01\:01' datapath=$ls_evpn_uuid
> >  
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.10 lladdr 
> > f0:00:0f:16:01:10 NOARP'])
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.1 lladdr 
> > f0:00:0f:16:01:01 NOARP'])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.10 lladdr f0:00:0f:16:01:10 NOARP'])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.1 lladdr f0:00:0f:16:01:01 NOARP'])
> 
> AT_CHECK() should work fine here.
> 
> >  
> > -OVS_WAIT_FOR_OUTPUT([bridge fdb show | grep "lo-10" | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > -f0:00:0f:16:01:01 dev lo-10 master br-10 static
> > -f0:00:0f:16:01:01 dev lo-10 vlan 1 master br-10 static
> > -f0:00:0f:16:01:10 dev lo-10 master br-10 static
> > -f0:00:0f:16:01:10 dev lo-10 vlan 1 master br-10 static
> > +OVS_WAIT_FOR_OUTPUT_UNQUOTED([bridge fdb show | grep $LO_NAME | grep 
> > "f0:00:0f:16:01" | sort], [0], [dnl
> > +f0:00:0f:16:01:01 dev $LO_NAME master $BR_NAME static
> > +f0:00:0f:16:01:01 dev $LO_NAME vlan 1 master $BR_NAME static
> > +f0:00:0f:16:01:10 dev $LO_NAME master $BR_NAME static
> > +f0:00:0f:16:01:10 dev $LO_NAME vlan 1 master $BR_NAME static
> >  ])
> >  
> >  check ovn-nbctl --wait=hv lsp-add ls-evpn workload2         \
> >      -- lsp-set-addresses workload2 "f0:00:0f:16:01:20 172.16.1.20"
> >  
> >  check_row_count Advertised_MAC_Binding 1 ip=172.16.1.20 
> > mac='f0\:00\:0f\:16\:01\:20' datapath=$ls_evpn_uuid
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.20 lladdr 
> > f0:00:0f:16:01:20 NOARP'])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.20 lladdr f0:00:0f:16:01:20 NOARP'])
> 
> AT_CHECK().
ack. I will fix it.

Regards,
Lorenzo

> 
> >  
> >  check ovn-nbctl --wait=hv lsp-del workload2
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.20 lladdr 
> > f0:00:0f:16:01:20 NOARP'], [1])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.20 lladdr f0:00:0f:16:01:20 NOARP'], [1])
> >  
> 
> AT_CHECK().
> 
> >  check ovn-nbctl --wait=hv lsp-del workload1
> >  check_row_count Advertised_MAC_Binding 1
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.10 lladdr 
> > f0:00:0f:16:01:10 NOARP'], [1])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.10 lladdr f0:00:0f:16:01:10 NOARP'], [1])
> >  
> 
> AT_CHECK().
> 
> >  check ovn-nbctl --wait=hv lrp-del lr-ls-evpn
> >  check_row_count Advertised_MAC_Binding 0
> > -AT_CHECK([ip neigh show dev br-10 nud noarp | grep -q '172.16.1.1 lladdr 
> > f0:00:0f:16:01:01 NOARP'], [1])
> > +AT_CHECK_UNQUOTED([ip neigh show dev $BR_NAME nud noarp | grep -q 
> > '172.16.1.1 lladdr f0:00:0f:16:01:01 NOARP'], [1])
> >  
> 
> AT_CHECK().
> 
> >  check ovn-nbctl --wait=hv ls-del ls-evpn
> >  check ovn-nbctl --wait=hv lr-del lr
> > @@ -18088,6 +18101,10 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
> > patch-.*/d
> >  /connection dropped.*/d"])
> >  AT_CLEANUP
> >  ])
> > +])
> > +
> > +EVPN_SWICTH_TESTS([default])
> > +EVPN_SWICTH_TESTS([custom])
> >  
> >  OVN_FOR_EACH_NORTHD([
> >  AT_SETUP([Router reroute policies - output port])
> 
> Regards,
> Dumitru
> 
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to