From 3e0b8c6e4f051618e1a0bceb6ef8bb1069fafb7e Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 9 Jan 2018 15:38:38 +0100 Subject: [PATCH] CLOUDSTACK-10221: Allow IPv6 when creating a Basic Network Since CloudStack 4.10 Basic Networking supports IPv6 and thus should be allowed to be specified when creating a network. Signed-off-by: Wido den Hollander --- .../engine/orchestration/NetworkOrchestrator.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index cec2e5926c17..1b707c3979d4 100644 --- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -38,6 +38,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.utils.StringUtils; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.ControlledEntity.ACLType; @@ -2116,16 +2117,12 @@ public Network createGuestNetwork(final long networkOfferingId, final String nam boolean ipv6 = false; - if (ip6Gateway != null && ip6Cidr != null) { + if (StringUtils.isNotBlank(ip6Gateway) && StringUtils.isNotBlank(ip6Cidr)) { ipv6 = true; } // Validate zone final DataCenterVO zone = _dcDao.findById(zoneId); if (zone.getNetworkType() == NetworkType.Basic) { - if (ipv6) { - throw new InvalidParameterValueException("IPv6 is not supported in Basic zone"); - } - // In Basic zone the network should have aclType=Domain, domainId=1, subdomainAccess=true if (aclType == null || aclType != ACLType.Domain) { throw new InvalidParameterValueException("Only AclType=Domain can be specified for network creation in Basic zone"); @@ -2188,6 +2185,10 @@ public Network createGuestNetwork(final long networkOfferingId, final String nam } } + if (ipv6 && !NetUtils.isValidIp6Cidr(ip6Cidr)) { + throw new InvalidParameterValueException("Invalid IPv6 cidr specified"); + } + //TODO(VXLAN): Support VNI specified // VlanId can be specified only when network offering supports it final boolean vlanSpecified = vlanId != null; @@ -2328,7 +2329,7 @@ public Network doInTransaction(final TransactionStatus status) { userNetwork.setGateway(gateway); } - if (ip6Cidr != null && ip6Gateway != null) { + if (StringUtils.isNotBlank(ip6Gateway) && StringUtils.isNotBlank(ip6Cidr)) { userNetwork.setIp6Cidr(ip6Cidr); userNetwork.setIp6Gateway(ip6Gateway); }