public static long getIpv6RangeSize(String startIp, String endIp) { IPv6Address start = IPv6Address.fromString(startIp); IPv6Address end = IPv6Address.fromString(endIp); IPv6AddressRange range = IPv6AddressRange.fromFirstAndLast(start, end); if (range.size().compareTo(IPv6Constants.IntegerMax) >= 0) { return Integer.MAX_VALUE; } else { return range.size().longValue(); } }
public static boolean isIpv6RangeOverlap(String startIp1, String endIp1, String startIp2, String endIp2) { try { IPv6Address s1 = IPv6Address.fromString(startIp1); IPv6Address e1 = IPv6Address.fromString(endIp1); IPv6Address s2 = IPv6Address.fromString(startIp2); IPv6Address e2 = IPv6Address.fromString(endIp2); IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(s1, e1); IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(s2, e2); return range1.overlaps(range2); } catch (Exception e) { return true; } }
public static boolean isIp6RangeOverlap(final String ipRange1, final String ipRange2) { String[] ips = ipRange1.split("-"); final String startIp1 = ips[0]; String endIp1 = null; if (ips.length > 1) { endIp1 = ips[1]; } final IPv6Address start1 = IPv6Address.fromString(startIp1); final IPv6Address end1 = IPv6Address.fromString(endIp1); final IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(start1, end1); ips = ipRange2.split("-"); final String startIp2 = ips[0]; String endIp2 = null; if (ips.length > 1) { endIp2 = ips[1]; } final IPv6Address start2 = IPv6Address.fromString(startIp2); final IPv6Address end2 = IPv6Address.fromString(endIp2); final IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(start2, end2); return range1.overlaps(range2); }
public static boolean isIpv6InRange(String ip, String startIp, String endIp) { IPv6Address start = IPv6Address.fromString(startIp); IPv6Address end = IPv6Address.fromString(endIp); IPv6Address address = IPv6Address.fromString(ip); IPv6AddressRange range = IPv6AddressRange.fromFirstAndLast(start, end); return range.contains(address); }
public static List<String> getFreeIpv6InRange(String startIp, String endIp, List<String> usedIps, int limit, String start) { IPv6Address s = IPv6Address.fromString(startIp); IPv6Address e = IPv6Address.fromString(endIp); IPv6Address f = IPv6Address.fromString(start); IPv6AddressRange range = IPv6AddressRange.fromFirstAndLast(s, e); List<String> res = new ArrayList<String>(); while (s.compareTo(e) <= 0) { if (s.compareTo(f) <= 0) { s = s.add(1); continue; } if (usedIps.contains(s.toString())) { s = s.add(1); continue; } res.add(s.toString()); s = s.add(1); if (res.size() >= limit) { break; } } return res; }
/** * Extend the range just enough at its head or tail such that the given address is included. * * @param address address to extend the range to * @return new (bigger) range */ public IPv6AddressRange extend(IPv6Address address) { if (address.compareTo(first) < 0) return fromFirstAndLast(address, last); else if (address.compareTo(last) > 0) return fromFirstAndLast(first, address); else return this; }
/** * Extend the range just enough at its head or tail such that the given address is included. * * @param address address to extend the range to * @return new (bigger) range */ public IPv6AddressRange extend(IPv6Address address) { if (address.compareTo(first) < 0) return fromFirstAndLast(address, last); else if (address.compareTo(last) > 0) return fromFirstAndLast(first, address); else return this; }
/** * Remove an address from the range, resulting in one, none or two new ranges. If an address outside the range is removed, this has no * effect. If the first or last address is removed, a single new range is returned (potentially empty if the range only contained a * single address). If an address somewhere else in the range is removed, two new ranges are returned. * * @param address adddress to remove from the range * @return list of resulting ranges */ public List<IPv6AddressRange> remove(IPv6Address address) { if (address == null) throw new IllegalArgumentException("invalid address [null]"); if (!contains(address)) return Collections.singletonList(this); else if (address.equals(first) && address.equals(last)) return Collections.emptyList(); else if (address.equals(first)) return Collections.singletonList(fromFirstAndLast(first.add(1), last)); else if (address.equals(last)) return Collections.singletonList(fromFirstAndLast(first, last.subtract(1))); else return Arrays.asList(fromFirstAndLast(first, address.subtract(1)), fromFirstAndLast(address.add(1), last)); }
/** * Remove an address from the range, resulting in one, none or two new ranges. If an address outside the range is removed, this has no * effect. If the first or last address is removed, a single new range is returned (potentially empty if the range only contained a * single address). If an address somewhere else in the range is removed, two new ranges are returned. * * @param address adddress to remove from the range * @return list of resulting ranges */ public List<IPv6AddressRange> remove(IPv6Address address) { if (address == null) throw new IllegalArgumentException("invalid address [null]"); if (!contains(address)) return Collections.singletonList(this); else if (address.equals(first) && address.equals(last)) return Collections.emptyList(); else if (address.equals(first)) return Collections.singletonList(fromFirstAndLast(first.add(1), last)); else if (address.equals(last)) return Collections.singletonList(fromFirstAndLast(first, last.subtract(1))); else return Arrays.asList(fromFirstAndLast(first, address.subtract(1)), fromFirstAndLast(address.add(1), last)); }
public static boolean isIp6RangeOverlap(final String ipRange1, final String ipRange2) { String[] ips = ipRange1.split("-"); final String startIp1 = ips[0]; String endIp1 = null; if (ips.length > 1) { endIp1 = ips[1]; } final IPv6Address start1 = IPv6Address.fromString(startIp1); final IPv6Address end1 = IPv6Address.fromString(endIp1); final IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(start1, end1); ips = ipRange2.split("-"); final String startIp2 = ips[0]; String endIp2 = null; if (ips.length > 1) { endIp2 = ips[1]; } final IPv6Address start2 = IPv6Address.fromString(startIp2); final IPv6Address end2 = IPv6Address.fromString(endIp2); final IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(start2, end2); return range1.overlaps(range2); }
/** * Remove a network from the range, resulting in one, none or two new ranges. If a network outside (or partially outside) the range is * removed, this has no effect. If the network which is removed is aligned with the beginning or end of the range, a single new ranges * is returned (potentially empty if the range was equal to the network which is removed from it). If a network somewhere else in the * range is removed, two new ranges are returned. * * @param network network to remove from the range * @return list of resulting ranges */ public List<IPv6AddressRange> remove(IPv6Network network) { if (network == null) throw new IllegalArgumentException("invalid network [null]"); if (!contains(network)) return Collections.singletonList(this); else if (this.equals(network)) return Collections.emptyList(); else if (first.equals(network.getFirst())) return Collections.singletonList(fromFirstAndLast(network.getLast().add(1), last)); else if (last.equals(network.getLast())) return Collections.singletonList(fromFirstAndLast(first, network.getFirst().subtract(1))); else return Arrays.asList(fromFirstAndLast(first, network.getFirst().subtract(1)), fromFirstAndLast(network.getLast().add(1), last)); }
/** * Remove a network from the range, resulting in one, none or two new ranges. If a network outside (or partially outside) the range is * removed, this has no effect. If the network which is removed is aligned with the beginning or end of the range, a single new ranges * is returned (potentially empty if the range was equal to the network which is removed from it). If a network somewhere else in the * range is removed, two new ranges are returned. * * @param network network to remove from the range * @return list of resulting ranges */ public List<IPv6AddressRange> remove(IPv6Network network) { if (network == null) throw new IllegalArgumentException("invalid network [null]"); if (!contains(network)) return Collections.singletonList(this); else if (this.equals(network)) return Collections.emptyList(); else if (first.equals(network.getFirst())) return Collections.singletonList(fromFirstAndLast(network.getLast().add(1), last)); else if (last.equals(network.getLast())) return Collections.singletonList(fromFirstAndLast(first, network.getFirst().subtract(1))); else return Arrays.asList(fromFirstAndLast(first, network.getFirst().subtract(1)), fromFirstAndLast(network.getLast().add(1), last)); }
newFreeRanges.remove(freeRangeAfterNetwork); newFreeRanges.add(IPv6AddressRange .fromFirstAndLast(freeRangeBeforeNetwork.getFirst(), freeRangeAfterNetwork.getLast())); newFreeRanges.add(IPv6AddressRange.fromFirstAndLast(freeRangeBeforeNetwork.getFirst(), toDeAllocate.getLast())); newFreeRanges.add(IPv6AddressRange.fromFirstAndLast(toDeAllocate.getFirst(), freeRangeAfterNetwork.getLast()));
newFreeRanges.remove(freeRangeAfterNetwork); newFreeRanges.add(IPv6AddressRange .fromFirstAndLast(freeRangeBeforeNetwork.getFirst(), freeRangeAfterNetwork.getLast())); newFreeRanges.add(IPv6AddressRange.fromFirstAndLast(freeRangeBeforeNetwork.getFirst(), toDeAllocate.getLast())); newFreeRanges.add(IPv6AddressRange.fromFirstAndLast(toDeAllocate.getFirst(), freeRangeAfterNetwork.getLast()));