public static boolean isNetworkAWithinNetworkB(final String cidrA, final String cidrB) { if (!areCidrsNotEmpty(cidrA, cidrB)) { return false; } Long[] cidrALong = cidrToLong(cidrA); Long[] cidrBLong = cidrToLong(cidrB); long shift = MAX_CIDR - cidrBLong[1]; return (cidrALong[0] >> shift == cidrBLong[0] >> shift) && (cidrALong[1] >= cidrBLong[1]); }
public static boolean isNetworksOverlap(final String cidrA, final String cidrB) { try { Long[] cidrALong = cidrToLong(cidrA); Long[] cidrBLong = cidrToLong(cidrB); final long shift = MAX_CIDR - (cidrALong[1] > cidrBLong[1] ? cidrBLong[1] : cidrALong[1]); return cidrALong[0] >> shift == cidrBLong[0] >> shift; } catch (CloudRuntimeException e) { s_logger.error(e.getLocalizedMessage(),e); } return false; }
public static SupersetOrSubset isNetowrkASubsetOrSupersetOfNetworkB(final String cidrA, final String cidrB) { if (!areCidrsNotEmpty(cidrA, cidrB)) { return SupersetOrSubset.errorInCidrFormat; } final Long[] cidrALong = cidrToLong(cidrA); final Long[] cidrBLong = cidrToLong(cidrB); long shift = 0; if (cidrALong[1] >= cidrBLong[1]) { shift = MAX_CIDR - cidrBLong[1]; } else { shift = MAX_CIDR - cidrALong[1]; } final long result = (cidrALong[0] >> shift) - (cidrBLong[0] >> shift); if (result == 0) { if (cidrALong[1] < cidrBLong[1]) { //this implies cidrA is super set of cidrB return SupersetOrSubset.isSuperset; } else if (cidrALong[1].equals(cidrBLong[1])) { //this implies both the cidrs are equal return SupersetOrSubset.sameSubnet; } // implies cidrA is subset of cidrB return SupersetOrSubset.isSubset; } //this implies no overlap. return SupersetOrSubset.neitherSubetNorSuperset; }
@Test public void testCidrToLongArray() { final String cidr = "10.192.10.10/10"; Long[] netbits = NetUtils.cidrToLong(cidr); assertEquals("unexpected cidrsize " + netbits[1],10l, netbits[1].longValue()); assertEquals("(un)expected <" + 0x0ac00000L + "> netaddress " + netbits[0].longValue(),netbits[0].longValue(),0x0ac00000l); }
String guestVlanGateway = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY); String cidr = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR); long cidrSize = NetUtils.cidrToLong(cidr)[1]; String guestVlanSubnet = NetUtils.getCidrSubNet(guestVlanGateway, cidrSize);
public static boolean isNetworkAWithinNetworkB(final String cidrA, final String cidrB) { if (!areCidrsNotEmpty(cidrA, cidrB)) { return false; } final Long[] cidrALong = cidrToLong(cidrA); final Long[] cidrBLong = cidrToLong(cidrB); final long shift = MAX_CIDR - cidrBLong[1]; return (cidrALong[0] >> shift == cidrBLong[0] >> shift) && (cidrALong[1] >= cidrBLong[1]); }
public static boolean isNetworksOverlap(final String cidrA, final String cidrB) { try { final Long[] cidrALong = cidrToLong(cidrA); final Long[] cidrBLong = cidrToLong(cidrB); final long shift = MAX_CIDR - (cidrALong[1] > cidrBLong[1] ? cidrBLong[1] : cidrALong[1]); return cidrALong[0] >> shift == cidrBLong[0] >> shift; } catch (final CloudRuntimeException e) { s_logger.error(e.getLocalizedMessage(), e); } return false; }
public static SupersetOrSubset isNetworkASubsetOrSupersetOfNetworkB(final String cidrA, final String cidrB) { if (!areCidrsNotEmpty(cidrA, cidrB)) { return SupersetOrSubset.errorInCidrFormat; } final Long[] cidrALong = cidrToLong(cidrA); final Long[] cidrBLong = cidrToLong(cidrB); long shift = 0; if (cidrALong[1] >= cidrBLong[1]) { shift = MAX_CIDR - cidrBLong[1]; } else { shift = MAX_CIDR - cidrALong[1]; } final long result = (cidrALong[0] >> shift) - (cidrBLong[0] >> shift); if (result == 0) { if (cidrALong[1] < cidrBLong[1]) { //this implies cidrA is super set of cidrB return SupersetOrSubset.isSuperset; } else if (cidrALong[1].equals(cidrBLong[1])) { //this implies both the cidrs are equal return SupersetOrSubset.sameSubnet; } // implies cidrA is subset of cidrB return SupersetOrSubset.isSubset; } //this implies no overlap. return SupersetOrSubset.neitherSubetNorSuperset; }
@Test public void testCidrToLongArray() { final String cidr = "10.192.10.10/10"; final Long[] netbits = NetUtils.cidrToLong(cidr); assertEquals("unexpected cidrsize " + netbits[1], 10l, netbits[1].longValue()); assertEquals("(un)expected <" + 0x0ac00000L + "> netaddress " + netbits[0].longValue(), netbits[0].longValue(), 0x0ac00000l); }