Let network guru decide if ipv6 cidr size can't be equal to 64 (#9289)

This commit is contained in:
Vishesh 2024-06-26 02:43:26 +05:30 committed by GitHub
parent 2bf36ef935
commit dc74d5ba88
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 40 additions and 10 deletions

View File

@ -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);

View File

@ -208,4 +208,7 @@ public interface NetworkGuru extends Adapter {
boolean isMyTrafficType(TrafficType type);
default boolean isSlaacV6Only() {
return true;
}
}

View File

@ -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

View File

@ -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));

View File

@ -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) {

View File

@ -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!");

View File

@ -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

View File

@ -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)

View File

@ -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