diff mbox

[ovs-dev,11/14] Support physical endpoint based binding for SW gateway logical ports

Message ID 1458184519-97072-6-git-send-email-dball@vmware.com
State Deferred
Headers show

Commit Message

Darrell Ball March 17, 2016, 3:15 a.m. UTC
Signed-off-by: Darrell Ball <dball@vmware.com>
---
 ovn/controller/binding.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c
index d3ca9c9..d947329 100644
--- a/ovn/controller/binding.c
+++ b/ovn/controller/binding.c
@@ -181,7 +181,9 @@  binding_run(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int,
             = shash_find_and_delete(&lports, binding_rec->logical_port);
         if (iface_rec
             || (binding_rec->parent_port && binding_rec->parent_port[0] &&
-                sset_contains(&all_lports, binding_rec->parent_port))) {
+                sset_contains(&all_lports, binding_rec->parent_port))
+            || ((!strcmp(binding_rec->type, "gw")) &&
+                (binding_rec->chassis == chassis_rec))) {
             if (binding_rec->parent_port && binding_rec->parent_port[0]) {
                 /* Add child logical port to the set of all local ports. */
                 sset_add(&all_lports, binding_rec->logical_port);
@@ -207,9 +209,14 @@  binding_run(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int,
             }
         } else if (binding_rec->chassis == chassis_rec) {
             if (ctx->ovnsb_idl_txn) {
-                VLOG_INFO("Releasing lport %s from this chassis.",
-                          binding_rec->logical_port);
-                sbrec_port_binding_set_chassis(binding_rec, NULL);
+
+                if (strcmp(binding_rec->type, "gw")) {
+                    /* gw logical port bindings are not based
+                     * on external_ids mappings */
+                    sbrec_port_binding_set_chassis(binding_rec, NULL);
+                    VLOG_INFO("Releasing lport %s from this chassis.",
+                               binding_rec->logical_port);
+                }
             }
         } else if (!binding_rec->chassis
                    && !strcmp(binding_rec->type, "localnet")) {