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
