docs: public static Protocol setupProtocolStack(List<ProtocolConfiguration> protocol_configs, ProtocolStack st) throws Exception {
          List<Protocol> protocols=createProtocols(protocol_configs, st);
          if(protocols == null)
              return null;
  
          
          // check InetAddress related features of stack
          Map<String, Map<String,InetAddressInfo>> inetAddressMap = createInetAddressMap(protocol_configs, protocols) ;
          Collection<InetAddress> addrs=getAddresses(inetAddressMap);
  
          StackType ip_version=Util.getIpStackType();
  
          if(!addrs.isEmpty()) {
              // check that all user-supplied InetAddresses have a consistent version:
              // 1. If an addr is IPv6 and we have an IPv4 stack *only* --> FAIL
              for(InetAddress addr: addrs) {
                  if(addr instanceof Inet6Address && ip_version == StackType.IPv4 && !Util.isIpv6StackAvailable())
                      throw new IllegalArgumentException("found IPv6 address " + addr + " in an IPv4-only stack");
                  // if(addr instanceof Inet4Address && addr.isMulticastAddress() && ip_version == StackType.IPv6)
                     // throw new Exception("found IPv4 multicast address " + addr + " in an IPv6 stack");
              }
          }
  
  
          // process default values
          setDefaultValues(protocol_configs, protocols, ip_version);
          ensureValidBindAddresses(protocols);
  
          // Fixes NPE with concurrent channel creation when using a shared stack (https://issues.jboss.org/browse/JGRP-1488)
          Protocol top_protocol=protocols.get(protocols.size() - 1);
          top_protocol.setUpProtocol(st);
          return connectProtocols(protocols);
      }