From dd458feeb891a18aa9fc8509743f7ad09dbf0e58 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 18 Nov 2021 09:23:55 +0100 Subject: [PATCH] IPv6: fix deploy vm issue in ipv6-only networks without VR (#5648) * IPv6: fix deploy vm issue in ipv6-only networks * Update #5648: add method setNicPropertiesFromNetwork --- .../com/cloud/network/Ipv6AddressManager.java | 2 +- .../com/cloud/network/Ipv6AddressManagerImpl.java | 15 ++++++++++++++- .../com/cloud/network/Ipv6AddressManagerTest.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/network/Ipv6AddressManager.java b/server/src/main/java/com/cloud/network/Ipv6AddressManager.java index 7dcba11a00a..60770415c66 100644 --- a/server/src/main/java/com/cloud/network/Ipv6AddressManager.java +++ b/server/src/main/java/com/cloud/network/Ipv6AddressManager.java @@ -31,6 +31,6 @@ public interface Ipv6AddressManager extends Manager { public String acquireGuestIpv6Address(Network network, String requestedIpv6) throws InsufficientAddressCapacityException; - public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network); + public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) throws InsufficientAddressCapacityException; } diff --git a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java index adfc3d29dce..c1f3f39dced 100644 --- a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java @@ -195,13 +195,15 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa * address information. */ @Override - public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) { + public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) throws InsufficientAddressCapacityException { if (network.getIp6Gateway() != null) { if (nic.getIPv6Address() == null) { s_logger.debug("Found IPv6 CIDR " + network.getIp6Cidr() + " for Network " + network); nic.setIPv6Cidr(network.getIp6Cidr()); nic.setIPv6Gateway(network.getIp6Gateway()); + setNicPropertiesFromNetwork(nic, network); + IPv6Address ipv6addr = NetUtils.EUI64Address(network.getIp6Cidr(), nic.getMacAddress()); s_logger.info("Calculated IPv6 address " + ipv6addr + " using EUI-64 for NIC " + nic.getUuid()); nic.setIPv6Address(ipv6addr.toString()); @@ -217,4 +219,15 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa } } + private void setNicPropertiesFromNetwork(NicProfile nic, Network network) throws InsufficientAddressCapacityException { + if (nic.getBroadcastType() == null) { + nic.setBroadcastType(network.getBroadcastDomainType()); + } + if (nic.getBroadCastUri() == null) { + nic.setBroadcastUri(network.getBroadcastUri()); + } + if (nic.getMacAddress() == null) { + nic.setMacAddress(_networkModel.getNextAvailableMacAddressInNetwork(network.getId())); + } + } } diff --git a/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java b/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java index 3f082d53516..bd1484d588a 100644 --- a/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java +++ b/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java @@ -229,7 +229,7 @@ public class Ipv6AddressManagerTest { } @Test - public void setNICIPv6AddressTest() { + public void setNICIPv6AddressTest() throws InsufficientAddressCapacityException { NicProfile nic = new NicProfile(); Network network = mock(Network.class); DataCenter dc = mock(DataCenter.class);