From a2de4f7cf5963f0a2b97fa61ab206e3d38f7832f Mon Sep 17 00:00:00 2001 From: anthony Date: Fri, 10 Dec 2010 15:35:27 -0800 Subject: [PATCH] fixed isNetworkAWithinNetworkB --- utils/src/com/cloud/utils/net/NetUtils.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java index 0c6d2d8cf88..431a02d22b5 100755 --- a/utils/src/com/cloud/utils/net/NetUtils.java +++ b/utils/src/com/cloud/utils/net/NetUtils.java @@ -613,15 +613,16 @@ public class NetUtils { } public static boolean isNetworkAWithinNetworkB(String cidrA, String cidrB) { - Long cidrALong = cidrToLong(cidrA); - Long cidrBLong = cidrToLong(cidrB); + Long[] cidrALong = cidrToLong(cidrA); + Long[] cidrBLong = cidrToLong(cidrB); if (cidrALong == null || cidrBLong == null) { return false; } - return (cidrALong.longValue() & cidrBLong.longValue()) == cidrBLong.longValue(); + long shift = 32 - cidrBLong[1]; + return ((cidrALong[0]>>shift) == (cidrBLong[0]>>shift)); } - public static Long cidrToLong(String cidr) { + public static Long[] cidrToLong(String cidr) { if (cidr == null || cidr.isEmpty()) { return null; } @@ -643,7 +644,9 @@ public class NetUtils { } long numericNetmask = (0xffffffff >> (32 - cidrSizeNum)) << (32 - cidrSizeNum); long ipAddr = ip2Long(cidrAddress); - return ipAddr & numericNetmask; + Long[] cidrlong = {ipAddr & numericNetmask, (long)cidrSizeNum}; + return cidrlong; + } public static String getCidrSubNet(String cidr) {