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,
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?
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.
> + } 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.
> 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.
>
> 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().
>
> 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