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]> --- 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); + } 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],[ 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 +[[ $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 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']) -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']) 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]) 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]) 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]) 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]) -- 2.52.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
