[ovs-dev] [VLAN splinters 11/16] bridge: Avoid reading other_config columns with ovsdb_idl_get().
Ethan Jackson
ethan at nicira.com
Wed Nov 23 19:39:03 UTC 2011
Looks good.
Ethan
On Tue, Nov 15, 2011 at 17:17, Ben Pfaff <blp at nicira.com> wrote:
> ovsdb_idl_get() doesn't work with synthetic records. Upcoming commits
> will start synthesizing more ports and interfaces, so we should avoid
> using ovsdb_idl_get().
>
> In the long term it's probably a good idea to come up with a better way
> to do synthetic database records, one that causes less trouble.
> ---
> vswitchd/bridge.c | 40 +++++++++++++++++++++-------------------
> 1 files changed, 21 insertions(+), 19 deletions(-)
>
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index 67360ea..c7f2233 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -1182,25 +1182,24 @@ bridge_add_ofproto_ports(struct bridge *br)
> }
>
> static const char *
> -get_ovsrec_key_value(const struct ovsdb_idl_row *row,
> - const struct ovsdb_idl_column *column,
> - const char *key)
> +get_ovsrec_key_value(char **keys, char **values, size_t n, const char *key)
> {
> - const struct ovsdb_datum *datum;
> - union ovsdb_atom atom;
> - unsigned int idx;
> + size_t i;
>
> - datum = ovsdb_idl_get(row, column, OVSDB_TYPE_STRING, OVSDB_TYPE_STRING);
> - atom.string = (char *) key;
> - idx = ovsdb_datum_find_key(datum, &atom, OVSDB_TYPE_STRING);
> - return idx == UINT_MAX ? NULL : datum->values[idx].string;
> + for (i = 0; i < n; i++) {
> + if (!strcmp(keys[i], key)) {
> + return values[i];
> + }
> + }
> + return NULL;
> }
>
> static const char *
> bridge_get_other_config(const struct ovsrec_bridge *br_cfg, const char *key)
> {
> - return get_ovsrec_key_value(&br_cfg->header_,
> - &ovsrec_bridge_col_other_config, key);
> + return get_ovsrec_key_value(br_cfg->key_other_config,
> + br_cfg->value_other_config,
> + br_cfg->n_other_config, key);
> }
>
> /* Set Flow eviction threshold */
> @@ -1638,8 +1637,9 @@ enable_system_stats(const struct ovsrec_open_vswitch *cfg)
> const char *enable;
>
> /* Use other-config:enable-system-stats by preference. */
> - enable = get_ovsrec_key_value(&cfg->header_,
> - &ovsrec_open_vswitch_col_other_config,
> + enable = get_ovsrec_key_value(cfg->key_other_config,
> + cfg->value_other_config,
> + cfg->n_other_config,
> "enable-statistics");
> if (enable) {
> return !strcmp(enable, "true");
> @@ -2412,8 +2412,9 @@ get_port_other_config(const struct ovsrec_port *port, const char *key,
> {
> const char *value;
>
> - value = get_ovsrec_key_value(&port->header_, &ovsrec_port_col_other_config,
> - key);
> + value = get_ovsrec_key_value(port->key_other_config,
> + port->value_other_config,
> + port->n_other_config, key);
> return value ? value : default_value;
> }
>
> @@ -2423,8 +2424,9 @@ get_interface_other_config(const struct ovsrec_interface *iface,
> {
> const char *value;
>
> - value = get_ovsrec_key_value(&iface->header_,
> - &ovsrec_interface_col_other_config, key);
> + value = get_ovsrec_key_value(iface->key_other_config,
> + iface->value_other_config,
> + iface->n_other_config, key);
> return value ? value : default_value;
> }
>
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list