summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteinar H. Gunderson <sesse@google.com>2010-12-20 11:15:33 +0100
committerSteinar H. Gunderson <sesse@google.com>2011-01-14 21:40:34 +0100
commita798b9f0e171643b0bc7bbf79f14cb018689f715 (patch)
tree3219517b0d3442a0725d2876f66f995ae562dd57
parent7bbd4580afe0347892a0680b5917ec7df38c003a (diff)
downloadbionic-a798b9f0e171643b0bc7bbf79f14cb018689f715.zip
bionic-a798b9f0e171643b0bc7bbf79f14cb018689f715.tar.gz
bionic-a798b9f0e171643b0bc7bbf79f14cb018689f715.tar.bz2
Backport (simple cherry-pick) d1624add2b73ce8ff7826ce27b1d6d6e35bb83a6
to gingerbread. Don't treat private IPv4 addresses as being in a non-global scope. The effect of this change is essentially to prefer NATed IPv4 over 6to4.
-rw-r--r--libc/netbsd/net/getaddrinfo.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/libc/netbsd/net/getaddrinfo.c b/libc/netbsd/net/getaddrinfo.c
index e7564c4..aa3b81a 100644
--- a/libc/netbsd/net/getaddrinfo.c
+++ b/libc/netbsd/net/getaddrinfo.c
@@ -1299,11 +1299,13 @@ _get_scope(const struct sockaddr *addr)
if (IN_LOOPBACK(na) || /* 127.0.0.0/8 */
(na & 0xffff0000) == 0xa9fe0000) { /* 169.254.0.0/16 */
return IPV6_ADDR_SCOPE_LINKLOCAL;
- } else if ((na & 0xff000000) == 0x0a000000 || /* 10.0.0.0/8 */
- (na & 0xfff00000) == 0xac100000 || /* 172.16.0.0/12 */
- (na & 0xffff0000) == 0xc0a80000) { /* 192.168.0.0/16 */
- return IPV6_ADDR_SCOPE_SITELOCAL;
} else {
+ /*
+ * According to draft-ietf-6man-rfc3484-revise-01 section 2.3,
+ * it is best not to treat the private IPv4 ranges
+ * (10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16) as being
+ * in a special scope, so we don't.
+ */
return IPV6_ADDR_SCOPE_GLOBAL;
}
} else {