From lehmann at ans-netz.de Fri Feb 1 00:03:19 2013 From: lehmann at ans-netz.de (Oliver Lehmann) Date: Fri, 01 Feb 2013 09:03:19 +0100 Subject: MulticastSocket problem on FreeBSD In-Reply-To: <510B378A.8090603@intricatesoftware.com> References: <20130131192629.Horde.ZGX-g9D9tu8aDwt6XwEMuw5@avocado.salatschuessel.net> <510B378A.8090603@intricatesoftware.com> Message-ID: <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net> Hi, I patched openjdk7. Attached you'll find the patch. It is now possible (at least for me) to use MulticastSocket. I know the patch is not ready for checkin, but I guess you'll get the idea and know how to do it properly as I don't know the correct defines to check. (The first two chunks in the patch are probably already in HG as the patch is based on u6 code) Basically I just replaced the MACOSX check with __FreeBSD__ and it works now: root at bigoli test> /usr/local/bootstrap-openjdk/bin/javac test.java root at bigoli test> /usr/local/bootstrap-openjdk/bin/jar -cf test.jar Main.class root at bigoli test> /usr/local/openjdk7/bin/java -classpath .:test.jar Main network interface: name:null interface: /10.0.1.1 Java is still not able to detect my network interface name, but this was also not working in Diablo JRE and I don't need it. At least I'm now getting the correct Multicast Address back (10.0.1.1 and not 0.0.0.0) Please consider fixing this upstream. PS: Sorry for top-post but I'm CCing FreeBSDs java@ list Kurt Miller wrote: > Hi Oliver, > > On 01/31/13 13:26, Oliver Lehmann wrote: >> Hi, >> >> I encountered a bug while migrating from FreeBSDs old "Diablo jre" >> to openjdk-jre version 6. >> >> I'm running a software using multicast communication and it fails >> on FreeBSD when using openjdk6. >> >> example code: >> >> import java.io.IOException; >> import java.net.InetAddress; >> import java.net.MulticastSocket; >> import java.net.SocketException; >> import java.net.UnknownHostException; >> >> >> class Main { >> static String hostname = new String("10.0.1.1"); >> >> public static void main(String args[]) throws >> SocketException, UnknownHostException, IOException{ >> InetAddress ia = InetAddress.getByName(hostname); >> MulticastSocket ssdpSocket = new MulticastSocket(); >> >> ssdpSocket.setInterface(ia); >> >> System.out.println("network interface: " + >> ssdpSocket.getNetworkInterface()); >> System.out.println("interface: " + ssdpSocket.getInterface()); >> } >> } >> >> >> The output of the old "Diablo JRE" is: >> >> network interface: name:null index: -1 addresses: >> /10.0.1.1; >> >> interface: /10.0.1.1 >> >> >> The output of openJDK6 is: >> >> network interface: name:null >> interface: /0.0.0.0 >> >> It always returns this information. >> For comparison - openjdk on Linux: >> >> network interface: name:eth0 (eth0) >> interface: /10.0.1.54 >> >> Oracle 7 VM on Windows: >> >> network interface: name:eth3 (Realtek PCIe GBE Family Controller) >> interface: /10.0.1.51 > > I can confirm this is a problem for bsd-port (openjdk7) > on OpenBSD too. > >> For me this seems to be an implementation bug of... I don't know? >> PlainDatagramSocketImpl.c maybe? >> >> I tried to debug this further, but did not succeeded to find out if >> either setInterface() failed to set it correctly, or somewhere in >> getInterface() an early return() happens. I tried to remotly debug >> this using Eclipse, but only saw the private variables of ssdpSocket >> which didn't indicated something obvious. Breakpoints inside >> java.net.MulticastSocket would have helped ;) >> >> -------------- next part -------------- A non-text attachment was scrubbed... Name: PlainDatagramSocketImpl.c.patch Type: text/x-java Size: 2554 bytes Desc: not available Url : http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20130201/28aa2a26/PlainDatagramSocketImpl.c.patch From kurt at intricatesoftware.com Fri Feb 1 09:59:52 2013 From: kurt at intricatesoftware.com (Kurt Miller) Date: Fri, 1 Feb 2013 12:59:52 -0500 Subject: MulticastSocket problem on FreeBSD In-Reply-To: <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net> References: <20130131192629.Horde.ZGX-g9D9tu8aDwt6XwEMuw5@avocado.salatschuessel.net> <510B378A.8090603@intricatesoftware.com> <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net> Message-ID: <201302011259.53214.kurt@intricatesoftware.com> Hi Oliver, On Friday 01 February 2013 03:03:19 am Oliver Lehmann wrote: > Hi, > > I patched openjdk7. Attached you'll find the patch. > It is now possible (at least for me) to use MulticastSocket. > I know the patch is not ready for checkin, but I guess you'll get > the idea and know how to do it properly as I don't know the correct > defines to check. (The first two chunks in the patch are probably > already in HG as the patch is based on u6 code) Right those parts are already there. > > Basically I just replaced the MACOSX check with __FreeBSD__ and > it works now: The last chunk of the diff is not needed for this problem and is incomplete. It is for the problem described here: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7144274 http://hg.openjdk.java.net/bsd-port/bsd-port/jdk/rev/99cc5c9ef200 I have not yet checked to see if we need this fix in addition to the problem you noted. However, if we do need it then we to change MACOSX to _ALLBSD_SOURCE in both PlainDatagramSocketImpl.c mcast_join_leave() and net_util_md.c setDefaultScopeID() I am attaching patches for both openjdk6 and openjdk7 that should fix the problem you initially reported and will apply to FreeBSD's ports cleanly. Thanks for reporting the problem and tracking the correction down. -Kurt > root at bigoli test> /usr/local/bootstrap-openjdk/bin/javac test.java > root at bigoli test> /usr/local/bootstrap-openjdk/bin/jar -cf test.jar Main.class > root at bigoli test> /usr/local/openjdk7/bin/java -classpath .:test.jar Main > network interface: name:null > interface: /10.0.1.1 > > Java is still not able to detect my network interface name, but this > was also not working in Diablo JRE and I don't need it. At least I'm > now getting the correct Multicast Address back (10.0.1.1 and not 0.0.0.0) > > Please consider fixing this upstream. > > PS: Sorry for top-post but I'm CCing FreeBSDs java@ list > > > Kurt Miller wrote: > > > Hi Oliver, > > > > On 01/31/13 13:26, Oliver Lehmann wrote: > >> Hi, > >> > >> I encountered a bug while migrating from FreeBSDs old "Diablo jre" > >> to openjdk-jre version 6. > >> > >> I'm running a software using multicast communication and it fails > >> on FreeBSD when using openjdk6. > >> > >> example code: > >> > >> import java.io.IOException; > >> import java.net.InetAddress; > >> import java.net.MulticastSocket; > >> import java.net.SocketException; > >> import java.net.UnknownHostException; > >> > >> > >> class Main { > >> static String hostname = new String("10.0.1.1"); > >> > >> public static void main(String args[]) throws > >> SocketException, UnknownHostException, IOException{ > >> InetAddress ia = InetAddress.getByName(hostname); > >> MulticastSocket ssdpSocket = new MulticastSocket(); > >> > >> ssdpSocket.setInterface(ia); > >> > >> System.out.println("network interface: " + > >> ssdpSocket.getNetworkInterface()); > >> System.out.println("interface: " + ssdpSocket.getInterface()); > >> } > >> } > >> > >> > >> The output of the old "Diablo JRE" is: > >> > >> network interface: name:null index: -1 addresses: > >> /10.0.1.1; > >> > >> interface: /10.0.1.1 > >> > >> > >> The output of openJDK6 is: > >> > >> network interface: name:null > >> interface: /0.0.0.0 > >> > >> It always returns this information. > >> For comparison - openjdk on Linux: > >> > >> network interface: name:eth0 (eth0) > >> interface: /10.0.1.54 > >> > >> Oracle 7 VM on Windows: > >> > >> network interface: name:eth3 (Realtek PCIe GBE Family Controller) > >> interface: /10.0.1.51 > > > > I can confirm this is a problem for bsd-port (openjdk7) > > on OpenBSD too. > > > >> For me this seems to be an implementation bug of... I don't know? > >> PlainDatagramSocketImpl.c maybe? > >> > >> I tried to debug this further, but did not succeeded to find out if > >> either setInterface() failed to set it correctly, or somewhere in > >> getInterface() an early return() happens. I tried to remotly debug > >> this using Eclipse, but only saw the private variables of ssdpSocket > >> which didn't indicated something obvious. Breakpoints inside > >> java.net.MulticastSocket would have helped ;) > >> > >> > > > -------------- next part -------------- A non-text attachment was scrubbed... Name: openjdk6.mcast.diff Type: text/x-diff Size: 1545 bytes Desc: not available Url : http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20130201/575125c3/openjdk6.mcast.diff -------------- next part -------------- A non-text attachment was scrubbed... Name: openjdk7.mcast.diff Type: text/x-diff Size: 1625 bytes Desc: not available Url : http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20130201/575125c3/openjdk7.mcast.diff From lehmann at ans-netz.de Fri Feb 1 14:35:45 2013 From: lehmann at ans-netz.de (Oliver Lehmann) Date: Fri, 01 Feb 2013 23:35:45 +0100 Subject: MulticastSocket problem on FreeBSD In-Reply-To: <201302011259.53214.kurt@intricatesoftware.com> References: <20130131192629.Horde.ZGX-g9D9tu8aDwt6XwEMuw5@avocado.salatschuessel.net> <510B378A.8090603@intricatesoftware.com> <20130201090319.Horde.UUrN0L_jSn_qp6MZj0-Wig1@avocado.salatschuessel.net> <201302011259.53214.kurt@intricatesoftware.com> Message-ID: <20130201233545.Horde._2oqHuhW_1GqoNXuJQq12w1@avocado.salatschuessel.net> Hi Kurt, Kurt Miller wrote: > I am attaching patches for both openjdk6 and openjdk7 > that should fix the problem you initially reported and will apply to > FreeBSD's ports cleanly. I now compiled openjdk6 and 7 ports with your patches in place and the problem goes away. Any chance they get committed to HQ? From kurt at intricatesoftware.com Fri Feb 1 15:43:19 2013 From: kurt at intricatesoftware.com (Kurt Miller) Date: Fri, 1 Feb 2013 18:43:19 -0500 Subject: MulticastSocket problem on FreeBSD In-Reply-To: <20130201233545.Horde._2oqHuhW_1GqoNXuJQq12w1@avocado.salatschuessel.net> References: <20130131192629.Horde.ZGX-g9D9tu8aDwt6XwEMuw5@avocado.salatschuessel.net> <201302011259.53214.kurt@intricatesoftware.com> <20130201233545.Horde._2oqHuhW_1GqoNXuJQq12w1@avocado.salatschuessel.net> Message-ID: <201302011843.19938.kurt@intricatesoftware.com> Hi Oliver, On Friday 01 February 2013 05:35:45 pm Oliver Lehmann wrote: > Hi Kurt, > > Kurt Miller wrote: > > > I am attaching patches for both openjdk6 and openjdk7 > > that should fix the problem you initially reported and will apply to > > FreeBSD's ports cleanly. > > I now compiled openjdk6 and 7 ports with your patches in place and > the problem goes away. Any chance they get committed to HQ? Great. I can take care of bsd-port. Probably Greg or other FreeBSD commters will review and commit them to the FreeBSD's ports tree. Regards, -Kurt From kurt at intricatesoftware.com Fri Feb 1 15:49:47 2013 From: kurt at intricatesoftware.com (kurt at intricatesoftware.com) Date: Fri, 01 Feb 2013 23:49:47 +0000 Subject: hg: bsd-port/bsd-port/jdk: - Fix MulticastSocket.setInterface() for BSD. Report and fix from Oliver Message-ID: <20130201235025.C852847795@hg.openjdk.java.net> Changeset: bfa676f5b5db Author: kurt Date: 2013-02-01 18:49 -0500 URL: http://hg.openjdk.java.net/bsd-port/bsd-port/jdk/rev/bfa676f5b5db - Fix MulticastSocket.setInterface() for BSD. Report and fix from Oliver Lehmann on bsd-port list. ! src/solaris/native/java/net/PlainDatagramSocketImpl.c