server: fix dualstack ipv6 networks for vxlan (#7933)
Fixes #7926
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
diff --git a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
index 2f30e17..ce6baaa 100644
--- a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
+++ b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
@@ -69,19 +69,16 @@
@Override
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
-
NetworkVO network = (NetworkVO)super.design(offering, plan, userSpecified, owner);
if (network == null) {
return null;
}
-
if (offering.getGuestType() == GuestType.L2 && network.getBroadcastUri() != null) {
String vxlan = BroadcastDomainType.getValue(network.getBroadcastUri());
network.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(vxlan));
}
network.setBroadcastDomainType(BroadcastDomainType.Vxlan);
-
- return network;
+ return updateNetworkDesignForIPv6IfNeeded(network, userSpecified);
}
@Override
diff --git a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
index a6b033b..471f4d1 100644
--- a/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
+++ b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
@@ -36,7 +36,6 @@
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;
@@ -124,22 +123,7 @@
/* In order to revert userSpecified network setup */
config.setState(State.Allocated);
}
- if (userSpecified == null) {
- return config;
- }
- if ((userSpecified.getIp6Cidr() == null && userSpecified.getIp6Gateway() != null) ||
- (userSpecified.getIp6Cidr() != null && userSpecified.getIp6Gateway() == null)) {
- throw new InvalidParameterValueException("ip6gateway and ip6cidr must be specified together.");
- }
- if (userSpecified.getIp6Cidr() != null) {
- config.setIp6Cidr(userSpecified.getIp6Cidr());
- config.setIp6Gateway(userSpecified.getIp6Gateway());
- }
- if (userSpecified.getRouterIpv6() != null) {
- config.setRouterIpv6(userSpecified.getRouterIpv6());
- }
-
- return config;
+ return updateNetworkDesignForIPv6IfNeeded(config, userSpecified);
}
@Override
diff --git a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
index ff9303d..137d1e7 100644
--- a/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
+++ b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
@@ -545,4 +545,22 @@
public ConfigKey<?>[] getConfigKeys() {
return new ConfigKey<?>[]{UseSystemGuestVlans};
}
+
+ public Network updateNetworkDesignForIPv6IfNeeded(NetworkVO network, Network userSpecified) {
+ if (userSpecified == null) {
+ return network;
+ }
+ if ((userSpecified.getIp6Cidr() == null && userSpecified.getIp6Gateway() != null) ||
+ (userSpecified.getIp6Cidr() != null && userSpecified.getIp6Gateway() == null)) {
+ throw new InvalidParameterValueException("ip6gateway and ip6cidr must be specified together.");
+ }
+ if (userSpecified.getIp6Cidr() != null) {
+ network.setIp6Cidr(userSpecified.getIp6Cidr());
+ network.setIp6Gateway(userSpecified.getIp6Gateway());
+ }
+ if (userSpecified.getRouterIpv6() != null) {
+ network.setRouterIpv6(userSpecified.getRouterIpv6());
+ }
+ return network;
+ }
}