Add --max-idle option to secchan and controller.
This commit is contained in:
1 parent
58dc4ead3b
commit
5aca80fab9
8 files changed
+105
-16
No files matched your search
@@ -73,6 +73,21 @@ in the network passes through the controller.
|
||||
This option is most useful for debugging. It reduces switching
|
||||
performance, so it should not be used in production.
|
||||
|
||||
.TP
|
||||
\fB--max-idle=\fIsecs\fR|\fBpermanent\fR
|
||||
Sets \fIsecs\fR as the number of seconds that a flow set up by the
|
||||
controller will remain in the switch's flow table without any matching
|
||||
packets being seen. If \fBpermanent\fR is specified, which is not
|
||||
recommended, flows will never expire. The default is 60 seconds.
|
||||
|
||||
This option affects only flows set up by the OpenFlow controller. In
|
||||
some configurations, the OpenFlow secure channel can set up some flows
|
||||
on its own. To set the idle time for those flows, pass
|
||||
\fB--max-idle\fR to \fBsecchan\fR(8).
|
||||
|
||||
This option has no effect when \fB-n\fR (or \fB--noflow\fR) is in use
|
||||
(because the controller does not set up flows in that case).
|
||||
|
||||
.TP
|
||||
.BR \-H ", " \-\^\-hub
|
||||
By default, the controller acts as an L2 MAC-learning switch. This
|
||||
|
||||
+22
-1
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <getopt.h>
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -42,6 +43,7 @@
|
||||
#include "daemon.h"
|
||||
#include "fault.h"
|
||||
#include "learning-switch.h"
|
||||
#include "openflow.h"
|
||||
#include "poll-loop.h"
|
||||
#include "rconn.h"
|
||||
#include "util.h"
|
||||
@@ -66,6 +68,9 @@ static bool learn_macs = true;
|
||||
/* Set up flows? (If not, every packet is processed at the controller.) */
|
||||
static bool setup_flows = true;
|
||||
|
||||
/* --max-idle: Maximum idle time, in seconds, before flows expire. */
|
||||
static int max_idle = 60;
|
||||
|
||||
static int do_switching(struct switch_ *);
|
||||
static void new_switch(struct switch_ *, struct vconn *, const char *name);
|
||||
static void parse_options(int argc, char *argv[]);
|
||||
@@ -189,7 +194,8 @@ static void
|
||||
new_switch(struct switch_ *sw, struct vconn *vconn, const char *name)
|
||||
{
|
||||
sw->rconn = rconn_new_from_vconn(name, 128, vconn);
|
||||
sw->lswitch = lswitch_create(sw->rconn, learn_macs, setup_flows);
|
||||
sw->lswitch = lswitch_create(sw->rconn, learn_macs,
|
||||
setup_flows ? max_idle : -1);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -215,11 +221,13 @@ do_switching(struct switch_ *sw)
|
||||
static void
|
||||
parse_options(int argc, char *argv[])
|
||||
{
|
||||
enum { OPT_MAX_IDLE = UCHAR_MAX + 1 };
|
||||
static struct option long_options[] = {
|
||||
{"detach", no_argument, 0, 'D'},
|
||||
{"pidfile", optional_argument, 0, 'P'},
|
||||
{"hub", no_argument, 0, 'H'},
|
||||
{"noflow", no_argument, 0, 'n'},
|
||||
{"max-idle", required_argument, 0, OPT_MAX_IDLE},
|
||||
{"verbose", optional_argument, 0, 'v'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'V'},
|
||||
@@ -254,6 +262,18 @@ parse_options(int argc, char *argv[])
|
||||
setup_flows = false;
|
||||
break;
|
||||
|
||||
case OPT_MAX_IDLE:
|
||||
if (!strcmp(optarg, "permanent")) {
|
||||
max_idle = OFP_FLOW_PERMANENT;
|
||||
} else {
|
||||
max_idle = atoi(optarg);
|
||||
if (max_idle < 1 || max_idle > 65535) {
|
||||
fatal(0, "--max-idle argument must be between 1 and "
|
||||
"65535 or the word 'permanent'");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
usage();
|
||||
|
||||
@@ -290,6 +310,7 @@ usage(void)
|
||||
" -P, --pidfile[=FILE] create pidfile (default: %s/controller.pid)\n"
|
||||
" -H, --hub act as hub instead of learning switch\n"
|
||||
" -n, --noflow pass traffic, but don't add flows\n"
|
||||
" --max-idle=SECS max idle time for new flows\n"
|
||||
" -v, --verbose=MODULE:FACILITY:LEVEL configure logging levels\n"
|
||||
" -v, --verbose set maximum verbosity level\n"
|
||||
" -h, --help display this help message\n"
|
||||
|
||||
Reference in new issue
Block a user