aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_output.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-02-04 18:55:25 -0500
committerDavid S. Miller <davem@davemloft.net>2011-02-04 18:59:53 -0500
commit92d8682926342d2b6aa5b2ecc02221e00e1573a0 (patch)
tree7f70b9cc2975716ab60ddd632b9fecf0a51b828d /net/ipv6/ip6_output.c
parent0131ba451e20239c5dc701027c1a2edef95e1a6e (diff)
inetpeer: Move ICMP rate limiting state into inet_peer entries.
Like metrics, the ICMP rate limiting bits are cached state about a destination. So move it into the inet_peer entries. If an inet_peer cannot be bound (the reason is memory allocation failure or similar), the policy is to allow. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r--net/ipv6/ip6_output.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 5f8d242be3f3..2600e2288724 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -479,10 +479,13 @@ int ip6_forward(struct sk_buff *skb)
479 else 479 else
480 target = &hdr->daddr; 480 target = &hdr->daddr;
481 481
482 if (!rt->rt6i_peer)
483 rt6_bind_peer(rt, 1);
484
482 /* Limit redirects both by destination (here) 485 /* Limit redirects both by destination (here)
483 and by source (inside ndisc_send_redirect) 486 and by source (inside ndisc_send_redirect)
484 */ 487 */
485 if (xrlim_allow(dst, 1*HZ)) 488 if (inet_peer_xrlim_allow(rt->rt6i_peer, 1*HZ))
486 ndisc_send_redirect(skb, n, target); 489 ndisc_send_redirect(skb, n, target);
487 } else { 490 } else {
488 int addrtype = ipv6_addr_type(&hdr->saddr); 491 int addrtype = ipv6_addr_type(&hdr->saddr);