ovn-northd: Set logical_datapath in each Bindings record.
authorBen Pfaff <blp@nicira.com>
Thu, 23 Apr 2015 23:14:49 +0000 (16:14 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 29 Apr 2015 00:05:52 +0000 (17:05 -0700)
Without a logical_datapath, ovn-controller won't be able to tell which
logical datapath a logical port belongs to, thus it won't be able to
implement logical flows related to the logical port.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Russell Bryant <rbryant@redhat.com>
Acked-by: Justin Pettit <jpettit@nicira.com>
ovn/northd/ovn-northd.c

index ce40c66..34ac995 100644 (file)
@@ -491,6 +491,13 @@ set_bindings(struct northd_context *ctx)
             }
         }
 
+        struct uuid logical_datapath;
+        if (lport->lswitch) {
+            logical_datapath = lport->lswitch->header_.uuid;
+        } else {
+            uuid_zero(&logical_datapath);
+        }
+
         if (binding) {
             /* We found an existing binding for this logical port.  Update its
              * contents. */
@@ -510,6 +517,10 @@ set_bindings(struct northd_context *ctx)
             if (!tags_equal(binding, lport)) {
                 sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag);
             }
+            if (!uuid_equals(&binding->logical_datapath, &logical_datapath)) {
+                sbrec_bindings_set_logical_datapath(binding,
+                                                    logical_datapath);
+            }
         } else {
             /* There is no binding for this logical port, so create one. */
 
@@ -521,6 +532,8 @@ set_bindings(struct northd_context *ctx)
                 sbrec_bindings_set_parent_port(binding, lport->parent_name);
                 sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag);
             }
+
+            sbrec_bindings_set_logical_datapath(binding, logical_datapath);
         }
     }
 
@@ -719,6 +732,7 @@ main(int argc, char *argv[])
     ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_mac);
     ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_tag);
     ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_parent_port);
+    ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_logical_datapath);
     ovsdb_idl_add_column(ovnsb_idl, &sbrec_pipeline_col_logical_datapath);
     ovsdb_idl_omit_alert(ovnsb_idl, &sbrec_pipeline_col_logical_datapath);
     ovsdb_idl_add_column(ovnsb_idl, &sbrec_pipeline_col_table_id);