netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* ip -6 route shows incorrect route expiry times
@ 2005-01-30 16:08 Russell King
  2005-01-30 16:29 ` YOSHIFUJI Hideaki / 吉藤英明
  0 siblings, 1 reply; 6+ messages in thread
From: Russell King @ 2005-01-30 16:08 UTC (permalink / raw)
  To: netdev

This looks like a unit conversion error, spotted in Red Hat FC2.
On it's own, it doesn't look like there's anything wrong, until
you look at two copies of the output 10 seconds apart:

rmk@dyn-67:[bk]:<1030> /sbin/ip -6 route; sleep 10; /sbin/ip -6 route
default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
  expires 169sec mtu 1500 advmss 1440
default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
  expires 168sec mtu 1500 advmss 1440

It appears that the expiry seconds here are actually in units of
10 seconds.  Maybe someone's double-converting kernel Hz to user Hz?

-- 
Russell King

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

* Re: ip -6 route shows incorrect route expiry times
  2005-01-30 16:08 ip -6 route shows incorrect route expiry times Russell King
@ 2005-01-30 16:29 ` YOSHIFUJI Hideaki / 吉藤英明
  2005-01-30 16:30   ` YOSHIFUJI Hideaki / 吉藤英明
  2005-01-30 17:09   ` Patrick McHardy
  0 siblings, 2 replies; 6+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2005-01-30 16:29 UTC (permalink / raw)
  To: rmk; +Cc: netdev, yoshfuji

In article <20050130160840.C25000@flint.arm.linux.org.uk> (at Sun, 30 Jan 2005 16:08:40 +0000), Russell King <rmk@arm.linux.org.uk> says:

> rmk@dyn-67:[bk]:<1030> /sbin/ip -6 route; sleep 10; /sbin/ip -6 route
> default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
>   expires 169sec mtu 1500 advmss 1440
> default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
>   expires 168sec mtu 1500 advmss 1440
> 
> It appears that the expiry seconds here are actually in units of
> 10 seconds.  Maybe someone's double-converting kernel Hz to user Hz?

Kernel exports in USER_HZ.
iproute2 seem to convert it again; workaround is to do "export HZ=100".

--yoshfuji

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

* Re: ip -6 route shows incorrect route expiry times
  2005-01-30 16:29 ` YOSHIFUJI Hideaki / 吉藤英明
@ 2005-01-30 16:30   ` YOSHIFUJI Hideaki / 吉藤英明
  2005-01-31 11:55     ` Ville Nuorvala
  2005-01-30 17:09   ` Patrick McHardy
  1 sibling, 1 reply; 6+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2005-01-30 16:30 UTC (permalink / raw)
  To: rmk; +Cc: netdev, yoshfuji

In article <20050131.012910.117562374.yoshfuji@linux-ipv6.org> (at Mon, 31 Jan 2005 01:29:10 +0900 (JST)), YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org> says:

> > It appears that the expiry seconds here are actually in units of
> > 10 seconds.  Maybe someone's double-converting kernel Hz to user Hz?
> 
> Kernel exports in USER_HZ.
> iproute2 seem to convert it again; workaround is to do "export HZ=100".
                                                          ~~~~~~~~~~~~~
This is example. Of course, this depends on your arch.

--yoshfuji

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

* Re: ip -6 route shows incorrect route expiry times
  2005-01-30 16:29 ` YOSHIFUJI Hideaki / 吉藤英明
  2005-01-30 16:30   ` YOSHIFUJI Hideaki / 吉藤英明
@ 2005-01-30 17:09   ` Patrick McHardy
  2005-01-31  2:37     ` David S. Miller
  1 sibling, 1 reply; 6+ messages in thread
From: Patrick McHardy @ 2005-01-30 17:09 UTC (permalink / raw)
  To: yoshfuji; +Cc: rmk, netdev

[-- Attachment #1: Type: text/plain, Size: 794 bytes --]

YOSHIFUJI Hideaki / ^[$B5HF#1QL@^[ wrote:

>In article <20050130160840.C25000@flint.arm.linux.org.uk> (at Sun, 30 Jan 2005 16:08:40 +0000), Russell King <rmk@arm.linux.org.uk> says:
>
>
>>rmk@dyn-67:[bk]:<1030> /sbin/ip -6 route; sleep 10; /sbin/ip -6 route
>>default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
>>  expires 169sec mtu 1500 advmss 1440
>>default via fe80::a00:2bff:fe95:1d7b dev eth0  proto kernel  metric 1024
>>  expires 168sec mtu 1500 advmss 1440
>>
>>It appears that the expiry seconds here are actually in units of
>>10 seconds.  Maybe someone's double-converting kernel Hz to user Hz?
>>
>
>Kernel exports in USER_HZ.
>iproute2 seem to convert it again; workaround is to do "export HZ=100".
>
I've sent this fix to Stephen yesterday.

Regards
Patrick


[-- Attachment #2: x --]
[-- Type: text/plain, Size: 2821 bytes --]

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/01/29 10:59:53+01:00 kaber@coreworks.de 
#   Use USER_HZ where necessary
# 
# BitKeeper/etc/logging_ok
#   2005/01/29 10:59:51+01:00 kaber@coreworks.de +1 -0
#   Logging to logging@openlogging.org accepted
# 
# tc/tc_util.c
#   2005/01/29 10:59:48+01:00 kaber@coreworks.de +1 -1
#   Use USER_HZ where necessary
# 
# lib/utils.c
#   2005/01/29 10:59:48+01:00 kaber@coreworks.de +7 -0
#   Use USER_HZ where necessary
# 
# ip/iproute.c
#   2005/01/29 10:59:48+01:00 kaber@coreworks.de +3 -3
#   Use USER_HZ where necessary
# 
# include/utils.h
#   2005/01/29 10:59:48+01:00 kaber@coreworks.de +10 -0
#   Use USER_HZ where necessary
# 
diff -Nru a/include/utils.h b/include/utils.h
--- a/include/utils.h	2005-01-30 18:08:57 +01:00
+++ b/include/utils.h	2005-01-30 18:08:57 +01:00
@@ -113,4 +113,14 @@
 	return __iproute2_hz_internal;
 }
 
+extern int __iproute2_user_hz_internal;
+extern int __get_user_hz(void);
+
+static __inline__ int get_user_hz(void)
+{
+	if (__iproute2_user_hz_internal == 0)
+		__iproute2_user_hz_internal = __get_user_hz();
+	return __iproute2_user_hz_internal;
+}
+
 #endif /* __UTILS_H__ */
diff -Nru a/ip/iproute.c b/ip/iproute.c
--- a/ip/iproute.c	2005-01-30 18:08:57 +01:00
+++ b/ip/iproute.c	2005-01-30 18:08:57 +01:00
@@ -412,7 +412,7 @@
 			struct rta_cacheinfo *ci = RTA_DATA(tb[RTA_CACHEINFO]);
 			static int hz;
 			if (!hz)
-				hz = get_hz();
+				hz = get_user_hz();
 			if (ci->rta_expires != 0)
 				fprintf(fp, " expires %dsec", ci->rta_expires/hz);
 			if (ci->rta_error != 0)
@@ -439,7 +439,7 @@
 		if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) {
 			static int hz;
 			if (!hz)
-				hz = get_hz();
+				hz = get_user_hz();
 			if (r->rtm_flags & RTM_F_CLONED)
 				fprintf(fp, "%s    cache ", _SL_);
 			if (ci->rta_expires)
@@ -491,7 +491,7 @@
 			if (i-2 < sizeof(mx_names)/sizeof(char*))
 				fprintf(fp, " %s", mx_names[i-2]);
 			else
-				fprintf(fp, " metric%d", i);
+				fprintf(fp, " metric %d", i);
 			if (mxlock & (1<<i))
 				fprintf(fp, " lock");
 
diff -Nru a/lib/utils.c b/lib/utils.c
--- a/lib/utils.c	2005-01-30 18:08:57 +01:00
+++ b/lib/utils.c	2005-01-30 18:08:57 +01:00
@@ -383,6 +383,13 @@
 	return HZ;
 }
 
+int __iproute2_user_hz_internal;
+
+int __get_user_hz(void)
+{
+	return sysconf(_SC_CLK_TCK);
+}
+
 const char *rt_addr_n2a(int af, int len, const void *addr, char *buf, int buflen)
 {
 	switch (af) {
diff -Nru a/tc/tc_util.c b/tc/tc_util.c
--- a/tc/tc_util.c	2005-01-30 18:08:57 +01:00
+++ b/tc/tc_util.c	2005-01-30 18:08:57 +01:00
@@ -417,7 +417,7 @@
 
 void print_tm(FILE * f, const struct tcf_t *tm)
 {
-	int hz = get_hz();
+	int hz = get_user_hz();
 	if (tm->install != 0)
 		fprintf(f, " installed %d sec", tm->install/hz);
 	if (tm->lastuse != 0)

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

* Re: ip -6 route shows incorrect route expiry times
  2005-01-30 17:09   ` Patrick McHardy
@ 2005-01-31  2:37     ` David S. Miller
  0 siblings, 0 replies; 6+ messages in thread
From: David S. Miller @ 2005-01-31  2:37 UTC (permalink / raw)
  To: Patrick McHardy; +Cc: yoshfuji, rmk, netdev

On Sun, 30 Jan 2005 18:09:56 +0100
Patrick McHardy <kaber@trash.net> wrote:

> >Kernel exports in USER_HZ.
> >iproute2 seem to convert it again; workaround is to do "export HZ=100".
> >
> I've sent this fix to Stephen yesterday.

"HZ" should be defined in userspace as 100.
Only the kernel should ever be able to see other settings.
That is true even if userspace includes kernel headers.  For example,
on sparc64 asm/param.h does this:

#ifdef __KERNEL__
# define HZ		1000	/* Internal kernel timer frequency */
# define USER_HZ	100	/* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ)
#endif

#ifndef HZ
#define HZ 100
#endif

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

* Re: ip -6 route shows incorrect route expiry times
  2005-01-30 16:30   ` YOSHIFUJI Hideaki / 吉藤英明
@ 2005-01-31 11:55     ` Ville Nuorvala
  0 siblings, 0 replies; 6+ messages in thread
From: Ville Nuorvala @ 2005-01-31 11:55 UTC (permalink / raw)
  To: YOSHIFUJI Hideaki / 吉藤英明; +Cc: rmk, netdev

On Mon, 31 Jan 2005, YOSHIFUJI Hideaki / [iso-2022-jp] 

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

end of thread, other threads:[~2005-01-31 11:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-30 16:08 ip -6 route shows incorrect route expiry times Russell King
2005-01-30 16:29 ` YOSHIFUJI Hideaki / 吉藤英明
2005-01-30 16:30   ` YOSHIFUJI Hideaki / 吉藤英明
2005-01-31 11:55     ` Ville Nuorvala
2005-01-30 17:09   ` Patrick McHardy
2005-01-31  2:37     ` David S. Miller

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).