mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Routed: support vxlan networks (#10861)
This commit is contained in:
parent
f2a6a2ff13
commit
7e565d2524
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user