rto_min value display overflow
Reported by: Satoru SATOH <satoru.satoh@gmail.com> "ip route show" does not print correct value when larger rto_min is set (e.g. 3sec). This problem is because of overflow in print_route() and the patch below is a workaround fix for that. [root test]# ./iproute2.git.org/ip/ip route show dev eth1 192.168.140.0/24 proto kernel scope link src 192.168.140.130 169.254.0.0/16 scope link [root test]# ./iproute2.git.org/ip/ip route change 192.168.140.0/24 dev eth1 rto_min 3s [root test]# ./iproute2.git.org/ip/ip route show dev eth1 192.168.140.0/24 scope link rto_min lock 2ms <-- wrong 169.254.0.0/16 scope link [root test]# ./iproute2.git/ip/ip route show dev eth1 # patched version 192.168.140.0/24 scope link rto_min lock 3000ms <-- correct 169.254.0.0/16 scope link This is a simpler fix. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
This commit is contained in:
parent
4b270b172a
commit
7c73e1bd21
|
|
@ -509,7 +509,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
|
||||||
i != RTAX_RTO_MIN)
|
i != RTAX_RTO_MIN)
|
||||||
fprintf(fp, " %u", *(unsigned*)RTA_DATA(mxrta[i]));
|
fprintf(fp, " %u", *(unsigned*)RTA_DATA(mxrta[i]));
|
||||||
else {
|
else {
|
||||||
unsigned val = *(unsigned*)RTA_DATA(mxrta[i]);
|
unsigned long long val = *(unsigned*)RTA_DATA(mxrta[i]);
|
||||||
|
|
||||||
val *= 1000;
|
val *= 1000;
|
||||||
if (i == RTAX_RTT)
|
if (i == RTAX_RTT)
|
||||||
|
|
@ -517,7 +517,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
|
||||||
else if (i == RTAX_RTTVAR)
|
else if (i == RTAX_RTTVAR)
|
||||||
val /= 4;
|
val /= 4;
|
||||||
if (val >= hz)
|
if (val >= hz)
|
||||||
fprintf(fp, " %ums", val/hz);
|
fprintf(fp, " %llums", val/hz);
|
||||||
else
|
else
|
||||||
fprintf(fp, " %.2fms", (float)val/hz);
|
fprintf(fp, " %.2fms", (float)val/hz);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue