# Configuration for getaddrinfo(3).
#
# So far only configuration for the destination address sorting is needed.
# RFC 3484 governs the sorting.  But the RFC also says that system
# administrators should be able to overwrite the defaults.  This can be
# achieved here.
#
# All lines have an initial identifier specifying the option followed by
# up to two values.  Information specified in this file replaces the
# default information.  Complete absence of data of one kind causes the
# appropriate default information to be used.  The supported commands include:
#
# reload  <yes|no>
#    If set to yes, each getaddrinfo(3) call will check whether this file
#    changed and if necessary reload.  This option should not really be
#    used.  There are possible runtime problems.  The default is no.
#
# label   <mask>   <value>
#    Add another rule to the RFC 3484 label table.  See section 2.1 in
#    RFC 3484.  The default is:
#
#label ::1/128       0
#label ::/0          1
#label 2002::/16     2
#label ::/96         3
#label ::ffff:0:0/96 4
#label fec0::/10     5
#label fc00::/7      6
#label 2001:0::/32   7
#
#    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.  We also treat Teredo
#    tunnels special.
#
# precedence  <mask>   <value>
#    Add another rule to the RFC 3484 precedence table.  See section 2.1
#    and 10.3 in RFC 3484.  The default is:
#
#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
#
#precedence ::ffff:0:0/96  100

#
# scopev4  <mask>  <value>
#    Add another rule to the RFC 3484 scope table for IPv4 addresses.
#    By default the scope IDs described in section 3.2 in RFC 3484 are
#    used.  Changing these defaults should hardly ever be necessary.
#    The defaults are equivalent to:
#
#scopev4 ::ffff:169.254.0.0/112  2
#scopev4 ::ffff:127.0.0.0/104    2
#scopev4 ::ffff:10.0.0.0/104     5
#scopev4 ::ffff:172.16.0.0/108   5
#scopev4 ::ffff:192.168.0.0/112  5
#scopev4 ::ffff:0.0.0.0/96       14
#
# Back in 2003, the sorting algorithm used by getaddrinfo() was defined in RFC
# 3484.  However, this document did not take into account (or foresee) the
# ubiquity of IPv4 NAT on today's internet.  This in turn causes some real
# operational problems that's hindering the deployment of IPv6 for content
# providers.
# 
# The problem scenario is the following:
# 
# An end user is located in a network numbered with private (RFC 1918) IPv4
# addresses and transitional 6to4 (RFC 3056) IPv6 addresses.  The network is
# connected to the internet by a CPE/SOHO device implementing NAT for IPv4 and
# anycasted 6to4 (RFC 3068) for IPv6.
# 
# When the user attempts to connect to a server whose hostname has both IPv4
# and IPv6 addresses published in DNS, an IPv6 connection using the
# transitional 6to4 service will be preferred.  This happens because the scope
# comparison fails for IPv4, the RFC 1918 addresses are assumed to have
# site-local scope, which is smaller than the global scope of the server's IPv4
# address.  For IPv6, both the server's and the client's (6to4) address have
# global scope.
# 
# Unfortunately, the operational reality is that a transitional technique such
# as 6to4 is much less reliable than IPv4.  The relay routers might be located
# far away from the optimal IPv4 path, and thus cause a significant latency
# increase, or they might not even work optimally (they're usually operated by
# voulenteering third parties on a best-effort basis), and finally some ISPs
# simply filter away all proto-41 traffic.  Transitional techniques are useful
# to give end users with IPv4-only service a real shot at accessing IPv6-only
# content, but it should never be preferred over IPv4 service when accessing
# dual-stacked content.
# 
# RFC 3484 even acknowledges this, by saying to "avoid the use of transitional
# addresses when native addresses are available".
# 
# An IETF draft document which describes the problem in a much more detailed
# manner than I have is available here:
# 
# http://tools.ietf.org/html/draft-denis-v6ops-nat-addrsel-00
# 
# There's also an IETF draft that aims to revise RFC 3484 in order to fix this
# problem (amongst others):
# 
# http://tools.ietf.org/html/draft-arifumi-6man-rfc3484-revise-02
# 
# Quoting from this document:
# 
# > 2.7.  To change private IPv4 address scope
# >
# >    As detailed in Remi's draft [I-D.denis-v6ops-nat-addrsel], when a
# >    host is in NATed site, and has a private IPv4 address and
# >    transitional addresses like 6to4 and Teredo, the host chooses
# >    transitional IPv6 address to access most of the dual-stack servers.
# >
# >    This is because private IPv4 address is defined to be site-local
# >    scope, and as in RFC 3484, the scope matching rules (Rule 2) set
# >    lower priority for private IPv4 address.
# >
# >    By changing the address scope of private IPv4 address to global, this
# >    problem can be solved.
#
scopev4 ::ffff:10.0.0.0/104 14
scopev4 ::ffff:172.16.0.0/108 14
scopev4 ::ffff:192.168.0.0/112 14
