[jboss-jira] [JBoss JIRA] (JGRP-2343) Change in IPv4 versus IPv6 picking algorithm

Bela Ban (Jira) issues at jboss.org
Mon May 13 08:38:00 EDT 2019


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

Bela Ban edited comment on JGRP-2343 at 5/13/19 8:37 AM:
---------------------------------------------------------

Below is the new algorithm for resolving IP addresses. What needs to be resolved is:
* Symbolic addresses such as {{site_local}}, {{global}}, {{link_local}}, {{loopback}} and {{non_loopback}} etc
* Symbolic names, e.g. {{belasmac}}, {{www.google.com}}
* Regexps such as {{match-interface}}, {{match-host}} etc
* Defaults, e.g. {{UDP.mcast_addr}}. If not set, it will be assigned {{228.8.8.8}} (IPv4) or {{ff0e::8:8:8}} (IPv6)

All of these can only be resolved once we know what type of addresses we need to provide. E.g. when {{UDP.bind_addr}} is {{127.0.0.1}}, {{site_local}} would have to be an IPv4 address. When {{bind_addr}} is {{::1}}, {{site_local}} needs to pick an IPv6 address.

h4. Only IPv4 stack is available
* IPv4 addresses are created by default (e.g. by {{InetAddress.getByName()}}, or {{site_local}})
* When an IPv6 address is defined in a configuration, an exception is thrown and the stack will not start

h4. Only IPv6 stack is available
* IPv6 addresses are created by default
* When an IPv4 address is created, convert it to an IPv6-mapped address (default behavior)

h4. Both IPv4 and IPv6 stacks are available (dual stack)
* If {{java.net.preferIPv4Stack=true}} and {{java.net.preferIPv6Addresses=false}}:
** Assign IPv4 addresses by default
** When an IPv6 address is encountered, throw an exception and don't start the stack
* If {{java.net.preferIPv6Addresses=true}} and {{java.net.preferIPv4Stack=false}}:
** Assign IPv6 addresses by default
** When an IPv4 address is encountered, convert it to an IPv6-mapped address (default behavior)
* Both {{java.net.preferIPv4Stack}} and {{java.net.preferIPv6Addresses}} are set, or none are set
** The JDK's preference is to assign IPv4 addresses
** If we have a single IPv6 address (dotted-decimal or symbolic name resolved to IPv6) in the configuration -> Assign IPv6 addresses
** Otherwise -> use IPv4 addresses

For dual stacks (both IPv4 and IPv6 stack is available in the JDK), these changes allow JGroups to run different configurations in the same JVM, e.g. one channel joining an IPv4 cluster, and another one joining an IPv6 cluster.


was (Author: belaban):
Below is the new algorithm for resolving IP addresses. What needs to be resolved is:
* Symbolic addresses such as {{site_local}}, {{global}} etc
* Symbolic names, e.g. {{belasmac}}, {{www.google.com}}
* Regexps such as {{match-interface}}, {{match-host}} etc

All of these can only be resolved once we know what type of addresses we need to provide. E.g. when {{UDP.bind_addr}} is {{127.0.0.1}}, {{site_local}} would have to be an IPv4 address. When {{bind_addr}} is {{::1}}, {{site_local}} needs to pick an IPv6 address.

h4. Only IPv4 stack is available
* IPv4 addresses are created by default (e.g. by {{InetAddress.getByName()}}, or {{site_local}})
* When an IPv6 address is defined in a configuration, an exception is thrown and the stack will not start

h4. Only IPv6 stack is available
* IPv6 addresses are created by default
* When an IPv4 address is created, convert it to an IPv6-mapped address (default behavior)

h4. Both IPv4 and IPv6 stacks are available (dual stack)
* If {{java.net.preferIPv4Stack=true}} and {{java.net.preferIPv6Addresses=false}}:
** Assign IPv4 addresses by default
** When an IPv6 address is encountered, throw an exception and don't start the stack
* If {{java.net.preferIPv6Addresses=true}} and {{java.net.preferIPv4Stack=false}}:
** Assign IPv6 addresses by default
** When an IPv4 address is encountered, convert it to an IPv6-mapped address (default behavior)
* Both {{java.net.preferIPv4Stack}} and {{java.net.preferIPv6Addresses}} are set, or none are set
** The JDK's preference is to assign IPv4 addresses
** If we have a single IPv6 address (dotted-decimal or symbolic name resolved to IPv6) in the configuration -> Assign IPv6 addresses
** Otherwise -> use IPv4 addresses

For dual stacks (both IPv4 and IPv6 stack is available in the JDK), these changes allow JGroups to run different configurations in the same JVM, e.g. one channel joining an IPv4 cluster, and another one joining an IPv6 cluster.

> Change in IPv4 versus IPv6 picking algorithm
> --------------------------------------------
>
>                 Key: JGRP-2343
>                 URL: https://issues.jboss.org/browse/JGRP-2343
>             Project: JGroups
>          Issue Type: Task
>            Reporter: Bela Ban
>            Assignee: Bela Ban
>            Priority: Major
>             Fix For: 4.1.0
>
>
> When https://issues.jboss.org/browse/JGRP-2305 was implemented, IPv4 was favored unless {{java.net.preferIPv6Addresses}} was set.
> However, this makes the following case fail: no {{java.net.preferXXX}} option is set and the configuration contains one or more IPv6 addresses, e.g. {{UDP bind_addr="::1"}}.
> This will fail, as the new algorithm sets the stack type as IPv4 (it works when {{java.net.preferIPv6Addresses}} is set).
> Change:
> * Look at all IP addresses in a configuration
> * If all addresses are IPv6 and the stack type is IPv4 (and IPv6 is available) -> switch to IPv6 as stack type
> * If all addresses are IPv4 and the stack type is IPv6 (and IPv4 is available) -> switch to IPv4 stack type



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list