diff options
Diffstat (limited to 'net/ipv4/route.c')
| -rw-r--r-- | net/ipv4/route.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index ce92f73cf104..5163b64f8fb3 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -887,13 +887,15 @@ void ip_rt_send_redirect(struct sk_buff *skb) | |||
| 887 | /* No redirected packets during ip_rt_redirect_silence; | 887 | /* No redirected packets during ip_rt_redirect_silence; |
| 888 | * reset the algorithm. | 888 | * reset the algorithm. |
| 889 | */ | 889 | */ |
| 890 | if (time_after(jiffies, peer->rate_last + ip_rt_redirect_silence)) | 890 | if (time_after(jiffies, peer->rate_last + ip_rt_redirect_silence)) { |
| 891 | peer->rate_tokens = 0; | 891 | peer->rate_tokens = 0; |
| 892 | peer->n_redirects = 0; | ||
| 893 | } | ||
| 892 | 894 | ||
| 893 | /* Too many ignored redirects; do not send anything | 895 | /* Too many ignored redirects; do not send anything |
| 894 | * set dst.rate_last to the last seen redirected packet. | 896 | * set dst.rate_last to the last seen redirected packet. |
| 895 | */ | 897 | */ |
| 896 | if (peer->rate_tokens >= ip_rt_redirect_number) { | 898 | if (peer->n_redirects >= ip_rt_redirect_number) { |
| 897 | peer->rate_last = jiffies; | 899 | peer->rate_last = jiffies; |
| 898 | goto out_put_peer; | 900 | goto out_put_peer; |
| 899 | } | 901 | } |
| @@ -910,6 +912,7 @@ void ip_rt_send_redirect(struct sk_buff *skb) | |||
| 910 | icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw); | 912 | icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw); |
| 911 | peer->rate_last = jiffies; | 913 | peer->rate_last = jiffies; |
| 912 | ++peer->rate_tokens; | 914 | ++peer->rate_tokens; |
| 915 | ++peer->n_redirects; | ||
| 913 | #ifdef CONFIG_IP_ROUTE_VERBOSE | 916 | #ifdef CONFIG_IP_ROUTE_VERBOSE |
| 914 | if (log_martians && | 917 | if (log_martians && |
| 915 | peer->rate_tokens == ip_rt_redirect_number) | 918 | peer->rate_tokens == ip_rt_redirect_number) |
