From 6e2a7825284e41f2336b0cb5a98609ff486e85fa Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 18 May 2006 16:58:36 +0000 Subject: [PATCH] * sysdeps/posix/getaddrinfo.c: Add unique labels to the default RFC3484 precedence table for fec0::/10 and fc00::/7 (site-local and ULA respectively). Set precedence for IPv4 address to 10 as defined in RFC3484 for preferring IPv6. * posix/gai.conf: Update to match the new default tables. --- ChangeLog | 8 ++++++++ posix/gai.conf | 26 +++++++++++++++++++------- sysdeps/posix/getaddrinfo.c | 17 ++++++++++++++++- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index d7e33323fa..6b38b9d256 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-05-18 David Woodhouse + + * sysdeps/posix/getaddrinfo.c: Add unique labels to the default + RFC3484 precedence table for fec0::/10 and fc00::/7 (site-local + and ULA respectively). Set precedence for IPv4 address to 10 as + defined in RFC3484 for preferring IPv6. + * posix/gai.conf: Update to match the new default tables. + 2006-05-18 Jakub Jelinek * nis/nss_compat/compat-pwd.c (internal_setpwent): If nss_set*ent diff --git a/posix/gai.conf b/posix/gai.conf index 5f063f5c3c..0e334ac2c5 100644 --- a/posix/gai.conf +++ b/posix/gai.conf @@ -24,17 +24,29 @@ #label 2002::/16 2 #label ::/96 3 #label ::ffff:0:0/96 4 +#label fec0::/10 5 +#label fc00::/7 6 +# +# This default differs from the tables given in RFC 3484 by handling +# (now obsolete) site-local IPv6 addresses and Unique Local Addresses. +# The reason for this difference is that these addresses are never +# NATed while IPv4 site-local addresses most probably are. Given +# the precedence of IPv6 over IPv4 (see below) on machines having only +# site-local IPv4 and IPv6 addresses a lookup for a global address would +# see the IPv6 be preferred. The result is a long delay because the +# site-local IPv6 addresses cannot be used while the IPv4 address is +# (at least for the foreseeable future) NATed. # # precedence -# Add another rule the to RFC 3484 precendence table. See section 2.1 +# Add another rule the to RFC 3484 precedence table. See section 2.1 # and 10.3 in RFC 3484. The default is: # -#precendence ::1/128 50 -#precendence ::/0 40 -#precendence 2002::/16 30 -#precendence ::/96 20 -#precendence ::ffff:0:0/96 10 +#precedence ::1/128 50 +#precedence ::/0 40 +#precedence 2002::/16 30 +#precedence ::/96 20 +#precedence ::ffff:0:0/96 10 # # For sites which prefer IPv4 connections change the last line to # -#precendence ::ffff:0:0/96 100 +#precedence ::ffff:0:0/96 100 diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index a78c670bfb..a35b8662d5 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -1202,6 +1202,21 @@ static const struct prefixentry default_labels[] = = { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } }, 96, 4 }, + /* The next two entries differ from RFC 3484. We need to treat + IPv6 site-local addresses special because they are never NATed, + unlike site-locale IPv4 addresses. If this would not happen, on + machines which have only IPv4 and IPv6 site-local addresses, the + sorting would prefer the IPv6 site-local addresses, causing + unnecessary delays when trying to connect to a global IPv6 address + through a site-local IPv6 address. */ + { { .in6_u + = { .u6_addr8 = { 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + 10, 5 }, + { { .in6_u + = { .u6_addr8 = { 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, + 7, 6 }, { { .in6_u = { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, @@ -1231,7 +1246,7 @@ static const struct prefixentry default_precedence[] = { { .in6_u = { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } }, - 96, 100 }, + 96, 10 }, { { .in6_u = { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }, -- 2.34.1