Add OF11 set IPv4 ECN action.
[sliver-openvswitch.git] / utilities / ovs-controller.c
index bf0ae92..f487d8c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -83,6 +83,7 @@ static struct simap port_queues = SIMAP_INITIALIZER(&port_queues);
 /* --with-flows: Flows to send to switch. */
 static struct ofputil_flow_mod *default_flows;
 static size_t n_default_flows;
+static enum ofputil_protocol usable_protocols;
 
 /* --unixctl: Name of unixctl socket, or null to use the default. */
 static char *unixctl_path = NULL;
@@ -116,8 +117,8 @@ main(int argc, char *argv[])
         const char *name = argv[i];
         struct vconn *vconn;
 
-        retval = vconn_open(name, get_allowed_ofp_versions(),
-                            &vconn, DSCP_DEFAULT);
+        retval = vconn_open(name, get_allowed_ofp_versions(), DSCP_DEFAULT,
+                            &vconn);
         if (!retval) {
             if (n_switches >= MAX_SWITCHES) {
                 ovs_fatal(0, "max %d switch connections", n_switches);
@@ -127,7 +128,7 @@ main(int argc, char *argv[])
         } else if (retval == EAFNOSUPPORT) {
             struct pvconn *pvconn;
             retval = pvconn_open(name, get_allowed_ofp_versions(),
-                                 &pvconn, DSCP_DEFAULT);
+                                 DSCP_DEFAULT, &pvconn);
             if (!retval) {
                 if (n_listeners >= MAX_LISTENERS) {
                     ovs_fatal(0, "max %d passive connections", n_listeners);
@@ -136,7 +137,7 @@ main(int argc, char *argv[])
             }
         }
         if (retval) {
-            VLOG_ERR("%s: connect: %s", name, strerror(retval));
+            VLOG_ERR("%s: connect: %s", name, ovs_strerror(retval));
         }
     }
     if (n_switches == 0 && n_listeners == 0) {
@@ -216,6 +217,7 @@ new_switch(struct switch_ *sw, struct vconn *vconn)
     cfg.max_idle = set_up_flows ? max_idle : -1;
     cfg.default_flows = default_flows;
     cfg.n_default_flows = n_default_flows;
+    cfg.usable_protocols = usable_protocols;
     cfg.default_queue = default_queue;
     cfg.port_queues = &port_queues;
     cfg.mute = mute;
@@ -255,7 +257,7 @@ parse_options(int argc, char *argv[])
         DAEMON_OPTION_ENUMS,
         OFP_VERSION_OPTION_ENUMS
     };
-    static struct option long_options[] = {
+    static const struct option long_options[] = {
         {"hub",         no_argument, NULL, 'H'},
         {"noflow",      no_argument, NULL, 'n'},
         {"normal",      no_argument, NULL, 'N'},
@@ -278,6 +280,7 @@ parse_options(int argc, char *argv[])
 
     for (;;) {
         int indexptr;
+        char *error;
         int c;
 
         c = getopt_long(argc, argv, short_options, long_options, &indexptr);
@@ -327,8 +330,12 @@ parse_options(int argc, char *argv[])
             break;
 
         case OPT_WITH_FLOWS:
-            parse_ofp_flow_mod_file(optarg, OFPFC_ADD, &default_flows,
-                                    &n_default_flows);
+            error = parse_ofp_flow_mod_file(optarg, OFPFC_ADD, &default_flows,
+                                            &n_default_flows,
+                                            &usable_protocols);
+            if (error) {
+                ovs_fatal(0, "%s", error);
+            }
             break;
 
         case OPT_UNIXCTL: