Looks like only the first Interface will be considered if no srcAddress is 
provided (succeeded will be false and we will throw to exit the while loop). Is 
this intended?

Thanks!
/peter

> On 4 sep 2014, at 17:59, Yasumasa Suenaga <yasue...@gmail.com> wrote:
> 
> Hi all,
> 
> Thank you so much, Dmitry!
> 
> I've created webrev for it.
> http://cr.openjdk.java.net/~ysuenaga/JDK-8057556/webrev.0/
> 
> Please review.
> 
> 
> Thanks,
> 
> Yasumasa
> 
> 
> (2014/09/04 21:26), Dmitry Samersoff wrote:
>> 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
>> 
>> 

Reply via email to