When starting the AS, we have the following three possible combinations of addresses / stacks:
IPv4 addresses with IPv4 stack (java.net.preferIPv4Stack=true)
(ii) IPv6 addresses with IPv6 stack (java.net.preferIPv4Stack=false, java.net.preferIPv6Addresses=true)
(iii) IPv4 addresses with IPv6 stack ( java.net.preferIPv4Stack=false, java.net.preferIPv6Addresses=false)
The stack preference is specified by defining the above system properties; the addresses are specified as inputs to the -b and -u options of run.sh.
Many versions of the AS force an IPv4 stack by setting java.net.preferIPv4Stack=true in run.sh when on Linux.
There is an issue associated when using the combination IPv4 address / IPv6 stack. The issue is made up of two facts:
Fact 1: When we initlaize a multicast socket for group communication, we can initialise it in one of two ways:
binding the multicast socket to a multicast address and port (known as "binding to mulicast")
(ii) binding a multicast socket to a port only
When using an IPv4 address on an IPv6 socket, we cannot bind to multicast.
Fact 2: On certain versions of Linux, HPUX and MacOSX there is a known problem, the promiscuous traffic problem, wherein
two distinct clusters X and Y can see and be influenced by each other's messages, if the multicast address they use are different, but
they use the same multicast ports.
A general description of the promiscuous traffic can be found here: https://community.jboss.org/wiki/PromiscuousTraffic
The promiscuous traffic problem can be solved on Linux by binding to multicast.
Problem: when running with an IPv4 multicast address on an IPv6 stack on Linux, we cannot bind to multicast, and so
we have the promiscuous traffic problem oif we use this address / stack combination.