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.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(vxlan));
|
||||||
}
|
}
|
||||||
network.setBroadcastDomainType(BroadcastDomainType.Vxlan);
|
network.setBroadcastDomainType(BroadcastDomainType.Vxlan);
|
||||||
|
|
||||||
|
getOrCreateIpv4SubnetForGuestNetwork(offering, network, userSpecified, owner);
|
||||||
|
|
||||||
return updateNetworkDesignForIPv6IfNeeded(network, userSpecified);
|
return updateNetworkDesignForIPv6IfNeeded(network, userSpecified);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,6 @@ import javax.inject.Inject;
|
|||||||
import org.apache.cloudstack.api.ApiCommandResourceType;
|
import org.apache.cloudstack.api.ApiCommandResourceType;
|
||||||
import org.apache.cloudstack.context.CallContext;
|
import org.apache.cloudstack.context.CallContext;
|
||||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
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;
|
||||||
import com.cloud.dc.DataCenter.NetworkType;
|
import com.cloud.dc.DataCenter.NetworkType;
|
||||||
@ -37,7 +35,6 @@ import com.cloud.event.EventTypes;
|
|||||||
import com.cloud.event.EventVO;
|
import com.cloud.event.EventVO;
|
||||||
import com.cloud.exception.InsufficientAddressCapacityException;
|
import com.cloud.exception.InsufficientAddressCapacityException;
|
||||||
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
|
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
|
||||||
import com.cloud.exception.InvalidParameterValueException;
|
|
||||||
import com.cloud.network.IpAddressManager;
|
import com.cloud.network.IpAddressManager;
|
||||||
import com.cloud.network.Network;
|
import com.cloud.network.Network;
|
||||||
import com.cloud.network.Network.GuestType;
|
import com.cloud.network.Network.GuestType;
|
||||||
@ -90,8 +87,6 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||||||
FirewallRulesDao _fwRulesDao;
|
FirewallRulesDao _fwRulesDao;
|
||||||
@Inject
|
@Inject
|
||||||
FirewallRulesCidrsDao _fwRulesCidrDao;
|
FirewallRulesCidrsDao _fwRulesCidrDao;
|
||||||
@Inject
|
|
||||||
RoutedIpv4Manager routedIpv4Manager;
|
|
||||||
|
|
||||||
public ExternalGuestNetworkGuru() {
|
public ExternalGuestNetworkGuru() {
|
||||||
super();
|
super();
|
||||||
@ -126,23 +121,9 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||||||
/* In order to revert userSpecified network setup */
|
/* In order to revert userSpecified network setup */
|
||||||
config.setState(State.Allocated);
|
config.setState(State.Allocated);
|
||||||
}
|
}
|
||||||
if (NetworkOffering.NetworkMode.ROUTED.equals(offering.getNetworkMode()) && !offering.isForVpc()) {
|
|
||||||
if (userSpecified.getCidr() != null) {
|
getOrCreateIpv4SubnetForGuestNetwork(offering, config, userSpecified, owner);
|
||||||
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.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return updateNetworkDesignForIPv6IfNeeded(config, userSpecified);
|
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.ConfigKey;
|
||||||
import org.apache.cloudstack.framework.config.Configurable;
|
import org.apache.cloudstack.framework.config.Configurable;
|
||||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
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 org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.cloud.configuration.Config;
|
import com.cloud.configuration.Config;
|
||||||
@ -121,6 +123,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
|
|||||||
Ipv6AddressManager ipv6AddressManager;
|
Ipv6AddressManager ipv6AddressManager;
|
||||||
@Inject
|
@Inject
|
||||||
DomainRouterDao domainRouterDao;
|
DomainRouterDao domainRouterDao;
|
||||||
|
@Inject
|
||||||
|
RoutedIpv4Manager routedIpv4Manager;
|
||||||
|
|
||||||
Random _rand = new Random(System.currentTimeMillis());
|
Random _rand = new Random(System.currentTimeMillis());
|
||||||
|
|
||||||
@ -571,4 +575,24 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
|
|||||||
}
|
}
|
||||||
return network;
|
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