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 | 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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev