>Deprecate IPV6_V6ONLY, add IPV6_ACCEPTV4MAPPED option
>
> Then the IPv6 sockets would have to be explicitly allowed to accept
> IPv4 connections. So the programs that use the IPv6 centric way have
> to be modified a bit, but the buggy implementations and the unworkable
> one could be corrected without losing features. Just making
> IPV6_V6ONLY default to on would have the same results.
I really love to see this happen (polarity change is enough).
also, if IPv4 mapped address support becomes optional (explicitly)
to OS implementers it would be much better.
However, we need to be careful - after looking into IPV6_V6ONLY (or
IPV6_ACCEPTV4MAPPED) more closer, I came to realize some mess in
setsockopt(2) behavior.
for example:
- A issues bind(:: port 80). as IPV6_V6ONLY is turned on, it grabs
IPv6 traffic only.
- B issues bind(0.0.0.0 port 80). it grabs IPv4 traffic only.
- now, turn off IPV6_V6ONLY on A. what should happen?
(1) check if there's anyone listening to 0.0.0.0 port 80. since
there is B, the setsockopt should fail.
(2) doesn't matter. if there's B, IPv4 traffic goes into B as
B gives better match than A to any IPv4 traffic.
btw, there's no spec talks about how traffic should be routed
to which socket!
there are A LOT of combinations we need to think about.
>More magic to getaddrinfo
>
> Take the Linux approach as the good one (it's the only compliant and
> non buggy -again, talking just about the issue on topic, i won't judge
> the general buggyness of any stack here), add a bit more (yet more!)
> of magic to getaddrinfo so it only returns the INET wildcard sockaddr
> when the kernel has no support for IPv6, and then the buggy stacks
> could be corrected with no loss of features and the unworkable one
> would get workable.
please clarify. are you suggesting that, for getaddrinfo(3) AI_PASSIVE
case:
- on platforms that makes :: and 0.0.0.0 conflict on bind(2),
dual stack kernel config: getaddrinfo(3) returns :: only.
IPv6 only kernel config: getaddrinfo(3) returns :: only.
IPv4 only kernel config: getaddrinfo(3) returns 0.0.0.0 only.
this case includes linux.
- on platforms that makes :: and 0.0.0.0 do not conflict on bind(2),
dual stack kernel config: getaddrinfo(3) returns :: and 0.0.0.0.
IPv6 only kernel config: getaddrinfo(3) returns :: only.
IPv4 only kernel config: getaddrinfo(3) returns 0.0.0.0 only.
this case includes OpenBSD, NetBSD, FreeBSD.
or are you suggesting something else? note that getaddrinfo(3) cannot
look at IPV6_V6ONLY status on socket, so we cannot implement behavior
depending on IPV6_V6ONLY status.
itojun
--------------------------------------------------------------------
IETF IPng Working Group Mailing List
IPng Home Page: http://playground.sun.com/ipng
FTP archive: ftp://playground.sun.com/pub/ipng
Direct all administrative requests to [EMAIL PROTECTED]
--------------------------------------------------------------------