--protocols allows configuration of the versions
that may be used when establishing an OpenFlow connection.
The default is 'OpenFlow10' which is consistent with
the behaviour prior to this patch.
The useful values at this time are:
'OpenFlow10', 'OpenFlow12', 'OpenFlow13',
Values may be combined in a comma delimited list.
e.g.: --protocols 'OpenFlow10,OpenFlow12,OpenFlow13'
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
.so lib/vlog.man
.so lib/unixctl.man
.so lib/common.man
.so lib/vlog.man
.so lib/unixctl.man
.so lib/common.man
+.so so lib/ofp-version.man
#include "daemon.h"
#include "learning-switch.h"
#include "ofp-parse.h"
#include "daemon.h"
#include "learning-switch.h"
#include "ofp-parse.h"
+#include "ofp-version-opt.h"
#include "ofpbuf.h"
#include "openflow/openflow.h"
#include "poll-loop.h"
#include "ofpbuf.h"
#include "openflow/openflow.h"
#include "poll-loop.h"
const char *name = argv[i];
struct vconn *vconn;
const char *name = argv[i];
struct vconn *vconn;
- retval = vconn_open(name, 0, &vconn, DSCP_DEFAULT);
+ retval = vconn_open(name, get_allowed_ofp_versions(),
+ &vconn, DSCP_DEFAULT);
if (!retval) {
if (n_switches >= MAX_SWITCHES) {
ovs_fatal(0, "max %d switch connections", n_switches);
if (!retval) {
if (n_switches >= MAX_SWITCHES) {
ovs_fatal(0, "max %d switch connections", n_switches);
continue;
} else if (retval == EAFNOSUPPORT) {
struct pvconn *pvconn;
continue;
} else if (retval == EAFNOSUPPORT) {
struct pvconn *pvconn;
- retval = pvconn_open(name, 0, &pvconn, DSCP_DEFAULT);
+ retval = pvconn_open(name, get_allowed_ofp_versions(),
+ &pvconn, DSCP_DEFAULT);
if (!retval) {
if (n_listeners >= MAX_LISTENERS) {
ovs_fatal(0, "max %d passive connections", n_listeners);
if (!retval) {
if (n_listeners >= MAX_LISTENERS) {
ovs_fatal(0, "max %d passive connections", n_listeners);
struct lswitch_config cfg;
struct rconn *rconn;
struct lswitch_config cfg;
struct rconn *rconn;
- rconn = rconn_create(60, 0, DSCP_DEFAULT, 0);
+ rconn = rconn_create(60, 0, DSCP_DEFAULT, get_allowed_ofp_versions());
rconn_connect_unreliably(rconn, vconn, NULL);
cfg.mode = (action_normal ? LSW_NORMAL
rconn_connect_unreliably(rconn, vconn, NULL);
cfg.mode = (action_normal ? LSW_NORMAL
OPT_WITH_FLOWS,
OPT_UNIXCTL,
VLOG_OPTION_ENUMS,
OPT_WITH_FLOWS,
OPT_UNIXCTL,
VLOG_OPTION_ENUMS,
+ DAEMON_OPTION_ENUMS,
+ OFP_VERSION_OPTION_ENUMS
};
static struct option long_options[] = {
{"hub", no_argument, NULL, 'H'},
};
static struct option long_options[] = {
{"hub", no_argument, NULL, 'H'},
{"with-flows", required_argument, NULL, OPT_WITH_FLOWS},
{"unixctl", required_argument, NULL, OPT_UNIXCTL},
{"help", no_argument, NULL, 'h'},
{"with-flows", required_argument, NULL, OPT_WITH_FLOWS},
{"unixctl", required_argument, NULL, OPT_UNIXCTL},
{"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
+ OFP_VERSION_LONG_OPTIONS,
VLOG_LONG_OPTIONS,
STREAM_SSL_LONG_OPTIONS,
{"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT},
VLOG_LONG_OPTIONS,
STREAM_SSL_LONG_OPTIONS,
{"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT},
- case 'V':
- ovs_print_version(OFP10_VERSION, OFP10_VERSION);
- exit(EXIT_SUCCESS);
-
+ OFP_VERSION_OPTION_HANDLERS
DAEMON_OPTION_HANDLERS
STREAM_SSL_OPTION_HANDLERS
DAEMON_OPTION_HANDLERS
STREAM_SSL_OPTION_HANDLERS
program_name, program_name);
vconn_usage(true, true, false);
daemon_usage();
program_name, program_name);
vconn_usage(true, true, false);
daemon_usage();
vlog_usage();
printf("\nOther options:\n"
" -H, --hub act as hub instead of learning switch\n"
vlog_usage();
printf("\nOther options:\n"
" -H, --hub act as hub instead of learning switch\n"