diff options
author | Anton Altaparmakov <aia21@cantab.net> | 2006-01-03 12:51:07 +0000 |
---|---|---|
committer | Anton Altaparmakov <aia21@cantab.net> | 2006-01-03 12:51:07 +0000 |
commit | d087e4bdd24ebe3ae3d0b265b6573ec901af4b4b (patch) | |
tree | c2db1b4958bbf617a25398b7ef93d82006b26a17 /net/ipv6/icmp.c | |
parent | 292d4ed32e35df4755052b5002e533348d1648fd (diff) | |
parent | 88026842b0a760145aa71d69e74fbc9ec118ca44 (diff) | |
download | kernel-crypto-d087e4bdd24ebe3ae3d0b265b6573ec901af4b4b.tar.gz kernel-crypto-d087e4bdd24ebe3ae3d0b265b6573ec901af4b4b.tar.xz kernel-crypto-d087e4bdd24ebe3ae3d0b265b6573ec901af4b4b.zip |
Merge branch 'master' of /usr/src/ntfs-2.6/
Diffstat (limited to 'net/ipv6/icmp.c')
-rw-r--r-- | net/ipv6/icmp.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 34a332225c1..6ec6a2b549b 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -328,8 +328,10 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, iif = skb->dev->ifindex; /* - * Must not send if we know that source is Anycast also. - * for now we don't know that. + * Must not send error if the source does not uniquely + * identify a single node (RFC2463 Section 2.4). + * We check unspecified / multicast addresses here, + * and anycast addresses will be checked later. */ if ((addr_type == IPV6_ADDR_ANY) || (addr_type & IPV6_ADDR_MULTICAST)) { LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: addr_any/mcast source\n"); @@ -373,6 +375,16 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, err = ip6_dst_lookup(sk, &dst, &fl); if (err) goto out; + + /* + * We won't send icmp if the destination is known + * anycast. + */ + if (((struct rt6_info *)dst)->rt6i_flags & RTF_ANYCAST) { + LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: acast source\n"); + goto out_dst_release; + } + if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) goto out; |