Commit b337750e45be ("northd: Incremental processing of VIF changes in
'northd' node.") skipped non-VIF ports from processing, and 860d5e4138ed
("northd: Enable incremental processing for remote ports.") later
observed that "remote" ports are almost identical to VIF ports. The
same holds for ports of type "localport": every flow whose content
differs from a plain VIF (most notably the ARP/ND responder flows, which
a localport gets regardless of its "up" state) is owned by the port's
own lflow_ref and is regenerated by the existing per-port incremental
path, and a localport mutates no aggregate od->* state that a VIF would
not. Enable that processing path for localport ports.
Add a test covering incremental create/update/delete of a localport,
including that its ARP responder reply flow is present regardless of the
"up" state and removed on deletion.
Assisted-by: Claude Opus 4.8, Claude Code
Signed-off-by: Lucas Vargas Dias <[email protected]>
---
northd/northd.c | 10 ++++++++--
tests/ovn-northd.at | 31 +++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/northd/northd.c b/northd/northd.c
index 4ca9820d4..7d0cd4f14 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -1284,6 +1284,12 @@ lsp_is_localnet(const struct nbrec_logical_switch_port
*nbsp)
return !strcmp(nbsp->type, "localnet");
}
+static bool
+lsp_is_localport(const struct nbrec_logical_switch_port *nbsp)
+{
+ return !strcmp(nbsp->type, "localport");
+}
+
static bool
lsp_is_vtep(const struct nbrec_logical_switch_port *nbsp)
{
@@ -4677,8 +4683,8 @@ destroy_northd_tracked_data(struct northd_data *nd)
static bool
lsp_can_be_inc_processed(const struct nbrec_logical_switch_port *nbsp)
{
- /* Support only normal VIF and remote ports for now. */
- if (nbsp->type[0] && !lsp_is_remote(nbsp)) {
+ /* Support only normal VIF, remote and localport ports for now. */
+ if (nbsp->type[0] && !lsp_is_remote(nbsp) && !lsp_is_localport(nbsp)) {
return false;
}
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 810e9f2d7..2dcd0f8e0 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -12030,6 +12030,37 @@ check_recompute_counter 0 0 0 0 0 0
CHECK_NO_CHANGE_AFTER_RECOMPUTE(1)
+dnl Localports should be incrementally processed
+check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats
+check ovn-nbctl --wait=sb lsp-add ls0 lp0 \
+ -- lsp-set-type lp0 localport \
+ -- lsp-set-addresses lp0 "aa:aa:aa:00:00:30 192.168.0.30"
+check_recompute_counter 0 0 0 0 0 0
+
+# A localport gets an ARP responder reply flow regardless of its "up" state.
+AT_CHECK([ovn-sbctl dump-flows ls0 | grep ls_in_arp_rsp | \
+ grep 'arp.tpa == 192.168.0.30' | grep -c 'arp.op = 2'], [0], [1
+])
+
+check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats
+check ovn-nbctl --wait=sb \
+ lsp-set-addresses lp0 "aa:aa:aa:00:00:31 192.168.0.31"
+check_recompute_counter 0 0 0 0 0 0
+
+AT_CHECK([ovn-sbctl dump-flows ls0 | grep ls_in_arp_rsp | \
+ grep 'arp.tpa == 192.168.0.31' | grep -c 'arp.op = 2'], [0], [1
+])
+
+check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats
+check ovn-nbctl --wait=sb lsp-del lp0
+check_recompute_counter 0 0 0 0 0 0
+
+AT_CHECK([ovn-sbctl dump-flows ls0 | grep ls_in_arp_rsp | \
+ grep -c '192.168.0.3'], [1], [0
+])
+
+CHECK_NO_CHANGE_AFTER_RECOMPUTE(1)
+
check ovn-nbctl --wait=hv ls-del ls0
OVN_CLEANUP([hv1])
--
2.43.0
--
_'Esta mensagem é direcionada apenas para os endereços constantes no
cabeçalho inicial. Se você não está listado nos endereços constantes no
cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa
mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão
imediatamente anuladas e proibidas'._
* **'Apesar do Magazine Luiza tomar
todas as precauções razoáveis para assegurar que nenhum vírus esteja
presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por
quaisquer perdas ou danos causados por esse e-mail ou por seus anexos'.*
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev