RFR 8168840: InetAddress.getByName() throws java.net.UnknownHostException no such interface when used with virtual interfaces on Solaris

Chris Hegarty chris.hegarty at oracle.com
Wed Dec 21 13:53:03 UTC 2016


Vyom,

Thank you for the explanation. Makes sense.

Your changes look fine as are, but maybe '250     *colonP = '\0';'
would be clearer ( though I do note that we do *name_colonP = 0;
elsewhere in this file ).

-Chris.

On 21/12/16 13:41, Vyom Tewari wrote:
> Hi Chris,
>
> If you create the Inet6Address  using the following constructor
> "Inet6Address (String , byte[], String )" then it will call the
> following private method " initstr (hostName, addr, ifname);" and it you
> see the implementation of this method then you will see the below code.
>
> #######################################
>
> try {
>             NetworkInterface nif = NetworkInterface.getByName (ifname);
>             if (nif == null) {
>                 throw new UnknownHostException ("no such interface " +
> ifname);
>             }
>             initif (hostName, addr, nif);
>
> ########################################
>
>
> So this is the connection between Inet6Address and
> NetworkInterface.getByName but same is not the case  for ipv4 address.
> As we added the scope name recently(not very recent but after
> jdk1.7.0_79) so if you pass the virtual sub interface interface
> like(2001:7a8:b0cd:1:0:0:0:17%net0:1) then it will fail to get the sub
> interface and UHE will be thrown.
>
> to handle this i did the code change.
>
>
> Thanks,
> Vyom
>
> On 12/21/2016 5:04 PM, Chris Hegarty wrote:
>> Hi Vyom,
>>
>> Sorry, I'm missing the connection between Inet6Address and
>> NetworkInterface.getByName, how do these interact?
>>
>> -Chris.
>>
>> On 21/12/16 10:20, Vyom Tewari wrote:
>>> incorporated the
>>> comments(http://cr.openjdk.java.net/~vtewari/8168840/webrev0.2/index.html
>>> <http://cr.openjdk.java.net/%7Evtewari/8168840/webrev0.2/index.html>).
>>>
>>>
>>> Thanks,
>>>
>>> Vyom
>>>
>>>
>>> On Wednesday 21 December 2016 02:58 PM, Langer, Christoph wrote:
>>>> Hi Vyom,
>>>>
>>>> looks good, thanks for the update.
>>>>
>>>> Minor formatting:
>>>> - Add a blank line between line 258/259 and 268/269 in the new file
>>>> version.
>>>> - line 259     //search the child list - add a space between "//" and
>>>> "search..."
>>>>
>>>> Disclaimer: I'm not an official reviewer.
>>>>
>>>> Best regards
>>>> Christoph
>>>>
>>>>> -----Original Message-----
>>>>> From: net-dev [mailto:net-dev-bounces at openjdk.java.net] On Behalf Of
>>>>> Vyom
>>>>> Tewari
>>>>> Sent: Mittwoch, 21. Dezember 2016 09:51
>>>>> Cc: net-dev <net-dev at openjdk.java.net>
>>>>> Subject: Re: RFR 8168840: InetAddress.getByName() throws
>>>>> java.net.UnknownHostException no such interface when used with virtual
>>>>> interfaces on Solaris
>>>>>
>>>>> Hi All,
>>>>>
>>>>> Please find the latest
>>>>> webrev(http://cr.openjdk.java.net/~vtewari/8168840/webrev0.1/index.html
>>>>>
>>>>> <http://cr.openjdk.java.net/%7Evtewari/8168840/webrev0.1/index.html>).
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Vyom
>>>>>
>>>>>
>>>>> On Tuesday 13 December 2016 01:38 PM, Langer, Christoph wrote:
>>>>>> Hi Vyom,
>>>>>>
>>>>>> thanks for looking at this. Overall your fix and test look good to
>>>>>> me.
>>>>>>
>>>>>> The coding to do the parent search and if required a child search in
>>>>> Java_java_net_NetworkInterface_getByName0 could be done a bit more
>>>>> straightforward, e.g. like this:
>>>>>>       // search the list of interfaces by name
>>>>>>       // for virtual interfaces we need to find the parent first
>>>>>>       colonp = strchr(name_utf, ':');
>>>>>>       if (colonp == NULL) {
>>>>>>           searchName = name_utf;
>>>>>>       } else {
>>>>>>           jio_snprintf(pname, IFNAMESIZE, "%.*s", colonp - name_utf);
>>>>>>           searchName = pname;
>>>>>>       }
>>>>>>       curr = ifs;
>>>>>>       while (curr != NULL) {
>>>>>>           if (strcmp(searchName, curr->name) == 0) {
>>>>>>               break;
>>>>>>           }
>>>>>>           curr = curr->next;
>>>>>>       }
>>>>>>
>>>>>>       // search the child list
>>>>>>       if (curr != NULL && colonp != NULL) {
>>>>>>           curr = curr->childs;
>>>>>>           while (curr != NULL) {
>>>>>>               if (strcmp(name_utf, curr->name) == 0) {
>>>>>>                   break;
>>>>>>               }
>>>>>>               curr = curr->next;
>>>>>>           }
>>>>>>       }
>>>>>>
>>>>>> Best regards
>>>>>> Christoph
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: net-dev [mailto:net-dev-bounces at openjdk.java.net] On Behalf Of
>>>>> Vyom
>>>>>>> Tewari
>>>>>>> Sent: Dienstag, 13. Dezember 2016 04:47
>>>>>>> To: net-dev <net-dev at openjdk.java.net>
>>>>>>> Subject: RFR 8168840: InetAddress.getByName() throws
>>>>>>> java.net.UnknownHostException no such interface when used with
>>>>>>> virtual
>>>>>>> interfaces on Solaris
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> Please review the code changes for below issue.
>>>>>>>
>>>>>>> BugId    : https://bugs.openjdk.java.net/browse/JDK-8168840
>>>>>>>
>>>>>>> webrev :
>>>>>>> http://cr.openjdk.java.net/~vtewari/8168840/webrev0.0/index.html
>>>>>>> <http://cr.openjdk.java.net/%7Evtewari/8168840/webrev0.0/index.html>
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Vyom
>>>
>


More information about the net-dev mailing list