You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ja...@apache.org on 2013/12/02 10:34:14 UTC

git commit: updated refs/heads/4.3 to 8581e58

Updated Branches:
  refs/heads/4.3 72e035466 -> 8581e5816


CLOUDSTACK-1762 Fixed assigning network or broadcast ip to nic


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/8581e581
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/8581e581
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/8581e581

Branch: refs/heads/4.3
Commit: 8581e5816580fa5efa1e484e178b76a99c22b723
Parents: 72e0354
Author: Jayapal <ja...@apache.org>
Authored: Mon Dec 2 10:53:51 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Mon Dec 2 10:53:51 2013 +0530

----------------------------------------------------------------------
 .../com/cloud/network/IpAddressManagerImpl.java |  7 +++++--
 utils/src/com/cloud/utils/net/NetUtils.java     | 22 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8581e581/server/src/com/cloud/network/IpAddressManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/IpAddressManagerImpl.java b/server/src/com/cloud/network/IpAddressManagerImpl.java
index 2c54137..17fc3d6 100644
--- a/server/src/com/cloud/network/IpAddressManagerImpl.java
+++ b/server/src/com/cloud/network/IpAddressManagerImpl.java
@@ -1695,6 +1695,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
         Set<Long> availableIps = _networkModel.getAvailableIps(network, requestedIp);
 
         if (availableIps == null || availableIps.isEmpty()) {
+            s_logger.debug("There are no free ips in the  network " + network );
             return null;
         }
 
@@ -1707,9 +1708,11 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
             if (!isSameCidr) {
                 s_logger.warn("Requested ip address " + requestedIp + " doesn't belong to the network " + network + " cidr");
                 return null;
-            } else {
-                return requestedIp;
+            } else if (NetUtils.IsIpEqualToNetworkOrBroadCastIp(requestedIp, cidr[0], Integer.parseInt(cidr[1]))) {
+                s_logger.warn("Requested ip address " + requestedIp + " is equal to the to the network/broadcast ip of the network" + network);
+                return null;
             }
+            return requestedIp;
         }
 
         String result;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8581e581/utils/src/com/cloud/utils/net/NetUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index 8a35109..11a483c 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -1435,4 +1435,26 @@ public class NetUtils {
         SubnetUtils subnetUtils = new SubnetUtils(cidr);
         return subnetUtils.getInfo().isInRange(ipAddress);
     }
+
+    public static Boolean IsIpEqualToNetworkOrBroadCastIp(String requestedIp, String cidr, long size) {
+        assert (size < 32) : "You do know this is not for ipv6 right?  Keep it smaller than 32 but you have " + size;
+
+        long ip = ip2Long(cidr);
+        long startNetMask = ip2Long(getCidrNetmask(size));
+
+        long start = (ip & startNetMask);
+        long end = start;
+
+        end = end >> (32 - size);
+
+        end++;
+        end = (end << (32 - size)) - 1;
+
+        long reqIp = ip2Long(requestedIp);
+        if (reqIp == start || reqIp == end) {
+            return true;
+        }
+        return false;
+    }
+
 }