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

Vyom Tewari vyom.tewari at oracle.com
Wed Dec 21 14:02:21 UTC 2016


Hi Chris,

i will do the change( *colonP = '\0';') before pushing still i have to 
run the jprt. Once it is done and clean i will do the suggested change 
and push the code.

thanks,

Vyom


On 12/21/2016 7:23 PM, Chris Hegarty wrote:
> 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