[ovs-dev] [PATCH] ovs-ofctl: New --readd option for "replace-flows".
Ben Pfaff
blp at nicira.com
Wed Jul 20 21:21:59 UTC 2011
This is useful for resetting flows' byte and packet counters to 0.
Suggested-by: Jed Daniels <openvswitch at jeddaniels.com>
---
AUTHORS | 1 +
ChangeLog | 2 ++
utilities/ovs-ofctl.8.in | 8 +++++++-
utilities/ovs-ofctl.c | 14 +++++++++++++-
4 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index cd6832c..8f973b3 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -65,6 +65,7 @@ Hector Oron hector.oron at gmail.com
Henrik Amren henrik at nicira.com
Jad Naous jnaous at gmail.com
Jan Medved jmedved at juniper.net
+Jed Daniels openvswitch at jeddaniels.com
Jeongkeun Lee jklee at hp.com
Joan Cirer joan at ev0.net
John Galgay john at galgay.net
diff --git a/ChangeLog b/ChangeLog
index eaf4d85..c38a50d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@ post v1.1.0
------------------------
- The new "-s" option for "ovs-dpctl show" prints packet and byte
counters for each port.
+ - ovs-ofctl:
+ - New "--readd" option for "replace-flows".
- ovs-vsctl:
- New "show" command to print an overview of configuration.
- ovs-brcompatd has been rewritten to fix long-standing bugs.
diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
index 8572302..161bdb7 100644
--- a/utilities/ovs-ofctl.8.in
+++ b/utilities/ovs-ofctl.8.in
@@ -143,7 +143,7 @@ Deletes entries from \fIswitch\fR's flow table. With only a
entries that match the specified flows. With \fB\-\-strict\fR,
wildcards are not treated as active for matching purposes.
.
-.IP "\fBreplace\-flows \fIswitch file\fR"
+.IP "[\fB\-\-readd\fR] \fBreplace\-flows \fIswitch file\fR"
Reads flow entries from \fIfile\fR (or \fBstdin\fR if \fIfile\fR is
\fB\-\fR) and queries the flow table from \fIswitch\fR. Then it fixes
up any differences, adding flows from \fIflow\fR that are missing on
@@ -151,6 +151,12 @@ up any differences, adding flows from \fIflow\fR that are missing on
\fIfile\fR, and updating flows in \fIswitch\fR whose actions, cookie,
or timeouts differ in \fIfile\fR.
.
+.IP
+With \fB\-\-readd\fR, \fBovs\-ofctl\fR adds all the flows from
+\fIfile\fR, even those that exist with the same actions, cookie, and
+timeout in \fIswitch\fR. This resets all the flow packet and byte
+counters to 0, which can be useful for debugging.
+.
.IP "\fBdiff\-flows \fIsource1 source2\fR"
Reads flow entries from \fIsource1\fR and \fIsource2\fR and prints the
differences. A flow that is in \fIsource1\fR but not in \fIsource2\fR
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index a6fff25..f7e1400 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -55,6 +55,10 @@ VLOG_DEFINE_THIS_MODULE(ofctl);
/* --strict: Use strict matching for flow mod commands? */
static bool strict;
+/* --readd: On replace-flows, re-add even those flows that have not changed
+ * (to reset flow counters)? */
+static bool readd;
+
/* -F, --flow-format: Flow format to use. Either one of NXFF_* to force a
* particular flow format or -1 to let ovs-ofctl choose intelligently. */
static int preferred_flow_format = -1;
@@ -82,11 +86,13 @@ parse_options(int argc, char *argv[])
{
enum {
OPT_STRICT = UCHAR_MAX + 1,
+ OPT_READD,
VLOG_OPTION_ENUMS
};
static struct option long_options[] = {
{"timeout", required_argument, NULL, 't'},
{"strict", no_argument, NULL, OPT_STRICT},
+ {"readd", no_argument, NULL, OPT_READD},
{"flow-format", required_argument, NULL, 'F'},
{"more", no_argument, NULL, 'm'},
{"help", no_argument, NULL, 'h'},
@@ -139,6 +145,10 @@ parse_options(int argc, char *argv[])
strict = true;
break;
+ case OPT_READD:
+ readd = true;
+ break;
+
VLOG_OPTION_HANDLERS
STREAM_SSL_OPTION_HANDLERS
@@ -184,6 +194,7 @@ usage(void)
vlog_usage();
printf("\nOther options:\n"
" --strict use strict match for flow commands\n"
+ " --readd replace flows that haven't changed\n"
" -F, --flow-format=FORMAT force particular flow format\n"
" -m, --more be more verbose printing OpenFlow\n"
" -t, --timeout=SECS give up after SECS seconds\n"
@@ -1206,7 +1217,8 @@ do_replace_flows(int argc OVS_UNUSED, char *argv[])
struct fte_version *file_ver = fte->versions[FILE_IDX];
struct fte_version *sw_ver = fte->versions[SWITCH_IDX];
- if (file_ver && (!sw_ver || !fte_version_equals(sw_ver, file_ver))) {
+ if (file_ver
+ && (readd || !sw_ver || !fte_version_equals(sw_ver, file_ver))) {
fte_make_flow_mod(fte, FILE_IDX, OFPFC_ADD, flow_format,
&requests);
}
--
1.7.4.4
More information about the dev
mailing list