[ovs-dev] [PATCH ovn v2] controller: Set chassis for container port.

Russell Bryant rbryant at redhat.com
Wed May 6 02:30:51 UTC 2015


ovn-controller updates the chassis column of the Bindings table in
OVN_Southbound when a logical port appears on the local switch.  A
logical port that has a parent will never appear on a switch managed
by ovn-controller.  When a parent port appears, all child container
ports should be updated as being on that chassis, as well.

Signed-off-by: Russell Bryant <rbryant at redhat.com>
---
 ovn/controller/bindings.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)


v1->v2
 - Applied suggestions from Justin.


diff --git a/ovn/controller/bindings.c b/ovn/controller/bindings.c
index ef233c0..e5b4827 100644
--- a/ovn/controller/bindings.c
+++ b/ovn/controller/bindings.c
@@ -76,12 +76,14 @@ bindings_run(struct controller_ctx *ctx)
 {
     const struct sbrec_bindings *bindings_rec;
     struct ovsdb_idl_txn *txn;
-    struct sset lports;
+    struct sset lports, all_lports;
     const char *name;
     int retval;
 
     sset_init(&lports);
+    sset_init(&all_lports);
     get_local_iface_ids(ctx, &lports);
+    sset_clone(&all_lports, &lports);
 
     txn = ovsdb_idl_txn_create(ctx->ovnsb_idl);
     ovsdb_idl_txn_add_comment(txn,
@@ -89,7 +91,9 @@ bindings_run(struct controller_ctx *ctx)
                               ctx->chassis_id);
 
     SBREC_BINDINGS_FOR_EACH(bindings_rec, ctx->ovnsb_idl) {
-        if (sset_find_and_delete(&lports, bindings_rec->logical_port)) {
+        if (sset_find_and_delete(&lports, bindings_rec->logical_port) ||
+                (bindings_rec->parent_port && bindings_rec->parent_port[0] &&
+                 sset_contains(&all_lports, bindings_rec->parent_port))) {
             if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) {
                 continue;
             }
@@ -116,6 +120,7 @@ bindings_run(struct controller_ctx *ctx)
         VLOG_DBG("No binding record for lport %s", name);
     }
     sset_destroy(&lports);
+    sset_destroy(&all_lports);
 }
 
 void
-- 
2.1.0




More information about the dev mailing list