public static String prefix2Netmask(final short prefix) { long addr = 0; for (int i = 0; i < prefix; i++) { addr = addr | 1 << 31 - i; } return long2Ip(addr); }
@Override public String toString() { return NetUtils.long2Ip(ip); }
public Ip4Address(long addr) { this(NetUtils.long2Ip(addr), s_empty_mac); }
public static String getCidrNetmask(final long cidrSize) { final long numericNetmask = netMaskFromCidr(cidrSize); return long2Ip(numericNetmask); }
public Ip4Address(long addr, long mac) { _addr = NetUtils.long2Ip(addr); _mac = NetUtils.long2Mac(mac); }
public static String[] ipAndNetMaskToRange(final String ip, final String netmask) { final long ipAddr = ip2Long(ip); long subnet = ip2Long(netmask); final long start = (ipAddr & subnet) + 1; long end = start; int bits = subnet == 0 ? 0 : 1; while ((subnet = subnet >> 1 & subnet) != 0) { bits++; } end = end >> MAX_CIDR - bits; end++; end = (end << MAX_CIDR - bits) - 2; return new String[] {long2Ip(start), long2Ip(end)}; }
@Override public boolean configure(String name, Map<String, Object> params) throws ConfigurationException { String guestIpRange = (String)params.get("guest.ip.range"); if (guestIpRange != null) { String[] guestIps = guestIpRange.split("-"); if (guestIps.length == 2) { long start = NetUtils.ip2Long(guestIps[0]); long end = NetUtils.ip2Long(guestIps[1]); while (start <= end) { _ipAddresses.offer(NetUtils.long2Ip(start++)); } } } return true; }
public static String[] getIpRangeFromCidr(final String cidr, final long size) { assert size < MAX_CIDR : "You do know this is not for ipv6 right? Keep it smaller than 32 but you have " + size; final String[] result = new String[2]; 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; result[0] = long2Ip(start); result[1] = long2Ip(end); return result; }
public static String getSubNet(final String ip, final String netmask) { final long ipAddr = ip2Long(ip); final long subnet = ip2Long(netmask); final long result = ipAddr & subnet; return long2Ip(result); }
public static String getCidrSubNet(final String ip, final long cidrSize) { final long numericNetmask = netMaskFromCidr(cidrSize); final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(ip, netmask); }
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 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 getIpRangeStartIpFromCidr(final String cidr, final long size) { final long ip = ip2Long(cidr); final long startNetMask = ip2Long(getCidrNetmask(size)); final long start = (ip & startNetMask) + 1; return long2Ip(start); }
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; }
@Test public void testGetRandomIpFromCidrWithSize8() throws Exception { final String cidr = "192.168.124.1"; final int size = 8; final int netCharacters = 4; final long ip = NetUtils.getRandomIpFromCidr(cidr, 16, new TreeSet<Long>()); assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip) .substring(0, netCharacters))); }
@Test public void testGetRandomIpFromCidrWithSize24() throws Exception { final String cidr = "192.168.124.1"; final int size = 24; final int netCharacters = 12; final long ip = NetUtils.getRandomIpFromCidr(cidr, size, new TreeSet<Long>()); assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip) .substring(0, netCharacters))); }
@Test public void testGetRandomIpFromCidrWithSize16() throws Exception { final String cidr = "192.168.124.1"; final int size = 16; final int netCharacters = 8; final long ip = NetUtils.getRandomIpFromCidr(cidr, 16, new TreeSet<Long>()); assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip) .substring(0, netCharacters))); }
public static String ipAndNetMaskToCidr(final String ip, final String netmask) { if (!isValidIp4(ip)) { return null; } if (!isValidIp4Netmask(netmask)) { return null; } final long ipAddr = ip2Long(ip); final long subnet = ip2Long(netmask); final long result = ipAddr & subnet; int bits = subnet == 0 ? 0 : 1; long subnet2 = subnet; while ((subnet2 = subnet2 >> 1 & subnet) != 0) { bits++; } return long2Ip(result) + "/" + Integer.toString(bits); }
@Override public PortableIpRangeVO doInTransaction(final TransactionStatus status) { PortableIpRangeVO portableIpRange = new PortableIpRangeVO(regionId, vlanIdFinal, gateway, netmask, startIP, endIP); portableIpRange = _portableIpRangeDao.persist(portableIpRange); long startIpLong = NetUtils.ip2Long(startIP); final long endIpLong = NetUtils.ip2Long(endIP); while (startIpLong <= endIpLong) { final PortableIpVO portableIP = new PortableIpVO(regionId, portableIpRange.getId(), vlanIdFinal, gateway, netmask, NetUtils.long2Ip(startIpLong)); _portableIpDao.persist(portableIP); startIpLong++; } // implicitly enable portable IP service for the region region.setPortableipEnabled(true); _regionDao.update(region.getId(), region); return portableIpRange; } });