When localport is removed from NB, and it is the last port
remaining on the host, it is not part of local datapath
anymore. Which can cause troubles when there is recompute
happening in between the removal from NB and the removal
of interface from host. The localport would stay in lport_ids
set, so any new localport that happens to have the same unique
lport key wouldn't be initiliazed properly thorugh I-P.

Remove the localport port binding from local datapath
even if it was part of the that said datapath before.

Signed-off-by: Ales Musil <[email protected]>
---
 controller/binding.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/controller/binding.c b/controller/binding.c
index 92baebd29..a900c9a50 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -2131,6 +2131,15 @@ handle_deleted_lport(const struct sbrec_port_binding *pb,
         return;
     }
 
+    /*
+     * Remove localport that was part of local datapath that is not
+     * considered to be local anymore.
+     */
+    if (!ld && !strcmp(pb->type, "localport") &&
+        sset_find(&b_ctx_out->related_lports->lport_names, pb->logical_port)) {
+        remove_related_lport(pb, b_ctx_out);
+    }
+
     /* If the binding is not local, if 'pb' is a L3 gateway port, we should
      * remove its peer, if that one is local.
      */
-- 
2.35.1

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

Reply via email to