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

Reply via email to