diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 40efb393370..4edf669b3db 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -205,4 +205,6 @@ public interface NetworkManager extends NetworkService { public String acquireGuestIpAddress(Network network, String requestedIp); String getGlobalGuestDomainSuffix(); + + String getStartIpAddress(long networkId); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index dd043da33ea..ab9d4de9ba0 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -3065,4 +3065,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public String getGlobalGuestDomainSuffix() { return _networkDomain; } + + @Override + public String getStartIpAddress(long networkId) { + List vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans.isEmpty()) { + return null; + } + + String startIP = vlans.get(0).getIpRange().split("-")[0]; + + for (VlanVO vlan : vlans) { + String startIP1 = vlan.getIpRange().split("-")[0]; + long startIPLong = NetUtils.ip2Long(startIP); + long startIPLong1 = NetUtils.ip2Long(startIP1); + + if (startIPLong1 < startIPLong) { + startIP = startIP1; + } + } + + return startIP; + } } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index f0c73bb14c6..c984937ba73 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -73,7 +73,6 @@ import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.DcDetailsDaoImpl; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; @@ -136,8 +135,8 @@ import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.StorageManager; import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.VolumeVO; import com.cloud.storage.Volume.Type; +import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; @@ -1039,7 +1038,18 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false, false).get(0); List> networks = new ArrayList>(3); - NicProfile gatewayNic = new NicProfile(); + + String defaultNetworkStartIp = null; + if (guestNetwork.getCidr() != null) { + String startIp = _networkMgr.getStartIpAddress(guestNetwork.getId()); + if (_ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) { + defaultNetworkStartIp = startIp; + } else if (s_logger.isDebugEnabled()){ + s_logger.debug("First ip " + startIp + " in network id=" + guestNetwork.getId() + " is already allocated, can't use it for domain router; will get random ip address from the range"); + } + } + + NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp); gatewayNic.setDefaultNic(true); networks.add(new Pair((NetworkVO) guestNetwork, gatewayNic)); networks.add(new Pair(controlConfig, null));