mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Let network guru decide if ipv6 cidr size can't be equal to 64 (#9289)
This commit is contained in:
parent
2bf36ef935
commit
dc74d5ba88
@ -317,6 +317,8 @@ public interface NetworkModel {
|
||||
|
||||
void checkIp6Parameters(String startIPv6, String endIPv6, String ip6Gateway, String ip6Cidr) throws InvalidParameterValueException;
|
||||
|
||||
void checkIp6CidrSizeEqualTo64(String ip6Cidr) throws InvalidParameterValueException;
|
||||
|
||||
void checkRequestedIpAddresses(long networkId, IpAddresses ips) throws InvalidParameterValueException;
|
||||
|
||||
String getStartIpv6Address(long id);
|
||||
|
||||
@ -208,4 +208,7 @@ public interface NetworkGuru extends Adapter {
|
||||
|
||||
boolean isMyTrafficType(TrafficType type);
|
||||
|
||||
default boolean isSlaacV6Only() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -769,6 +769,14 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ensure cidr size is equal to 64 for
|
||||
// - networks other than shared networks
|
||||
// - shared networks with SLAAC V6 only
|
||||
if (predefined != null && StringUtils.isNotBlank(predefined.getIp6Cidr()) &&
|
||||
(!GuestType.Shared.equals(offering.getGuestType()) || guru.isSlaacV6Only())) {
|
||||
_networkModel.checkIp6CidrSizeEqualTo64(predefined.getIp6Cidr());
|
||||
}
|
||||
|
||||
if (network.getId() != -1) {
|
||||
if (network instanceof NetworkVO) {
|
||||
networks.add((NetworkVO) network);
|
||||
@ -2684,8 +2692,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
}
|
||||
}
|
||||
|
||||
if (ipv6 && NetUtils.getIp6CidrSize(ip6Cidr) != 64) {
|
||||
throw new InvalidParameterValueException("IPv6 subnet should be exactly 64-bits in size");
|
||||
if (ipv6 && !GuestType.Shared.equals(ntwkOff.getGuestType())) {
|
||||
_networkModel.checkIp6CidrSizeEqualTo64(ip6Cidr);
|
||||
}
|
||||
|
||||
//TODO(VXLAN): Support VNI specified
|
||||
|
||||
@ -4767,6 +4767,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
||||
newIp6Gateway = MoreObjects.firstNonNull(newIp6Gateway, network.getIp6Gateway());
|
||||
newIp6Cidr = MoreObjects.firstNonNull(newIp6Cidr, network.getIp6Cidr());
|
||||
_networkModel.checkIp6Parameters(newIp6StartIp, newIp6EndIp, newIp6Gateway, newIp6Cidr);
|
||||
if (!GuestType.Shared.equals(network.getGuestType())) {
|
||||
_networkModel.checkIp6CidrSizeEqualTo64(newIp6Cidr);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -5242,6 +5245,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
||||
endIpv6 = ObjectUtils.allNull(endIpv6, currentEndIPv6) ? null : MoreObjects.firstNonNull(endIpv6, currentEndIPv6);
|
||||
|
||||
_networkModel.checkIp6Parameters(startIpv6, endIpv6, ip6Gateway, ip6Cidr);
|
||||
final Network network = _networkModel.getNetwork(vlanRange.getNetworkId());
|
||||
if (!GuestType.Shared.equals(network.getGuestType())) {
|
||||
_networkModel.checkIp6CidrSizeEqualTo64(ip6Cidr);
|
||||
}
|
||||
|
||||
if (!ObjectUtils.allNull(startIpv6, endIpv6) && ObjectUtils.anyNull(startIpv6, endIpv6)) {
|
||||
throw new InvalidParameterValueException(String.format("Invalid IPv6 range %s-%s", startIpv6, endIpv6));
|
||||
|
||||
@ -2413,7 +2413,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi
|
||||
throw new InvalidParameterValueException("endIPv6 is not in ip6cidr indicated network!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void checkIp6CidrSizeEqualTo64(String ip6Cidr) {
|
||||
int cidrSize = NetUtils.getIp6CidrSize(ip6Cidr);
|
||||
// we only support cidr == 64
|
||||
if (cidrSize != 64) {
|
||||
|
||||
@ -1516,6 +1516,9 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
endIPv6 = startIPv6;
|
||||
}
|
||||
_networkModel.checkIp6Parameters(startIPv6, endIPv6, ip6Gateway, ip6Cidr);
|
||||
if (!GuestType.Shared.equals(ntwkOff.getGuestType())) {
|
||||
_networkModel.checkIp6CidrSizeEqualTo64(ip6Cidr);
|
||||
}
|
||||
|
||||
if (zone.getNetworkType() != NetworkType.Advanced || ntwkOff.getGuestType() != Network.GuestType.Shared) {
|
||||
throw new InvalidParameterValueException("Can only support create IPv6 network with advance shared network!");
|
||||
|
||||
@ -839,7 +839,11 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
@Override
|
||||
public void checkIp6Parameters(String startIPv6, String endIPv6, String ip6Gateway, String ip6Cidr) throws InvalidParameterValueException {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkIp6CidrSizeEqualTo64(String ip6Cidr) throws InvalidParameterValueException {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -238,29 +238,25 @@ public class NetworkModelTest {
|
||||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void checkIp6ParametersTestCidr32() {
|
||||
String ipv6cidr = "fd59:16ba:559b:243d::/32";
|
||||
String endipv6 = "fd59:16ba:ffff:ffff:ffff:ffff:ffff:ffff";
|
||||
networkModel.checkIp6Parameters(START_IPV6, endipv6, IPV6_GATEWAY,ipv6cidr);
|
||||
networkModel.checkIp6CidrSizeEqualTo64(ipv6cidr);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void checkIp6ParametersTestCidr63() {
|
||||
String ipv6cidr = "fd59:16ba:559b:243d::/63";
|
||||
String endipv6 = "fd59:16ba:559b:243d:ffff:ffff:ffff:ffff";
|
||||
networkModel.checkIp6Parameters(START_IPV6, endipv6, IPV6_GATEWAY,ipv6cidr);
|
||||
networkModel.checkIp6CidrSizeEqualTo64(ipv6cidr);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void checkIp6ParametersTestCidr65() {
|
||||
String ipv6cidr = "fd59:16ba:559b:243d::/65";
|
||||
String endipv6 = "fd59:16ba:559b:243d:7fff:ffff:ffff:ffff";
|
||||
networkModel.checkIp6Parameters(START_IPV6, endipv6, IPV6_GATEWAY,ipv6cidr);
|
||||
networkModel.checkIp6CidrSizeEqualTo64(ipv6cidr);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void checkIp6ParametersTestCidr120() {
|
||||
String ipv6cidr = "fd59:16ba:559b:243d::/120";
|
||||
String endipv6 = "fd59:16ba:559b:243d:0:0:0:ff";
|
||||
networkModel.checkIp6Parameters(START_IPV6, endipv6, IPV6_GATEWAY,ipv6cidr);
|
||||
networkModel.checkIp6CidrSizeEqualTo64(ipv6cidr);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidParameterValueException.class)
|
||||
|
||||
@ -857,6 +857,11 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkIp6CidrSizeEqualTo64(String ip6Cidr) throws InvalidParameterValueException {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkRequestedIpAddresses(long networkId, IpAddresses ips) throws InvalidParameterValueException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user