netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2] ip: support of usec rtt in tcp_metrics
@ 2014-09-05 23:54 Eric Dumazet
  2014-09-06  0:02 ` Stephen Hemminger
  2014-09-28 22:59 ` Stephen Hemminger
  0 siblings, 2 replies; 4+ messages in thread
From: Eric Dumazet @ 2014-09-05 23:54 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev

From: Eric Dumazet <edumazet@google.com>

Starting from linux-3.15, kernel supports new tcp metric attributes :
TCP_METRIC_RTT_US & TCP_METRIC_RTTVAR_US

Update ip command to detect their use.

Signed-off-by: Eric Dumazet <edumazet@google.com>
---
 ip/tcp_metrics.c |   31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/ip/tcp_metrics.c b/ip/tcp_metrics.c
index e0f0344..bbbb4cc 100644
--- a/ip/tcp_metrics.c
+++ b/ip/tcp_metrics.c
@@ -216,6 +216,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
 	a = attrs[TCP_METRICS_ATTR_VALS];
 	if (a) {
 		struct rtattr *m[TCP_METRIC_MAX + 1 + 1];
+		unsigned long rtt = 0, rttvar = 0;
 
 		parse_rtattr_nested(m, TCP_METRIC_MAX + 1, a);
 
@@ -225,18 +226,30 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
 			a = m[i + 1];
 			if (!a)
 				continue;
-			if (metric_name[i])
-				fprintf(fp, " %s ", metric_name[i]);
-			else
-				fprintf(fp, " metric_%d ", i);
-
+			if (i != TCP_METRIC_RTT &&
+			    i != TCP_METRIC_RTT_US &&
+			    i != TCP_METRIC_RTTVAR &&
+			    i != TCP_METRIC_RTTVAR_US) {
+				if (metric_name[i])
+					fprintf(fp, " %s ", metric_name[i]);
+				else
+					fprintf(fp, " metric_%d ", i);
+			}
 			val = rta_getattr_u32(a);
 			switch (i) {
 			case TCP_METRIC_RTT:
-				fprintf(fp, "%luus", (val * 1000UL) >> 3);
+				if (!rtt)
+					rtt = (val * 1000UL) >> 3;
 				break;
 			case TCP_METRIC_RTTVAR:
-				fprintf(fp, "%luus", (val * 1000UL) >> 2);
+				if (!rttvar)
+					rttvar = (val * 1000UL) >> 2;
+				break;
+			case TCP_METRIC_RTT_US:
+				rtt = val >> 3;
+				break;
+			case TCP_METRIC_RTTVAR_US:
+				rttvar = val >> 2;
 				break;
 			case TCP_METRIC_SSTHRESH:
 			case TCP_METRIC_CWND:
@@ -246,6 +259,10 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
 				break;
 			}
 		}
+		if (rtt)
+			fprintf(fp, " rtt %luus", rtt);
+		if (rttvar)
+			fprintf(fp, " rttvar %luus", rttvar);
 	}
 
 	a = attrs[TCP_METRICS_ATTR_FOPEN_MSS];

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-09-28 22:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-05 23:54 [PATCH iproute2] ip: support of usec rtt in tcp_metrics Eric Dumazet
2014-09-06  0:02 ` Stephen Hemminger
2014-09-06  0:22   ` Eric Dumazet
2014-09-28 22:59 ` Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).