mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
bug 10869: always allocate first ip address from the range for the dhcp server.
status 10869: resolved fixed Here is the flow (design is approved by Will Chan): 1) If user specifies custom ip address, and this ip is not the first ip in the range, the dhcp server gets the ip. 2) If user specifies custom ip address, and this ip is the first ip in the range, the dhcp server will get the random ip address from the range. 2) If user doesn't specify custom ip address, we always try to allocate first ip address from the range for the dhcp server; if this ip is already allocated, the dhcp server will get the random ip from the range. This will work for: * domR's Guest network * dhcp's Direct network
This commit is contained in:
parent
9df76d883d
commit
64eeb8d79b
@ -208,4 +208,6 @@ public interface NetworkManager extends NetworkService {
|
||||
public String acquireGuestIpAddress(Network network, String requestedIp);
|
||||
|
||||
String getGlobalGuestDomainSuffix();
|
||||
|
||||
String getStartIpAddress(long networkId);
|
||||
}
|
||||
|
||||
@ -3131,4 +3131,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
||||
public String getGlobalGuestDomainSuffix() {
|
||||
return _networkDomain;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStartIpAddress(long networkId) {
|
||||
List<VlanVO> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,7 +75,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;
|
||||
@ -143,8 +142,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;
|
||||
@ -1058,7 +1057,18 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
||||
NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false, false).get(0);
|
||||
|
||||
List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO, NicProfile>>(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, NicProfile>((NetworkVO) guestNetwork, gatewayNic));
|
||||
networks.add(new Pair<NetworkVO, NicProfile>(controlConfig, null));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user