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.");
+                }
+            }
+        }
+    }
 }

Reply via email to