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