[ovs-dev] [PATCH 6/7] ofp-print: Handle statistics more systematically.

Ben Pfaff blp at ovn.org
Thu May 10 23:24:38 UTC 2018


ofp_to_string__() is supposed to call ofp_print_stats() for all kinds of
statistics, but it was only doing so haphazardly.  This commit makes it
systematic and in the process adds it to at least one case where it was
missing (and fixes up a test case).

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 include/openvswitch/ofp-msgs.h |  2 ++
 lib/ofp-msgs.c                 | 16 +++++++++++++++-
 lib/ofp-print.c                | 24 ++++--------------------
 tests/ofp-print.at             |  2 +-
 4 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/include/openvswitch/ofp-msgs.h b/include/openvswitch/ofp-msgs.h
index 33cc3f571d16..a5ee2d53ea95 100644
--- a/include/openvswitch/ofp-msgs.h
+++ b/include/openvswitch/ofp-msgs.h
@@ -766,6 +766,8 @@ const char *ofptype_get_name(enum ofptype);
 void ofpmsg_update_length(struct ofpbuf *);
 const void *ofpmsg_body(const struct ofp_header *);
 bool ofpmsg_is_stat_request(const struct ofp_header *);
+bool ofpmsg_is_stat_reply(const struct ofp_header *);
+bool ofpmsg_is_stat(const struct ofp_header *);
 
 /* Multipart messages (aka "statistics").
  *
diff --git a/lib/ofp-msgs.c b/lib/ofp-msgs.c
index dd8894a524eb..6517210c2cdf 100644
--- a/lib/ofp-msgs.c
+++ b/lib/ofp-msgs.c
@@ -894,12 +894,26 @@ ofpmsg_body(const struct ofp_header *oh)
     return (const uint8_t *) oh + ofphdrs_len(&hdrs);
 }
 
-/* Return if it's a stat/multipart (OFPST) request message. */
+/* Return if 'oh' is a stat/multipart (OFPST) request message. */
 bool
 ofpmsg_is_stat_request(const struct ofp_header *oh)
 {
     return ofp_is_stat_request(oh->version, oh->type);
 }
+
+/* Return if 'oh' is a stat/multipart (OFPST) reply message. */
+bool
+ofpmsg_is_stat_reply(const struct ofp_header *oh)
+{
+    return ofp_is_stat_reply(oh->version, oh->type);
+}
+
+/* Return if 'oh' is a stat/multipart (OFPST) request or reply message. */
+bool
+ofpmsg_is_stat(const struct ofp_header *oh)
+{
+    return ofp_is_stat(oh->version, oh->type);
+}
 
 static ovs_be16 *ofpmp_flags__(const struct ofp_header *);
 
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 6e30312aef7c..68e382471dbd 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -1834,25 +1834,26 @@ ofp_to_string__(const struct ofp_header *oh,
                 const struct ofputil_table_map *table_map, enum ofpraw raw,
                 struct ds *string, int verbosity)
 {
+    if (ofpmsg_is_stat(oh)) {
+        ofp_print_stats(string, oh);
+    }
+
     const void *msg = oh;
     enum ofptype type = ofptype_from_ofpraw(raw);
     switch (type) {
     case OFPTYPE_GROUP_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofputil_group_stats_request_format(string, oh);
 
     case OFPTYPE_GROUP_STATS_REPLY:
         return ofputil_group_stats_format(string, oh);
 
     case OFPTYPE_GROUP_DESC_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofputil_group_desc_request_format(string, oh);
 
     case OFPTYPE_GROUP_DESC_STATS_REPLY:
         return ofputil_group_desc_format(string, oh, port_map, table_map);
 
     case OFPTYPE_GROUP_FEATURES_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         break;
 
     case OFPTYPE_GROUP_FEATURES_STATS_REPLY:
@@ -1944,73 +1945,56 @@ ofp_to_string__(const struct ofp_header *oh,
 
     case OFPTYPE_METER_STATS_REQUEST:
     case OFPTYPE_METER_CONFIG_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofp_print_meter_stats_request(string, oh);
 
     case OFPTYPE_METER_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_meter_stats_reply(string, oh);
 
     case OFPTYPE_METER_CONFIG_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_meter_config_reply(string, oh);
 
     case OFPTYPE_METER_FEATURES_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_meter_features_reply(string, oh);
 
     case OFPTYPE_DESC_STATS_REQUEST:
     case OFPTYPE_METER_FEATURES_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         break;
 
     case OFPTYPE_FLOW_STATS_REQUEST:
     case OFPTYPE_AGGREGATE_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofp_print_flow_stats_request(string, oh, port_map, table_map);
 
     case OFPTYPE_TABLE_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         break;
 
     case OFPTYPE_PORT_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_port_request(string, oh, port_map);
 
     case OFPTYPE_QUEUE_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_queue_request(string, oh, port_map);
 
     case OFPTYPE_DESC_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_desc_reply(string, oh);
 
     case OFPTYPE_FLOW_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_flow_stats_reply(string, oh, port_map, table_map);
 
     case OFPTYPE_QUEUE_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_queue_reply(string, oh, port_map, verbosity);
 
     case OFPTYPE_PORT_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_port_reply(string, oh, port_map, verbosity);
 
     case OFPTYPE_TABLE_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_table_stats_reply(string, oh, table_map);
 
     case OFPTYPE_AGGREGATE_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_aggregate_stats_reply(string, oh);
 
     case OFPTYPE_PORT_DESC_STATS_REQUEST:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_port_desc_request(string, oh, port_map);
 
     case OFPTYPE_PORT_DESC_STATS_REPLY:
-        ofp_print_stats(string, oh);
         return ofp_print_ofpst_port_desc_reply(string, oh);
 
     case OFPTYPE_FLOW_MOD_TABLE_ID:
diff --git a/tests/ofp-print.at b/tests/ofp-print.at
index d249bd7e4162..032255f8b33f 100644
--- a/tests/ofp-print.at
+++ b/tests/ofp-print.at
@@ -2645,7 +2645,7 @@ f5 f6 f7 f8 f9 fa fb fc fd 00 00 00 00 00 00 00 \
 00 01 3a 01 80 00 2a 02 80 00 2c 04 80 00 2e 04 \
 80 00 30 06 80 00 32 06 80 00 1a 02 80 00 1c 02 \
 80 00 1e 02 80 00 20 02 80 00 22 02 80 00 24 02 \
-"], [0], [OFPST_TABLE_FEATURES reply (OF1.3) (xid=0xd5):
+"], [0], [OFPST_TABLE_FEATURES reply (OF1.3) (xid=0xd5): flags=[[more]]
   table 0 ("table0"):
     metadata: match=0xffffffffffffffff write=0xffffffffffffffff
     max_entries=1000000
-- 
2.16.1



More information about the dev mailing list