summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c57a8d1)
One use case is when NOX is running on localhost, in which case waiting
for the full default backoff interval is unnecessary and undesirable.
Also changes default maximum backoff to 15 seconds (from 60).
As a result, when both \fB--fail=open\fR and in-band control are not
in use, this option has no effect.
As a result, when both \fB--fail=open\fR and in-band control are not
in use, this option has no effect.
+.TP
+\fB--max-backoff=\fIsecs\fR
+Sets the maximum time between attempts to connect to the controller to
+\fIsecs\fR, which must be at least 1. The actual interval between
+connection attempts starts at 1 second and doubles on each failing
+attempt until it reaches the maximum. The default maximum backoff
+time is 15 seconds.
+
.TP
\fB-l\fR, \fB--listen=\fImethod\fR
Configures the switch to additionally listen for incoming OpenFlow
.TP
\fB-l\fR, \fB--listen=\fImethod\fR
Configures the switch to additionally listen for incoming OpenFlow
* fail-open mode. */
static int max_idle = 15;
* fail-open mode. */
static int max_idle = 15;
+/* --max-backoff: Maximum interval between controller connection attempts, in
+ * seconds. */
+static int max_backoff = 15;
+
static void parse_options(int argc, char *argv[]);
static void usage(void) NO_RETURN;
static void parse_options(int argc, char *argv[]);
static void usage(void) NO_RETURN;
- controller_relay = relay_create(rconn_new(argv[optind], 1, 0, 0),
+ controller_relay = relay_create(rconn_new(argv[optind], 1, 0, max_backoff),
rconn_new(argv[optind + 1], 1,
rconn_new(argv[optind + 1], 1,
+ probe_interval, max_backoff),
false);
for (;;) {
struct relay *r, *n;
false);
for (;;) {
struct relay *r, *n;
static void
parse_options(int argc, char *argv[])
{
static void
parse_options(int argc, char *argv[])
{
- enum { OPT_INACTIVITY_PROBE = UCHAR_MAX + 1, OPT_MAX_IDLE };
+ enum {
+ OPT_INACTIVITY_PROBE = UCHAR_MAX + 1,
+ OPT_MAX_IDLE,
+ OPT_MAX_BACKOFF
+ };
static struct option long_options[] = {
{"fail", required_argument, 0, 'f'},
{"inactivity-probe", required_argument, 0, OPT_INACTIVITY_PROBE},
{"max-idle", required_argument, 0, OPT_MAX_IDLE},
static struct option long_options[] = {
{"fail", required_argument, 0, 'f'},
{"inactivity-probe", required_argument, 0, OPT_INACTIVITY_PROBE},
{"max-idle", required_argument, 0, OPT_MAX_IDLE},
+ {"max-backoff", required_argument, 0, OPT_MAX_BACKOFF},
{"listen", required_argument, 0, 'l'},
{"detach", no_argument, 0, 'D'},
{"pidfile", optional_argument, 0, 'P'},
{"listen", required_argument, 0, 'l'},
{"detach", no_argument, 0, 'D'},
{"pidfile", optional_argument, 0, 'P'},
+ case OPT_MAX_BACKOFF:
+ max_backoff = atoi(optarg);
+ if (max_backoff < 1) {
+ fatal(0, "--max-backoff argument must be at least 1");
+ } else if (max_backoff > 3600) {
+ max_backoff = 3600;
+ }
+ break;
+
case 'D':
set_detach();
break;
case 'D':
set_detach();
break;
" open (default): act as learning switch\n"
" --inactivity-probe=SECS time between inactivity probes\n"
" --max-idle=SECS max idle for flows set up by secchan\n"
" open (default): act as learning switch\n"
" --inactivity-probe=SECS time between inactivity probes\n"
" --max-idle=SECS max idle for flows set up by secchan\n"
+ " --max-backoff=SECS max time between controller connection\n"
+ " attempts (default: 15 seconds)\n"
" -l, --listen=METHOD allow management connections on METHOD\n"
" (a passive OpenFlow connection method)\n"
"\nOther options:\n"
" -l, --listen=METHOD allow management connections on METHOD\n"
" (a passive OpenFlow connection method)\n"
"\nOther options:\n"
identifies a controller) as \fIdpid\fR, which consists of exactly 12
hex digits. Without this option, \fBswitch\fR picks an ID randomly.
identifies a controller) as \fIdpid\fR, which consists of exactly 12
hex digits. Without this option, \fBswitch\fR picks an ID randomly.
+.TP
+\fB--max-backoff=\fIsecs\fR
+Sets the maximum time between attempts to connect to the controller to
+\fIsecs\fR, which must be at least 1. The actual interval between
+connection attempts starts at 1 second and doubles on each failing
+attempt until it reaches the maximum. The default maximum backoff
+time is 15 seconds.
+
.TP
\fB-p\fR, \fB--private-key=\fIprivkey.pem\fR
Specifies a PEM file containing the private key used as the switch's
.TP
\fB-p\fR, \fB--private-key=\fIprivkey.pem\fR
Specifies a PEM file containing the private key used as the switch's
#include <errno.h>
#include <getopt.h>
#include <errno.h>
#include <getopt.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
static uint64_t dpid = UINT64_MAX;
static char *port_list;
static uint64_t dpid = UINT64_MAX;
static char *port_list;
+/* --max-backoff: Maximum interval between controller connection attempts, in
+ * seconds. */
+static int max_backoff = 15;
+
static void add_ports(struct datapath *dp, char *port_list);
int
static void add_ports(struct datapath *dp, char *port_list);
int
fatal(0, "missing controller argument; use --help for usage");
}
fatal(0, "missing controller argument; use --help for usage");
}
- error = dp_new(&dp, dpid, rconn_new(argv[optind], 128, 60, 0));
+ error = dp_new(&dp, dpid, rconn_new(argv[optind], 128, 60, max_backoff));
if (listen_vconn_name) {
struct vconn *listen_vconn;
int retval;
if (listen_vconn_name) {
struct vconn *listen_vconn;
int retval;
static void
parse_options(int argc, char *argv[])
{
static void
parse_options(int argc, char *argv[])
{
+ enum {
+ OPT_MAX_BACKOFF = UCHAR_MAX + 1
+ };
+
static struct option long_options[] = {
{"interfaces", required_argument, 0, 'i'},
{"datapath-id", required_argument, 0, 'd'},
static struct option long_options[] = {
{"interfaces", required_argument, 0, 'i'},
{"datapath-id", required_argument, 0, 'd'},
+ {"max-backoff", required_argument, 0, OPT_MAX_BACKOFF},
{"listen", required_argument, 0, 'l'},
{"detach", no_argument, 0, 'D'},
{"pidfile", optional_argument, 0, 'P'},
{"listen", required_argument, 0, 'l'},
{"detach", no_argument, 0, 'D'},
{"pidfile", optional_argument, 0, 'P'},
+ case OPT_MAX_BACKOFF:
+ max_backoff = atoi(optarg);
+ if (max_backoff < 1) {
+ fatal(0, "--max-backoff argument must be at least 1");
+ } else if (max_backoff > 3600) {
+ max_backoff = 3600;
+ }
+ break;
+
case 'l':
if (listen_vconn_name) {
fatal(0, "-l or --listen may be only specified once");
case 'l':
if (listen_vconn_name) {
fatal(0, "-l or --listen may be only specified once");
" add specified initial switch ports\n"
" -d, --datapath-id=ID Use ID as the OpenFlow switch ID\n"
" (ID must consist of 12 hex digits)\n"
" add specified initial switch ports\n"
" -d, --datapath-id=ID Use ID as the OpenFlow switch ID\n"
" (ID must consist of 12 hex digits)\n"
+ " --max-backoff=SECS max time between controller connection\n"
+ " attempts (default: 15 seconds)\n"
" -l, --listen=METHOD allow management connections on METHOD\n"
" (a passive OpenFlow connection method)\n"
"\nOther options:\n"
" -l, --listen=METHOD allow management connections on METHOD\n"
" (a passive OpenFlow connection method)\n"
"\nOther options:\n"