Skip to content

Commit 7e565d2

Browse files
Routed: support vxlan networks (#10861)
1 parent f2a6a2f commit 7e565d2

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
7676
network.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(vxlan));
7777
}
7878
network.setBroadcastDomainType(BroadcastDomainType.Vxlan);
79+
80+
getOrCreateIpv4SubnetForGuestNetwork(offering, network, userSpecified, owner);
81+
7982
return updateNetworkDesignForIPv6IfNeeded(network, userSpecified);
8083
}
8184

server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import org.apache.cloudstack.api.ApiCommandResourceType;
2525
import org.apache.cloudstack.context.CallContext;
2626
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
27-
import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
28-
import org.apache.cloudstack.network.RoutedIpv4Manager;
2927

3028
import com.cloud.dc.DataCenter;
3129
import com.cloud.dc.DataCenter.NetworkType;
@@ -37,7 +35,6 @@
3735
import com.cloud.event.EventVO;
3836
import com.cloud.exception.InsufficientAddressCapacityException;
3937
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
40-
import com.cloud.exception.InvalidParameterValueException;
4138
import com.cloud.network.IpAddressManager;
4239
import com.cloud.network.Network;
4340
import com.cloud.network.Network.GuestType;
@@ -90,8 +87,6 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
9087
FirewallRulesDao _fwRulesDao;
9188
@Inject
9289
FirewallRulesCidrsDao _fwRulesCidrDao;
93-
@Inject
94-
RoutedIpv4Manager routedIpv4Manager;
9590

9691
public ExternalGuestNetworkGuru() {
9792
super();
@@ -126,23 +121,9 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
126121
/* In order to revert userSpecified network setup */
127122
config.setState(State.Allocated);
128123
}
129-
if (NetworkOffering.NetworkMode.ROUTED.equals(offering.getNetworkMode()) && !offering.isForVpc()) {
130-
if (userSpecified.getCidr() != null) {
131-
routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(config, userSpecified.getCidr());
132-
} else {
133-
if (userSpecified.getNetworkCidrSize() == null) {
134-
throw new InvalidParameterValueException("The network CIDR or CIDR size must be specified.");
135-
}
136-
Ipv4GuestSubnetNetworkMap subnet = routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(owner.getDomainId(), owner.getAccountId(), config.getDataCenterId(), userSpecified.getNetworkCidrSize());
137-
if (subnet != null) {
138-
final String[] cidrTuple = subnet.getSubnet().split("\\/");
139-
config.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0], Long.parseLong(cidrTuple[1])));
140-
config.setCidr(subnet.getSubnet());
141-
} else {
142-
throw new InvalidParameterValueException("Failed to allocate a CIDR with requested size.");
143-
}
144-
}
145-
}
124+
125+
getOrCreateIpv4SubnetForGuestNetwork(offering, config, userSpecified, owner);
126+
146127
return updateNetworkDesignForIPv6IfNeeded(config, userSpecified);
147128
}
148129

server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import org.apache.cloudstack.framework.config.ConfigKey;
2929
import org.apache.cloudstack.framework.config.Configurable;
3030
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
31+
import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
32+
import org.apache.cloudstack.network.RoutedIpv4Manager;
3133
import org.apache.commons.lang3.StringUtils;
3234

3335
import com.cloud.configuration.Config;
@@ -121,6 +123,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
121123
Ipv6AddressManager ipv6AddressManager;
122124
@Inject
123125
DomainRouterDao domainRouterDao;
126+
@Inject
127+
RoutedIpv4Manager routedIpv4Manager;
124128

125129
Random _rand = new Random(System.currentTimeMillis());
126130

@@ -571,4 +575,24 @@ public Network updateNetworkDesignForIPv6IfNeeded(NetworkVO network, Network use
571575
}
572576
return network;
573577
}
578+
579+
public void getOrCreateIpv4SubnetForGuestNetwork(NetworkOffering offering, NetworkVO config, Network userSpecified, Account owner) {
580+
if (NetworkOffering.NetworkMode.ROUTED.equals(offering.getNetworkMode()) && !offering.isForVpc()) {
581+
if (userSpecified.getCidr() != null) {
582+
routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(config, userSpecified.getCidr());
583+
} else {
584+
if (userSpecified.getNetworkCidrSize() == null) {
585+
throw new InvalidParameterValueException("The network CIDR or CIDR size must be specified.");
586+
}
587+
Ipv4GuestSubnetNetworkMap subnet = routedIpv4Manager.getOrCreateIpv4SubnetForGuestNetwork(owner.getDomainId(), owner.getAccountId(), config.getDataCenterId(), userSpecified.getNetworkCidrSize());
588+
if (subnet != null) {
589+
final String[] cidrTuple = subnet.getSubnet().split("\\/");
590+
config.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0], Long.parseLong(cidrTuple[1])));
591+
config.setCidr(subnet.getSubnet());
592+
} else {
593+
throw new InvalidParameterValueException("Failed to allocate a CIDR with requested size.");
594+
}
595+
}
596+
}
597+
}
574598
}

0 commit comments

Comments
 (0)