public static long getCidrSize(final String netmask) { final long ip = ip2Long(netmask); int count = 0; for (int i = 0; i < MAX_CIDR; i++) { if ((ip >> i & 0x1) == 0) { count++; } else { break; } } return MAX_CIDR - count; }
private long getIpMask(String ipAddress, long cidrSize) { return NetUtils.ip2Long(ipAddress) & ~(0xffffffffffffffffl << (32 - cidrSize)); }
public Ip(String ip) { this.ip = NetUtils.ip2Long(ip); }
/** * Returns true if the given IPv4 address is in the specific Ipv4 range */ public static boolean isIpInRange(final String ipInRange, final String startIP, final String endIP) { if (ipInRange == null || !validIpRange(startIP, endIP)) return false; final long ipInRangeLong = NetUtils.ip2Long(ipInRange); final long startIPLong = NetUtils.ip2Long(startIP); final long endIPLong = NetUtils.ip2Long(endIP); return startIPLong <= ipInRangeLong && ipInRangeLong <= endIPLong; }
private String compressCidrToHexRepresentation(final String cidr) { final String[] toks = cidr.split(CIDR_LENGTH_SEPARATOR); final long ipnum = NetUtils.ip2Long(toks[0]); return Long.toHexString(ipnum) + CIDR_LENGTH_SEPARATOR + toks[1]; }
/** * Given a cidr, this method returns an ip address within the range but * is not in the avoid list. * * @param startIp ip that the cidr starts with * @param size size of the cidr * @param avoid set of ips to avoid * @return ip that is within the cidr range but not in the avoid set. -1 if unable to find one. */ public static long getRandomIpFromCidr(final String startIp, final int size, final SortedSet<Long> avoid) { return getRandomIpFromCidr(ip2Long(startIp), size, avoid); }
public static String getIpRangeEndIpFromCidr(final String cidr, final long size) { final long ip = ip2Long(cidr); final long startNetMask = ip2Long(getCidrNetmask(size)); final long start = (ip & startNetMask) + 1; long end = start; end = end >> MAX_CIDR - size; end++; end = (end << MAX_CIDR - size) - 2; return long2Ip(end); }
public static String getCidrFromGatewayAndNetmask(final String gatewayStr, final String netmaskStr) { final long netmask = ip2Long(netmaskStr); final long gateway = ip2Long(gatewayStr); final long firstPart = gateway & netmask; final long size = getCidrSize(netmaskStr); return long2Ip(firstPart) + "/" + size; }
public boolean isSameAddressAs(Object obj) { if (this.equals(obj)) { return true; } else if (obj instanceof String) { return ip == NetUtils.ip2Long((String)obj); } else if (obj instanceof Long) { return ip == (Long)obj; } else { return false; } }
@DB protected boolean savePublicIPRange(final String startIP, final String endIP, final long zoneId, final long vlanDbId, final long sourceNetworkid, final long physicalNetworkId, final boolean forSystemVms) { final long startIPLong = NetUtils.ip2Long(startIP); final long endIPLong = NetUtils.ip2Long(endIP); final List<String> problemIps = Transaction.execute(new TransactionCallback<List<String>>() { @Override public List<String> doInTransaction(final TransactionStatus status) { final IPRangeConfig config = new IPRangeConfig(); return config.savePublicIPRange(TransactionLegacy.currentTxn(), startIPLong, endIPLong, zoneId, vlanDbId, sourceNetworkid, physicalNetworkId, forSystemVms); } }); return problemIps != null && problemIps.size() == 0; }
private void checkOverlapPublicIpRange(final Long zoneId, final String startIp, final String endIp) { final long privateStartIp = NetUtils.ip2Long(startIp); final long privateEndIp = NetUtils.ip2Long(endIp); final List<IPAddressVO> existingPublicIPs = _publicIpAddressDao.listByDcId(zoneId); for (final IPAddressVO publicIPVO : existingPublicIPs) { final long publicIP = NetUtils.ip2Long(publicIPVO.getAddress().addr()); if (publicIP >= privateStartIp && publicIP <= privateEndIp) { throw new InvalidParameterValueException("The Start IP and endIP address range overlap with Public IP :" + publicIPVO.getAddress().addr()); } } }
public static String[] getLinkLocalIPRange(final int size) { if (size > 16 || size <= 0) { return null; } /* reserve gateway */ final String[] range = getIpRangeFromCidr(getLinkLocalGateway(), MAX_CIDR - size); if (range[0].equalsIgnoreCase(getLinkLocalGateway())) { /* remove the gateway */ long ip = ip2Long(range[0]); ip += 1; range[0] = long2Ip(ip); } return range; }
@Override public void doInTransactionWithoutResult(TransactionStatus status) { IPRangeConfig config = new IPRangeConfig(); long startIPLong = NetUtils.ip2Long(startIp); long endIPLong = NetUtils.ip2Long(endIp); config.savePublicIPRange(TransactionLegacy.currentTxn(), startIPLong, endIPLong, vlan.getDataCenterId(), vlan.getId(), vlan.getNetworkId(), vlan.getPhysicalNetworkId(), false); } });