[ovs-dev] [PATCH 21/41] ofp-msgs: Split OFPRAW_OFPST_AGGREGATE_REQUEST

Simon Horman horms at verge.net.au
Tue Aug 7 21:49:56 UTC 2012


Split OFPRAW_OFPST_AGGREGATE_REQUEST into OpenFlow 1.0 and 1.1+
versions.

This should be sufficient to allow adding encoding and decoding of
Open Flow 1.1 and 1.2 Aggregate Stats Request messages.

Encoding and decoding of Open Flow 1.1 and 1.2 Aggregate Stats Response
messages works using the existing code without modification.

Signed-off-by: Simon Horman <horms at verge.net.au>

---

v10
* Remove OpenFlow1.1 ofp-print tests, I do not have data
  for these at this time.

v9
* No change

v8
* Initial post
---
 lib/ofp-msgs.h     |  9 ++++++---
 lib/ofp-util.c     | 14 ++++++++------
 tests/ofp-print.at | 27 +++++++++++++++++++++++++--
 3 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/lib/ofp-msgs.h b/lib/ofp-msgs.h
index 7e7b21b..dfd646d 100644
--- a/lib/ofp-msgs.h
+++ b/lib/ofp-msgs.h
@@ -194,11 +194,13 @@ enum ofpraw {
     OFPRAW_NXST_FLOW_REPLY,
 
     /* OFPST 1.0 (2): struct ofp10_flow_stats_request. */
-    OFPRAW_OFPST_AGGREGATE_REQUEST,
+    OFPRAW_OFPST10_AGGREGATE_REQUEST,
+    /* OFPST 1.1+ (2): struct ofp11_flow_stats_request, uint8_t[8][]. */
+    OFPRAW_OFPST11_AGGREGATE_REQUEST,
     /* NXST 1.0 (1): struct nx_flow_stats_request, uint8_t[8][]. */
     OFPRAW_NXST_AGGREGATE_REQUEST,
 
-    /* OFPST 1.0 (2): struct ofp_aggregate_stats_reply. */
+    /* OFPST 1.0+ (2): struct ofp_aggregate_stats_reply. */
     OFPRAW_OFPST_AGGREGATE_REPLY,
     /* NXST 1.0 (1): struct ofp_aggregate_stats_reply. */
     OFPRAW_NXST_AGGREGATE_REPLY,
@@ -367,7 +369,8 @@ enum ofptype {
     OFPTYPE_FLOW_STATS_REPLY,        /* OFPRAW_OFPST10_FLOW_REPLY.
                                       * OFPRAW_OFPST11_FLOW_REPLY.
                                       * OFPRAW_NXST_FLOW_REPLY. */
-    OFPTYPE_AGGREGATE_STATS_REQUEST, /* OFPRAW_OFPST_AGGREGATE_REQUEST.
+    OFPTYPE_AGGREGATE_STATS_REQUEST, /* OFPRAW_OFPST10_AGGREGATE_REQUEST.
+                                      * OFPRAW_OFPST11_AGGREGATE_REQUEST.
                                       * OFPRAW_NXST_AGGREGATE_REQUEST. */
     OFPTYPE_AGGREGATE_STATS_REPLY,   /* OFPRAW_OFPST_AGGREGATE_REPLY.
                                       * OFPRAW_NXST_AGGREGATE_REPLY. */
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 309aca3..504ad3e 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -1420,7 +1420,8 @@ ofputil_decode_ofpst_flow_request(struct ofputil_flow_stats_request *fsr,
 
     if (!msg->size) {
         return EOF;
-    } else if (raw == OFPRAW_OFPST11_FLOW_REQUEST) {
+    } else if (raw == OFPRAW_OFPST11_FLOW_REQUEST ||
+               raw == OFPRAW_OFPST11_AGGREGATE_REQUEST) {
         const struct ofp11_flow_stats_request *ofsr;
         enum ofperr error;
 
@@ -1440,7 +1441,7 @@ ofputil_decode_ofpst_flow_request(struct ofputil_flow_stats_request *fsr,
             return error;
         }
     } else if (raw == OFPRAW_OFPST10_FLOW_REQUEST ||
-               raw == OFPRAW_OFPST_AGGREGATE_REQUEST) {
+               raw == OFPRAW_OFPST10_AGGREGATE_REQUEST) {
         const struct ofp10_flow_stats_request *ofsr = msg->data;
 
         ofputil_cls_rule_from_ofp10_match(&ofsr->match, 0, &fsr->match);
@@ -1495,7 +1496,8 @@ ofputil_decode_flow_stats_request(struct ofputil_flow_stats_request *fsr,
     case OFPRAW_OFPST11_FLOW_REQUEST:
         return ofputil_decode_ofpst_flow_request(fsr, &b, false);
 
-    case OFPRAW_OFPST_AGGREGATE_REQUEST:
+    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
+    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
         return ofputil_decode_ofpst_flow_request(fsr, &b, true);
 
     case OFPRAW_NXST_FLOW_REQUEST:
@@ -1525,7 +1527,7 @@ ofputil_encode_flow_stats_request(const struct ofputil_flow_stats_request *fsr,
         struct ofp11_flow_stats_request *ofsr;
 
         raw = (fsr->aggregate
-               ? OFPRAW_OFPST_AGGREGATE_REQUEST
+               ? OFPRAW_OFPST11_AGGREGATE_REQUEST
                : OFPRAW_OFPST11_FLOW_REQUEST);
         msg = ofpraw_alloc(raw, OFP12_VERSION, 0);
         ofsr = ofpbuf_put_zeros(msg, sizeof *ofsr);
@@ -1543,7 +1545,7 @@ ofputil_encode_flow_stats_request(const struct ofputil_flow_stats_request *fsr,
         struct ofp10_flow_stats_request *ofsr;
 
         raw = (fsr->aggregate
-               ? OFPRAW_OFPST_AGGREGATE_REQUEST
+               ? OFPRAW_OFPST10_AGGREGATE_REQUEST
                : OFPRAW_OFPST10_FLOW_REQUEST);
         msg = ofpraw_alloc(raw, OFP10_VERSION, 0);
         ofsr = ofpbuf_put_zeros(msg, sizeof *ofsr);
@@ -1879,7 +1881,7 @@ ofputil_encode_aggregate_stats_reply(
     enum ofpraw raw;
 
     ofpraw_decode(&raw, request);
-    if (raw == OFPRAW_OFPST_AGGREGATE_REQUEST) {
+    if (raw == OFPRAW_OFPST10_AGGREGATE_REQUEST) {
         packet_count = unknown_to_zero(stats->packet_count);
         byte_count = unknown_to_zero(stats->byte_count);
     } else {
diff --git a/tests/ofp-print.at b/tests/ofp-print.at
index c6e55c9..5920a73 100644
--- a/tests/ofp-print.at
+++ b/tests/ofp-print.at
@@ -737,7 +737,7 @@ OFPST_FLOW reply (OF1.2) (xid=0x2):
 ])
 AT_CLEANUP
 
-AT_SETUP([OFPST_AGGREGATE request])
+AT_SETUP([OFPST_AGGREGATE request - OF1.0])
 AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST])
 AT_CHECK([ovs-ofctl ofp-print "\
 01 10 00 38 00 00 00 04 00 02 00 00 00 38 20 ff \
@@ -749,7 +749,19 @@ OFPST_AGGREGATE request (xid=0x4): @&t@
 ])
 AT_CLEANUP
 
-AT_SETUP([OFPST_AGGREGATE reply])
+AT_SETUP([OFPST_AGGREGATE request - OF1.2])
+AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST])
+AT_CHECK([ovs-ofctl ofp-print "\
+03 12 00 38 00 00 00 02 00 02 00 00 00 00 00 00 \
+ff 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 \
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \
+00 01 00 04 00 00 00 00 \
+"], [0], [dnl
+OFPST_AGGREGATE request (OF1.2) (xid=0x2): @&t@
+])
+AT_CLEANUP
+
+AT_SETUP([OFPST_AGGREGATE reply - OF1.0])
 AT_KEYWORDS([ofp-print OFPT_STATS_REPLY])
 AT_CHECK([ovs-ofctl ofp-print "\
 01 11 00 24 00 00 00 04 00 02 00 00 00 00 00 00 \
@@ -760,6 +772,17 @@ OFPST_AGGREGATE reply (xid=0x4): packet_count=386 byte_count=37752 flow_count=4
 ])
 AT_CLEANUP
 
+AT_SETUP([OFPST_AGGREGATE reply - OF1.2])
+AT_KEYWORDS([ofp-print OFPT_STATS_REPLY])
+AT_CHECK([ovs-ofctl ofp-print "\
+03 13 00 28 00 00 00 02 00 02 00 00 00 00 00 00 \
+00 00 00 00 00 00 00 79 00 00 00 00 00 00 4b 4f \
+00 00 00 03 00 00 00 00 \
+"], [0], [dnl
+OFPST_AGGREGATE reply (OF1.2) (xid=0x2): packet_count=121 byte_count=19279 flow_count=3
+])
+AT_CLEANUP
+
 AT_SETUP([OFPST_TABLE request])
 AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST])
 AT_CHECK([ovs-ofctl ofp-print "0110000c0000000100030000"], [0], [dnl
-- 
1.7.10.2.484.gcd07cc5




More information about the dev mailing list