meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / tests / test-jsonrpc.c
index 42d2c39..d892ece 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nicira Networks.
+ * Copyright (c) 2009, 2010, 2011 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@
 #include "daemon.h"
 #include "json.h"
 #include "poll-loop.h"
+#include "stream-ssl.h"
 #include "stream.h"
 #include "timeval.h"
 #include "util.h"
@@ -41,9 +42,8 @@ static void parse_options(int argc, char *argv[]);
 int
 main(int argc, char *argv[])
 {
+    proctitle_init(argc, argv);
     set_program_name(argv[0]);
-    time_init();
-    vlog_init();
     parse_options(argc, argv);
     run_command(argc - optind, argv + optind, all_commands);
     return 0;
@@ -52,11 +52,17 @@ main(int argc, char *argv[])
 static void
 parse_options(int argc, char *argv[])
 {
+    enum {
+        OPT_BOOTSTRAP_CA_CERT = UCHAR_MAX + 1,
+        DAEMON_OPTION_ENUMS
+    };
     static struct option long_options[] = {
-        {"verbose", optional_argument, 0, 'v'},
-        {"help", no_argument, 0, 'h'},
+        {"verbose", optional_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
         DAEMON_LONG_OPTIONS,
-        {0, 0, 0, 0},
+        {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT},
+        STREAM_SSL_LONG_OPTIONS,
+        {NULL, 0, NULL, 0},
     };
     char *short_options = long_options_to_short_options(long_options);
 
@@ -76,6 +82,12 @@ parse_options(int argc, char *argv[])
 
         DAEMON_OPTION_HANDLERS
 
+        STREAM_SSL_OPTION_HANDLERS
+
+        case OPT_BOOTSTRAP_CA_CERT:
+            stream_ssl_set_ca_cert_file(optarg, true);
+            break;
+
         case '?':
             exit(EXIT_FAILURE);
 
@@ -95,7 +107,7 @@ usage(void)
            "  request REMOTE METHOD PARAMS   send request, print reply\n"
            "  notify REMOTE METHOD PARAMS  send notification and exit\n",
            program_name, program_name);
-    stream_usage("JSON-RPC", true, true);
+    stream_usage("JSON-RPC", true, true, true);
     daemon_usage();
     vlog_usage();
     printf("\nOther options:\n"
@@ -158,7 +170,7 @@ handle_rpc(struct jsonrpc *rpc, struct jsonrpc_msg *msg, bool *done)
 }
 
 static void
-do_listen(int argc UNUSED, char *argv[])
+do_listen(int argc OVS_UNUSED, char *argv[])
 {
     struct pstream *pstream;
     struct jsonrpc **rpcs;
@@ -166,9 +178,7 @@ do_listen(int argc UNUSED, char *argv[])
     bool done;
     int error;
 
-    die_if_already_running();
-
-    error = pstream_open(argv[1], &pstream);
+    error = jsonrpc_pstream_open(argv[1], &pstream);
     if (error) {
         ovs_fatal(error, "could not listen on \"%s\"", argv[1]);
     }
@@ -234,11 +244,12 @@ do_listen(int argc UNUSED, char *argv[])
         }
         poll_block();
     }
+    free(rpcs);
+    pstream_close(pstream);
 }
 
-
 static void
-do_request(int argc UNUSED, char *argv[])
+do_request(int argc OVS_UNUSED, char *argv[])
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -256,7 +267,7 @@ do_request(int argc UNUSED, char *argv[])
         ovs_fatal(0, "not a valid JSON-RPC request: %s", string);
     }
 
-    error = stream_open_block(argv[1], &stream);
+    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream), &stream);
     if (error) {
         ovs_fatal(error, "could not open \"%s\"", argv[1]);
     }
@@ -277,7 +288,7 @@ do_request(int argc UNUSED, char *argv[])
 }
 
 static void
-do_notify(int argc UNUSED, char *argv[])
+do_notify(int argc OVS_UNUSED, char *argv[])
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -295,7 +306,7 @@ do_notify(int argc UNUSED, char *argv[])
         ovs_fatal(0, "not a JSON RPC-valid notification: %s", string);
     }
 
-    error = stream_open_block(argv[1], &stream);
+    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream), &stream);
     if (error) {
         ovs_fatal(error, "could not open \"%s\"", argv[1]);
     }
@@ -303,13 +314,13 @@ do_notify(int argc UNUSED, char *argv[])
 
     error = jsonrpc_send_block(rpc, msg);
     if (error) {
-        ovs_fatal(error, "could not send request");
+        ovs_fatal(error, "could not send notification");
     }
     jsonrpc_close(rpc);
 }
 
 static void
-do_help(int argc UNUSED, char *argv[] UNUSED)
+do_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     usage();
 }