X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=28bf901eb0bf07ef4725ee2cd73c51dfb2744f4c;hb=5b5a3a674c975ed1ccfc38b4dae705d4fe4df0eb;hp=776bbb258ba1c60a31078fd399e56a61f96d9ac1;hpb=f125905cdd3dc0339ad968c0a70128807884b400;p=openvswitch diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 776bbb25..28bf901e 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2010, 2011 Nicira Networks +/* Copyright (c) 2009, 2010, 2011 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -276,7 +276,7 @@ add_remote(struct shash *remotes, const char *target) options = shash_find_data(remotes, target); if (!options) { - options = ovsdb_jsonrpc_default_options(); + options = ovsdb_jsonrpc_default_options(target); shash_add(remotes, target, options); } @@ -319,12 +319,11 @@ get_datum(struct ovsdb_row *row, const char *column_name, return &row->fields[column->index]; } -/* This function is used to read the string-string key-values from a map. - * Returns the true if the 'key' is found and returns the "value" associated - * with the 'key' in 'stringp', else returns false. */ -static bool +/* Read string-string key-values from a map. Returns the value associated with + * 'key', if found, or NULL */ +static const char * read_map_string_column(const struct ovsdb_row *row, const char *column_name, - const char **stringp, const char *key) + const char *key) { const struct ovsdb_datum *datum; union ovsdb_atom *atom_key = NULL, *atom_value = NULL; @@ -334,8 +333,7 @@ read_map_string_column(const struct ovsdb_row *row, const char *column_name, OVSDB_TYPE_STRING, UINT_MAX); if (!datum) { - *stringp = NULL; - return false; + return NULL; } for (i = 0; i < datum->n; i++) { @@ -346,8 +344,7 @@ read_map_string_column(const struct ovsdb_row *row, const char *column_name, } } - *stringp = atom_value ? atom_value->string : NULL; - return atom_value != NULL; + return atom_value ? atom_value->string : NULL; } static const union ovsdb_atom * @@ -427,21 +424,6 @@ write_string_string_column(struct ovsdb_row *row, const char *column_name, ovsdb_datum_sort_assert(datum, column->type.key.type); } -/* Get the other config for the manager from the database. */ -static void -manager_get_other_config(const struct ovsdb_row *row, - struct ovsdb_jsonrpc_options *options) -{ - const char *temp_string; - - /* Retrieve the configs and store in the options. */ - if (read_map_string_column(row, "other_config", &temp_string, "dscp")) { - options->dscp = atoi(temp_string); - } else { - options->dscp = DSCP_DEFAULT; - } -} - /* Adds a remote and options to 'remotes', based on the Manager table row in * 'row'. */ static void @@ -450,7 +432,7 @@ add_manager_options(struct shash *remotes, const struct ovsdb_row *row) static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); struct ovsdb_jsonrpc_options *options; long long int max_backoff, probe_interval; - const char *target; + const char *target, *dscp_string; if (!read_string_column(row, "target", &target) || !target) { VLOG_INFO_RL(&rl, "Table `%s' has missing or invalid `target' column", @@ -466,7 +448,14 @@ add_manager_options(struct shash *remotes, const struct ovsdb_row *row) options->probe_interval = probe_interval; } - manager_get_other_config(row, options); + options->dscp = DSCP_DEFAULT; + dscp_string = read_map_string_column(row, "other_config", "dscp"); + if (dscp_string) { + int dscp = atoi(dscp_string); + if (dscp >= 0 && dscp <= 63) { + options->dscp = dscp; + } + } } static void