[jboss-jira] [JBoss JIRA] (AS7-3607) Native connector shoudl support the java.net.preferIPv4Stack system property

Richard Achmatowicz (JIRA) jira-events at lists.jboss.org
Wed Feb 15 16:06:36 EST 2012


    [ https://issues.jboss.org/browse/AS7-3607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12666893#comment-12666893 ] 

Richard Achmatowicz commented on AS7-3607:
------------------------------------------

OK. The patch mentioned above fixes this issue. It just didn't make it into 7.1.0.Final.
 
The problem is that whether we specify the IPv4 address 127.0.0.1 or the IPv6 mapped address ::ffff:127.0.0.1. InetAddress.getByName() returns /127.0.0.1 as the address. This gets passed down to AprEndpoint which creates the socket. There are some checks to try to determine the address family (AF_INET, AF_INET6) based on the address format, but no checks on the current stack preference. So when 127.0.0.1 appears, it is a assumed that the address family is AF_INET. 

This fix checks the stack preference, and if an IPv4 address is passed, will set the correct family and prefix an IPv4 address with ::ffff: if required, which causes an IPv6 socket to be created.   


                
> Native connector shoudl support the java.net.preferIPv4Stack system property
> ----------------------------------------------------------------------------
>
>                 Key: AS7-3607
>                 URL: https://issues.jboss.org/browse/AS7-3607
>             Project: Application Server 7
>          Issue Type: Feature Request
>          Components: Web
>    Affects Versions: 7.1.0.CR1b
>            Reporter: Pavel Janousek
>            Assignee: Jean-Frederic Clere
>              Labels: eap6_prd_req
>             Fix For: 7.1.1.Final
>
>
> There is another example of incorrect address binding in IPv6 environment.
> Steps how to reproduce:
> 1. Download, unpack DR12 build somewhere
> 2. Remove -Djava.net.preferIPv4Stack=true, or change it to -Djava.net.preferIPv4Stack=false parameter inside JAVA_OPT in file bin/standalone.conf
> 3. Set some usefull IPv6 address to network interface (in my case network interface is p2p1, so you can use command like "ip addr add 1:0:0:1::10 dev p2p1")
> 3a. Don't forget to configure this IPv6 address as hostname for box (let say, hostname is fedora15-vrt1, so at least /etc/hosts should contain "1:0:0:1::10 fedora15-vrt1")
> 4. Verify if you really have configured wanted eth. interface only aka:
> {code}
> [root at fedora15-vrt1 Documents]# ifconfig 
> p2p1      Link encap:Ethernet  HWaddr 00:00:00:00:00:01  
>           inet6 addr: 1:0:0:1::10/128 Scope:Global
>           inet6 addr: fe80::200:ff:fe00:1/64 Scope:Link
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
>           TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:1000 
>           RX bytes:0 (0.0 b)  TX bytes:766 (766.0 b)
> [root at fedora15-vrt1 Documents]# 
> {code}
> 5. Start EAP6 as usual bin/standalone.sh and wait until it says somethink similas as "[org.jboss.as] (Controller Boot Thread) JBoss EAP 6.0.0.Alpha2 (AS 7.1.0.CR1-redhat-1) started in 16179ms - Started 158 of 228 services (68 services are passive or on-demand)"
> 6. Check addresses binding via "netstat -lnp|grep java"
> The result it this scenario should be something like mine:
> {code}
> [root at fedora15-vrt1 jboss-as]# netstat -lnp|grep java
> tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:5445       :::*                        LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:9990       :::*                        LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:3528       :::*                        LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:9999       :::*                        LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:5455       :::*                        LISTEN      4765/java           
> tcp        0      0 ::ffff:127.0.0.1:4447       :::*                        LISTEN      4765/java           
> [root at fedora15-vrt1 jboss-as]# 
> {code}
> As you may see - poor binding is done to 127.0.0.1 IPv4 address, but anyway others are bound to IPv6 address ::ffff:127.0.0.1 although every log message refers to IPv4 address 127.0.0.1.
> The worst is that in case when you disable loopback interface at all (ip link set dev lo down) before starting EAP, the result is the same although IP address 127.0.0.1, nor ::ffff:127.0.0.1 doesn't exist (isn't active) in Linux system.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list