From f049f5409e0385fdfffec534728db863fb6f5c53 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 7 Sep 2023 12:16:45 +0530 Subject: [PATCH] server: fix dualstack ipv6 networks for vxlan (#7933) Fixes #7926 Signed-off-by: Abhishek Kumar --- .../network/guru/VxlanGuestNetworkGuru.java | 5 +---- .../network/guru/ExternalGuestNetworkGuru.java | 18 +----------------- .../cloud/network/guru/GuestNetworkGuru.java | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 21 deletions(-) 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 2f30e17e323..ce6baaa15e9 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 @@ public class VxlanGuestNetworkGuru extends GuestNetworkGuru { @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 a6b033b6ea2..471f4d11b25 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.EventTypes; 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 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { /* 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 ff9303db34b..137d1e7268b 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 abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur 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; + } }