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/10/18 12:21:26 UTC
[1/2] git commit: updated refs/heads/4.2 to 51a4d26
Updated Branches:
refs/heads/4.2 c1294fdfa -> 51a4d2677
CLOUDSTACK-4811:Fixed zone creation wizard is allowing to accept wrong sub net mask which is cauing wrong cidr value for a given ip range
Signed-off-by: Jayapal <ja...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/51a4d267
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/51a4d267
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/51a4d267
Branch: refs/heads/4.2
Commit: 51a4d2677cdc5964916378c568fd7da18d0aaa5f
Parents: ddb2149
Author: Damodar Reddy <da...@citrix.com>
Authored: Fri Oct 18 15:09:21 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Fri Oct 18 15:51:13 2013 +0530
----------------------------------------------------------------------
.../cloud/configuration/ConfigurationManagerImpl.java | 7 ++++++-
utils/pom.xml | 5 +++++
utils/src/com/cloud/utils/net/NetUtils.java | 12 ++++++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51a4d267/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index e77e1d1..4df12e2 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)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51a4d267/utils/pom.xml
----------------------------------------------------------------------
diff --git a/utils/pom.xml b/utils/pom.xml
old mode 100644
new mode 100755
index efe931f..ab3419a
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -163,6 +163,11 @@
<artifactId>esapi</artifactId>
<version>2.0.1</version>
</dependency>
+ <dependency>
+ <groupId>commons-net</groupId>
+ <artifactId>commons-net</artifactId>
+ <version>3.3</version>
+ </dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51a4d267/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 ba24c95..14a6c70 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);
+ }
}
[2/2] git commit: updated refs/heads/4.2 to 51a4d26
Posted by ja...@apache.org.
Corrected indentation replaced tab with spaces
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ddb21492
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ddb21492
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ddb21492
Branch: refs/heads/4.2
Commit: ddb2149266494d68c9e62cc1b473faa9cf88ee31
Parents: c1294fd
Author: Jayapal <ja...@apache.org>
Authored: Fri Oct 18 15:16:16 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Fri Oct 18 15:51:13 2013 +0530
----------------------------------------------------------------------
utils/src/com/cloud/utils/net/NetUtils.java | 412 +++++++++++------------
1 file changed, 206 insertions(+), 206 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ddb21492/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 05b485b..ba24c95 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -170,8 +170,8 @@ public class NetUtils {
}
line = output.readLine();
}
- } catch( Exception e ) {
- }
+ } catch( Exception e ) {
+ }
return null;
} else {
NetworkInterface nic = null;
@@ -659,7 +659,7 @@ public class NetUtils {
/**
* Given a cidr, this method returns an ip address within the range but
* is not in the avoid list.
- *
+ *
* @param startIp ip that the cidr starts with
* @param size size of the cidr
* @param avoid set of ips to avoid
@@ -674,7 +674,7 @@ public class NetUtils {
* Given a cidr, this method returns an ip address within the range but
* is not in the avoid list.
* Note: the gateway address has to be specified in the avoid list
- *
+ *
* @param cidr ip that the cidr starts with
* @param size size of the cidr
* @param avoid set of ips to avoid
@@ -825,7 +825,7 @@ public class NetUtils {
return supersetOrSubset.isSuperset;
}
else if (cidrALong[1] == cidrBLong[1]) {
- //this implies both the cidrs are equal
+ //this implies both the cidrs are equal
return supersetOrSubset.sameSubnet;
}
// implies cidrA is subset of cidrB
@@ -1070,7 +1070,7 @@ public class NetUtils {
s_logger.info("Invalid value of cidr " + cidrA);
return false;
}
- if (!NetUtils.isValidCIDR(cidrB)) {
+ if (!NetUtils.isValidCIDR(cidrB)) {
s_logger.info("Invalid value of cidr " + cidrB);
return false;
}
@@ -1120,7 +1120,7 @@ public class NetUtils {
if (instanceName.contains("-") || instanceName.contains(" ") || instanceName.contains("+")) {
s_logger.warn("Instance name can not contain hyphen, spaces and \"+\" char");
return false;
- }
+ }
return true;
}
@@ -1199,172 +1199,172 @@ public class NetUtils {
return true;
}
- public static boolean isValidIpv6(String ip) {
- try {
- IPv6Address address = IPv6Address.fromString(ip);
- } catch (IllegalArgumentException ex) {
- return false;
- }
- return true;
- }
-
- public static boolean isValidIp6Cidr(String ip6Cidr) {
- try {
- IPv6Network network = IPv6Network.fromString(ip6Cidr);
- } catch (IllegalArgumentException ex) {
- return false;
- }
- return true;
- }
-
- public static int getIp6CidrSize(String ip6Cidr) {
- IPv6Network network = null;
- try {
- network = IPv6Network.fromString(ip6Cidr);
- } catch (IllegalArgumentException ex) {
- return 0;
- }
- return network.getNetmask().asPrefixLength();
- }
-
- // Can cover 127 bits
- public static String getIp6FromRange(String ip6Range) {
- String[] ips = ip6Range.split("-");
- String startIp = ips[0];
- IPv6Address start = IPv6Address.fromString(startIp);
- BigInteger gap = countIp6InRange(ip6Range);
- BigInteger next = new BigInteger(gap.bitLength(), _rand);
- while (next.compareTo(gap) >= 0) {
- next = new BigInteger(gap.bitLength(), _rand);
- }
- BigInteger startInt = convertIPv6AddressToBigInteger(start);
- BigInteger resultInt = startInt.add(next);
- InetAddress resultAddr;
- try {
- resultAddr = InetAddress.getByAddress(resultInt.toByteArray());
- } catch (UnknownHostException e) {
- return null;
- }
- IPv6Address ip = IPv6Address.fromInetAddress(resultAddr);
- return ip.toString();
- }
-
- //RFC3315, section 9.4
- public static String getDuidLL(String macAddress) {
- String duid = "00:03:00:01:" + macAddress;
- return duid;
- }
-
- private static BigInteger convertIPv6AddressToBigInteger(IPv6Address addr) {
- InetAddress inetAddr;
- try {
- inetAddr = addr.toInetAddress();
- } catch (UnknownHostException e) {
- return null;
- }
- return new BigInteger(inetAddr.getAddress());
- }
-
- // Can cover 127 bits
- public static BigInteger countIp6InRange(String ip6Range) {
- if (ip6Range == null) {
- return null;
- }
- String[] ips = ip6Range.split("-");
- String startIp = ips[0];
- String endIp = ips[0];
- if (ips.length > 1) {
- endIp = ips[1];
- }
- IPv6Address start, end;
- try {
- start = IPv6Address.fromString(startIp);
- end = IPv6Address.fromString(endIp);
- } catch (IllegalArgumentException ex) {
- return null;
- }
- BigInteger startInt = convertIPv6AddressToBigInteger(start);
- BigInteger endInt = convertIPv6AddressToBigInteger(end);
- if (startInt.compareTo(endInt) > 0) {
- return null;
- }
- return endInt.subtract(startInt).add(BigInteger.ONE);
- }
-
- public static boolean isIp6InRange(String ip6, String ip6Range) {
- if (ip6Range == null) {
- return false;
- }
- String[] ips = ip6Range.split("-");
- String startIp = ips[0];
- String endIp = null;
- if (ips.length > 1) {
- endIp = ips[1];
- }
- IPv6Address start = IPv6Address.fromString(startIp);
- IPv6Address end = IPv6Address.fromString(endIp);
- IPv6Address ip = IPv6Address.fromString(ip6);
- if (start.compareTo(ip) <= 0 && end.compareTo(ip) >= 0) {
- return true;
- }
- return false;
- }
-
- public static boolean isIp6InNetwork(String ip6, String ip6Cidr) {
- IPv6Network network = null;
- try {
- network = IPv6Network.fromString(ip6Cidr);
- } catch (IllegalArgumentException ex) {
- return false;
- }
- IPv6Address ip = IPv6Address.fromString(ip6);
- return network.contains(ip);
- }
-
- public static boolean isIp6RangeOverlap(String ipRange1, String ipRange2) {
- String[] ips = ipRange1.split("-");
- String startIp1 = ips[0];
- String endIp1 = null;
- if (ips.length > 1) {
- endIp1 = ips[1];
- }
- IPv6Address start1 = IPv6Address.fromString(startIp1);
- IPv6Address end1 = IPv6Address.fromString(endIp1);
- IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(start1, end1);
- ips = ipRange2.split("-");
- String startIp2 = ips[0];
- String endIp2 = null;
- if (ips.length > 1) {
- endIp2 = ips[1];
- }
- IPv6Address start2 = IPv6Address.fromString(startIp2);
- IPv6Address end2 = IPv6Address.fromString(endIp2);
- IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(start2, end2);
- return range1.overlaps(range2);
- }
-
- public static String getNextIp6InRange(String currentIp, String ipRange) {
- String[] ips = ipRange.split("-");
- String startIp = ips[0];
- String endIp = null;
- if (ips.length > 1) {
- endIp = ips[1];
- }
- IPv6Address start = IPv6Address.fromString(startIp);
- IPv6Address end = IPv6Address.fromString(endIp);
- IPv6Address current = IPv6Address.fromString(currentIp);
- IPv6Address result = null;
- if (current.equals(end)) {
- result = start;
- } else{
- result = current.add(1);
- }
- String resultIp = null;
- if (result != null) {
- resultIp = result.toString();
- }
- return resultIp;
- }
+ public static boolean isValidIpv6(String ip) {
+ try {
+ IPv6Address address = IPv6Address.fromString(ip);
+ } catch (IllegalArgumentException ex) {
+ return false;
+ }
+ return true;
+ }
+
+ public static boolean isValidIp6Cidr(String ip6Cidr) {
+ try {
+ IPv6Network network = IPv6Network.fromString(ip6Cidr);
+ } catch (IllegalArgumentException ex) {
+ return false;
+ }
+ return true;
+ }
+
+ public static int getIp6CidrSize(String ip6Cidr) {
+ IPv6Network network = null;
+ try {
+ network = IPv6Network.fromString(ip6Cidr);
+ } catch (IllegalArgumentException ex) {
+ return 0;
+ }
+ return network.getNetmask().asPrefixLength();
+ }
+
+ // Can cover 127 bits
+ public static String getIp6FromRange(String ip6Range) {
+ String[] ips = ip6Range.split("-");
+ String startIp = ips[0];
+ IPv6Address start = IPv6Address.fromString(startIp);
+ BigInteger gap = countIp6InRange(ip6Range);
+ BigInteger next = new BigInteger(gap.bitLength(), _rand);
+ while (next.compareTo(gap) >= 0) {
+ next = new BigInteger(gap.bitLength(), _rand);
+ }
+ BigInteger startInt = convertIPv6AddressToBigInteger(start);
+ BigInteger resultInt = startInt.add(next);
+ InetAddress resultAddr;
+ try {
+ resultAddr = InetAddress.getByAddress(resultInt.toByteArray());
+ } catch (UnknownHostException e) {
+ return null;
+ }
+ IPv6Address ip = IPv6Address.fromInetAddress(resultAddr);
+ return ip.toString();
+ }
+
+ //RFC3315, section 9.4
+ public static String getDuidLL(String macAddress) {
+ String duid = "00:03:00:01:" + macAddress;
+ return duid;
+ }
+
+ private static BigInteger convertIPv6AddressToBigInteger(IPv6Address addr) {
+ InetAddress inetAddr;
+ try {
+ inetAddr = addr.toInetAddress();
+ } catch (UnknownHostException e) {
+ return null;
+ }
+ return new BigInteger(inetAddr.getAddress());
+ }
+
+ // Can cover 127 bits
+ public static BigInteger countIp6InRange(String ip6Range) {
+ if (ip6Range == null) {
+ return null;
+ }
+ String[] ips = ip6Range.split("-");
+ String startIp = ips[0];
+ String endIp = ips[0];
+ if (ips.length > 1) {
+ endIp = ips[1];
+ }
+ IPv6Address start, end;
+ try {
+ start = IPv6Address.fromString(startIp);
+ end = IPv6Address.fromString(endIp);
+ } catch (IllegalArgumentException ex) {
+ return null;
+ }
+ BigInteger startInt = convertIPv6AddressToBigInteger(start);
+ BigInteger endInt = convertIPv6AddressToBigInteger(end);
+ if (startInt.compareTo(endInt) > 0) {
+ return null;
+ }
+ return endInt.subtract(startInt).add(BigInteger.ONE);
+ }
+
+ public static boolean isIp6InRange(String ip6, String ip6Range) {
+ if (ip6Range == null) {
+ return false;
+ }
+ String[] ips = ip6Range.split("-");
+ String startIp = ips[0];
+ String endIp = null;
+ if (ips.length > 1) {
+ endIp = ips[1];
+ }
+ IPv6Address start = IPv6Address.fromString(startIp);
+ IPv6Address end = IPv6Address.fromString(endIp);
+ IPv6Address ip = IPv6Address.fromString(ip6);
+ if (start.compareTo(ip) <= 0 && end.compareTo(ip) >= 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isIp6InNetwork(String ip6, String ip6Cidr) {
+ IPv6Network network = null;
+ try {
+ network = IPv6Network.fromString(ip6Cidr);
+ } catch (IllegalArgumentException ex) {
+ return false;
+ }
+ IPv6Address ip = IPv6Address.fromString(ip6);
+ return network.contains(ip);
+ }
+
+ public static boolean isIp6RangeOverlap(String ipRange1, String ipRange2) {
+ String[] ips = ipRange1.split("-");
+ String startIp1 = ips[0];
+ String endIp1 = null;
+ if (ips.length > 1) {
+ endIp1 = ips[1];
+ }
+ IPv6Address start1 = IPv6Address.fromString(startIp1);
+ IPv6Address end1 = IPv6Address.fromString(endIp1);
+ IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(start1, end1);
+ ips = ipRange2.split("-");
+ String startIp2 = ips[0];
+ String endIp2 = null;
+ if (ips.length > 1) {
+ endIp2 = ips[1];
+ }
+ IPv6Address start2 = IPv6Address.fromString(startIp2);
+ IPv6Address end2 = IPv6Address.fromString(endIp2);
+ IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(start2, end2);
+ return range1.overlaps(range2);
+ }
+
+ public static String getNextIp6InRange(String currentIp, String ipRange) {
+ String[] ips = ipRange.split("-");
+ String startIp = ips[0];
+ String endIp = null;
+ if (ips.length > 1) {
+ endIp = ips[1];
+ }
+ IPv6Address start = IPv6Address.fromString(startIp);
+ IPv6Address end = IPv6Address.fromString(endIp);
+ IPv6Address current = IPv6Address.fromString(currentIp);
+ IPv6Address result = null;
+ if (current.equals(end)) {
+ result = start;
+ } else{
+ result = current.add(1);
+ }
+ String resultIp = null;
+ if (result != null) {
+ resultIp = result.toString();
+ }
+ return resultIp;
+ }
public static boolean isValidVlan(String vlan) {
try {
@@ -1378,38 +1378,38 @@ public class NetUtils {
}
}
- public static URI generateUriForPvlan(String primaryVlan, String isolatedPvlan) {
+ public static URI generateUriForPvlan(String primaryVlan, String isolatedPvlan) {
return URI.create("pvlan://" + primaryVlan + "-i" + isolatedPvlan);
- }
-
- public static String getPrimaryPvlanFromUri(URI uri) {
- String[] vlans = uri.getHost().split("-");
- if (vlans.length < 1) {
- return null;
- }
- return vlans[0];
- }
-
- public static String getIsolatedPvlanFromUri(URI uri) {
- String[] vlans = uri.getHost().split("-");
- if (vlans.length < 2) {
- return null;
- }
- for (String vlan : vlans) {
- if (vlan.startsWith("i")) {
- return vlan.replace("i", " ").trim();
- }
- }
- return null;
- }
-
- public static String generateMacOnIncrease(String baseMac, long l) {
- long mac = mac2Long(baseMac);
- if (l > 0xFFFFl) {
- return null;
- }
- mac = mac + (l << 24);
- mac = mac & 0x06FFFFFFFFFFl;
- return long2Mac(mac);
- }
+ }
+
+ public static String getPrimaryPvlanFromUri(URI uri) {
+ String[] vlans = uri.getHost().split("-");
+ if (vlans.length < 1) {
+ return null;
+ }
+ return vlans[0];
+ }
+
+ public static String getIsolatedPvlanFromUri(URI uri) {
+ String[] vlans = uri.getHost().split("-");
+ if (vlans.length < 2) {
+ return null;
+ }
+ for (String vlan : vlans) {
+ if (vlan.startsWith("i")) {
+ return vlan.replace("i", " ").trim();
+ }
+ }
+ return null;
+ }
+
+ public static String generateMacOnIncrease(String baseMac, long l) {
+ long mac = mac2Long(baseMac);
+ if (l > 0xFFFFl) {
+ return null;
+ }
+ mac = mac + (l << 24);
+ mac = mac & 0x06FFFFFFFFFFl;
+ return long2Mac(mac);
+ }
}