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