This is an automated email from the ASF dual-hosted git repository.
sureshanaparti pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new dc74d5ba888 Let network guru decide if ipv6 cidr size can't be equal
to 64 (#9289)
dc74d5ba888 is described below
commit dc74d5ba88829b374f163294d928def9557955fa
Author: Vishesh <[email protected]>
AuthorDate: Wed Jun 26 02:43:26 2024 +0530
Let network guru decide if ipv6 cidr size can't be equal to 64 (#9289)
---
api/src/main/java/com/cloud/network/NetworkModel.java | 2 ++
api/src/main/java/com/cloud/network/guru/NetworkGuru.java | 3 +++
.../cloudstack/engine/orchestration/NetworkOrchestrator.java | 12 ++++++++++--
.../com/cloud/configuration/ConfigurationManagerImpl.java | 7 +++++++
server/src/main/java/com/cloud/network/NetworkModelImpl.java | 2 ++
.../src/main/java/com/cloud/network/NetworkServiceImpl.java | 3 +++
.../test/java/com/cloud/network/MockNetworkModelImpl.java | 4 ++++
server/src/test/java/com/cloud/network/NetworkModelTest.java | 12 ++++--------
server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java | 5 +++++
9 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/api/src/main/java/com/cloud/network/NetworkModel.java
b/api/src/main/java/com/cloud/network/NetworkModel.java
index 53ac735cf05..699dcbf6c50 100644
--- a/api/src/main/java/com/cloud/network/NetworkModel.java
+++ b/api/src/main/java/com/cloud/network/NetworkModel.java
@@ -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);
diff --git a/api/src/main/java/com/cloud/network/guru/NetworkGuru.java
b/api/src/main/java/com/cloud/network/guru/NetworkGuru.java
index 52f654007f2..c4f2beba63e 100644
--- a/api/src/main/java/com/cloud/network/guru/NetworkGuru.java
+++ b/api/src/main/java/com/cloud/network/guru/NetworkGuru.java
@@ -208,4 +208,7 @@ public interface NetworkGuru extends Adapter {
boolean isMyTrafficType(TrafficType type);
+ default boolean isSlaacV6Only() {
+ return true;
+ }
}
diff --git
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 91367186b64..4da4d7031a2 100644
---
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -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
diff --git
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index eb72a626036..114c49aae82 100644
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -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));
diff --git a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
index f6824c9477e..2a604796d6e 100644
--- a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
@@ -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) {
diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index 91e19c00e90..c58463ac708 100644
--- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -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!");
diff --git a/server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
b/server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
index 3df12a4ed84..395be635aea 100644
--- a/server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
+++ b/server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
@@ -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
diff --git a/server/src/test/java/com/cloud/network/NetworkModelTest.java
b/server/src/test/java/com/cloud/network/NetworkModelTest.java
index 13f38dea638..eaa44dd344b 100644
--- a/server/src/test/java/com/cloud/network/NetworkModelTest.java
+++ b/server/src/test/java/com/cloud/network/NetworkModelTest.java
@@ -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)
diff --git a/server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
b/server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
index ebee9fec02d..ad332c00fa4 100644
--- a/server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
+++ b/server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
@@ -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