* [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
* Re: [PATCH iproute2] ip: support of usec rtt in tcp_metrics
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
1 sibling, 1 reply; 4+ messages in thread
From: Stephen Hemminger @ 2014-09-06 0:02 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev
On Fri, 05 Sep 2014 16:54:04 -0700
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> + 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);
Why not put new metrics in metric_name array? and make the check something like:
if (i < ARRAY_SIZE(metric_name) && metric_name[i])
fprintf(fp, " %s ", metric_name[i]);
else
fprintf(fp, " metric_%d ", i)
This makes it future proof, and gets rid of the silly test.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH iproute2] ip: support of usec rtt in tcp_metrics
2014-09-06 0:02 ` Stephen Hemminger
@ 2014-09-06 0:22 ` Eric Dumazet
0 siblings, 0 replies; 4+ messages in thread
From: Eric Dumazet @ 2014-09-06 0:22 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev
On Fri, 2014-09-05 at 17:02 -0700, Stephen Hemminger wrote:
> On Fri, 05 Sep 2014 16:54:04 -0700
> Eric Dumazet <eric.dumazet@gmail.com> wrote:
>
> > + 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);
>
> Why not put new metrics in metric_name array? and make the check something like:
>
> if (i < ARRAY_SIZE(metric_name) && metric_name[i])
> fprintf(fp, " %s ", metric_name[i]);
> else
> fprintf(fp, " metric_%d ", i)
>
> This makes it future proof, and gets rid of the silly test.
Because for compatibility reasons, kernel gives all values,
we want to output one of them, the most accurate one.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH iproute2] ip: support of usec rtt in tcp_metrics
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-28 22:59 ` Stephen Hemminger
1 sibling, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2014-09-28 22:59 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev
On Fri, 05 Sep 2014 16:54:04 -0700
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> 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>
Applied thanks
^ permalink raw reply [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 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.