Thank you Ales!
Acked-by: Rosemarie O'Riorden <[email protected]>
On 10/19/26 3:25 PM, Ales Musil via dev wrote:
Do not attempt to remove FDB learned via VTEP LSP with no address,
otherwise we end up in a loop where the FDBs are learned through VTEP
and removed right away.
Fixes: 03fd372c879b ("northd: Properly cleanup FDB entries.")
Signed-off-by: Ales Musil <[email protected]>
---
northd/northd.c | 13 +++++++++----
tests/ovn-controller-vtep.at | 7 +++++++
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/northd/northd.c b/northd/northd.c
index 7c4cb5a62..27683fdd4 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -1314,6 +1314,13 @@ lsp_disable_arp_nd_rsp(const struct
nbrec_logical_switch_port *nbsp)
return smap_get_bool( ->options, "disable_arp_nd_rsp", false);
}
+static bool
+port_can_learn_fdb(const struct ovn_port *op)
+{
+ return op->nbsp && lsp_is_enabled(op->nbsp) &&
+ (op->has_unknown || lsp_is_vtep(op->nbsp));
+ }
+
static bool
lsp_is_type_changed(const struct sbrec_port_binding *sb,
const struct nbrec_logical_switch_port *nbsp,
@@ -4367,9 +4374,7 @@ ovn_port_add_tnlid(struct ovn_port *op, uint32_t
tunnel_key)
op->od->port_key_hint = tunnel_key;
}
- /* Track the assigned tunnel_key for enabled LSP
- * with unknown address. */
- if (op->nbsp && lsp_is_enabled(op->nbsp) && op->has_unknown) {
+ if (port_can_learn_fdb(op)) {
ovs_assert(ovn_add_tnlid(&op->od->fdb_ports_tnlids, tunnel_key));
}
}
@@ -4425,7 +4430,7 @@ ovn_port_allocate_key(struct ovn_port *op)
return false;
}
- if (op->nbsp && lsp_is_enabled(op->nbsp) && op->has_unknown) {
+ if (port_can_learn_fdb(op)) {
ovs_assert(ovn_add_tnlid(&op->od->fdb_ports_tnlids,
op->tunnel_key));
}
diff --git a/tests/ovn-controller-vtep.at b/tests/ovn-controller-vtep.at
index 0e8a1e008..aa8da62a6 100644
--- a/tests/ovn-controller-vtep.at
+++ b/tests/ovn-controller-vtep.at
@@ -620,7 +620,11 @@ OVS_WAIT_UNTIL([vtep-ctl list Ucast_Macs_Local | grep -q
aa:bb:cc:dd:ff:02])
# Check that first MACs is propagated to FDB table
wait_row_count fdb 1 mac='"aa:bb:cc:dd:ff:01"'
+uuid1=$(fetch_column fdb _uuid mac='"aa:bb:cc:dd:ff:01"')
+check test -n "$uuid1"
wait_row_count fdb 1 mac='"aa:bb:cc:dd:ff:02"'
+uuid2=$(fetch_column fdb _uuid mac='"aa:bb:cc:dd:ff:02"')
+check test -n "$uuid2"
# Switch context
as
@@ -632,6 +636,9 @@ OVS_WAIT_WHILE([vtep-ctl list-remote-macs lswitch1 | grep
-q aa:bb:cc:dd:ff:01])
OVS_WAIT_UNTIL([vtep-ctl list-remote-macs lswitch1 | grep -q
aa:bb:cc:dd:ff:02])
OVS_WAIT_WHILE([vtep-ctl list-remote-macs lswitch0 | grep -q
aa:bb:cc:dd:ff:02])
+check test "$uuid1" = "$(fetch_column fdb _uuid mac='"aa:bb:cc:dd:ff:01"')"
+check test "$uuid2" = "$(fetch_column fdb _uuid mac='"aa:bb:cc:dd:ff:02"')"
+
# Switch context to br-vtep1
as br-vtep1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev