Signed-off-by: Simon Horman <[email protected]>
---
v5
* Initial Post
---
lib/ofp-print.c | 85 +++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 62 insertions(+), 23 deletions(-)
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 9c40efe..8473a03 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -1049,14 +1049,12 @@ ofp_print_nxst_aggregate_reply(struct ds *string, const
struct ofp_header *oh)
ofp_print_ofpst_aggregate_reply__(string, asr);
}
-static void print_port_stat(struct ds *string, const char *leader,
- const ovs_32aligned_be64 *statp, int more)
+static void ofp_print_port_stat(struct ds *string, const char *leader,
+ ovs_be64 stat, int more)
{
- uint64_t stat = ntohll(get_32aligned_be64(statp));
-
ds_put_cstr(string, leader);
if (stat != UINT64_MAX) {
- ds_put_format(string, "%"PRIu64, stat);
+ ds_put_format(string, "%"PRIu64, ntohll(stat));
} else {
ds_put_char(string, '?');
}
@@ -1067,6 +1065,12 @@ static void print_port_stat(struct ds *string, const
char *leader,
}
}
+static void print_port_stat(struct ds *string, const char *leader,
+ const ovs_32aligned_be64 *statp, int more)
+{
+ ofp_print_port_stat(string, leader, get_32aligned_be64(statp), more);
+}
+
static void
ofp_print_ofpst_port_request(struct ds *string, const struct ofp_header *oh)
{
@@ -1078,42 +1082,77 @@ static void
ofp_print_ofpst_port_reply(struct ds *string, const struct ofp_header *oh,
int verbosity)
{
- struct ofp10_port_stats *ps;
struct ofpbuf b;
size_t n;
+ struct ofp11_port_stats ps;
ofpbuf_use_const(&b, oh, ntohs(oh->length));
ofputil_pull_stats_msg(&b);
- n = b.size / sizeof *ps;
+ /* struct ofp10_port_stats and struct ofp11_port_stats are the
+ * same size.
+ */
+ n = b.size / sizeof ps;
ds_put_format(string, " %zu ports\n", n);
if (verbosity < 1) {
return;
}
for (;;) {
- ps = ofpbuf_try_pull(&b, sizeof *ps);
- if (!ps) {
- return;
+
+ switch (oh->version) {
+ case OFP12_VERSION:
+ case OFP11_VERSION: {
+ struct ofp11_port_stats *ps11 = ofpbuf_try_pull(&b, sizeof *ps11);
+ if (!ps11) {
+ return;
+ }
+ ds_put_format(string, " port %2"PRIu32": ", ntohl(ps11->port_no));
+ ps = *ps11;
+ break;
}
- ds_put_format(string, " port %2"PRIu16": ", ntohs(ps->port_no));
+ case OFP10_VERSION: {
+ struct ofp10_port_stats *ps10 = ofpbuf_try_pull(&b, sizeof *ps10);
+ if (!ps10) {
+ return;
+ }
+
+ ds_put_format(string, " port %2"PRIu16": ", ntohs(ps.port_no));
+ ps.rx_packets = get_32aligned_be64(&ps10->rx_packets);
+ ps.rx_bytes = get_32aligned_be64(&ps10->rx_bytes);
+ ps.rx_dropped = get_32aligned_be64(&ps10->rx_dropped);
+ ps.rx_errors = get_32aligned_be64(&ps10->rx_errors);
+ ps.rx_frame_err = get_32aligned_be64(&ps10->rx_frame_err);
+ ps.rx_over_err = get_32aligned_be64(&ps10->rx_over_err);
+ ps.rx_crc_err = get_32aligned_be64(&ps10->rx_crc_err);
+ ps.tx_packets = get_32aligned_be64(&ps10->tx_packets);
+ ps.tx_bytes = get_32aligned_be64(&ps10->tx_bytes);
+ ps.tx_dropped = get_32aligned_be64(&ps10->tx_dropped);
+ ps.tx_errors = get_32aligned_be64(&ps10->tx_errors);
+ ps.collisions = get_32aligned_be64(&ps10->collisions);
+ break;
+ }
+
+ default:
+ NOT_REACHED();
+ }
ds_put_cstr(string, "rx ");
- print_port_stat(string, "pkts=", &ps->rx_packets, 1);
- print_port_stat(string, "bytes=", &ps->rx_bytes, 1);
- print_port_stat(string, "drop=", &ps->rx_dropped, 1);
- print_port_stat(string, "errs=", &ps->rx_errors, 1);
- print_port_stat(string, "frame=", &ps->rx_frame_err, 1);
- print_port_stat(string, "over=", &ps->rx_over_err, 1);
- print_port_stat(string, "crc=", &ps->rx_crc_err, 0);
+ ofp_print_port_stat(string, "pkts=", ps.rx_packets, 1);
+ ofp_print_port_stat(string, "bytes=", ps.rx_bytes, 1);
+ ofp_print_port_stat(string, "drop=", ps.rx_dropped, 1);
+ ofp_print_port_stat(string, "errs=", ps.rx_errors, 1);
+ ofp_print_port_stat(string, "frame=", ps.rx_frame_err, 1);
+ ofp_print_port_stat(string, "over=", ps.rx_over_err, 1);
+ ofp_print_port_stat(string, "crc=", ps.rx_crc_err, 0);
ds_put_cstr(string, " tx ");
- print_port_stat(string, "pkts=", &ps->tx_packets, 1);
- print_port_stat(string, "bytes=", &ps->tx_bytes, 1);
- print_port_stat(string, "drop=", &ps->tx_dropped, 1);
- print_port_stat(string, "errs=", &ps->tx_errors, 1);
- print_port_stat(string, "coll=", &ps->collisions, 0);
+ ofp_print_port_stat(string, "pkts=", ps.tx_packets, 1);
+ ofp_print_port_stat(string, "bytes=", ps.tx_bytes, 1);
+ ofp_print_port_stat(string, "drop=", ps.tx_dropped, 1);
+ ofp_print_port_stat(string, "errs=", ps.tx_errors, 1);
+ ofp_print_port_stat(string, "coll=", ps.collisions, 0);
}
}
--
1.7.10.2.484.gcd07cc5
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev