bridge: Move packet processing functionality into ofproto.
[openvswitch] / utilities / ovs-openflowd.c
index f096af199517f2c45da4b3d6061815db7e147a36..c4d41d1ea321212b5edcbf022b9580b3a3e28913 100644 (file)
@@ -93,7 +93,6 @@ main(int argc, char *argv[])
     struct ofproto *ofproto;
     struct ofsettings s;
     int error;
-    struct dpif *dpif;
     struct netflow_options nf_options;
     const char *port;
     bool exiting;
@@ -103,7 +102,6 @@ main(int argc, char *argv[])
     parse_options(argc, argv, &s);
     signal(SIGPIPE, SIG_IGN);
 
-    die_if_already_running();
     daemonize_start();
 
     /* Start listening for ovs-appctl requests. */
@@ -117,9 +115,10 @@ main(int argc, char *argv[])
     VLOG_INFO("Open vSwitch version %s", VERSION BUILDNR);
     VLOG_INFO("OpenFlow protocol version 0x%02x", OFP_VERSION);
 
-    error = dpif_create_and_open(s.dp_name, s.dp_type, &dpif);
+    error = ofproto_create(s.dp_name, s.dp_type, &ofproto);
     if (error) {
-        ovs_fatal(error, "could not create datapath");
+        VLOG_FATAL("could not initialize OpenFlow switch (%s)",
+                   strerror(error));
     }
 
     /* Add ports to the datapath if requested by the user. */
@@ -128,22 +127,20 @@ main(int argc, char *argv[])
 
         error = netdev_open_default(port, &netdev);
         if (error) {
-            ovs_fatal(error, "%s: failed to open network device", port);
+            VLOG_FATAL("%s: failed to open network device (%s)",
+                       port, strerror(error));
         }
 
-        error = dpif_port_add(dpif, netdev, NULL);
+        error = ofproto_port_add(ofproto, netdev, NULL);
         if (error) {
-            ovs_fatal(error, "failed to add %s as a port", port);
+            VLOG_FATAL("failed to add %s as a port (%s)",
+                       port, strerror(error));
         }
 
         netdev_close(netdev);
     }
 
-    /* Start OpenFlow processing. */
-    error = ofproto_create(s.dp_name, s.dp_type, NULL, NULL, &ofproto);
-    if (error) {
-        ovs_fatal(error, "could not initialize openflow switch");
-    }
+    /* Configure OpenFlow switch. */
     if (s.datapath_id) {
         ofproto_set_datapath_id(ofproto, s.datapath_id);
     }
@@ -151,14 +148,15 @@ main(int argc, char *argv[])
                      s.serial_desc, s.dp_desc);
     error = ofproto_set_snoops(ofproto, &s.snoops);
     if (error) {
-        ovs_fatal(error,
-                  "failed to configure controller snooping connections");
+        VLOG_FATAL("failed to configure controller snooping connections (%s)",
+                   strerror(error));
     }
     memset(&nf_options, 0, sizeof nf_options);
     nf_options.collectors = s.netflow;
     error = ofproto_set_netflow(ofproto, &nf_options);
     if (error) {
-        ovs_fatal(error, "failed to configure NetFlow collectors");
+        VLOG_FATAL("failed to configure NetFlow collectors (%s)",
+                   strerror(error));
     }
     ofproto_set_controllers(ofproto, s.controllers, s.n_controllers);
     ofproto_set_fail_mode(ofproto, s.fail_mode);
@@ -169,7 +167,7 @@ main(int argc, char *argv[])
     while (!exiting && (s.run_forever || ofproto_is_alive(ofproto))) {
         error = ofproto_run(ofproto);
         if (error) {
-            ovs_fatal(error, "unrecoverable datapath error");
+            VLOG_FATAL("unrecoverable datapath error (%s)", strerror(error));
         }
         unixctl_server_run(unixctl);
         dp_run();
@@ -185,7 +183,7 @@ main(int argc, char *argv[])
         poll_block();
     }
 
-    dpif_close(dpif);
+    ofproto_destroy(ofproto);
 
     return 0;
 }
@@ -317,8 +315,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
         switch (c) {
         case OPT_DATAPATH_ID:
             if (!dpid_from_string(optarg, &s->datapath_id)) {
-                ovs_fatal(0, "argument to --datapath-id must be "
-                          "exactly 16 hex digits and may not be all-zero");
+                VLOG_FATAL("argument to --datapath-id must be exactly 16 hex "
+                           "digits and may not be all-zero");
             }
             break;
 
@@ -349,15 +347,15 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
                        || !strcmp(optarg, "secure")) {
                 s->fail_mode = OFPROTO_FAIL_SECURE;
             } else {
-                ovs_fatal(0, "--fail argument must be \"standalone\" "
-                          "or \"secure\"");
+                VLOG_FATAL("--fail argument must be \"standalone\" "
+                           "or \"secure\"");
             }
             break;
 
         case OPT_INACTIVITY_PROBE:
             controller_opts.probe_interval = atoi(optarg);
             if (controller_opts.probe_interval < 5) {
-                ovs_fatal(0, "--inactivity-probe argument must be at least 5");
+                VLOG_FATAL("--inactivity-probe argument must be at least 5");
             }
             break;
 
@@ -367,8 +365,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
             } else {
                 s->max_idle = atoi(optarg);
                 if (s->max_idle < 1 || s->max_idle > 65535) {
-                    ovs_fatal(0, "--max-idle argument must be between 1 and "
-                              "65535 or the word 'permanent'");
+                    VLOG_FATAL("--max-idle argument must be between 1 and "
+                               "65535 or the word 'permanent'");
                 }
             }
             break;
@@ -376,7 +374,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
         case OPT_MAX_BACKOFF:
             controller_opts.max_backoff = atoi(optarg);
             if (controller_opts.max_backoff < 1) {
-                ovs_fatal(0, "--max-backoff argument must be at least 1");
+                VLOG_FATAL("--max-backoff argument must be at least 1");
             } else if (controller_opts.max_backoff > 3600) {
                 controller_opts.max_backoff = 3600;
             }
@@ -386,7 +384,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
             if (optarg) {
                 controller_opts.rate_limit = atoi(optarg);
                 if (controller_opts.rate_limit < 1) {
-                    ovs_fatal(0, "--rate-limit argument must be at least 1");
+                    VLOG_FATAL("--rate-limit argument must be at least 1");
                 }
             } else {
                 controller_opts.rate_limit = 1000;
@@ -396,7 +394,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
         case OPT_BURST_LIMIT:
             controller_opts.burst_limit = atoi(optarg);
             if (controller_opts.burst_limit < 1) {
-                ovs_fatal(0, "--burst-limit argument must be at least 1");
+                VLOG_FATAL("--burst-limit argument must be at least 1");
             }
             break;
 
@@ -465,8 +463,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s)
     argc -= optind;
     argv += optind;
     if (argc < 2) {
-        ovs_fatal(0, "need at least two non-option arguments; "
-                  "use --help for usage");
+        VLOG_FATAL("need at least two non-option arguments; "
+                   "use --help for usage");
     }
 
     /* Rate limiting. */