diff options
author | Juha-Matti Tapio <jmtapio@verkkotelakka.net> | 2008-02-28 23:55:46 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-28 23:55:46 -0500 |
commit | 99cd07a537bf4c7c954f31611e30064407104410 (patch) | |
tree | 4abc67b2f95b3220bfa467cb9c85156cd17e3ab7 /include/net/ipv6.h | |
parent | 5fe47b8a65f8b4104e41dc46092dfcf942ce0758 (diff) |
[IPV6]: Fix source address selection for ORCHID addresses
Skip the prefix length matching in source address selection for
orchid -> non-orchid addresses.
Overlay Routable Cryptographic Hash IDentifiers (RFC 4843,
2001:10::/28) are currenty not globally reachable. Without this
check a host with an ORCHID address can end up preferring those over
regular addresses when talking to other regular hosts in the 2001::/16
range thus breaking non-orchid connections.
Signed-off-by: Juha-Matti Tapio <jmtapio@verkkotelakka.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/ipv6.h')
-rw-r--r-- | include/net/ipv6.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index c0c019f72ba9..8b05c65415cb 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -384,6 +384,16 @@ static inline int ipv6_addr_v4mapped(const struct in6_addr *a) | |||
384 | } | 384 | } |
385 | 385 | ||
386 | /* | 386 | /* |
387 | * Check for a RFC 4843 ORCHID address | ||
388 | * (Overlay Routable Cryptographic Hash Identifiers) | ||
389 | */ | ||
390 | static inline int ipv6_addr_orchid(const struct in6_addr *a) | ||
391 | { | ||
392 | return ((a->s6_addr32[0] & htonl(0xfffffff0)) | ||
393 | == htonl(0x20010010)); | ||
394 | } | ||
395 | |||
396 | /* | ||
387 | * find the first different bit between two addresses | 397 | * find the first different bit between two addresses |
388 | * length of address must be a multiple of 32bits | 398 | * length of address must be a multiple of 32bits |
389 | */ | 399 | */ |