X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=fa662b19abc5a50fb45f3a7e2cda650a8b6256b4;hb=HEAD;hp=cd13b0de1c2b543f60ea59827542b03c8d43cfa8;hpb=97a3c43515e86afaff0808e9a9f4cdfaca39792b;p=cascardo%2Fovs.git diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index cd13b0de1..fa662b19a 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -35,6 +35,7 @@ #include "jsonrpc-server.h" #include "list.h" #include "memory.h" +#include "monitor.h" #include "ovsdb.h" #include "ovsdb-data.h" #include "ovsdb-types.h" @@ -79,6 +80,7 @@ static unixctl_cb_func ovsdb_server_compact; static unixctl_cb_func ovsdb_server_reconnect; static unixctl_cb_func ovsdb_server_perf_counters_clear; static unixctl_cb_func ovsdb_server_perf_counters_show; +static unixctl_cb_func ovsdb_server_disable_monitor2; struct server_config { struct sset *remotes; @@ -137,6 +139,7 @@ main_loop(struct ovsdb_jsonrpc_server *jsonrpc, struct shash *all_dbs, simap_init(&usage); ovsdb_jsonrpc_server_get_memory_usage(jsonrpc, &usage); + ovsdb_monitor_get_memory_usage(&usage); SHASH_FOR_EACH(node, all_dbs) { struct db *db = node->data; ovsdb_get_memory_usage(db->db, &usage); @@ -221,6 +224,7 @@ main(int argc, char *argv[]) process_init(); parse_options(&argc, &argv, &remotes, &unixctl_path, &run_command); + daemon_become_new_user(false); /* Create and initialize 'config_tmpfile' as a temporary file to hold * ovsdb-server's most basic configuration, and then save our initial @@ -248,7 +252,7 @@ main(int argc, char *argv[]) save_config__(config_tmpfile, &remotes, &db_filenames); - daemonize_start(); + daemonize_start(false); /* Load the saved config. */ load_config(config_tmpfile, &remotes, &db_filenames); @@ -257,6 +261,9 @@ main(int argc, char *argv[]) shash_init(&all_dbs); server_config.all_dbs = &all_dbs; server_config.jsonrpc = jsonrpc; + + perf_counters_init(); + SSET_FOR_EACH (db_filename, &db_filenames) { error = open_db(&server_config, db_filename); if (error) { @@ -295,8 +302,6 @@ main(int argc, char *argv[]) daemonize_complete(); - perf_counters_init(); - if (!run_command) { /* ovsdb-server is usually a long-running process, in which case it * makes plenty of sense to log the version, but --run makes @@ -328,6 +333,11 @@ main(int argc, char *argv[]) unixctl_command_register("ovsdb-server/perf-counters-clear", "", 0, 0, ovsdb_server_perf_counters_clear, NULL); + /* Simulate the behavior of OVS release prior to version 2.5 that + * does not support the monitor2 method. */ + unixctl_command_register("ovsdb-server/disable-monitor2", "", 0, 0, + ovsdb_server_disable_monitor2, jsonrpc); + main_loop(jsonrpc, &all_dbs, unixctl, &remotes, run_process, &exiting); ovsdb_jsonrpc_server_destroy(jsonrpc); @@ -336,6 +346,7 @@ main(int argc, char *argv[]) close_db(db); shash_delete(&all_dbs, node); } + shash_destroy(&all_dbs); sset_destroy(&remotes); sset_destroy(&db_filenames); unixctl_server_destroy(unixctl); @@ -1050,6 +1061,20 @@ ovsdb_server_perf_counters_clear(struct unixctl_conn *conn, int argc OVS_UNUSED, unixctl_command_reply(conn, NULL); } +/* "ovsdb-server/disable-monitor2": makes ovsdb-server drop all of its + * JSON-RPC connections and reconnect. New sessions will not recognize + * the 'monitor2' method. */ +static void +ovsdb_server_disable_monitor2(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *jsonrpc_) +{ + struct ovsdb_jsonrpc_server *jsonrpc = jsonrpc_; + + ovsdb_jsonrpc_disable_monitor2(); + ovsdb_jsonrpc_server_reconnect(jsonrpc); + unixctl_command_reply(conn, NULL); +} + static void ovsdb_server_compact(struct unixctl_conn *conn, int argc, const char *argv[], void *dbs_) @@ -1252,6 +1277,7 @@ parse_options(int *argcp, char **argvp[], OPT_UNIXCTL, OPT_RUN, OPT_BOOTSTRAP_CA_CERT, + OPT_PEER_CA_CERT, VLOG_OPTION_ENUMS, DAEMON_OPTION_ENUMS }; @@ -1266,6 +1292,7 @@ parse_options(int *argcp, char **argvp[], DAEMON_LONG_OPTIONS, VLOG_LONG_OPTIONS, {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT}, + {"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT}, {"private-key", required_argument, NULL, 'p'}, {"certificate", required_argument, NULL, 'c'}, {"ca-cert", required_argument, NULL, 'C'}, @@ -1325,6 +1352,10 @@ parse_options(int *argcp, char **argvp[], bootstrap_ca_cert = true; break; + case OPT_PEER_CA_CERT: + stream_ssl_set_peer_ca_cert_file(optarg); + break; + case '?': exit(EXIT_FAILURE);