ovn-nbd updates the Bindings table of the OVN database when there are updates to the OVN_Northbound database. This update makes ovn-nbd copy over the container integration related fields from OVN_Northbound into the Bindings table.
Signed-off-by: Russell Bryant <rbry...@redhat.com> --- ovn/northd/ovn-northd.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 7e2df43..0a2756e 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -114,6 +114,35 @@ macs_equal(char **binding_macs_, size_t b_n_macs, return (i == b_n_macs) ? true : false; } +static bool +parents_equal(const struct sbrec_bindings *binding, + const struct nbrec_logical_port *lport) +{ + if (!!binding->parent_port != !!lport->parent_name) { + /* One is set and the other is not. */ + return false; + } + + if (binding->parent_port) { + /* Both are set. */ + return strcmp(binding->parent_port, lport->parent_name) ? false : true; + } + + /* Both are NULL. */ + return true; +} + +static bool +tags_equal(const struct sbrec_bindings *binding, + const struct nbrec_logical_port *lport) +{ + if (binding->n_tag != lport->n_tag) { + return false; + } + + return binding->n_tag ? (binding->tag[0] == lport->tag[0]) : true; +} + /* * When a change has occurred in the OVN_Northbound database, we go through and * make sure that the contents of the Bindings table in the OVN_Southbound @@ -163,8 +192,7 @@ set_bindings(struct northd_context *ctx) if (binding) { /* We found an existing binding for this logical port. Update its - * contents. Right now the only thing we expect that could change - * is the list of MAC addresses. */ + * contents. */ hmap_remove(&bindings_hmap, &hash_node->node); free(hash_node); @@ -175,6 +203,12 @@ set_bindings(struct northd_context *ctx) sbrec_bindings_set_mac(binding, (const char **) lport->macs, lport->n_macs); } + if (!parents_equal(binding, lport)) { + sbrec_bindings_set_parent_port(binding, lport->parent_name); + } + if (!tags_equal(binding, lport)) { + sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag); + } } else { /* There is no binding for this logical port, so create one. */ @@ -182,6 +216,10 @@ set_bindings(struct northd_context *ctx) sbrec_bindings_set_logical_port(binding, lport->name); sbrec_bindings_set_mac(binding, (const char **) lport->macs, lport->n_macs); + if (lport->parent_name && lport->n_tag > 0) { + sbrec_bindings_set_parent_port(binding, lport->parent_name); + sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag); + } } } @@ -377,6 +415,8 @@ main(int argc, char *argv[]) ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_logical_port); ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_chassis); 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); /* * The loop here just runs the IDL in a loop waiting for the seqno to -- 2.1.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev