All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: David Miller <davem@davemloft.net>,
	eric.dumazet@gmail.com, jarod@redhat.com,
	linux-kernel@vger.kernel.org, edumazet@google.com,
	jiri@mellanox.com, daniel@iogearbox.net, tom@herbertland.com,
	j.vosburgh@gmail.com, vfalico@gmail.com,
	gospo@cumulusnetworks.com, netdev@vger.kernel.org
Subject: [PATCH net-next iproute2] iplink: display rx nohandler stats
Date: Tue, 9 Feb 2016 11:17:57 -0800	[thread overview]
Message-ID: <20160209111757.4d7d65c1@xeon-e3> (raw)
In-Reply-To: <56B9C5DC.4050505@mojatatu.com>

Support for the new rx_nohandler statistic.
This code is designed to handle the case where the kernel reported statistic
structure is smaller than the larger structure in later releases (and vice versa).

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 ip/ipaddress.c | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 9d254d2..c4a8fc3 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -481,7 +481,8 @@ static void print_link_stats64(FILE *fp, const struct rtnl_link_stats64 *s,
 	/* RX error stats */
 	if (show_stats > 1) {
 		fprintf(fp, "%s", _SL_);
-		fprintf(fp, "    RX errors: length   crc     frame   fifo    missed%s", _SL_);
+		fprintf(fp, "    RX errors: length   crc     frame   fifo    missed%s%s",
+			s->rx_nohandler ? "   nohandler" : "",  _SL_);
 
 		fprintf(fp, "               ");
 		print_num(fp, 8, s->rx_length_errors);
@@ -489,6 +490,9 @@ static void print_link_stats64(FILE *fp, const struct rtnl_link_stats64 *s,
 		print_num(fp, 7, s->rx_frame_errors);
 		print_num(fp, 7, s->rx_fifo_errors);
 		print_num(fp, 7, s->rx_missed_errors);
+		if (s->rx_nohandler)
+			print_num(fp, 7, s->rx_nohandler);
+
 	}
 	fprintf(fp, "%s", _SL_);
 
@@ -496,7 +500,6 @@ static void print_link_stats64(FILE *fp, const struct rtnl_link_stats64 *s,
 	fprintf(fp, "    TX: bytes  packets  errors  dropped carrier collsns %s%s",
 		s->tx_compressed ? "compressed" : "", _SL_);
 
-
 	fprintf(fp, "    ");
 	print_num(fp, 10, s->tx_bytes);
 	print_num(fp, 8, s->tx_packets);
@@ -546,13 +549,16 @@ static void print_link_stats32(FILE *fp, const struct rtnl_link_stats *s,
 	/* RX error stats */
 	if (show_stats > 1) {
 		fprintf(fp, "%s", _SL_);
-		fprintf(fp, "    RX errors: length   crc     frame   fifo    missed%s", _SL_);
+		fprintf(fp, "    RX errors: length   crc     frame   fifo    missed%s%s",
+			s->rx_nohandler ? "   nohandler" : "",  _SL_);
 		fprintf(fp, "               ");
 		print_num(fp, 8, s->rx_length_errors);
 		print_num(fp, 7, s->rx_crc_errors);
 		print_num(fp, 7, s->rx_frame_errors);
 		print_num(fp, 7, s->rx_fifo_errors);
 		print_num(fp, 7, s->rx_missed_errors);
+		if (s->rx_nohandler)
+			print_num(fp, 7, s->rx_nohandler);
 	}
 	fprintf(fp, "%s", _SL_);
 
@@ -590,12 +596,23 @@ static void print_link_stats32(FILE *fp, const struct rtnl_link_stats *s,
 
 static void __print_link_stats(FILE *fp, struct rtattr **tb)
 {
-	if (tb[IFLA_STATS64])
-		print_link_stats64(fp, RTA_DATA(tb[IFLA_STATS64]),
-					tb[IFLA_CARRIER_CHANGES]);
-	else if (tb[IFLA_STATS])
-		print_link_stats32(fp, RTA_DATA(tb[IFLA_STATS]),
-					tb[IFLA_CARRIER_CHANGES]);
+	const struct rtattr *carrier_changes = tb[IFLA_CARRIER_CHANGES];
+
+	if (tb[IFLA_STATS64]) {
+		struct rtnl_link_stats64 stats = { 0 };
+
+		memcpy(&stats, RTA_DATA(tb[IFLA_STATS64]),
+		       MIN(RTA_PAYLOAD(tb[IFLA_STATS64]), sizeof(stats)));
+
+		print_link_stats64(fp, &stats, carrier_changes);
+	} else if (tb[IFLA_STATS]) {
+		struct rtnl_link_stats stats = { 0 };
+
+		memcpy(&stats, RTA_DATA(tb[IFLA_STATS]),
+		       MIN(RTA_PAYLOAD(tb[IFLA_STATS]), sizeof(stats)));
+
+		print_link_stats32(fp, &stats, carrier_changes);
+	}
 }
 
 static void print_link_stats(FILE *fp, struct nlmsghdr *n)
-- 
2.1.4

  reply	other threads:[~2016-02-09 19:17 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-22 19:11 [RFC PATCH net] net/core: don't increment rx_dropped on inactive slaves Jarod Wilson
2016-01-22 20:59 ` Jay Vosburgh
2016-01-23  8:26   ` Jiri Pirko
2016-01-23  8:07 ` Jiri Pirko
2016-01-23 14:19 ` Andy Gospodarek
2016-01-23 15:23 ` Eric Dumazet
2016-01-26 21:14   ` Jarod Wilson
2016-01-26 21:21     ` David Miller
2016-01-26 21:36       ` Jarod Wilson
2016-01-26 21:24     ` Eric Dumazet
2016-01-26 21:35       ` Jarod Wilson
2016-01-25  6:42 ` David Miller
2016-01-25 14:27   ` Jarod Wilson
2016-01-26  4:45     ` Jarod Wilson
2016-01-27 20:21 ` [PATCH net 0/4] net: add rx_unhandled stat counter Jarod Wilson
2016-01-27 20:21   ` [PATCH net 1/4] " Jarod Wilson
2016-01-27 20:21   ` [PATCH net 2/4] net-procfs: show rx_unhandled counters Jarod Wilson
2016-01-27 20:21   ` [PATCH net 3/4] team: track sum of rx_unhandled for all slaves Jarod Wilson
2016-01-27 20:21   ` [PATCH net 4/4] bond: " Jarod Wilson
2016-01-27 21:09   ` [PATCH net 0/4] net: add rx_unhandled stat counter Eric Dumazet
2016-01-28  6:02     ` Jarod Wilson
2016-01-28  6:10       ` Jarod Wilson
2016-01-28  6:18       ` Jarod Wilson
2016-01-28 13:00         ` Eric Dumazet
2016-01-28 14:38           ` Jarod Wilson
2016-01-28 14:42             ` Eric Dumazet
2016-01-28 14:44               ` Eric Dumazet
2016-01-28 14:46                 ` Eric Dumazet
2016-01-28 15:11                   ` Jarod Wilson
2016-01-28 13:00       ` Eric Dumazet
2016-01-28 15:49 ` [PATCH net v2 0/4] net: add and use rx_nohandler " Jarod Wilson
2016-01-28 15:49   ` [PATCH net v2 1/4] net/core: relax BUILD_BUG_ON in netdev_stats_to_stats64 Jarod Wilson
2016-01-28 15:49   ` [PATCH net v2 2/4] net: add rx_nohandler stat counter Jarod Wilson
2016-01-28 15:49   ` [PATCH net v2 3/4] team: track sum of rx_nohandler for all slaves Jarod Wilson
2016-01-28 15:49   ` [PATCH net v2 4/4] bond: " Jarod Wilson
2016-01-30  3:37   ` [PATCH net v2 0/4] net: add and use rx_nohandler stat counter David Miller
2016-01-30 18:16     ` Jarod Wilson
2016-01-30 18:19   ` [PATCH net v2 1/4] net/core: relax BUILD_BUG_ON in netdev_stats_to_stats64 Jarod Wilson
2016-01-30 18:34     ` Eric Dumazet
2016-01-30 20:39       ` Jarod Wilson
2016-01-30 20:53         ` Jarod Wilson
2016-01-30 23:26           ` David Miller
2016-01-31 18:07             ` Jarod Wilson
2016-02-01 23:51   ` [PATCH net v3 0/4] net: add and use rx_nohandler stat counter Jarod Wilson
2016-02-01 23:51     ` [PATCH net v3 1/4] net/core: relax BUILD_BUG_ON in netdev_stats_to_stats64 Jarod Wilson
2016-02-01 23:51     ` [PATCH net v3 2/4] net: add rx_nohandler stat counter Jarod Wilson
2016-02-07 19:37       ` Stephen Hemminger
2016-02-07 19:46         ` David Miller
2016-02-07 20:19           ` Eric Dumazet
2016-02-08 18:32             ` Jarod Wilson
2016-02-08 19:38               ` Stephen Hemminger
2016-02-08 22:57                 ` Eric Dumazet
2016-02-09  8:40                   ` David Miller
2016-02-09 10:56                     ` Jamal Hadi Salim
2016-02-09 19:17                       ` Stephen Hemminger [this message]
2016-02-09 23:51                         ` [PATCH net-next iproute2] iplink: display rx nohandler stats Jarod Wilson
2016-02-10  1:41                           ` Stephen Hemminger
2016-02-10  4:52                             ` Eric Dumazet
2016-02-10 13:20                               ` Jarod Wilson
2016-02-10 15:06                                 ` Andy Gospodarek
2016-02-01 23:51     ` [PATCH net v3 3/4] team: track sum of rx_nohandler for all slaves Jarod Wilson
2016-02-01 23:51     ` [PATCH net v3 4/4] bond: " Jarod Wilson
2016-02-06  8:00     ` [PATCH net v3 0/4] net: add and use rx_nohandler stat counter David Miller
2016-01-28 16:22 ` [PATCH net v3 1/4] net/core: relax BUILD_BUG_ON in netdev_stats_to_stats64 Jarod Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160209111757.4d7d65c1@xeon-e3 \
    --to=stephen@networkplumber.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=eric.dumazet@gmail.com \
    --cc=gospo@cumulusnetworks.com \
    --cc=j.vosburgh@gmail.com \
    --cc=jarod@redhat.com \
    --cc=jhs@mojatatu.com \
    --cc=jiri@mellanox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=tom@herbertland.com \
    --cc=vfalico@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.