timer expiry check at icmp.c in ipv6

4 messages, 2 authors, 2012-07-17 · open the first message on its own page

timer expiry check at icmp.c in ipv6

From: BALAKUMARAN KANNAN <hidden>
Date: 2012-07-16 13:44:50

Dear all,

In kernel-3.0.26 code net/ipv6/icmp.c, while sending ICMP reply where it checks for the timer expiry. It should check the value given by a router advertisement. I think the expiry value is stored in rt->rt6_expires in ndisc.c (line no: 1284). Then while sending an ICMP reply, it should check with the expiry timer right? Where that check is happening? Please somebody explain me.

Thank you.

--Regards,
K.Balakumaran

Re: timer expiry check at icmp.c in ipv6

From: Eric Dumazet <hidden>
Date: 2012-07-16 14:33:41

On Mon, 2012-07-16 at 13:44 +0000, BALAKUMARAN KANNAN wrote:
Dear all,

In kernel-3.0.26 code net/ipv6/icmp.c, while sending ICMP reply where
it checks for the timer expiry. It should check the value given by a
router advertisement. I think the expiry value is stored in
rt->rt6_expires in ndisc.c (line no: 1284). Then while sending an ICMP
reply, it should check with the expiry timer right? Where that check
is happening? Please somebody explain me.

Thank you.
Its probably done in net/ipv6/ip6_fib.c

fib6_gc_timer_cb() -> fib6_run_gc()

Every 30 seconds.

(you can change /proc/sys/net/ipv6/route/gc_interval )

RE: timer expiry check at icmp.c in ipv6

From: BALAKUMARAN KANNAN <hidden>
Date: 2012-07-17 05:11:21

Dear Eric,
    Can you please explain it into bit further. Actually what I want to know is how the preferred lifetime value of a router advertisement is processed?, Where it is stored? and while sending the ICMP_REPLY how that preferred lifetime value considered before actually sending the packet? I cannot able to find the relation between icmpv6_echo_reply and fib6_run_gc(). I am very new to kernel source. Kindly help me.

thank you.
________________________________________
From: netdev-owner@vger.kernel.org [netdev-owner@vger.kernel.org] on behalf of Eric Dumazet [eric.dumazet@gmail.com]
Sent: Monday, July 16, 2012 8:03 PM
To: BALAKUMARAN KANNAN
Cc: netdev@vger.kernel.org
Subject: Re: timer expiry check at icmp.c in ipv6

On Mon, 2012-07-16 at 13:44 +0000, BALAKUMARAN KANNAN wrote:
Dear all,

In kernel-3.0.26 code net/ipv6/icmp.c, while sending ICMP reply where
it checks for the timer expiry. It should check the value given by a
router advertisement. I think the expiry value is stored in
rt->rt6_expires in ndisc.c (line no: 1284). Then while sending an ICMP
reply, it should check with the expiry timer right? Where that check
is happening? Please somebody explain me.

Thank you.
Its probably done in net/ipv6/ip6_fib.c

fib6_gc_timer_cb() -> fib6_run_gc()

Every 30 seconds.

(you can change /proc/sys/net/ipv6/route/gc_interval )


RE: timer expiry check at icmp.c in ipv6

From: Eric Dumazet <hidden>
Date: 2012-07-17 05:39:30

On Tue, 2012-07-17 at 05:11 +0000, BALAKUMARAN KANNAN wrote:
Dear Eric,
    Can you please explain it into bit further. Actually what I want
to know is how the preferred lifetime value of a router advertisement
is processed?, Where it is stored? and while sending the ICMP_REPLY
how that preferred lifetime value considered before actually sending
the packet? I cannot able to find the relation between
icmpv6_echo_reply and fib6_run_gc(). I am very new to kernel source.
Kindly help me.
# find net/ipv6|xargs grep -n RTF_EXPIRES
net/ipv6/ip6_fib.c:675:				if (!(iter->rt6i_flags & RTF_EXPIRES))
net/ipv6/ip6_fib.c:677:				if (!(rt->rt6i_flags & RTF_EXPIRES))
net/ipv6/ip6_fib.c:740:	    (rt->rt6i_flags & (RTF_EXPIRES | RTF_CACHE)))
net/ipv6/ip6_fib.c:1545:	if (rt->rt6i_flags & RTF_EXPIRES && rt->dst.expires) {
net/ipv6/route.c:307:	if (!(rt->rt6i_flags & RTF_EXPIRES) && dst->from)
net/ipv6/route.c:370:	if (rt->rt6i_flags & RTF_EXPIRES) {
net/ipv6/route.c:375:		return (ort->rt6i_flags & RTF_EXPIRES) &&
net/ipv6/route.c:1397:	if (cfg->fc_flags & RTF_EXPIRES)
net/ipv6/route.c:1908:				  RTF_UP | RTF_EXPIRES | RTF_PREF(pref),
net/ipv6/route.c:2476:	if (!(rt->rt6i_flags & RTF_EXPIRES))
net/ipv6/addrconf.c:805:			} else if (!(rt->rt6i_flags & RTF_EXPIRES)) {
net/ipv6/addrconf.c:1902:				flags |= RTF_EXPIRES;
net/ipv6/addrconf.c:2212:		flags = RTF_EXPIRES;
net/ipv6/addrconf.c:3420:		flags = RTF_EXPIRES;
net/ipv6/ip6_fib.c.orig:675:				if (!(iter->rt6i_flags & RTF_EXPIRES))
net/ipv6/ip6_fib.c.orig:677:				if (!(rt->rt6i_flags & RTF_EXPIRES))
net/ipv6/ip6_fib.c.orig:740:	    (rt->rt6i_flags & (RTF_EXPIRES | RTF_CACHE)))
net/ipv6/ip6_fib.c.orig:1545:	if (rt->rt6i_flags & RTF_EXPIRES && rt->dst.expires) {



What are the expected preferred lifetimes of a router ?

If granularity is one second, the garbage collection done every 30
seconds is not good.

But if its one hour, or one day, having a 30 seconds delay at the end of
the period isnt critical.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help