From ec9a984cd0add75db0ec3ba81a0f897d3265a297 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 1 Nov 2021 15:54:04 +0100 Subject: [PATCH 1/2] IPv6: fix deploy vm issue in ipv6-only networks --- .../java/com/cloud/network/Ipv6AddressManager.java | 2 +- .../com/cloud/network/Ipv6AddressManagerImpl.java | 12 +++++++++++- .../com/cloud/network/Ipv6AddressManagerTest.java | 2 +- 3 files changed, 13 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 7dcba11a00aa..60770415c66d 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 adfc3d29dce4..e319889faf5e 100644 --- a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java @@ -195,13 +195,23 @@ protected boolean isIp6Taken(Network network, String requestedIpv6) { * 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()); + 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())); + } + 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()); diff --git a/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java b/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java index 3f082d535161..bd1484d588a3 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 @@ private void setAcquireGuestIpv6AddressTest(boolean isIPAvailable, State state) } @Test - public void setNICIPv6AddressTest() { + public void setNICIPv6AddressTest() throws InsufficientAddressCapacityException { NicProfile nic = new NicProfile(); Network network = mock(Network.class); DataCenter dc = mock(DataCenter.class); From 85ce2de3da05ce8efd8afeedbcaafbeb80303129 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Tue, 2 Nov 2021 15:22:13 +0100 Subject: [PATCH 2/2] Update #5648: add method setNicPropertiesFromNetwork --- .../cloud/network/Ipv6AddressManagerImpl.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java index e319889faf5e..c1f3f39dced3 100644 --- a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java @@ -202,15 +202,7 @@ public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Ne nic.setIPv6Cidr(network.getIp6Cidr()); nic.setIPv6Gateway(network.getIp6Gateway()); - 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())); - } + 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()); @@ -227,4 +219,15 @@ public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Ne } } + 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())); + } + } }