[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: JDP broadcaster issue
From:       Dmitry Samersoff <dmitry.samersoff () oracle ! com>
Date:       2014-09-04 12:26:32
Message-ID: 54085A78.7030205 () oracle ! com
[Download RAW message or body]

Yasumasa,

The CR number is JDK-8057556

I'll care about it's integration.

-Dmitry

On 2014-09-02 18:52, Yasumasa Suenaga wrote:
> Hi all,
> 
> I'm trying to use JDP on my Fedora20 machine.
> My machine has two NICs and only one NIC is up.
> 
> I passed system properties as below, however JDP broadcaster
> thread was not started:
> 
> -Dcom.sun.management.jmxremote.port=7091
> -Dcom.sun.management.jmxremote.authenticate=false
> -Dcom.sun.management.jmxremote.ssl=false
> -Dcom.sun.management.jmxremote.autodiscovery=true
> -Dcom.sun.management.jdp.name=TEST
> 
> I checked exceptions with jdb, SocketException was occurred in
> JDPControllerRunner#run(), and it was caused by another NIC
> is down.
> 
> Currently, DiagramChannel which is used in JDPBroadcaster
> tries to send JDP packet through all "UP" NICs.
> However, NIC which is controlled by NetworkManager seems to
> be still "UP" when ifdown command is executed.
> (It seems to be removed IP address from NIC only.)
> 
> 
> This problem may be Fedora, however I think it should be
> improved in JDK.
> I've created a patch as below, and it works fine in my environment.
> (jdk9/dev/jdk)
> 
> If this patch may be accepted, I will file this to JBS.
> 
> --------------------
> diff -r 68a6bb51cb26 \
>                 src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
>                 
> --- a/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java	Mon \
>                 Sep 01 13:33:28 2014 +0200
> +++ b/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java	Tue \
> Sep 02 23:25:50 2014 +0900 @@ -35,6 +35,7 @@
> import java.nio.ByteBuffer;
> import java.nio.channels.DatagramChannel;
> import java.nio.channels.UnsupportedAddressTypeException;
> +import java.util.Enumeration;
> 
> /**
> * JdpBroadcaster is responsible for sending pre-built JDP packet across a Net
> @@ -79,6 +80,15 @@
> if (srcAddress != null) {
> // User requests particular interface to bind to
> NetworkInterface interf = NetworkInterface.getByInetAddress(srcAddress);
> +
> +            if (interf == null) {
> +                throw new JdpException("Unable to get network interface for " + \
> srcAddress.toString()); +            }
> +
> +            if (!interf.isUp() || !interf.supportsMulticast()) {
> +                throw new JdpException(interf.getName() + " does not support \
> multicast."); +            }
> +
> try {
> channel.bind(new InetSocketAddress(srcAddress, 0));
> } catch (UnsupportedAddressTypeException ex) {
> @@ -86,6 +96,23 @@
> }
> channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, interf);
> }
> +        else {
> +            Enumeration<NetworkInterface> nics = \
> NetworkInterface.getNetworkInterfaces(); +            while \
> (nics.hasMoreElements()) { +                NetworkInterface nic = \
> nics.nextElement(); +
> +                if (nic.isUp() && nic.supportsMulticast()) {
> +                    try {
> +                        channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, \
> nic); +                    } catch (IOException ex) {
> +                        System.err.println("WARNING: JDP broadcaster cannot use " \
> + nic.getName() + ": " + ex.getMessage()); +                    }
> +                }
> +
> +            }
> +
> +        }
> +
> }
> 
> /**
> --------------------
> 
> 
> Thanks,
> 
> Yasumasa
> 


-- 
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic