Broken ipv6 behavior?

View: New views
20 Messages — Rating Filter:   Alert me  
< Prev | 1 - 2 | Next >

Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

It seems like erlang's IPv6 support is broken on my laptop (OS X
10.5.1).  I have a publicly routable IPv6 address and can access
ipv6.google.com fine, but inet:getaddr cannot resolve the IPv6 address
even when asked for inet6.

When I look at our DNS cache logs or tcpdump output, I only see A type
queries not AAAA type queries for ipv6.google.com from my laptop.


matthew@pollux:~$ ping6 -c 3 ipv6.google.com
PING6(56=40+8+8 bytes) 2001:470:805a:1:21b:63ff:feca:36df -->
2001:4860:0:1001::68
16 bytes from 2001:4860:0:1001::68, icmp_seq=0 hlim=56 time=178.045 ms
16 bytes from 2001:4860:0:1001::68, icmp_seq=1 hlim=56 time=186.902 ms
16 bytes from 2001:4860:0:1001::68, icmp_seq=2 hlim=56 time=181.385 ms

--- ipv6.l.google.com ping6 statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 178.045/182.111/186.902 ms

matthew@pollux:~$ erl
Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
[async-threads:0] [kernel-poll:false]

Eshell V5.6.1  (abort with ^G)
1> inet:getaddr("ipv6.google.com", inet6).
{error,nxdomain}
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Tony Rogvall-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Make sure the {inet6, Bool} in the inetrc is set to true?

See ERTS User's Guide / Inet configuration.

/Tony

On 8 apr 2008, at 21.16, Matthew Dempsky wrote:

> It seems like erlang's IPv6 support is broken on my laptop (OS X
> 10.5.1).  I have a publicly routable IPv6 address and can access
> ipv6.google.com fine, but inet:getaddr cannot resolve the IPv6 address
> even when asked for inet6.
>
> When I look at our DNS cache logs or tcpdump output, I only see A type
> queries not AAAA type queries for ipv6.google.com from my laptop.
>
>
> matthew@pollux:~$ ping6 -c 3 ipv6.google.com
> PING6(56=40+8+8 bytes) 2001:470:805a:1:21b:63ff:feca:36df -->
> 2001:4860:0:1001::68
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=0 hlim=56 time=178.045 ms
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=1 hlim=56 time=186.902 ms
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=2 hlim=56 time=181.385 ms
>
> --- ipv6.l.google.com ping6 statistics ---
> 3 packets transmitted, 3 packets received, 0% packet loss
> round-trip min/avg/max = 178.045/182.111/186.902 ms
>
> matthew@pollux:~$ erl
> Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
> [async-threads:0] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet:getaddr("ipv6.google.com", inet6).
> {error,nxdomain}
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Tue, Apr 8, 2008 at 4:22 PM, Tony Rogvall <tony@...> wrote:
> Make sure the {inet6, Bool} in the inetrc is set to true?
>
>  See ERTS User's Guide / Inet configuration.

Makes no difference.  DNS cache still only shows an A query.

matthew@pollux:/tmp$ echo '{inet6, true}.' > inetrc
matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
[async-threads:0] [kernel-poll:false]

Eshell V5.6.1  (abort with ^G)
1> inet:getaddr("ipv6.google.com", inet6).
{error,nxdomain}
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Tony Rogvall-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I you do this:

inet_db:set_lookup([dns]).
inet_db:add_ns({A,B,C,D}).  %% Name server must be IPv4, there is a  
fixme in inet_db.
inet:getaddr("ipv6.google.com", inet6).
{ok,{8193,18528,0,4097,0,0,0,104}}

/Tony


On 9 apr 2008, at 01.42, Matthew Dempsky wrote:

> On Tue, Apr 8, 2008 at 4:22 PM, Tony Rogvall <tony@...> wrote:
>> Make sure the {inet6, Bool} in the inetrc is set to true?
>>
>> See ERTS User's Guide / Inet configuration.
>
> Makes no difference.  DNS cache still only shows an A query.
>
> matthew@pollux:/tmp$ echo '{inet6, true}.' > inetrc
> matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
> Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
> [async-threads:0] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet:getaddr("ipv6.google.com", inet6).
> {error,nxdomain}

_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Okay, so now that breaks looking up localhost:

matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
[async-threads:0] [kernel-poll:false]

Eshell V5.6.1  (abort with ^G)
1> inet_db:set_lookup([dns]).
ok
2> inet_db:add_ns({10,0,1,40}).
ok
3> inet:getaddr("ipv6.google.com", inet6).
{ok,{8193,18528,0,4097,0,0,0,104}}
4> inet:getaddr("localhost", inet).
{error,nxdomain}
5> inet:getaddr("localhost", inet6).
{error,nxdomain}

Looking at my DNS cache logs, Erlang is now sending queries for
localhost.local.

If I change [dns] to [files, dns], and it gives the same wrong output.
(I also tried adding "9.9.9.9 localhost.local" to /etc/hosts, and it
still gives nxdomain.)


On Tue, Apr 8, 2008 at 5:40 PM, Tony Rogvall <tony@...> wrote:

> I you do this:
>
>  inet_db:set_lookup([dns]).
>  inet_db:add_ns({A,B,C,D}).  %% Name server must be IPv4, there is a fixme
> in inet_db.
>
>  inet:getaddr("ipv6.google.com", inet6).
>  {ok,{8193,18528,0,4097,0,0,0,104}}
>
>
>  /Tony
>
>
>  On 9 apr 2008, at 01.42, Matthew Dempsky wrote:
>
>
>
> > On Tue, Apr 8, 2008 at 4:22 PM, Tony Rogvall <tony@...> wrote:
> >
> > > Make sure the {inet6, Bool} in the inetrc is set to true?
> > >
> > > See ERTS User's Guide / Inet configuration.
> > >
> >
> > Makes no difference.  DNS cache still only shows an A query.
> >
> > matthew@pollux:/tmp$ echo '{inet6, true}.' > inetrc
> > matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
> > Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
> > [async-threads:0] [kernel-poll:false]
> >
> > Eshell V5.6.1  (abort with ^G)
> > 1> inet:getaddr("ipv6.google.com", inet6).
> > {error,nxdomain}
> >
>
>
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Tony Rogvall-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ok.

When you do it from the prompt you need some more things.

inet_db:set_lookup([file,dns]).  %% NOT files

then you need to (re)load the host list:

inet_db:add_hosts("/etc/hosts").

now it should work.

Well I guess you want to check why the native version does not work, and
possibly put the stuff in an rc file.

/Tony


On 9 apr 2008, at 03.14, Matthew Dempsky wrote:

> Okay, so now that breaks looking up localhost:
>
> matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
> Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
> [async-threads:0] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet_db:set_lookup([dns]).
> ok
> 2> inet_db:add_ns({10,0,1,40}).
> ok
> 3> inet:getaddr("ipv6.google.com", inet6).
> {ok,{8193,18528,0,4097,0,0,0,104}}
> 4> inet:getaddr("localhost", inet).
> {error,nxdomain}
> 5> inet:getaddr("localhost", inet6).
> {error,nxdomain}
>
> Looking at my DNS cache logs, Erlang is now sending queries for
> localhost.local.
>
> If I change [dns] to [files, dns], and it gives the same wrong output.
> (I also tried adding "9.9.9.9 localhost.local" to /etc/hosts, and it
> still gives nxdomain.)
>
>
> On Tue, Apr 8, 2008 at 5:40 PM, Tony Rogvall <tony@...> wrote:
>> I you do this:
>>
>> inet_db:set_lookup([dns]).
>> inet_db:add_ns({A,B,C,D}).  %% Name server must be IPv4, there is a  
>> fixme
>> in inet_db.
>>
>> inet:getaddr("ipv6.google.com", inet6).
>> {ok,{8193,18528,0,4097,0,0,0,104}}
>>
>>
>> /Tony
>>
>>
>> On 9 apr 2008, at 01.42, Matthew Dempsky wrote:
>>
>>
>>
>>> On Tue, Apr 8, 2008 at 4:22 PM, Tony Rogvall <tony@...>  
>>> wrote:
>>>
>>>> Make sure the {inet6, Bool} in the inetrc is set to true?
>>>>
>>>> See ERTS User's Guide / Inet configuration.
>>>>
>>>
>>> Makes no difference.  DNS cache still only shows an A query.
>>>
>>> matthew@pollux:/tmp$ echo '{inet6, true}.' > inetrc
>>> matthew@pollux:/tmp$ erl -kernel inetrc '"/tmp/inetrc"'
>>> Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
>>> [async-threads:0] [kernel-poll:false]
>>>
>>> Eshell V5.6.1  (abort with ^G)
>>> 1> inet:getaddr("ipv6.google.com", inet6).
>>> {error,nxdomain}
>>>
>>
>>

_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Raimo Niskanen-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Tue, Apr 08, 2008 at 12:16:44PM -0700, Matthew Dempsky wrote:

> It seems like erlang's IPv6 support is broken on my laptop (OS X
> 10.5.1).  I have a publicly routable IPv6 address and can access
> ipv6.google.com fine, but inet:getaddr cannot resolve the IPv6 address
> even when asked for inet6.
>
> When I look at our DNS cache logs or tcpdump output, I only see A type
> queries not AAAA type queries for ipv6.google.com from my laptop.
>
>
> matthew@pollux:~$ ping6 -c 3 ipv6.google.com
> PING6(56=40+8+8 bytes) 2001:470:805a:1:21b:63ff:feca:36df -->
> 2001:4860:0:1001::68
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=0 hlim=56 time=178.045 ms
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=1 hlim=56 time=186.902 ms
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=2 hlim=56 time=181.385 ms
>
> --- ipv6.l.google.com ping6 statistics ---
> 3 packets transmitted, 3 packets received, 0% packet loss
> round-trip min/avg/max = 178.045/182.111/186.902 ms
>
> matthew@pollux:~$ erl
> Erlang (BEAM) emulator version 5.6.1 [source] [smp:2]
> [async-threads:0] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet:getaddr("ipv6.google.com", inet6).
> {error,nxdomain}

Give us the result of:
$ uname -a
$ cat /etc/resolv.conf
$ erl
1> inet_gethost_native:control({debug_level,4}).
2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
3> ets:tab2list(inet_db).
4> ets:tab2list(inet_hosts).

For starters.

> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

--

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 9, 2008 at 12:27 AM, Raimo Niskanen
<raimo+erlang-questions@...> wrote:
>  Give us the result of:
>  $ uname -a
>  $ cat /etc/resolv.conf
>  $ erl
>  1> inet_gethost_native:control({debug_level,4}).
>  2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
>  3> ets:tab2list(inet_db).
>  4> ets:tab2list(inet_hosts).

I'm away from the office right now so I can't test from my OS X
laptop, but below is the output from an OpenBSD machine and a Linux
machine there that both demonstrate the same misbehavior.  (If
necessary, I'll rerun the test tomorrow on OS X.)


matthew@golem:~$ uname -a
OpenBSD golem.mochimedia.net 4.3 GENERIC.MP#1559 amd64

matthew@golem:~$ cat /etc/resolv.conf
search mochimedia.net
nameserver 127.0.0.1

matthew@golem:~$ ping6 -c 1 ipv6.google.com
PING6(56=40+8+8 bytes) 2001:470:1f04:330::2 --> 2001:4860:0:1001::68
16 bytes from 2001:4860:0:1001::68, icmp_seq=0 hlim=57 time=174.165 ms

--- ipv6.l.google.com ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 174.165/174.165/174.165/0.000 ms

matthew@golem:~$ echo '{inet6, true}.' > inetrc

matthew@golem:~$ erl -kernel inetrc '"./inetrc"'
Erlang (BEAM) emulator version 5.6.1 [source] [64-bit]
[async-threads:0] [kernel-poll:false]

Eshell V5.6.1  (abort with ^G)
1> inet_gethost_native:control({debug_level,4}).
inet_gethost[29369] (DEBUG):debug_level = 4
ok
2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
inet_gethost[29369] (DEBUG):Saved domainname .google.com.
inet_gethost[29369] (DEBUG):Created worker[6118] with fd 3
inet_gethost[29369] (DEBUG):Saved domainname .google.com.
inet_gethost[6118] (DEBUG):Worker got request, op = 1, proto = 2, data
= ipv6.google.com.
{error,enotsup}
3> ets:tab2list(inet_db).
[{socks5_noproxy,[]},
 {res_recurse,1},
 {res_id,0},
 {hostname,"golem"},
 {res_alt_ns,[]},
 {cache_refresh_interval,3600000},
 {res_inet6,true},
 {socks5_port,1080},
 {socks5_methods,[none]},
 {res_timeout,2000},
 {cache_size,100},
 {res_domain,"mochimedia.net"},
 {res_retry,3},
 {res_ns,[]},
 {res_lookup,[native]},
 {sctp_module,inet_sctp},
 {udp_module,inet_udp},
 {tcp_module,inet_tcp},
 {socks5_server,[]},
 {res_search,["mochimedia.net"]},
 {res_usevc,false}]
4> ets:tab2list(inet_hosts).
[]


matthew@lol:~$ uname -a
Linux lol 2.6.20-16-generic #2 SMP Tue Feb 12 02:11:24 UTC 2008 x86_64 GNU/Linux

matthew@lol:~$ cat /etc/resolv.conf
search mochimedia.net
nameserver 10.0.1.40

matthew@lol:~$ ping6 -c 1 ipv6.google.com
PING ipv6.google.com(2001:4860:0:1001::68) 56 data bytes
64 bytes from 2001:4860:0:1001::68: icmp_seq=1 ttl=56 time=174 ms

--- ipv6.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 174.967/174.967/174.967/0.000 ms

matthew@lol:~$ echo '{inet6, true}.' > inetrc

matthew@lol:~$ erl -kernel inetrc '"./inetrc"'
Erlang (BEAM) emulator version 5.6.1 [source] [64-bit] [smp:4]
[async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.6.1  (abort with ^G)
1> inet_gethost_native:control({debug_level,4}).
inet_gethost[8266] (DEBUG):debug_level = 4
ok
2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
inet_gethost[8266] (DEBUG):Saved domainname .google.com.
inet_gethost[8266] (DEBUG):Created worker[8268] with fd 3
inet_gethost[8266] (DEBUG):Saved domainname .google.com.
inet_gethost[8268] (DEBUG):Worker got request, op = 1, proto = 2, data
= ipv6.google.com.
{error,enotsup}
3> ets:tab2list(inet_db).
[{socks5_noproxy,[]},
 {res_recurse,1},
 {res_id,0},
 {hostname,"lol"},
 {res_alt_ns,[]},
 {cache_refresh_interval,3600000},
 {res_inet6,true},
 {socks5_port,1080},
 {socks5_methods,[none]},
 {res_timeout,2000},
 {cache_size,100},
 {res_domain,"mochimedia.net"},
 {res_retry,3},
 {res_ns,[]},
 {res_lookup,[native]},
 {sctp_module,inet_sctp},
 {udp_module,inet_udp},
 {tcp_module,inet_tcp},
 {socks5_server,[]},
 {res_search,["mochimedia.net"]},
 {res_usevc,false}]
4> ets:tab2list(inet_hosts).
[]
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Raimo Niskanen-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 12:52:40AM -0700, Matthew Dempsky wrote:

> On Wed, Apr 9, 2008 at 12:27 AM, Raimo Niskanen
> <raimo+erlang-questions@...> wrote:
> >  Give us the result of:
> >  $ uname -a
> >  $ cat /etc/resolv.conf
> >  $ erl
> >  1> inet_gethost_native:control({debug_level,4}).
> >  2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> >  3> ets:tab2list(inet_db).
> >  4> ets:tab2list(inet_hosts).
>
> I'm away from the office right now so I can't test from my OS X
> laptop, but below is the output from an OpenBSD machine and a Linux
> machine there that both demonstrate the same misbehavior.  (If
> necessary, I'll rerun the test tomorrow on OS X.)
>

That it does not work on new Linuxes is a known issue.
Linux took another path than Solaris and removed the
IPv6 resolver functions inet_gethost_native uses.
And that is something that has been on our todo
list for a long time now. But since no paying customer
needs it it remains a not high enough priority.

These functions seem to work on a MacOS X Leopard box
in our lab, there I get:
inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
inet_gethost[63317] (DEBUG):Saved domainname .google.com.
inet_gethost[63317] (DEBUG):Created worker[63418] with fd 3
inet_gethost[63317] (DEBUG):Saved domainname .google.com.
inet_gethost[63418] (DEBUG):Worker got request, op = 1, proto = 2, data = ipv6.google.com.
{error,notfound}

Not strange since we do not have working IPv6 here at work.

So what is the problem with your MacOS X installation is
what puzzels me.


>
> matthew@golem:~$ uname -a
> OpenBSD golem.mochimedia.net 4.3 GENERIC.MP#1559 amd64
>
> matthew@golem:~$ cat /etc/resolv.conf
> search mochimedia.net
> nameserver 127.0.0.1
>
> matthew@golem:~$ ping6 -c 1 ipv6.google.com
> PING6(56=40+8+8 bytes) 2001:470:1f04:330::2 --> 2001:4860:0:1001::68
> 16 bytes from 2001:4860:0:1001::68, icmp_seq=0 hlim=57 time=174.165 ms
>
> --- ipv6.l.google.com ping6 statistics ---
> 1 packets transmitted, 1 packets received, 0.0% packet loss
> round-trip min/avg/max/std-dev = 174.165/174.165/174.165/0.000 ms
>
> matthew@golem:~$ echo '{inet6, true}.' > inetrc
>
> matthew@golem:~$ erl -kernel inetrc '"./inetrc"'
> Erlang (BEAM) emulator version 5.6.1 [source] [64-bit]
> [async-threads:0] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet_gethost_native:control({debug_level,4}).
> inet_gethost[29369] (DEBUG):debug_level = 4
> ok
> 2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> inet_gethost[29369] (DEBUG):Saved domainname .google.com.
> inet_gethost[29369] (DEBUG):Created worker[6118] with fd 3
> inet_gethost[29369] (DEBUG):Saved domainname .google.com.
> inet_gethost[6118] (DEBUG):Worker got request, op = 1, proto = 2, data
> = ipv6.google.com.
> {error,enotsup}
> 3> ets:tab2list(inet_db).
> [{socks5_noproxy,[]},
>  {res_recurse,1},
>  {res_id,0},
>  {hostname,"golem"},
>  {res_alt_ns,[]},
>  {cache_refresh_interval,3600000},
>  {res_inet6,true},
>  {socks5_port,1080},
>  {socks5_methods,[none]},
>  {res_timeout,2000},
>  {cache_size,100},
>  {res_domain,"mochimedia.net"},
>  {res_retry,3},
>  {res_ns,[]},
>  {res_lookup,[native]},
>  {sctp_module,inet_sctp},
>  {udp_module,inet_udp},
>  {tcp_module,inet_tcp},
>  {socks5_server,[]},
>  {res_search,["mochimedia.net"]},
>  {res_usevc,false}]
> 4> ets:tab2list(inet_hosts).
> []
>
>
> matthew@lol:~$ uname -a
> Linux lol 2.6.20-16-generic #2 SMP Tue Feb 12 02:11:24 UTC 2008 x86_64 GNU/Linux
>
> matthew@lol:~$ cat /etc/resolv.conf
> search mochimedia.net
> nameserver 10.0.1.40
>
> matthew@lol:~$ ping6 -c 1 ipv6.google.com
> PING ipv6.google.com(2001:4860:0:1001::68) 56 data bytes
> 64 bytes from 2001:4860:0:1001::68: icmp_seq=1 ttl=56 time=174 ms
>
> --- ipv6.google.com ping statistics ---
> 1 packets transmitted, 1 received, 0% packet loss, time 0ms
> rtt min/avg/max/mdev = 174.967/174.967/174.967/0.000 ms
>
> matthew@lol:~$ echo '{inet6, true}.' > inetrc
>
> matthew@lol:~$ erl -kernel inetrc '"./inetrc"'
> Erlang (BEAM) emulator version 5.6.1 [source] [64-bit] [smp:4]
> [async-threads:0] [hipe] [kernel-poll:false]
>
> Eshell V5.6.1  (abort with ^G)
> 1> inet_gethost_native:control({debug_level,4}).
> inet_gethost[8266] (DEBUG):debug_level = 4
> ok
> 2> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> inet_gethost[8266] (DEBUG):Saved domainname .google.com.
> inet_gethost[8266] (DEBUG):Created worker[8268] with fd 3
> inet_gethost[8266] (DEBUG):Saved domainname .google.com.
> inet_gethost[8268] (DEBUG):Worker got request, op = 1, proto = 2, data
> = ipv6.google.com.
> {error,enotsup}
> 3> ets:tab2list(inet_db).
> [{socks5_noproxy,[]},
>  {res_recurse,1},
>  {res_id,0},
>  {hostname,"lol"},
>  {res_alt_ns,[]},
>  {cache_refresh_interval,3600000},
>  {res_inet6,true},
>  {socks5_port,1080},
>  {socks5_methods,[none]},
>  {res_timeout,2000},
>  {cache_size,100},
>  {res_domain,"mochimedia.net"},
>  {res_retry,3},
>  {res_ns,[]},
>  {res_lookup,[native]},
>  {sctp_module,inet_sctp},
>  {udp_module,inet_udp},
>  {tcp_module,inet_tcp},
>  {socks5_server,[]},
>  {res_search,["mochimedia.net"]},
>  {res_usevc,false}]
> 4> ets:tab2list(inet_hosts).
> []
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

--

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 9, 2008 at 2:04 AM, Raimo Niskanen
<raimo+erlang-questions@...> wrote:
>  That it does not work on new Linuxes is a known issue.
>  Linux took another path than Solaris and removed the
>  IPv6 resolver functions inet_gethost_native uses.
>  And that is something that has been on our todo
>  list for a long time now. But since no paying customer
>  needs it it remains a not high enough priority.

Is there any technical argument for using getipnodebyname in favor of
getaddrinfo?  Would a patch to inet_gethost to use the latter instead
be accepted?

>  So what is the problem with your MacOS X installation is
>  what puzzels me.

Okay, I'll send a report tomorrow from OS X when I have a chance.
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : : Broken ipv6 behavior?

by Raimo Niskanen-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 02:21:37AM -0700, Matthew Dempsky wrote:

> On Wed, Apr 9, 2008 at 2:04 AM, Raimo Niskanen
> <raimo+erlang-questions@...> wrote:
> >  That it does not work on new Linuxes is a known issue.
> >  Linux took another path than Solaris and removed the
> >  IPv6 resolver functions inet_gethost_native uses.
> >  And that is something that has been on our todo
> >  list for a long time now. But since no paying customer
> >  needs it it remains a not high enough priority.
>
> Is there any technical argument for using getipnodebyname in favor of
> getaddrinfo?  Would a patch to inet_gethost to use the latter instead
> be accepted?

If I recall correctly we already got a patch for that,
but it broke some test cases. I think there were
problems with how to find alias names for the generated
hostent structs that was not supported with
getaddrinfo. So there were things to consider...

A new patch would be nice, or to get the old
again. Otherwise I would have to find the old
by myself.

>
> >  So what is the problem with your MacOS X installation is
> >  what puzzels me.
>
> Okay, I'll send a report tomorrow from OS X when I have a chance.
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

--

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Rory Byrne-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 11:04:11AM +0200, Raimo Niskanen wrote:

>
> These functions seem to work on a MacOS X Leopard box
> in our lab, there I get:
> inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> inet_gethost[63317] (DEBUG):Created worker[63418] with fd 3
> inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> inet_gethost[63418] (DEBUG):Worker got request, op = 1, proto = 2, data = ipv6.google.com.
> {error,notfound}
>
> Not strange since we do not have working IPv6 here at work.
>

Is this only {error,notfound} when you use an {inet6, true}
configuration? There should be no problem looking up AAAA
DNS records over IPv4:

    $ dig -4 aaaa ipv6.google.com
    ...
    ipv6.google.com.    9981  IN  CNAME  ipv6.l.google.com
    ipv6.l.google.com.  201   IN  AAAA   2001:4860:0:1001::68
    ...
    ;; SERVER: 213.133.100.100#53(213.133.100.100)
    ...

I only run Linux, so I can't test it myself - but I am
interested.

Regards

Rory
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Matthew Dempsky-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 9, 2008 at 3:26 AM, Rory Byrne <rory@...> wrote:

> On Wed, Apr 09, 2008 at 11:04:11AM +0200, Raimo Niskanen wrote:
>  >
>  > These functions seem to work on a MacOS X Leopard box
>  > in our lab, there I get:
>  > inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
>  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
>  > inet_gethost[63317] (DEBUG):Created worker[63418] with fd 3
>  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
>  > inet_gethost[63418] (DEBUG):Worker got request, op = 1, proto = 2, data = ipv6.google.com.
>  > {error,notfound}
>  >
>  > Not strange since we do not have working IPv6 here at work.
>  >
>
>  Is this only {error,notfound} when you use an {inet6, true}
>  configuration? There should be no problem looking up AAAA
>  DNS records over IPv4:

Testing at home with OS X (IPv6 link-local access only), I get
{error,notfound} with or without {inet6, true}.

ipv6.google.com's AAAA records still resolve fine with dig/host/etc.
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Tony Rogvall-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

>
> That it does not work on new Linuxes is a known issue.
> Linux took another path than Solaris and removed the
> IPv6 resolver functions inet_gethost_native uses.
> And that is something that has been on our todo
> list for a long time now. But since no paying customer

Please !!!!

>
> needs it it remains a not high enough priority.
>

Please again!

I really do not think that it has anything to do with the problem and  
how the
problem will be solved.

/Tony


_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by t ty :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 9, 2008 at 6:50 AM, Tony Rogvall <tony@...> wrote:
> >
>  > That it does not work on new Linuxes is a known issue.
>  > Linux took another path than Solaris and removed the
>  > IPv6 resolver functions inet_gethost_native uses.
>  > And that is something that has been on our todo
>  > list for a long time now. But since no paying customer


Doesn't this put us Linux users in a bind since AFAIK we no longer can
purchase Erlang/OTP support licenses.


>  >
>  > needs it it remains a not high enough priority.
>  >

What is needed to convince the OTP team that is is high enough. Maybe
as a Linux community we could come together to make it happen.

Thanks,

t
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : : Broken ipv6 behavior?

by Fredrik Thulin :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Raimo Niskanen wrote:

> On Wed, Apr 09, 2008 at 02:21:37AM -0700, Matthew Dempsky wrote:
>> On Wed, Apr 9, 2008 at 2:04 AM, Raimo Niskanen
>> <raimo+erlang-questions@...> wrote:
>>>  That it does not work on new Linuxes is a known issue.
>>>  Linux took another path than Solaris and removed the
>>>  IPv6 resolver functions inet_gethost_native uses.
>>>  And that is something that has been on our todo
>>>  list for a long time now. But since no paying customer
>>>  needs it it remains a not high enough priority.
>> Is there any technical argument for using getipnodebyname in favor of
>> getaddrinfo?  Would a patch to inet_gethost to use the latter instead
>> be accepted?
>
> If I recall correctly we already got a patch for that,
> but it broke some test cases. I think there were
> problems with how to find alias names for the generated
> hostent structs that was not supported with
> getaddrinfo. So there were things to consider...
>
> A new patch would be nice, or to get the old
> again. Otherwise I would have to find the old
> by myself.
Even though it was not me who wrote it (credits due to Love
Hörnquist-Åstrand) I was the one who sent you the getaddrinfo patch, in
private e-mail on 2005-01-13 (so I would actually object to saying it is
a problem with "new Linuxes" - a Linux from 2005 isn't exactly new in my
book, just like Erlang R10B-3 isn't even close to being a new release of
Erlang).

I attached the patch again, but yes - it broke some of your test cases.

 From what I can recall the problem was with the h_aliases in hostent
structs. When you used getipnodebyname() on Solaris, you would get
aliases from your NIS database (yuck!) that you would not get using
getaddrinfo().

/Fredrik

--- otp_src_R10B-2.orig/erts/etc/common/inet_gethost.c 2003-07-07 14:07:55.000000000 +0200
+++ otp_src_R10B-2/erts/etc/common/inet_gethost.c 2005-01-03 15:08:11.000000000 +0100
@@ -39,6 +39,8 @@
 #include <errno.h>
 #include <signal.h>
 
+#define HAVE_GETADDRINFO 1
+
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #else
@@ -238,13 +240,22 @@
 static int get_int32(AddrByte *buff);
 static void put_int32(AddrByte *buff, int value);
 static int create_worker(Worker *pworker, int save_que);
-static int map_netdb_error(int netdb_code);
+#ifdef HAVE_GETADDRINFO
+static int map_netdb_error_ai(int netdb_code);
+#else
+static int map_netdb_error_he(int netdb_code);
+#endif
 static char *errcode_to_string(int errcode);
 static size_t build_error_reply(SerialType serial, int errnum,
  AddrByte **preply,
  size_t *preply_size);
+#ifdef HAVE_GETADDRINFO
+static size_t build_reply_ai(SerialType serial, int, struct addrinfo *,
+     AddrByte **preply, size_t *preply_size);
+#else
 static size_t build_reply(SerialType serial, struct hostent *he,
   AddrByte **preply, size_t *preply_size);
+#endif
 static int read_request(AddrByte **buff, size_t *buff_size);
 static OpType get_op(AddrByte *buff);
 static AddrByte *get_op_addr(AddrByte *buff);
@@ -1465,7 +1476,9 @@
 static int worker_loop(void)
 #endif
 {
+#ifndef HAVE_GETADDRINFO
     struct hostent *he;
+#endif
     AddrByte *req = NULL;
     size_t req_size = 0;
     int this_size;
@@ -1523,13 +1536,61 @@
  free_he = 0;
  switch (op) {
  case OP_GETHOSTBYNAME:
+ {
+#ifdef HAVE_GETADDRINFO
+    struct addrinfo hints, *res = NULL;
+    int addrlen;
+
+    DEBUGF(10, ("getaddrinfo: %s.", data));
+
+    error_num = 0;
+    hints.ai_flags = AI_CANONNAME;
+    hints.ai_protocol = 0;
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_addrlen = 0;
+    hints.ai_canonname = NULL;
+    hints.ai_addr = NULL;
+    hints.ai_next = NULL;
+    switch (proto) {
+    case PROTO_IPV4:
+ hints.ai_family = PF_INET;
+ addrlen = 4;
+ break;
+#ifdef PF_INET6
+    case PROTO_IPV6:
+ hints.ai_family = PF_INET6;
+ addrlen = 16;
+ break;
+#endif
+    default:
+ addrlen = 0;
+ error_num = ERRCODE_NOTSUP;
+ break;
+    }
+    if (error_num == 0) {
+ error_num = getaddrinfo(data, NULL, &hints, &res);
+ if (error_num)
+    error_num = map_netdb_error_ai(error_num);
+    }
+    DEBUGF(10, ("getaddrinfo returns: %d.", error_num));
+    if (error_num) {
+ data_size = build_error_reply(serial, error_num,
+      &reply, &reply_size);
+    } else {
+ data_size = build_reply_ai(serial, addrlen, res,
+   &reply, &reply_size);
+    }
+    if (res)
+ freeaddrinfo(res);
+    break;
+#else /* HAVE_GETADDRINFO */
     if (proto != PROTO_IPV4) {
 #if defined(HAVE_GETIPNODEBYNAME) && !defined(WIN32) /* IP V6 support */
  if (proto == PROTO_IPV6) {
     he = getipnodebyname(data, AF_INET6, AI_DEFAULT,
  &error_num);
     free_he = 1;
-    error_num = map_netdb_error(error_num);
+    error_num = map_netdb_error_he(error_num);
  } else {
     /* Not supported... */
     he = NULL;
@@ -1545,7 +1606,7 @@
  he = gethostbyname(data);
  DEBUGF(4,("gethostbyname(%s) gave %s",data,
   (he) ? "success" : "error"));
- error_num = (he) ? 0 : map_netdb_error(h_errno);
+ error_num = (he) ? 0 : map_netdb_error_he(h_errno);
     }
     if (!he) {
  data_size = build_error_reply(serial, error_num,
@@ -1558,8 +1619,85 @@
  }
 #endif
     }
+#endif /* HAVE_GETADDRINFO */
     break;
+ }
  case OP_GETHOSTBYADDR:
+ {
+#ifdef HAVE_GETADDRINFO
+    struct sockaddr *sa = NULL;
+    char name[NI_MAXHOST];
+    socklen_t salen;
+    int addrlen;
+
+    error_num = 0;
+    switch (proto) {
+    case PROTO_IPV4: {
+ struct sockaddr_in *sin;
+ addrlen = 4;
+ salen = sizeof(*sin);
+ sin = malloc(salen);
+ if (sin == NULL) {
+    error_num = ERRCODE_NETDB_INTERNAL;
+    break;
+ }
+#ifndef NO_SA_LEN
+ sin->sin_len = salen;
+#endif
+ sin->sin_family = AF_INET;
+ sin->sin_port = 0;
+ memcpy(&sin->sin_addr, data, addrlen);
+ sa = (struct sockaddr *)sin;
+ break;
+    }
+#ifdef PF_INET6
+    case PROTO_IPV6: {
+ struct sockaddr_in6 *sin;
+ addrlen = 16;
+ salen = sizeof(*sin);
+ sin = malloc(salen);
+ if (sin == NULL) {
+    error_num = ERRCODE_NETDB_INTERNAL;
+    break;
+ }
+#ifndef NO_SA_LEN
+ sin->sin6_len = salen;
+#endif
+ sin->sin6_family = AF_INET6;
+ sin->sin6_port = 0;
+ memcpy(&sin->sin6_addr, data, addrlen);
+ sa = (struct sockaddr *)sin;
+ break;
+    }
+#endif
+    default:
+ error_num = ERRCODE_NOTSUP;
+ break;
+    }
+    if (error_num == 0) {
+ error_num = getnameinfo(sa, salen, name, sizeof(name),
+ NULL, 0, NI_NAMEREQD);
+ DEBUGF(50,("getnameinfo %d.", error_num));
+ if (error_num)
+    error_num = map_netdb_error_ai(error_num);
+    }
+    if (error_num)
+ data_size = build_error_reply(serial, error_num,
+      &reply, &reply_size);
+    else {
+ struct addrinfo res;
+ memset(&res, 0, sizeof(res));
+ DEBUGF(50,("getnameinfo %s.", name));
+ res.ai_canonname = name;
+ res.ai_addr = sa;
+ res.ai_next = NULL;
+ data_size = build_reply_ai(serial, addrlen, &res,
+   &reply, &reply_size);
+    }
+    if (sa)
+ free(sa);
+    break;
+#else /* HAVE_GETADDRINFO */
     if (proto != PROTO_IPV4) {
 #if defined(HAVE_GETIPNODEBYADDR) && !defined(WIN32) /* IP V6 support */
  if (proto == PROTO_IPV6) {
@@ -1567,7 +1705,7 @@
     memcpy(ia.s6_addr, data, 16);
     he = getipnodebyaddr(&ia, 16, AF_INET6, &error_num);
     free_he = 1;
-    error_num = map_netdb_error(error_num);
+    error_num = map_netdb_error_he(error_num);
  } else {
     /* Not supported... */
     he = NULL;
@@ -1582,7 +1720,7 @@
  struct in_addr ia;
  memcpy(&ia.s_addr, data, 4); /* Alignment required... */
  he = gethostbyaddr((const char *) &ia, 4, AF_INET);
- error_num = map_netdb_error(h_errno);
+ error_num = map_netdb_error_he(h_errno);
     }
     if (!he) {
  data_size = build_error_reply(serial, error_num,
@@ -1596,6 +1734,8 @@
 #endif
     }
     break;
+#endif /* HAVE_GETADDRINFO */
+ }
  default:
     data_size = build_error_reply(serial, ERRCODE_NOTSUP,
   &reply, &reply_size);
@@ -1628,7 +1768,39 @@
 #endif
 }
 
-static int map_netdb_error(int netdb_code)
+#ifdef HAVE_GETADDRINFO
+static int map_netdb_error_ai(int netdb_code)
+{
+    switch(netdb_code) {
+#ifdef EAI_ADDRFAMILY
+    case EAI_ADDRFAMILY:
+ return ERRCODE_NETDB_INTERNAL;
+#endif
+    case EAI_AGAIN:
+ return ERRCODE_TRY_AGAIN;
+    case EAI_BADFLAGS:
+ return ERRCODE_NETDB_INTERNAL;
+    case EAI_FAIL:
+ return ERRCODE_HOST_NOT_FOUND;
+    case EAI_FAMILY:
+ return ERRCODE_NETDB_INTERNAL;
+    case EAI_MEMORY:
+ return ERRCODE_NETDB_INTERNAL;
+#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME
+    case EAI_NODATA:
+ return ERRCODE_HOST_NOT_FOUND;
+#endif
+    case EAI_NONAME:
+ return ERRCODE_HOST_NOT_FOUND;
+    case EAI_SERVICE:
+ return ERRCODE_NETDB_INTERNAL;
+    case EAI_SOCKTYPE:
+ return ERRCODE_NETDB_INTERNAL;
+    default:
+ return ERRCODE_NETDB_INTERNAL;
+    }
+#else /* HAVE_GETADDRINFO */
+static int map_netdb_error_he(int netdb_code)
 {
     switch (netdb_code) {
 #ifdef HOST_NOT_FOUND
@@ -1657,6 +1829,7 @@
     default:
  return ERRCODE_NETDB_INTERNAL;
     }
+#endif /* HAVE_GETADDRINFO */
 }
 
 static char *errcode_to_string(int errcode)
@@ -1712,7 +1885,79 @@
     return need;
 }
     
+#ifdef HAVE_GETADDRINFO
+
+static size_t build_reply_ai(SerialType serial, int addrlen,
+     struct addrinfo *res0,
+     AddrByte **preply, size_t *preply_size)
+{
+    struct addrinfo *res;
+    int num_strings;
+    int num_addresses;
+    AddrByte *ptr;
+    int need;
+
+    num_addresses = 0;
+    num_strings = 0;
+    need = PACKET_BYTES +
+ 4 /* Serial */ + 1 /* addrlen */ +
+ 4 /* Naddr */ + 4 /* Nnames */;
+
+    for (res = res0; res != NULL; res = res->ai_next) {
+ if (res->ai_addr) {
+    num_addresses++;
+    need += addrlen;
+ }
+ if (res->ai_canonname) {
+    num_strings++;
+    need += strlen(res->ai_canonname) + 1;
+ }
+    }
+
+    if (*preply_size < need) {
+ if (*preply_size == 0) {
+    *preply = ALLOC((*preply_size = need));
+ } else {
+    *preply = REALLOC(*preply,
+      (*preply_size = need));
+ }
+    }
 
+    ptr = *preply;
+    PUT_PACKET_BYTES(ptr,need - PACKET_BYTES);
+    ptr += PACKET_BYTES;
+    put_int32(ptr,serial);
+    ptr +=4;
+    *ptr++ = (AddrByte) addrlen; /* 4 or 16 */
+    put_int32(ptr, num_addresses);
+    ptr += 4;
+    for (res = res0; res != NULL && num_addresses; res = res->ai_next) {
+ if (res->ai_addr == NULL)
+    continue;
+ if (addrlen == 4)
+    memcpy(ptr, &((struct sockaddr_in *)res->ai_addr)->sin_addr, addrlen);
+#ifdef PF_INET6
+ else if (addrlen == 16)
+    memcpy(ptr, &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, addrlen);
+#endif
+ else
+    memcpy(ptr, res->ai_addr->sa_data, addrlen);
+ ptr += addrlen;
+ num_addresses--;
+    }
+    put_int32(ptr, num_strings);
+    ptr += 4;
+    for (res = res0; res != NULL && num_strings; res = res->ai_next) {
+ if (res->ai_canonname == NULL)
+    continue;
+ strcpy(ptr, res->ai_canonname);
+ ptr += strlen(res->ai_canonname) + 1;
+ num_strings--;
+    }
+    return need;
+}
+
+#else /* !HAVE_GETADDRINFO */
 
 static size_t build_reply(SerialType serial, struct hostent *he,
   AddrByte **preply, size_t *preply_size)
@@ -1773,6 +2018,8 @@
     return need;
 }
 
+#endif /* HAVE_GETADDRINFO */
+
 /*
  * Encode/decode/read/write
  */

_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Thomas Lindgren :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


--- Raimo Niskanen
<raimo+erlang-questions@...> wrote:

> And that is something that has been on our todo
> list for a long time now. But since no paying
> customer
> needs it it remains a not high enough priority.

Whenever I see this sort of thing, which is basically
overload, I think: instead of waiting for <feature x>,
can't the rest of us help somehow?

(Perhaps back to that git repository, thus? But
writing and running lots of test suites on different
platforms would be needed too.)

Best,
Thomas


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com 
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : Broken ipv6 behavior?

by Rory Byrne-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 03:41:40AM -0700, Matthew Dempsky wrote:

> On Wed, Apr 9, 2008 at 3:26 AM, Rory Byrne <rory@...> wrote:
> > On Wed, Apr 09, 2008 at 11:04:11AM +0200, Raimo Niskanen wrote:
> >  >
> >  > These functions seem to work on a MacOS X Leopard box
> >  > in our lab, there I get:
> >  > inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> >  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> >  > inet_gethost[63317] (DEBUG):Created worker[63418] with fd 3
> >  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> >  > inet_gethost[63418] (DEBUG):Worker got request, op = 1, proto = 2, data = ipv6.google.com.
> >  > {error,notfound}
> >  >
> >  > Not strange since we do not have working IPv6 here at work.
> >  >
> >
> >  Is this only {error,notfound} when you use an {inet6, true}
> >  configuration? There should be no problem looking up AAAA
> >  DNS records over IPv4:
>
> Testing at home with OS X (IPv6 link-local access only), I get
> {error,notfound} with or without {inet6, true}.
>
> ipv6.google.com's AAAA records still resolve fine with dig/host/etc.
>

Might be a problem. I'm guessing that most people are
going to expect to resolve all their DNS queries over
IPv4 for many years to come. I would have assumed the
following:

. Using {inet6, false} should mean: only query IPv4 DNS
  servers. It shouldn't effect what you can query, so you
  should be able to get AAAA records without a problem.

. Using {inet6, true} should mean: use an IPv6 DNS server
  to resolve queries if one is configured. Failing that,
  use any IPv4 DNS servers that are configured. Again,
  the content of your query should not be effected.

Not saying that this is the way it should be, just that
this would have been my initial assumption.

Anyway, it appears that the problem is on the link
between erlang and the local resolver. However, if
your planning on doing any elaborate debugging on
this stuff, it might be worth keeping in mind that
none of google's DNS servers have IPv6 addresses,
so all queries to them will ultimately go over IPv4.
The DNS servers for kame.net do have IPv6 addresses
(eg: dig -6 aaaa www.kame.net @orange.kame.net).

Good luck,

Rory

_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : : Broken ipv6 behavior?

by Raimo Niskanen-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 05:05:56PM +0200, Rory Byrne wrote:

> On Wed, Apr 09, 2008 at 03:41:40AM -0700, Matthew Dempsky wrote:
> > On Wed, Apr 9, 2008 at 3:26 AM, Rory Byrne <rory@...> wrote:
> > > On Wed, Apr 09, 2008 at 11:04:11AM +0200, Raimo Niskanen wrote:
> > >  >
> > >  > These functions seem to work on a MacOS X Leopard box
> > >  > in our lab, there I get:
> > >  > inet_gethost_native:gethostbyname("ipv6.google.com", inet6).
> > >  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> > >  > inet_gethost[63317] (DEBUG):Created worker[63418] with fd 3
> > >  > inet_gethost[63317] (DEBUG):Saved domainname .google.com.
> > >  > inet_gethost[63418] (DEBUG):Worker got request, op = 1, proto = 2, data = ipv6.google.com.
> > >  > {error,notfound}
> > >  >
> > >  > Not strange since we do not have working IPv6 here at work.
> > >  >
> > >
> > >  Is this only {error,notfound} when you use an {inet6, true}
> > >  configuration? There should be no problem looking up AAAA
> > >  DNS records over IPv4:
> >
> > Testing at home with OS X (IPv6 link-local access only), I get
> > {error,notfound} with or without {inet6, true}.
> >
> > ipv6.google.com's AAAA records still resolve fine with dig/host/etc.
> >
>
> Might be a problem. I'm guessing that most people are
> going to expect to resolve all their DNS queries over
> IPv4 for many years to come. I would have assumed the
> following:
>
> . Using {inet6, false} should mean: only query IPv4 DNS
>   servers. It shouldn't effect what you can query, so you
>   should be able to get AAAA records without a problem.
>
> . Using {inet6, true} should mean: use an IPv6 DNS server
>   to resolve queries if one is configured. Failing that,
>   use any IPv4 DNS servers that are configured. Again,
>   the content of your query should not be effected.
>
> Not saying that this is the way it should be, just that
> this would have been my initial assumption.
>
> Anyway, it appears that the problem is on the link
> between erlang and the local resolver. However, if

Or the local resolver configuration.

> your planning on doing any elaborate debugging on
> this stuff, it might be worth keeping in mind that
> none of google's DNS servers have IPv6 addresses,
> so all queries to them will ultimately go over IPv4.
> The DNS servers for kame.net do have IPv6 addresses
> (eg: dig -6 aaaa www.kame.net @orange.kame.net).

In that case I can report that:
1> inet:gethostbyname("orange.kame.net", inet6).
{ok,{hostent,"orange.kame.net",[],inet6,16,
             [{0,0,0,0,0,65535,52146,36290}]}}
works on:
Darwin hostname 9.2.2 Darwin Kernel Version 9.2.2: Tue Mar  4 21:17:34 PST 2008; root:xnu-1228.4.31~1/RELEASE_I386 i386
Which should be MacOS X Leopard

>
> Good luck,
>
> Rory
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

--

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions

Re: : : Broken ipv6 behavior?

by Raimo Niskanen-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Apr 09, 2008 at 06:16:13AM -0700, Thomas Lindgren wrote:

>
> --- Raimo Niskanen
> <raimo+erlang-questions@...> wrote:
>
> > And that is something that has been on our todo
> > list for a long time now. But since no paying
> > customer
> > needs it it remains a not high enough priority.
>
> Whenever I see this sort of thing, which is basically
> overload, I think: instead of waiting for <feature x>,
> can't the rest of us help somehow?
>
> (Perhaps back to that git repository, thus? But
> writing and running lots of test suites on different
> platforms would be needed too.)
>

In this particular case there has to be an investigation
in if the test suites are wrong or the implementation,
or the test site (DNS vs NIS).

Would it be acceptable that there are no hostent aliases
on getaddrinfo hosts but there are on getipnodebyname
hosts? Or since there is alias information in DNS,
should the inet_gethost_native code be able to
find alias information also on getaddrinfo hosts?
And how?

EEP?

> Best,
> Thomas
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@...
> http://www.erlang.org/mailman/listinfo/erlang-questions

--

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
_______________________________________________
erlang-questions mailing list
erlang-questions@...
http://www.erlang.org/mailman/listinfo/erlang-questions
< Prev | 1 - 2 | Next >