vswitch: Use consistent representation of DSCP bits.
[sliver-openvswitch.git] / ovsdb / ovsdb-server.c
index 6994018..d8363a2 100644 (file)
@@ -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