X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=776bbb258ba1c60a31078fd399e56a61f96d9ac1;hb=932f36ebdb5be9decb8e95befb3acd986c811185;hp=06ac98be6b2326c4ca3e4bee4bce9cc5d20db4c8;hpb=55d5bb44cbca6993494b05a374d4f09ec03c9102;p=sliver-openvswitch.git diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 06ac98be6..776bbb258 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -135,11 +135,11 @@ main(int argc, char *argv[]) daemonize_complete(); - unixctl_command_register("exit", ovsdb_server_exit, &exiting); - unixctl_command_register("ovsdb-server/compact", ovsdb_server_compact, - file); - unixctl_command_register("ovsdb-server/reconnect", ovsdb_server_reconnect, - jsonrpc); + unixctl_command_register("exit", "", 0, 0, ovsdb_server_exit, &exiting); + unixctl_command_register("ovsdb-server/compact", "", 0, 0, + ovsdb_server_compact, file); + unixctl_command_register("ovsdb-server/reconnect", "", 0, 0, + ovsdb_server_reconnect, jsonrpc); exiting = false; while (!exiting) { @@ -319,13 +319,45 @@ 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_map_string_column(const struct ovsdb_row *row, const char *column_name, + const char **stringp, const char *key) +{ + const struct ovsdb_datum *datum; + union ovsdb_atom *atom_key = NULL, *atom_value = NULL; + size_t i; + + datum = get_datum((struct ovsdb_row *) row, column_name, OVSDB_TYPE_STRING, + OVSDB_TYPE_STRING, UINT_MAX); + + if (!datum) { + *stringp = NULL; + return false; + } + + for (i = 0; i < datum->n; i++) { + atom_key = &datum->keys[i]; + if (!strcmp(atom_key->string, key)){ + atom_value = &datum->values[i]; + break; + } + } + + *stringp = atom_value ? atom_value->string : NULL; + return atom_value != NULL; +} + static const union ovsdb_atom * read_column(const struct ovsdb_row *row, const char *column_name, enum ovsdb_atomic_type type) { const struct ovsdb_datum *datum; - datum = get_datum((struct ovsdb_row *) row, column_name, type, OVSDB_TYPE_VOID, 1); + datum = get_datum((struct ovsdb_row *) row, column_name, type, OVSDB_TYPE_VOID, + 1); return datum && datum->n ? datum->keys : NULL; } @@ -395,6 +427,21 @@ 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 @@ -418,6 +465,8 @@ add_manager_options(struct shash *remotes, const struct ovsdb_row *row) if (read_integer_column(row, "inactivity_probe", &probe_interval)) { options->probe_interval = probe_interval; } + + manager_get_other_config(row, options); } static void @@ -612,17 +661,18 @@ reconfigure_from_db(struct ovsdb_jsonrpc_server *jsonrpc, } static void -ovsdb_server_exit(struct unixctl_conn *conn, const char *args OVS_UNUSED, +ovsdb_server_exit(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *exiting_) { bool *exiting = exiting_; *exiting = true; - unixctl_command_reply(conn, 200, NULL); + unixctl_command_reply(conn, NULL); } static void -ovsdb_server_compact(struct unixctl_conn *conn, const char *args OVS_UNUSED, - void *file_) +ovsdb_server_compact(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *file_) { struct ovsdb_file *file = file_; struct ovsdb_error *error; @@ -630,11 +680,11 @@ ovsdb_server_compact(struct unixctl_conn *conn, const char *args OVS_UNUSED, VLOG_INFO("compacting database by user request"); error = ovsdb_file_compact(file); if (!error) { - unixctl_command_reply(conn, 200, NULL); + unixctl_command_reply(conn, NULL); } else { char *s = ovsdb_error_to_string(error); ovsdb_error_destroy(error); - unixctl_command_reply(conn, 503, s); + unixctl_command_reply_error(conn, s); free(s); } } @@ -642,13 +692,13 @@ ovsdb_server_compact(struct unixctl_conn *conn, const char *args OVS_UNUSED, /* "ovsdb-server/reconnect": makes ovsdb-server drop all of its JSON-RPC * connections and reconnect. */ static void -ovsdb_server_reconnect(struct unixctl_conn *conn, const char *args OVS_UNUSED, - void *jsonrpc_) +ovsdb_server_reconnect(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *jsonrpc_) { struct ovsdb_jsonrpc_server *jsonrpc = jsonrpc_; ovsdb_jsonrpc_server_reconnect(jsonrpc); - unixctl_command_reply(conn, 200, NULL); + unixctl_command_reply(conn, NULL); } static void