Bug 1461492

Summary: inet:gethostbyname returns IPv4 results when IPv6 is configured [OSP-11]
Product: Red Hat OpenStack Reporter: John Eckersberg <jeckersb>
Component: erlangAssignee: Peter Lemenkov <plemenko>
Status: CLOSED ERRATA QA Contact: pkomarov
Severity: high Docs Contact:
Priority: high    
Version: 11.0 (Ocata)CC: achernet, apevec, fdinitto, jeckersb, jschluet, lhh, michele, plemenko, ushkalim
Target Milestone: z2Keywords: Triaged, ZStream
Target Release: 11.0 (Ocata)   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: erlang-18.3.4.5-3.el7ost.1 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 1461190 Environment:
Last Closed: 2017-09-13 21:50:42 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description John Eckersberg 2017-06-14 15:10:26 UTC
+++ This bug was initially created as a clone of Bug #1461190 +++

Description of problem:
If IPv6 is configured via proto_dist and/or inetrc, inet:gethostbyname will still prefer IPv4 addresses.  This breaks epmd lookups if epmd is forced to listen only on IPv6.

Version-Release number of selected component (if applicable):
erlang-erts-18.3.4.4-3.el7ost.x86_64

How reproducible:
Always

Steps to Reproduce:
[root@rhel7 ~]# env | grep ERL                                                                                                                                                                                       
ERL_INET_GETHOST_DEBUG=5
ERL_INETRC=/root/inetrc
ERL_EPMD_ADDRESS=fd00::1
[root@rhel7 ~]# cat /root/inetrc
{inet6, true}.
[root@rhel7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:13:f6:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.200/24 brd 192.168.200.255 scope global dynamic eth0
       valid_lft 2881sec preferred_lft 2881sec
    inet6 fd00::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe13:f60e/64 scope link 
       valid_lft forever preferred_lft forever
[root@rhel7 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
fd00::1     rhel7


Actual results:
[root@rhel7 ~]# erl -sname foo -proto_dist inet6_tcp
Erlang/OTP 18 [erts-7.3.1.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.2  (abort with ^G)
(foo@rhel7)1> inet:gethostbyname("rhel7").
inet_gethost[7615] (DEBUG):Saved domainname .
inet_gethost[7615] (DEBUG):Saved domainname .
inet_gethost[7616] (DEBUG):Worker got request, op = 1, proto = 1, data = rhel7.
inet_gethost[7616] (DEBUG):Starting gethostbyname(rhel7)
inet_gethost[7616] (DEBUG):gethostbyname OK
{ok,{hostent,"rhel7.example.org",[],inet,4,
             [{192,168,200,200}]}}


Expected results:
[root@rhel7 ~]# erl -sname foo -proto_dist inet6_tcp
Erlang/OTP 18 [erts-7.3.1.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.2  (abort with ^G)
(foo@rhel7)1> inet:gethostbyname("rhel7").
inet_gethost[7694] (DEBUG):Saved domainname .
inet_gethost[7694] (DEBUG):Created worker[7695] with fd 3
inet_gethost[7694] (DEBUG):Saved domainname .
inet_gethost[7695] (DEBUG):Worker got request, op = 1, proto = 2, data = rhel7.
inet_gethost[7695] (DEBUG):Starting getaddrinfo(rhel7, ...)
inet_gethost[7695] (DEBUG):getaddrinfo returned 0
{ok,{hostent,"rhel7",[],inet6,16,[{64768,0,0,0,0,0,0,1}]}}


Additional info:
Upstream fix on OTP 19 - https://github.com/erlang/otp/commit/5d7dcfc2e0de7e93b29d01f07a2f970720d62f9d
Backport for OTP 18.3.4.4 - https://github.com/jeckersb/otp/commit/5ceafb8276b2d920abb3724450e87d8724d21f8e

Comment 1 Peter Lemenkov 2017-07-14 15:20:05 UTC
Different build (against RHEL 7.3) - erlang-18.3.4.5-3.el7ost.1

Comment 4 pkomarov 2017-09-03 13:23:35 UTC
Verified : on Ver. :erlang-18.3.4.5-3.el7ost.1

Steps taken: 

erlang ver. check: 

[root@controller-0 ~]#yum  list *erlang*|grep '18'|awk '{print $2}'|uniq
18.3.4.5-3.el7ost.1 


prepare env. for erlang run: 

[root@controller-0 ~]#export ERL_INET_GETHOST_DEBUG=5
[root@controller-0 ~]#export ERL_INETRC=/root/inetrc
[root@controller-0 ~]#export ERL_EPMD_ADDRESS=$(grep `hostname -s`\.localdomain /etc/hosts|awk '{print $1}')
[root@controller-0 ~]#echo "{inet6, true}.">>/root/inetrc

[root@controller-0 ~]#pcs cluster stop --all
[root@controller-0 ~]#killall epmd


Test execution: 
Expected results are validated - we get ipv6 output from "net:gethostbyname"

[root@controller-0 ~]# erl -sname foo -proto_dist inet6_tcp
inet_gethost[932209] (DEBUG):Saved domainname .
inet_gethost[932209] (DEBUG):Created worker[932210] with fd 3
inet_gethost[932209] (DEBUG):Saved domainname .
inet_gethost[932210] (DEBUG):Worker got request, op = 1, proto = 1, data = controller-0.
inet_gethost[932210] (DEBUG):Starting gethostbyname(controller-0)
inet_gethost[932210] (DEBUG):gethostbyname OK
inet_gethost[932209] (DEBUG):End of file while reading from pipe.
inet_gethost[932209] (DEBUG):Erlang has closed.
Erlang/OTP 18 [erts-7.3.1.3] [source] [64-bit] [smp:12:12] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.3  (abort with ^G)
(foo@controller-0)1> inet:gethostbyname("controller-0").
inet_gethost[932308] (DEBUG):Saved domainname .
inet_gethost[932308] (DEBUG):Created worker[932309] with fd 3
inet_gethost[932308] (DEBUG):Saved domainname .
inet_gethost[932309] (DEBUG):Worker got request, op = 1, proto = 2, data = controller-0.
inet_gethost[932309] (DEBUG):Starting getaddrinfo(controller-0, ...)
inet_gethost[932309] (DEBUG):getaddrinfo returned 0
{ok,{hostent,"controller-0.localdomain",[],inet6,16,
             [{9760,82,0,9134,0,0,0,25}]}}

Comment 6 errata-xmlrpc 2017-09-13 21:50:42 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2017:2722