Hi Russell, Russell Bryant <russ...@ovn.org> writes:
> Publish ovn-controller's local bridge mappings configuration > in the external_ids column of the Chassis table. Having this > information available for reading is useful to applications > integrating with OVN. > > Signed-off-by: Russell Bryant <russ...@ovn.org> > --- > ovn/controller/chassis.c | 23 +++++++++++++++++++++++ > ovn/ovn-sb.xml | 7 +++++++ > 2 files changed, 30 insertions(+) > > diff --git a/ovn/controller/chassis.c b/ovn/controller/chassis.c > index 52c9993..cd4f787 100644 > --- a/ovn/controller/chassis.c > +++ b/ovn/controller/chassis.c > @@ -18,6 +18,7 @@ > > #include "chassis.h" > > +#include "lib/smap.h" > #include "lib/vswitch-idl.h" > #include "openvswitch/dynamic-string.h" > #include "openvswitch/vlog.h" > @@ -102,6 +103,12 @@ chassis_run(struct controller_ctx *ctx, const char > *chassis_id) > hostname = hostname_; > } > > + const char *bridge_mappings = smap_get(&cfg->external_ids, > + "ovn-bridge-mappings"); > + if (!bridge_mappings) { > + bridge_mappings = ""; > + } > + > const struct sbrec_chassis *chassis_rec > = get_chassis(ctx->ovnsb_idl, chassis_id); > > @@ -110,6 +117,19 @@ chassis_run(struct controller_ctx *ctx, const char > *chassis_id) > sbrec_chassis_set_hostname(chassis_rec, hostname); > } > > + const char *chassis_bridge_mappings > + = smap_get(&chassis_rec->external_ids, "ovn-bridge-mappings"); > + if (!chassis_bridge_mappings) { > + chassis_bridge_mappings = ""; > + } > + if (strcmp(bridge_mappings, chassis_bridge_mappings)) { > + struct smap new_ids; > + smap_clone(&new_ids, &chassis_rec->external_ids); > + smap_replace(&new_ids, "ovn-bridge-mappings", bridge_mappings); > + sbrec_chassis_set_external_ids(chassis_rec, &new_ids); > + smap_destroy(&new_ids); > + } > + This is going to be really nit-picky (so feel free to reject it), but would something like: static inline const char * get_bridge_mappings(struct smap *external_ids) { const char *ret = smap_get(external_ids, "ovn-bridge-mappings"); if (!ret) { ret = ""; } return ret; } be preferable? that would reduce some of the complexity in the two hunks above, and let you refactor at least ovn/controller/patch.c starting on line 144. I don't know if it makes sense, though. Thanks, Aaron > /* Compare desired tunnels against those currently in the database. > */ > uint32_t cur_tunnels = 0; > bool same = true; > @@ -145,9 +165,12 @@ chassis_run(struct controller_ctx *ctx, const char > *chassis_id) > chassis_id); > > if (!chassis_rec) { > + struct smap ext_ids = SMAP_CONST1(&ext_ids, "ovn-bridge-mappings", > + bridge_mappings); > chassis_rec = sbrec_chassis_insert(ctx->ovnsb_idl_txn); > sbrec_chassis_set_name(chassis_rec, chassis_id); > sbrec_chassis_set_hostname(chassis_rec, hostname); > + sbrec_chassis_set_external_ids(chassis_rec, &ext_ids); > } > > int n_encaps = count_1bits(req_tunnels); > diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml > index d68f3f6..08c3105 100644 > --- a/ovn/ovn-sb.xml > +++ b/ovn/ovn-sb.xml > @@ -172,6 +172,13 @@ > ovn-controller-vtep will leave this column empty. > </column> > > + <column name="external_ids" key="ovn-bridge-mappings"> > + <code>ovn-controller</code> populates this key with the set of bridge > + mappings it has been configured to use. Other applicatoins should > treat > + this key as read-only. See <code>ovn-controller</code>(8) for more > + information. > + </column> > + > <group title="Common Columns"> > The overall purpose of these columns is described under <code>Common > Columns</code> at the beginning of this document. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev