This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push:
new 7e565d2524f Routed: support vxlan networks (#10861)
7e565d2524f is described below
commit 7e565d2524f355e06fe3ec218d57e55b03c337d2
Author: Wei Zhou <[email protected]>
AuthorDate: Tue May 27 10:43:37 2025 +0200
Routed: support vxlan networks (#10861)
---
.../cloud/network/guru/VxlanGuestNetworkGuru.java | 3 +++
.../network/guru/ExternalGuestNetworkGuru.java | 25 +++-------------------
.../com/cloud/network/guru/GuestNetworkGuru.java | 24 +++++++++++++++++++++
3 files changed, 30 insertions(+), 22 deletions(-)
diff --git
a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
index ec654af2b32..e2c313d0821 100644
---
a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
+++
b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
@@ -76,6 +76,9 @@ public class VxlanGuestNetworkGuru extends GuestNetworkGuru {
network.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(vxlan));
}
network.setBroadcastDomainType(BroadcastDomainType.Vxlan);
+
+ getOrCreateIpv4SubnetForGuestNetwork(offering, network, userSpecified,
owner);
+
return updateNetworkDesignForIPv6IfNeeded(network, userSpecified);
}
diff --git
a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
index 4f76488337d..954c70f610e 100644
--- a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
+++ b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
@@ -24,8 +24,6 @@ import javax.inject.Inject;
import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.context.CallContext;
import
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
-import org.apache.cloudstack.network.RoutedIpv4Manager;
import com.cloud.dc.DataCenter;
import com.cloud.dc.DataCenter.NetworkType;
@@ -37,7 +35,6 @@ import com.cloud.event.EventTypes;
import com.cloud.event.EventVO;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.IpAddressManager;
import com.cloud.network.Network;
import com.cloud.network.Network.GuestType;
@@ -90,8 +87,6 @@ public class ExternalGuestNetworkGuru extends
GuestNetworkGuru {
FirewallRulesDao _fwRulesDao;
@Inject
FirewallRulesCidrsDao _fwRulesCidrDao;
- @Inject
- RoutedIpv4Manager routedIpv4Manager;
public ExternalGuestNetworkGuru() {
super();
@@ -126,23 +121,9 @@ public class ExternalGuestNetworkGuru extends
GuestNetworkGuru {
/* In order to revert userSpecified network setup */
config.setState(State.Allocated);
}
- if
(NetworkOffering.NetworkMode.ROUTED.equals(offering.getNetworkMode()) &&
!offering.isForVpc()) {
- if (userSpecified.getCidr() != null) {
- routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(config,
userSpecified.getCidr());
- } else {
- if (userSpecified.getNetworkCidrSize() == null) {
- throw new InvalidParameterValueException("The network CIDR
or CIDR size must be specified.");
- }
- Ipv4GuestSubnetNetworkMap subnet =
routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(owner.getDomainId(),
owner.getAccountId(), config.getDataCenterId(),
userSpecified.getNetworkCidrSize());
- if (subnet != null) {
- final String[] cidrTuple = subnet.getSubnet().split("\\/");
-
config.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0],
Long.parseLong(cidrTuple[1])));
- config.setCidr(subnet.getSubnet());
- } else {
- throw new InvalidParameterValueException("Failed to
allocate a CIDR with requested size.");
- }
- }
- }
+
+ getOrCreateIpv4SubnetForGuestNetwork(offering, config, userSpecified,
owner);
+
return updateNetworkDesignForIPv6IfNeeded(config, userSpecified);
}
diff --git a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
index 96c3da66c09..2f668b59d62 100644
--- a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
+++ b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
@@ -28,6 +28,8 @@ import
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationSe
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
+import org.apache.cloudstack.network.RoutedIpv4Manager;
import org.apache.commons.lang3.StringUtils;
import com.cloud.configuration.Config;
@@ -121,6 +123,8 @@ public abstract class GuestNetworkGuru extends AdapterBase
implements NetworkGur
Ipv6AddressManager ipv6AddressManager;
@Inject
DomainRouterDao domainRouterDao;
+ @Inject
+ RoutedIpv4Manager routedIpv4Manager;
Random _rand = new Random(System.currentTimeMillis());
@@ -571,4 +575,24 @@ public abstract class GuestNetworkGuru extends AdapterBase
implements NetworkGur
}
return network;
}
+
+ public void getOrCreateIpv4SubnetForGuestNetwork(NetworkOffering offering,
NetworkVO config, Network userSpecified, Account owner) {
+ if
(NetworkOffering.NetworkMode.ROUTED.equals(offering.getNetworkMode()) &&
!offering.isForVpc()) {
+ if (userSpecified.getCidr() != null) {
+ routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(config,
userSpecified.getCidr());
+ } else {
+ if (userSpecified.getNetworkCidrSize() == null) {
+ throw new InvalidParameterValueException("The network CIDR
or CIDR size must be specified.");
+ }
+ Ipv4GuestSubnetNetworkMap subnet =
routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(owner.getDomainId(),
owner.getAccountId(), config.getDataCenterId(),
userSpecified.getNetworkCidrSize());
+ if (subnet != null) {
+ final String[] cidrTuple = subnet.getSubnet().split("\\/");
+
config.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0],
Long.parseLong(cidrTuple[1])));
+ config.setCidr(subnet.getSubnet());
+ } else {
+ throw new InvalidParameterValueException("Failed to
allocate a CIDR with requested size.");
+ }
+ }
+ }
+ }
}