netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Li Yewang <lyw@nanjing-fnst.com>
To: netdev@vger.kernel.org
Cc: herbert@gondor.apana.org.au
Subject: Re:[PATCH]Fix BUG of ip_rt_send_redirect()
Date: Wed, 29 Nov 2006 16:08:45 +0800	[thread overview]
Message-ID: <1164787726.14560.11.camel@localhost.localdomain> (raw)

Herbert Xu <herbert@gondor.apana.org.au> wrote:

> 
>I think there are two problems here:
> 
>1)The first time we hit the check rate_last is zero. We should simply
>proceed with the redirect rather than treating this as a jiffies value.
> 
>2)When a dst is so old that the jiffies have wrapped around.  I'm
>not sure whether this is worth solving as it should be extremely rare
>unless your HZ is sufficiently large and you're on a 32-bit platform.
> 
>One solution would be to periodically reset the rate_last fields to
>their original states.  Perhaps we can combine that with the GC.


Mr Herbert Xu:

According to your advice, I have made another patch for the redirect
bug.

This patch does not think of the jiffies wraparound any more.
Because if the router sends a redirect packet for the first time,
the redirect route cache entry will be created in the route cache.
If this entry is used frequently(This should be extremely rare), 
the rate_last will be update to the current jiffies when it sends 
the redirect packet. So we don't concern about the jiffies wraparound.
If this entry does not be used for a long time, the GC will remove 
it from route cache. Next time if we want to use this entry, 
the redirect entry will be created in the route cache again, and the
rate_last will be initialized to 0. So we don't care of the jiffies
wraparound too.


Following is my patch:

Signed-off-by: Li Yewang <lyw@nanjing-fnst.com>

--- linux-2.6.19/net/ipv4/route.c.org 2006-12-05 10:47:02.402147160
+0800
+++ linux-2.6.19/net/ipv4/route.c 2006-12-05 10:48:26.339386760 +0800
@@ -1327,7 +1327,8 @@ void ip_rt_send_redirect(struct sk_buff 
  /* Check for load limit; set rate_last to the latest sent
   * redirect.
   */
- if (time_after(jiffies,
+ if (rt->u.dst.rate_last == 0 ||
+     time_after(jiffies,
          (rt->u.dst.rate_last +
    (ip_rt_redirect_load << rt->u.dst.rate_tokens)))) {
   icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, rt->rt_gateway);


To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



             reply	other threads:[~2006-12-05  8:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-29  8:08 Li Yewang [this message]
2006-12-18  3:02 ` [PATCH]Fix BUG of ip_rt_send_redirect() Herbert Xu
  -- strict thread matches above, loose matches on Subject: below --
2006-11-29  8:51 Li Yewang
2006-12-19  1:45 Li Yewang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1164787726.14560.11.camel@localhost.localdomain \
    --to=lyw@nanjing-fnst.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).