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 <rbry...@redhat.com> --- ovn/controller/bindings.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ovn/controller/bindings.c b/ovn/controller/bindings.c index ef233c0..65054c9 100644 --- a/ovn/controller/bindings.c +++ b/ovn/controller/bindings.c @@ -76,11 +76,12 @@ bindings_run(struct controller_ctx *ctx) { const struct sbrec_bindings *bindings_rec; struct ovsdb_idl_txn *txn; - struct sset lports; + struct sset lports, found_lports; const char *name; int retval; sset_init(&lports); + sset_init(&found_lports); get_local_iface_ids(ctx, &lports); txn = ovsdb_idl_txn_create(ctx->ovnsb_idl); @@ -90,6 +91,7 @@ bindings_run(struct controller_ctx *ctx) SBREC_BINDINGS_FOR_EACH(bindings_rec, ctx->ovnsb_idl) { if (sset_find_and_delete(&lports, bindings_rec->logical_port)) { + sset_add(&found_lports, bindings_rec->logical_port); if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) { continue; } @@ -99,6 +101,15 @@ bindings_run(struct controller_ctx *ctx) ctx->chassis_id); } sbrec_bindings_set_chassis(bindings_rec, ctx->chassis_id); + } else if (bindings_rec->parent_port && bindings_rec->parent_port[0] && + (sset_contains(&lports, bindings_rec->parent_port) || + sset_contains(&found_lports, bindings_rec->parent_port))) { + if (bindings_rec->chassis[0]) { + VLOG_INFO("Changing chassis for lport %s from %s to %s", + bindings_rec->logical_port, bindings_rec->chassis, + ctx->chassis_id); + } + sbrec_bindings_set_chassis(bindings_rec, ctx->chassis_id); } else if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) { sbrec_bindings_set_chassis(bindings_rec, ""); } @@ -116,6 +127,7 @@ bindings_run(struct controller_ctx *ctx) VLOG_DBG("No binding record for lport %s", name); } sset_destroy(&lports); + sset_destroy(&found_lports); } void -- 2.1.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev