CLOUDSTACK-1218: Use the first IP in the first vlan range for VR in shared network
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/143b7bc0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/143b7bc0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/143b7bc0 Branch: refs/heads/network-refactor Commit: 143b7bc0d807eaecd2e709cbafca2bc7a1c8ed17 Parents: 3b9901d Author: Sheng Yang <[email protected]> Authored: Thu Mar 14 15:34:45 2013 -0700 Committer: Sheng Yang <[email protected]> Committed: Thu Mar 14 15:34:45 2013 -0700 ---------------------------------------------------------------------- api/src/com/cloud/network/NetworkModel.java | 4 +- server/src/com/cloud/network/NetworkModelImpl.java | 18 +++++++- .../router/VirtualNetworkApplianceManagerImpl.java | 35 ++++++++++---- .../com/cloud/network/MockNetworkModelImpl.java | 6 +++ 4 files changed, 51 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/143b7bc0/api/src/com/cloud/network/NetworkModel.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index efc22b4..28d71b1 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -255,4 +255,6 @@ public interface NetworkModel { void checkIp6Parameters(String startIPv6, String endIPv6, String ip6Gateway, String ip6Cidr) throws InvalidParameterValueException; void checkRequestedIpAddresses(long networkId, String ip4, String ip6) throws InvalidParameterValueException; -} \ No newline at end of file + + String getStartIpv6Address(long id); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/143b7bc0/server/src/com/cloud/network/NetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index f34f906..403b316 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -1940,4 +1940,20 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } } -} \ No newline at end of file + @Override + public String getStartIpv6Address(long networkId) { + List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans == null) { + return null; + } + String startIpv6 = null; + // Get the start ip of first create vlan(not the lowest, because if you add a lower vlan, lowest vlan would change) + for (Vlan vlan : vlans) { + if (vlan.getIp6Range() != null) { + startIpv6 = vlan.getIp6Range().split("-")[0]; + break; + } + } + return startIpv6; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/143b7bc0/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index fb2e2bc..c9ffc35 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -155,6 +155,7 @@ import com.cloud.network.dao.RemoteAccessVpnDao; import com.cloud.network.dao.Site2SiteCustomerGatewayDao; import com.cloud.network.dao.Site2SiteVpnConnectionDao; import com.cloud.network.dao.Site2SiteVpnGatewayDao; +import com.cloud.network.dao.UserIpv6AddressDao; import com.cloud.network.dao.VirtualRouterProviderDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.lb.LoadBalancingRule; @@ -329,6 +330,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian Site2SiteVpnConnectionDao _s2sVpnConnectionDao; @Inject Site2SiteVpnManager _s2sVpnMgr; + @Inject + UserIpv6AddressDao _ipv6Dao; int _routerRamSize; int _routerCpuMHz; @@ -1596,18 +1599,30 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian boolean hasGuestNetwork = false; if (guestNetwork != null) { s_logger.debug("Adding nic for Virtual Router in Guest network " + guestNetwork); - String defaultNetworkStartIp = null; - if (guestNetwork.getCidr() != null && !setupPublicNetwork) { - String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); - if (startIp != null && _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"); - } + String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null; + if (!setupPublicNetwork) { + if (guestNetwork.getCidr() != null) { + String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); + if (startIp != null && _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"); + } + } + + if (guestNetwork.getIp6Cidr() != null) { + String startIpv6 = _networkModel.getStartIpv6Address(guestNetwork.getId()); + if (startIpv6 != null && _ipv6Dao.findByNetworkIdAndIp(guestNetwork.getId(), startIpv6) == null) { + defaultNetworkStartIpv6 = startIpv6; + } else if (s_logger.isDebugEnabled()){ + s_logger.debug("First ipv6 " + startIpv6 + " in network id=" + guestNetwork.getId() + + " is already allocated, can't use it for domain router; will get random ipv6 address from the range"); + } + } } - NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, null); + NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, defaultNetworkStartIpv6); if (setupPublicNetwork) { if (isRedundant) { gatewayNic.setIp4Address(_networkMgr.acquireGuestIpAddress(guestNetwork, null)); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/143b7bc0/server/test/com/cloud/network/MockNetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index cc83b65..05929e3 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -823,4 +823,10 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { throws InvalidParameterValueException { // TODO Auto-generated method stub } + + @Override + public String getStartIpv6Address(long id) { + // TODO Auto-generated method stub + return null; + } }
