2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

ovs-controller: Add support for OpenFlow queues.

Before, ovs-controller always sent packets using OFPAT_OUTPUT, which always
uses the default OpenFlow queue.  To help me debug the Open vSwitch QoS
implementation, I want to be able to send packets on other queues, so
this commit adds that feature.
This commit is contained in:
Ben Pfaff 2010-07-15 17:08:17 -07:00
parent c71270b7ae
commit 611e9a3562
2 changed files with 33 additions and 4 deletions

View File

@ -1,3 +1,9 @@
.\" -*- nroff -*-
.de IQ
. br
. ns
. IP "\\$1"
..
.TH ovs\-controller 8 "March 2009" "Open vSwitch" "Open vSwitch Manual"
.ds PN ovs\-controller
.
@ -21,7 +27,8 @@ one or more of the following OpenFlow connection methods:
.RE
.
.SH OPTIONS
.IP "\fB\-n\fR, \fB\-\-noflow\fR"
.IP "\fB\-n\fR"
.IQ "\fB\-\-noflow\fR"
By default, \fBovs\-controller\fR sets up a flow in each OpenFlow switch
whenever it receives a packet whose destination is known due through
MAC learning. This option disables flow setup, so that every packet
@ -45,7 +52,8 @@ on its own. To set the idle time for those flows, pass
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).
.
.IP "\fB\-H\fR, \fB\-\-hub\fR"
.IP "\fB\-H\fR"
.IQ "\fB\-\-hub\fR"
By default, the controller acts as an L2 MAC-learning switch. This
option changes its behavior to that of a hub that floods packets on
all but the incoming port.
@ -57,7 +65,8 @@ through the controller and every packet is flooded.
This option is most useful for debugging. It reduces switching
performance, so it should not be used in production.
.
.IP "\fB\-w\fR, \fB\-\-wildcard\fR"
.IP "\fB\-w\fR"
.IQ "\fB\-\-wildcard\fR"
By default, \fBovs\-controller\fR sets up exact-match flows. This
option allows it to set up wildcarded flows, which may reduce
flow-setup latency by causing less traffic to be sent up to the
@ -66,7 +75,8 @@ controller.
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).
.
.IP "\fB\-N\fR, \fB\-\-normal\fR"
.IP "\fB\-N\fR"
.IQ "\fB\-\-normal\fR"
By default, \fBovs\-controller\fR directs packets to a particular port
or floods them. This option causes it to direct non-flooded packets
to the OpenFlow \fBOFPP_NORMAL\fR port. This allows the switch itself
@ -81,6 +91,15 @@ to it by switches.
This option is only for debugging the Open vSwitch implementation of
``fail open'' mode. It must not be used in production.
.
.IP "\fB\-q \fIid\fR"
.IQ "\fB\-\-queue=\fIid\fR"
By default, \fBovs\-controller\fR uses the default OpenFlow queue for
sending packets and setting up flows. Use one of these options,
supplying \fIid\fR as an OpenFlow queue ID as a decimal number, to
instead use that specific queue.
.IP
This option may be useful for debugging quality of service setups.
.
.SS "Public Key Infrastructure Options"
.so lib/ssl.man
.so lib/ssl-peer-ca-cert.man

View File

@ -67,6 +67,9 @@ static int max_idle = 60;
* of their messages (for debugging fail-open mode). */
static bool mute = false;
/* -q, --queue: OpenFlow queue to use, or the default queue if UINT32_MAX. */
static uint32_t queue_id = UINT32_MAX;
/* --unixctl: Name of unixctl socket, or null to use the default. */
static char *unixctl_path = NULL;
@ -215,6 +218,7 @@ new_switch(struct switch_ *sw, struct vconn *vconn)
sw->lswitch = lswitch_create(sw->rconn, learn_macs, exact_flows,
set_up_flows ? max_idle : -1,
action_normal);
lswitch_set_queue(sw->lswitch, queue_id);
}
static int
@ -256,6 +260,7 @@ parse_options(int argc, char *argv[])
{"wildcard", no_argument, 0, 'w'},
{"max-idle", required_argument, 0, OPT_MAX_IDLE},
{"mute", no_argument, 0, OPT_MUTE},
{"queue", required_argument, 0, 'q'},
{"unixctl", required_argument, 0, OPT_UNIXCTL},
{"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'V'},
@ -311,6 +316,10 @@ parse_options(int argc, char *argv[])
}
break;
case 'q':
queue_id = atoi(optarg);
break;
case OPT_UNIXCTL:
unixctl_path = optarg;
break;
@ -359,6 +368,7 @@ usage(void)
" --max-idle=SECS max idle time for new flows\n"
" -N, --normal use OFPAT_NORMAL action\n"
" -w, --wildcard use wildcards, not exact-match rules\n"
" -q, --queue=QUEUE OpenFlow queue ID to use for output\n"
" --unixctl=SOCKET override default control socket name\n"
" -h, --help display this help message\n"
" -V, --version display version information\n");