Request for Review 6887364 [SetOutgoingIf]
Christopher Hegarty -Sun Microsystems Ireland
Christopher.Hegarty at Sun.COM
Tue Oct 6 14:17:29 PDT 2009
Alan Bateman wrote:
> Christopher Hegarty -Sun Microsystems Ireland wrote:
>> Hi Pavel, Michael,
>>
>> 6887364: SetOutgoingIf.java fails if run on multihomed machine without
>> PIv6 on all interfaces [more details below]
>>
>> Webrev:
>> http://cr.openjdk.java.net/~chegar/6887364/webrev/
>>
>> I just realized why this test was failing on one of our lab machines.
>> The reason is that the test tries to join both IPv4 and IPv6 multicast
>> groups on network interfaces that are not loopback, are Up, and
>> support multicast. On our machine we have one interface that has only
>> an IPv4 address assigned to it, while another has both IPv4 and Ipv6
>> addresses.
>>
>> I've changed the test to only try joining the appropriate multicast
>> group if the network interface supports that IP protocol.
>>
>> Also, I noticed that the IPv4 mapped IPv6 address the test runs with
>> actually gets converted to a regular Inet4Address because the
>> InetAddress factory method is smarter than us! It never creates
>> Inet6Address instances that are IPv4 mapped IPv6 addresses, it just
>> creates Inet4Address. So (controversially) I manufactured an
>> Inet6Address multicast instance manually. It seems to work fine.
>>
>> --------------
>> Details of failure and machine configuration:
>> Fails with:
>> Exception in thread "main" java.net.SocketException: No such device
>> or address
>> at java.net.PlainDatagramSocketImpl.join(Native Method)
>> at
>> java.net.AbstractPlainDatagramSocketImpl.joinGroup(AbstractPlainDatagramSocketImpl.java:184)
>>
>> at java.net.MulticastSocket.joinGroup(MulticastSocket.java:382)
>> at SetOutgoingIf.main(SetOutgoingIf.java:116)
>>
>> Machine configuration [IP address information removed for security
>> reasons]:
>> :> ifconfig -a
>> lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu
>> 8232 index 1
>> inet 127.0.0.1 netmask ff000000
>> bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
>> inet XXX.XXX.XXX.160 netmask ffffff00 broadcast XXX.XXX.XXX.255
>> bge3: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 5
>> inet XXX.XXX.YYY.160 netmask ffffff00 broadcast XXX.XXX.YYY.255
>> bge0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
>> inet6 fe80::214:4fff:fe7a:b734/10
>> lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu
>> 8252 index 1
>> inet6 ::1/128
>> ---------------
>>
>> -Chris.
> I don't know if you have a reviewer for this one yet. I went through the
> changes to the test and the overall approach seems reasonable. The one
> thing that doesn't seem right is attempting to do IPv4 multicasting when
> an interface is only plumbed with IPv6 (I'm talking about the case where
> it adds an IPv4-mapped address to the list of groups). I don't think the
> RFC dealing with migration to IPv6 covers that scenario and I'm pretty
> sure that many kernels don't support it either. I would suggest dropping
> that code so that you simple test IPv4 multicast on interfaces that have
> IPv4 address, and test IPv6 multicasting on interfaces that have IPv6
> addresses.
I was coming around to this conclusion also. I'll just drop the IPv4
mapped IPv6 address and update the webrev.
Thanks for the review.
-Chris.
>
> -Alan.
>
More information about the net-dev
mailing list