From 87fc02e34d0cdcecd05f05bc675c11c8a7a9af26 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 24 Dec 2021 11:34:10 +0100 Subject: [PATCH 1/5] ipv6: disable IPv6-only shared network with VR --- .../engine/orchestration/NetworkOrchestrator.java | 2 +- .../java/com/cloud/network/NetworkServiceImpl.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 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 7e206fffeefe..111a9bec141a 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 @@ -2642,7 +2642,7 @@ private Network createGuestNetwork(final long networkOfferingId, final String na && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); if (cidr == null && ip6Cidr == null && cidrRequired) { if (ntwkOff.getGuestType() == GuestType.Shared) { - throw new InvalidParameterValueException("StartIp/endIp/gateway/netmask are required when create network of" + " type " + Network.GuestType.Shared); + throw new InvalidParameterValueException("gateway/netmask are required when create network of" + " type " + Network.GuestType.Shared); } else { throw new InvalidParameterValueException("gateway/netmask are required when create network of" + " type " + GuestType.Isolated + " with service " + Service.SourceNat.getName() + " disabled"); } diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 2084cd4a0032..510d9ac8481d 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -1252,8 +1252,8 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac } } - boolean ipv4 = true, ipv6 = false; - if (startIP != null) { + boolean ipv4 = false, ipv6 = false; + if (StringUtils.isNoneBlank(gateway, netmask)) { ipv4 = true; } if (isNotBlank(ip6Cidr) && isNotBlank(ip6Gateway)) { @@ -1297,14 +1297,10 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac } else if (!NetUtils.isValidIp4(endIP)) { throw new InvalidParameterValueException("Invalid format for the endIp parameter"); } - } - - if (startIP != null && endIP != null) { if (!(gateway != null && netmask != null)) { throw new InvalidParameterValueException("gateway and netmask should be defined when startIP/endIP are passed in"); } } - if (gateway != null && netmask != null) { if (NetUtils.isNetworkorBroadcastIP(gateway, netmask)) { if (s_logger.isDebugEnabled()) { @@ -1338,6 +1334,10 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac if(isBlank(zone.getIp6Dns1()) && isBlank(zone.getIp6Dns2())) { throw new InvalidParameterValueException("Can only create IPv6 network if the zone has IPv6 DNS! Please configure the zone IPv6 DNS1 and/or IPv6 DNS2."); } + + if (!ipv4 && ntwkOff.getGuestType() == GuestType.Shared && _networkModel.isProviderForNetworkOffering(Provider.VirtualRouter, networkOfferingId)) { + throw new InvalidParameterValueException("Currently IPv6-only Shared network with Virtual Router provider is not supported"); + } } validateRouterIps(routerIp, routerIpv6, startIP, endIP, gateway, netmask, startIPv6, endIPv6, ip6Cidr); From 91e296e1169bf81bd99ba233b654a906525c7a0d Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 24 Dec 2021 13:30:20 +0100 Subject: [PATCH 2/5] Update #5810: import org.apache.commons.lang3.StringUtils --- server/src/main/java/com/cloud/network/NetworkServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 510d9ac8481d..3c98f4b247ec 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -64,6 +64,7 @@ import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.PublishScope; import org.apache.cloudstack.network.element.InternalLoadBalancerElementService; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; From 2a01339c7de2830b0bc023ddcda895b7b46b41d5 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 6 Jan 2022 14:00:14 +0100 Subject: [PATCH 3/5] Update #5810: do not import org.apache.commons.lang3.StringUtils --- server/src/main/java/com/cloud/network/NetworkServiceImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 3c98f4b247ec..07b6b9b10836 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -64,7 +64,6 @@ import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.PublishScope; import org.apache.cloudstack.network.element.InternalLoadBalancerElementService; -import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; @@ -1254,7 +1253,7 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac } boolean ipv4 = false, ipv6 = false; - if (StringUtils.isNoneBlank(gateway, netmask)) { + if (org.apache.commons.lang3.StringUtils.isNoneBlank(gateway, netmask)) { ipv4 = true; } if (isNotBlank(ip6Cidr) && isNotBlank(ip6Gateway)) { From 4c31448a6b4e89f4c616b975fd25580e2ece458b Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 6 Jan 2022 19:26:19 +0100 Subject: [PATCH 4/5] Update server/src/main/java/com/cloud/network/NetworkServiceImpl.java Co-authored-by: Daniel Augusto Veronezi Salvador <38945620+GutoVeronezi@users.noreply.github.com> --- server/src/main/java/com/cloud/network/NetworkServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 07b6b9b10836..178a4c896ef3 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -1336,7 +1336,7 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac } if (!ipv4 && ntwkOff.getGuestType() == GuestType.Shared && _networkModel.isProviderForNetworkOffering(Provider.VirtualRouter, networkOfferingId)) { - throw new InvalidParameterValueException("Currently IPv6-only Shared network with Virtual Router provider is not supported"); + throw new InvalidParameterValueException("Currently IPv6-only Shared network with Virtual Router provider is not supported."); } } From 65784450f86e701591669b4ee36a411c24938778 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 6 Jan 2022 19:26:32 +0100 Subject: [PATCH 5/5] Update engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java Co-authored-by: Daniel Augusto Veronezi Salvador <38945620+GutoVeronezi@users.noreply.github.com> --- .../cloudstack/engine/orchestration/NetworkOrchestrator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 111a9bec141a..6909c5baae21 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 @@ -2642,7 +2642,7 @@ private Network createGuestNetwork(final long networkOfferingId, final String na && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); if (cidr == null && ip6Cidr == null && cidrRequired) { if (ntwkOff.getGuestType() == GuestType.Shared) { - throw new InvalidParameterValueException("gateway/netmask are required when create network of" + " type " + Network.GuestType.Shared); + throw new InvalidParameterValueException(String.format("Gateway/netmask are required when creating %s networks.", Network.GuestType.Shared)); } else { throw new InvalidParameterValueException("gateway/netmask are required when create network of" + " type " + GuestType.Isolated + " with service " + Service.SourceNat.getName() + " disabled"); }