X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-client.c;h=2eb70fca6f167b1d6e6ea394dc0e0b41e25189f3;hb=77ce847d0be64ac3781ac112044dde5ddcbc30bf;hp=6e0068125fcb03070b3f6862d1074d54690ed8ca;hpb=a8425c53c5785856cabe80295f0cea0135febdb6;p=openvswitch diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 6e006812..2eb70fca 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -27,6 +27,7 @@ #include "command-line.h" #include "column.h" #include "compiler.h" +#include "daemon.h" #include "dynamic-string.h" #include "json.h" #include "jsonrpc.h" @@ -53,6 +54,9 @@ static int output_width; /* --no-headings: Whether table output should include headings. */ static int output_headings = true; +/* --pretty: Flags to pass to json_to_string(). */ +static int json_flags = JSSF_SORT; + static const struct command all_commands[]; static void usage(void) NO_RETURN; @@ -77,9 +81,11 @@ parse_options(int argc, char *argv[]) {"wide", no_argument, &output_width, INT_MAX}, {"format", required_argument, 0, 'f'}, {"no-headings", no_argument, &output_headings, 0}, + {"pretty", no_argument, &json_flags, JSSF_PRETTY | JSSF_SORT}, {"verbose", optional_argument, 0, 'v'}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, + DAEMON_LONG_OPTIONS, {0, 0, 0, 0}, }; char *short_options = long_options_to_short_options(long_options); @@ -121,6 +127,8 @@ parse_options(int argc, char *argv[]) vlog_set_verbosity(optarg); break; + DAEMON_OPTION_HANDLERS + case '?': exit(EXIT_FAILURE); @@ -159,7 +167,9 @@ usage(void) " -f, --format=FORMAT set output formatting to FORMAT\n" " (\"table\", \"html\", or \"csv\"\n" " --wide don't limit TTY lines to 79 bytes\n" - " --no-headings omit table heading row\n"); + " --no-headings omit table heading row\n" + " --pretty pretty-print JSON in output"); + daemon_usage(); vlog_usage(); printf("\nOther options:\n" " -h, --help display this help message\n" @@ -209,7 +219,7 @@ open_jsonrpc(const char *server) static void print_json(struct json *json) { - char *string = json_to_string(json, JSSF_SORT); + char *string = json_to_string(json, json_flags); fputs(string, stdout); free(string); } @@ -236,7 +246,8 @@ fetch_schema_from_rpc(struct jsonrpc *rpc) struct ovsdb_schema *schema; int error; - request = jsonrpc_create_request("get_schema", json_array_create_empty()); + request = jsonrpc_create_request("get_schema", json_array_create_empty(), + NULL); error = jsonrpc_transact_block(rpc, request, &reply); if (error) { ovs_fatal(error, "transaction failed"); @@ -629,14 +640,14 @@ do_transact(int argc UNUSED, char *argv[]) transaction = parse_json(argv[2]); rpc = open_jsonrpc(argv[1]); - request = jsonrpc_create_request("transact", transaction); + request = jsonrpc_create_request("transact", transaction, NULL); error = jsonrpc_transact_block(rpc, request, &reply); if (error) { ovs_fatal(error, "transaction failed"); } if (reply->error) { ovs_fatal(error, "transaction returned error: %s", - json_to_string(reply->error, JSSF_SORT)); + json_to_string(reply->error, json_flags)); } print_json(reply->result); putchar('\n'); @@ -795,7 +806,7 @@ do_monitor(int argc, char *argv[]) json_object_put(monitor_requests, argv[2], monitor_request); monitor = json_array_create_2(json_null_create(), monitor_requests); - request = jsonrpc_create_request("monitor", monitor); + request = jsonrpc_create_request("monitor", monitor, NULL); request_id = json_clone(request->id); jsonrpc_send(rpc, request); for (;;) { @@ -813,6 +824,8 @@ do_monitor(int argc, char *argv[]) } else if (msg->type == JSONRPC_REPLY && json_equal(msg->id, request_id)) { monitor_print(msg->result, table, &columns, true); + fflush(stdout); + daemonize(); } else if (msg->type == JSONRPC_NOTIFY && !strcmp(msg->method, "update")) { struct json *params = msg->params; @@ -821,6 +834,7 @@ do_monitor(int argc, char *argv[]) && params->u.array.elems[0]->type == JSON_NULL) { monitor_print(params->u.array.elems[1], table, &columns, false); + fflush(stdout); } } }