summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/openvswitch/ofp-msgs.h2
-rw-r--r--lib/ofp-msgs.c16
-rw-r--r--lib/ofp-print.c24
-rw-r--r--tests/ofp-print.at2
4 files changed, 22 insertions, 22 deletions
diff --git a/include/openvswitch/ofp-msgs.h b/include/openvswitch/ofp-msgs.h
index f18027302..8a32a3dc6 100644
--- a/include/openvswitch/ofp-msgs.h
+++ b/include/openvswitch/ofp-msgs.h
@@ -778,6 +778,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 dd8894a52..6517210c2 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 6e30312ae..68e382471 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 5d1541f9f..e38ca4ae5 100644
--- a/tests/ofp-print.at
+++ b/tests/ofp-print.at
@@ -2725,7 +2725,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