Hi,
2) ULA brings with it (as do any options that include multiple addresses) host-stack complexity and address-selection issues... 'do I use ULA here or GUA when talking to the remote host?'
There's an app for that (or rather a library routine called getaddrinfo() and an optional table it consults), and there's soon going to be a way to distribute it via DHCPv6 if the defaults don't suit -
http://tools.ietf.org/html/draft-fujisaki-dhc-addr-select-opt-09
I'm a co-author of this draft. The draft was redirected to 6man wg at IETF, and has a filename: draft-fujisaki-6man-addr-select-opt-00 Unfortunately, I cannot declare it's gonna be ready soon. This proposal has been hanging in the air for long time without any remarkable progress. IMO, this is mainly due to lack of interests on this kind of issues, and lack of operator's perspective on it. I'm glad if anyone could make comments to the 6man list. Best regards,
Sure, now, how many applications have been coded to actually pay attention to what getaddrinfo is telling them about address selection order?
All the ones I use - they all seem to use the first getaddrinfo() response. They should be attempting to successively connect() to all responses in the order that getaddrinfo() returns as connect() failures occur. I don't know if they are (as destination reachability is usually good), however if they aren't, then the application developers haven't used getaddrinfo() correctly. That behaviour wouldn't be exclusive to IPv6 though - IPv4 applications should also be attempting to connect() to successive addresses when multiple are returned. IOW, applications coping with multiple responses to getaddrinfo() is not an exclusive issue to IPv6.
I actually override the current default IPv6 address rules. Here's my /etc/gai.conf, which makes ULAs override GUAs as that currently isn't in the default address selection rules, and makes tunnelled IPv6 preferred over native IPv4, as I don't currently have native IPv6. The MRS entries are the non-defaults, the rest are from the gai.conf manual page.
-- # Used for selecting source addresses # # label <prefix> <label> # label ::1/128 0 label ::/0 1 label 2002::/16 2
label 2000::/3 2 # MRS
label ::/96 3 label ::ffff:0:0/96 4
label fc00::/7 5 # ULA - MRS
# Used for sorting destination addresses # # precedence <prefix> <precedence> # precendence ::1/128 50 precendence ::/0 40
precendence fc00::/7 35 # ULA - MRS
precendence 2000::/3 30 # MRS
precendence 2002::/16 30 precendence ::/96 20 precendence ::ffff:0:0/96 10 --