private List<Pair<String, String>> getIpAddressRanges(Network network) {
List<Pair<String, String>> ipAddressRanges = Lists.newArrayList();
String subnet = NetUtils.getCidrSubNet(network.getCidr());
String netmask = NetUtils.getCidrNetmask(network.getCidr());
long cidrSize = NetUtils.getCidrSize(netmask);
Set<Long> allIPsInCidr = NetUtils.getAllIpsFromCidr(subnet, cidrSize, new HashSet<Long>());
if (allIPsInCidr == null || !(allIPsInCidr instanceof TreeSet)) {
throw new IllegalStateException("The IPs in CIDR for subnet " + subnet + " where null or returned in a non-ordered set.");
}
Iterator<Long> ipIterator = allIPsInCidr.iterator();
long ip = ipIterator.next();
long gatewayIp = NetUtils.ip2Long(network.getGateway());
String lastIp = NetUtils.getIpRangeEndIpFromCidr(subnet, cidrSize);
if (gatewayIp == ip) {
ip = ipIterator.next();
ipAddressRanges.add(Pair.of(NetUtils.long2Ip(ip), lastIp));
} else if (!network.getGateway().equals(lastIp)) {
ipAddressRanges.add(Pair.of(NetUtils.long2Ip(ip), NetUtils.long2Ip(gatewayIp - 1)));
ipAddressRanges.add(Pair.of(NetUtils.long2Ip(gatewayIp + 1), lastIp));
} else {
ipAddressRanges.add(Pair.of(NetUtils.long2Ip(ip), NetUtils.long2Ip(gatewayIp - 1)));
}
return ipAddressRanges;
}