From 7f987ace358231307a5ee42066df7b58948763c3 Mon Sep 17 00:00:00 2001 From: SudharmaJain Date: Wed, 23 Aug 2017 00:41:45 +0530 Subject: [PATCH] CLOUDSTACK-9165: unable to use reserved IP range in a network for external VMs (#1246) --- api/src/com/cloud/network/NetworkModel.java | 2 ++ server/src/com/cloud/network/NetworkModelImpl.java | 6 ++++++ server/src/com/cloud/network/guru/GuestNetworkGuru.java | 2 +- server/src/com/cloud/network/router/NetworkHelperImpl.java | 2 +- .../src/com/cloud/network/router/NicProfileHelperImpl.java | 2 +- .../network/router/VirtualNetworkApplianceManagerImpl.java | 2 +- server/test/com/cloud/network/MockNetworkModelImpl.java | 5 +++++ server/test/com/cloud/vpc/MockNetworkModelImpl.java | 5 +++++ 8 files changed, 22 insertions(+), 4 deletions(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index 811c792a0ff..4a09ea7d140 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -287,4 +287,6 @@ public interface NetworkModel { List generateVmData(String userData, String serviceOffering, String zoneName, String vmName, long vmId, String publicKey, String password, Boolean isWindows); + String getValidNetworkCidr(Network guestNetwork); + } diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index fbed85179b3..7caa328d444 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -2377,4 +2377,10 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi public ConfigKey[] getConfigKeys() { return new ConfigKey[] {MACIdentifier}; } + + @Override + public String getValidNetworkCidr(Network guestNetwork) { + String networkCidr = guestNetwork.getNetworkCidr(); + return networkCidr == null ? guestNetwork.getCidr() : networkCidr; + } } diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java index f6aeeab197f..74d774065c1 100644 --- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java @@ -376,7 +376,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur } nic.setIPv4Address(guestIp); - nic.setIPv4Netmask(NetUtils.cidr2Netmask(network.getCidr())); + nic.setIPv4Netmask(NetUtils.cidr2Netmask(_networkModel.getValidNetworkCidr(network))); nic.setIPv4Dns1(dc.getDns1()); nic.setIPv4Dns2(dc.getDns2()); diff --git a/server/src/com/cloud/network/router/NetworkHelperImpl.java b/server/src/com/cloud/network/router/NetworkHelperImpl.java index 12ef0f9995e..9f5929356f4 100644 --- a/server/src/com/cloud/network/router/NetworkHelperImpl.java +++ b/server/src/com/cloud/network/router/NetworkHelperImpl.java @@ -743,7 +743,7 @@ public class NetworkHelperImpl implements NetworkHelper { gatewayNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); gatewayNic.setIsolationUri(guestNetwork.getBroadcastUri()); gatewayNic.setMode(guestNetwork.getMode()); - final String gatewayCidr = guestNetwork.getCidr(); + final String gatewayCidr = _networkModel.getValidNetworkCidr(guestNetwork); gatewayNic.setIPv4Netmask(NetUtils.getCidrNetmask(gatewayCidr)); } else { gatewayNic.setDefaultNic(true); diff --git a/server/src/com/cloud/network/router/NicProfileHelperImpl.java b/server/src/com/cloud/network/router/NicProfileHelperImpl.java index 7575aad1b05..92a5915c4d5 100644 --- a/server/src/com/cloud/network/router/NicProfileHelperImpl.java +++ b/server/src/com/cloud/network/router/NicProfileHelperImpl.java @@ -127,7 +127,7 @@ public class NicProfileHelperImpl implements NicProfileHelper { guestNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); guestNic.setIsolationUri(guestNetwork.getBroadcastUri()); guestNic.setMode(guestNetwork.getMode()); - final String gatewayCidr = guestNetwork.getCidr(); + final String gatewayCidr = _networkModel.getValidNetworkCidr(guestNetwork); guestNic.setIPv4Netmask(NetUtils.getCidrNetmask(gatewayCidr)); return guestNic; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 43669d191eb..e0b08d1a70f 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1535,7 +1535,7 @@ Configurable, StateListener