diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index e77e1d1562c..4df12e2d654 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -3062,7 +3062,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
// Make sure the netmask is valid
- if (!NetUtils.isValidIp(vlanNetmask)) {
+ if (!NetUtils.isValidNetmask(vlanNetmask)) {
throw new InvalidParameterValueException("Please specify a valid netmask");
}
}
@@ -3079,6 +3079,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if (ipv4) {
String newCidr = NetUtils.getCidrFromGatewayAndNetmask(vlanGateway, vlanNetmask);
+ //Make sure start and end ips are with in the range of cidr calculated for this gateway and netmask {
+ if(!NetUtils.isIpWithtInCidrRange(vlanGateway, newCidr) || !NetUtils.isIpWithtInCidrRange(startIP, newCidr) || !NetUtils.isIpWithtInCidrRange(endIP, newCidr)) {
+ throw new InvalidParameterValueException("Please specify a valid IP range or valid netmask or valid gateway");
+ }
+
// Check if the new VLAN's subnet conflicts with the guest network
// in
// the specified zone (guestCidr is null for basic zone)
diff --git a/utils/pom.xml b/utils/pom.xml
old mode 100644
new mode 100755
index efe931f43bb..ab3419a5407
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -163,6 +163,11 @@
esapi
2.0.1
+
+ commons-net
+ commons-net
+ 3.3
+
install
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index ba24c95b7fb..14a6c706a8f 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -38,6 +38,7 @@ import com.googlecode.ipv6.IPv6Network;
import com.cloud.utils.IteratorUtil;
import com.cloud.utils.Pair;
+import org.apache.commons.net.util.SubnetUtils;
import com.cloud.utils.script.Script;
import org.apache.commons.lang.SystemUtils;
@@ -1412,4 +1413,15 @@ public class NetUtils {
mac = mac & 0x06FFFFFFFFFFl;
return long2Mac(mac);
}
+
+ public static boolean isIpWithtInCidrRange(String ipAddress, String cidr) {
+ if (!isValidIp(ipAddress)) {
+ return false;
+ }
+ if (!isValidCIDR(cidr)) {
+ return false;
+ }
+ SubnetUtils subnetUtils = new SubnetUtils(cidr);
+ return subnetUtils.getInfo().isInRange(ipAddress);
+ }
}