[
https://issues.jboss.org/browse/JGRP-2343?page=com.atlassian.jira.plugin....
]
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)