[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1409961244.26422.142.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Fri, 05 Sep 2014 16:54:04 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Stephen Hemminger <stephen@...workplumber.org>
Cc: netdev <netdev@...r.kernel.org>
Subject: [PATCH iproute2] ip: support of usec rtt in tcp_metrics
From: Eric Dumazet <edumazet@...gle.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@...gle.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];
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists