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]>
---
Changes since v1:
- Limit max device name size
- Add NEWS entry
- cosmetics in system-ovn.at
---
 NEWS                                |   2 +
 controller/neighbor.c               |  31 +++--
 northd/en-datapath-logical-switch.c |  41 ++++++
 ovn-nb.xml                          |  21 ++++
 tests/system-ovn.at                 | 189 +++++++++++++++-------------
 5 files changed, 190 insertions(+), 94 deletions(-)

diff --git a/NEWS b/NEWS
index 6fca5dd9a..87500de03 100644
--- a/NEWS
+++ b/NEWS
@@ -78,6 +78,8 @@ Post v25.09.0
      ports instead of per-chassis ports, reducing port count for large scale
      environments. Default is disabled.
    - Add fallback support for Network Function.
+   - Introduce the capability to specify EVPN device names using Logical_Switch
+     other_config column.
 
 OVN v25.09.0 - xxx xx xxxx
 --------------------------
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);
+    } 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 71b16ffe0..ed0385a48 100644
--- a/northd/en-datapath-logical-switch.c
+++ b/northd/en-datapath-logical-switch.c
@@ -15,6 +15,7 @@
  */
 
 #include <config.h>
+#include <net/if.h>
 
 #include "openvswitch/hmap.h"
 #include "openvswitch/util.h"
@@ -92,6 +93,46 @@ 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) {
+        if (strlen(bridge_ifname) > IFNAMSIZ) {
+            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
+            VLOG_WARN_RL(&rl, "dynamic-routing-bridge-ifname %s is too long",
+                         bridge_ifname);
+        } else {
+            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) {
+        if (strlen(vxlan_ifname) > IFNAMSIZ) {
+            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
+            VLOG_WARN_RL(&rl, "dynamic-routing-vxlan-ifname %s is too long",
+                         vxlan_ifname);
+        } else {
+            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) {
+        if (strlen(adv_ifname) > IFNAMSIZ) {
+            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
+            VLOG_WARN_RL(&rl,
+                         "dynamic-routing-advertise-ifname %s is too long",
+                         adv_ifname);
+        } else {
+            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 730293e97..19ccfc7ba 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 303b10894..e3e233966 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -17609,14 +17609,16 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
patch-.*/d
 AT_CLEANUP
 ])
 
+m4_define([EVPN_SWITCH_TESTS],[
 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
@@ -17648,6 +17650,17 @@ check ovn-nbctl                                        
                       \
     -- lsp-set-addresses workload2 "f0:00:0f:16:01:20 172.16.1.20 172:16::20" \
     -- lsp-add-localnet-port ls-evpn ln_port phynet
 
+[[ $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::10/64", "f0:00:0f:16:01:10", \
          "172:16::1", "nodad", "172.16.1.10/24", "172.16.1.1")
@@ -17666,10 +17679,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.
@@ -17677,18 +17690,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])
 
@@ -17706,7 +17719,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
@@ -17721,12 +17734,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
 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)
@@ -17735,13 +17748,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
@@ -17763,7 +17776,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)
@@ -17771,7 +17784,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
@@ -17781,7 +17794,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[[]])
@@ -17796,9 +17809,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
@@ -17808,7 +17821,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[[]]
@@ -17817,7 +17830,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[[]])
@@ -17846,27 +17859,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[[]])
@@ -17878,7 +17891,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[[]])
@@ -17902,13 +17915,13 @@ 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
 
-check ip -6 neigh add dev br-10 172:16::50 lladdr f0:00:0f:16:10:50 nud noarp 
extern_learn
-check ip -6 neigh add dev br-10 172:16::60 lladdr f0:00:0f:16:10:60 nud noarp 
extern_learn
-check ip -6 neigh add dev br-10 172:16::70 lladdr f0:00:0f:16:10:70 nud noarp 
extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::50 lladdr f0:00:0f:16:10:50 nud 
noarp extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::60 lladdr f0:00:0f:16:10:60 nud 
noarp extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::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
@@ -17923,7 +17936,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]]
@@ -17934,7 +17947,7 @@ 
priority=20,reg4=0x1720016,reg5=0,reg6=0,reg7=0x70,reg15=0x$rtr_port_key,metadat
 ])
 
 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]]
@@ -17945,7 +17958,7 @@ 
priority=20,icmp6,reg0=0x1720016,reg1=0,reg2=0,reg3=0x70,reg14=0x$rtr_port_key,m
 ])
 
 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
 ])
@@ -17954,7 +17967,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]]
@@ -17965,7 +17978,7 @@ 
priority=200,reg4=0x1720016,reg5=0,reg6=0,reg7=0x70,reg15=0x$rtr_port_key,metada
 ])
 
 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]]
@@ -17976,7 +17989,7 @@ 
priority=200,icmp6,reg0=0x1720016,reg1=0,reg2=0,reg3=0x70,reg14=0x$rtr_port_key,
 ])
 
 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
 ])
@@ -17992,29 +18005,29 @@ 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
 
-check ip -6 neigh del dev br-10 172:16::50
-check ip -6 neigh del dev br-10 172:16::60
-check ip -6 neigh del dev br-10 172:16::70
+check ip -6 neigh del dev $BR_NAME 172:16::50
+check ip -6 neigh del dev $BR_NAME 172:16::60
+check ip -6 neigh del dev $BR_NAME 172:16::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
 ])
@@ -18022,13 +18035,13 @@ 
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
 
-check ip -6 neigh add dev br-10 172:16::50 lladdr f0:00:0f:16:10:50 nud noarp 
extern_learn
-check ip -6 neigh add dev br-10 172:16::60 lladdr f0:00:0f:16:10:60 nud noarp 
extern_learn
-check ip -6 neigh add dev br-10 172:16::70 lladdr f0:00:0f:16:10:70 nud noarp 
extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::50 lladdr f0:00:0f:16:10:50 nud 
noarp extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::60 lladdr f0:00:0f:16:10:60 nud 
noarp extern_learn
+check ip -6 neigh add dev $BR_NAME 172:16::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
@@ -18040,7 +18053,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]]
@@ -18051,7 +18064,7 @@ 
priority=200,reg4=0x1720016,reg5=0,reg6=0,reg7=0x70,reg15=0x$rtr_port_key,metada
 ])
 
 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]]
@@ -18072,11 +18085,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])
@@ -18094,40 +18107,40 @@ check_row_count Advertised_MAC_Binding 1 
ip='172\:16\:\:10' mac='f0\:00\:0f\:16\
 check_row_count Advertised_MAC_Binding 1 ip='172\:16\:\:1' 
mac='f0\:00\:0f\:16\:01\:01' datapath=$ls_evpn_uuid
 check_row_count Advertised_MAC_Binding 4
 
-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([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::10 lladdr 
f0:00:0f:16:01:10 NOARP'])
-AT_CHECK([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::1 lladdr 
f0:00:0f:16:01:01 NOARP'])
+AT_CHECK([ip neigh show dev $BR_NAME nud noarp | grep -q '172.16.1.10 lladdr 
f0:00:0f:16:01:10 NOARP'])
+AT_CHECK([ip neigh show dev $BR_NAME nud noarp | grep -q '172.16.1.1 lladdr 
f0:00:0f:16:01:01 NOARP'])
+AT_CHECK([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::10 lladdr 
f0:00:0f:16:01:10 NOARP'])
+AT_CHECK([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::1 lladdr 
f0:00:0f:16:01:01 NOARP'])
 
-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 172:16::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([ip neigh show dev $BR_NAME nud noarp | grep -q '172.16.1.20 lladdr 
f0:00:0f:16:01:20 NOARP'])
 
 check_row_count Advertised_MAC_Binding 1 ip='172\:16\:\:20' 
mac='f0\:00\:0f\:16\:01\:20' datapath=$ls_evpn_uuid
-AT_CHECK([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::20 lladdr 
f0:00:0f:16:01:20 NOARP'])
+AT_CHECK([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::20 lladdr 
f0:00:0f:16:01:20 NOARP'])
 
 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([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::20 lladdr 
f0:00:0f:16:01:20 NOARP'], [1])
+AT_CHECK([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([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::20 lladdr 
f0:00:0f:16:01:20 NOARP'], [1])
 
 check ovn-nbctl --wait=hv lsp-del workload1
 check_row_count Advertised_MAC_Binding 2
-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([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::10 lladdr 
f0:00:0f:16:01:10 NOARP'], [1])
+AT_CHECK([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([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::10 lladdr 
f0:00:0f:16:01:10 NOARP'], [1])
 
 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([ip -6 neigh show dev br-10 nud noarp | grep -q '172:16::1 lladdr 
f0:00:0f:16:01:01 NOARP'], [1])
+AT_CHECK([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([ip -6 neigh show dev $BR_NAME nud noarp | grep -q '172:16::1 lladdr 
f0:00:0f:16:01:01 NOARP'], [1])
 
 check ovn-nbctl --wait=hv ls-del ls-evpn
 check ovn-nbctl --wait=hv lr-del lr
@@ -18142,6 +18155,10 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
patch-.*/d
 /connection dropped.*/d"])
 AT_CLEANUP
 ])
+])
+
+EVPN_SWITCH_TESTS([default])
+EVPN_SWITCH_TESTS([custom])
 
 OVN_FOR_EACH_NORTHD([
 AT_SETUP([Router reroute policies - output port])
-- 
2.52.0

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

Reply via email to