Similar to commit 1431276926 ("controller: fix ovn patch port
incremental processing"), update peer logical flows when the related
patch port is removed.

Reported-at: https://issues.redhat.com/browse/FDP-947
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
Changes in v2:
- use OFTABLE_LOG_TO_PHY for table 65
---
 controller/physical.c | 14 ++++++++-----
 tests/ovn.at          | 47 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/controller/physical.c b/controller/physical.c
index c56c73c20..affa559d5 100644
--- a/controller/physical.c
+++ b/controller/physical.c
@@ -2413,12 +2413,16 @@ physical_handle_flows_for_lport(const struct 
sbrec_port_binding *pb,
 
     if (!removed) {
         physical_eval_port_binding(p_ctx, pb, flow_table);
-        if (!strcmp(pb->type, "patch")) {
-            const struct sbrec_port_binding *peer =
-                get_binding_peer(p_ctx->sbrec_port_binding_by_name, pb);
-            if (peer) {
-                physical_eval_port_binding(p_ctx, peer, flow_table);
+    }
+
+    if (!strcmp(pb->type, "patch")) {
+        const struct sbrec_port_binding *peer =
+            get_binding_peer(p_ctx->sbrec_port_binding_by_name, pb);
+        if (peer) {
+            if (removed) {
+                ofctrl_remove_flows(flow_table, &peer->header_.uuid);
             }
+            physical_eval_port_binding(p_ctx, peer, flow_table);
         }
     }
 
diff --git a/tests/ovn.at b/tests/ovn.at
index de01a649f..3aad19a19 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -40752,3 +40752,50 @@ AT_CHECK([as hv1 ovs-ofctl dump-flows br-int 
table=OFTABLE_PHY_TO_LOG | grep -v
 OVN_CLEANUP([hv1],[hv2])
 AT_CLEANUP
 ])
+
+OVN_FOR_EACH_NORTHD([
+AT_SETUP([requested-tnl-key-recompute])
+AT_KEYWORDS([requested-tnl-key-recompute])
+
+m4_define([OFTABLE_LOG_TO_PHY], [65])
+
+ovn_start
+net_add n1
+
+check ovn-nbctl ls-add ls
+check ovn-nbctl lsp-add ls lsp -- lsp-set-addresses lsp "00:00:10:01:02:01 
10.0.0.1"
+
+check ovn-nbctl lr-add lr
+check ovn-nbctl set logical_router lr options:mac_binding_age_threshold=3600
+check ovn-nbctl lrp-add lr lr-ls 00:00:00:00:ff:01 10.0.0.254/24
+check ovn-nbctl lsp-add ls ls-lr
+check ovn-nbctl lsp-set-type ls-lr router
+check ovn-nbctl lsp-set-addresses ls-lr router
+check ovn-nbctl lsp-set-options ls-lr router-port=lr-ls
+
+sim_add hv1
+
+as hv1
+ovs-vsctl add-br br-phys
+ovn_attach n1 br-phys 192.168.0.1
+ovs-vsctl set open . external_ids:ovn-bridge-mappings=physnet1:br-phys
+ovs-vsctl add-port br-int vif -- set Interface vif external-ids:iface-id=lsp
+
+check ovn-nbctl --wait=hv sync
+wait_for_ports_up
+
+check ovn-nbctl --wait=hv set logical_router_port lr-ls 
options:requested-tnl-key=42
+ls_tnl_key=$(fetch_column datapath_binding tunnel_key external_ids:name=ls)
+AT_CHECK([ovs-ofctl dump-flows br-int table=OFTABLE_LOG_TO_PHY | grep 
metadata=0x${ls_tnl_key} | grep -q load:0x2a->NXM_NX_REG14])
+
+check ovn-nbctl lrp-del lr-ls
+check ovn-nbctl                                             \
+    -- lrp-add lr lr-ls 00:00:00:00:10:00 192.168.10.1/24   \
+    -- set logical_router_port lr-ls options:requested-tnl-key=43
+check ovn-nbctl --wait=hv sync
+
+AT_CHECK([ovs-ofctl dump-flows br-int table=OFTABLE_LOG_TO_PHY | grep 
metadata=0x${ls_tnl_key} | grep -q load:0x2b->NXM_NX_REG14])
+
+OVN_CLEANUP([hv1])
+AT_CLEANUP
+])
-- 
2.47.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to