Updated Branches: refs/heads/network-refactor 08814903f -> 7945d306b
CLOUDSTACK-1219, CLOUDSTACK-1220: Fix IPv6 error messages Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/7945d306 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/7945d306 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/7945d306 Branch: refs/heads/network-refactor Commit: 7945d306bec967a777a5ffef68d60c48223eb5a1 Parents: 0881490 Author: Sheng Yang <[email protected]> Authored: Thu Feb 14 16:19:17 2013 -0800 Committer: Sheng Yang <[email protected]> Committed: Thu Feb 14 16:19:17 2013 -0800 ---------------------------------------------------------------------- api/src/com/cloud/network/NetworkModel.java | 2 + .../com/cloud/network/Ipv6AddressManagerImpl.java | 4 +- server/src/com/cloud/network/NetworkModelImpl.java | 33 +++++++++++++++ server/src/com/cloud/vm/UserVmManagerImpl.java | 17 +------- .../com/cloud/network/MockNetworkModelImpl.java | 6 +++ 5 files changed, 45 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7945d306/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 d965a31..efc22b4 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -253,4 +253,6 @@ public interface NetworkModel { boolean isIP6AddressAvailableInVlan(long vlanId); 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 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7945d306/server/src/com/cloud/network/Ipv6AddressManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/com/cloud/network/Ipv6AddressManagerImpl.java index d6f6258..41bf23a 100644 --- a/server/src/com/cloud/network/Ipv6AddressManagerImpl.java +++ b/server/src/com/cloud/network/Ipv6AddressManagerImpl.java @@ -97,7 +97,7 @@ public class Ipv6AddressManagerImpl implements Ipv6AddressManager { } List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(networkId); if (vlans == null) { - s_logger.debug("Cannot find related vlan or too many vlan attached to network " + networkId); + s_logger.debug("Cannot find related vlan attached to network " + networkId); return null; } String ip = null; @@ -126,7 +126,7 @@ public class Ipv6AddressManagerImpl implements Ipv6AddressManager { } } if (ip == null) { - throw new InsufficientAddressCapacityException("Cannot find a usable IP in the network " + network.getName() + " after network.ipv6.search.retry.max = " + _ipv6RetryMax + " times retry!", + throw new InsufficientAddressCapacityException("Cannot find a usable IP in the network " + network.getName() + " after " + _ipv6RetryMax + "(network.ipv6.search.retry.max) times retry!", DataCenter.class, network.getDataCenterId()); } } else { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7945d306/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 510b4cf..12b7209 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -1904,4 +1904,37 @@ public class NetworkModelImpl implements NetworkModel, Manager{ throw new InvalidParameterValueException("The cidr size of IPv6 network must be no less than 64 bits!"); } } + + @Override + public void checkRequestedIpAddresses(long networkId, String ip4, String ip6) throws InvalidParameterValueException { + if (ip4 != null) { + if (!NetUtils.isValidIp(ip4)) { + throw new InvalidParameterValueException("Invalid specified IPv4 address " + ip4); + } + //Other checks for ipv4 are done in assignPublicIpAddress() + } + if (ip6 != null) { + if (!NetUtils.isValidIpv6(ip6)) { + throw new InvalidParameterValueException("Invalid specified IPv6 address " + ip6); + } + if (_ipv6Dao.findByNetworkIdAndIp(networkId, ip6) != null) { + throw new InvalidParameterValueException("The requested IP is already taken!"); + } + List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans == null) { + throw new CloudRuntimeException("Cannot find related vlan attached to network " + networkId); + } + Vlan ipVlan = null; + for (Vlan vlan : vlans) { + if (NetUtils.isIp6InRange(ip6, vlan.getIp6Range())) { + ipVlan = vlan; + break; + } + } + if (ipVlan == null) { + throw new InvalidParameterValueException("Requested IPv6 is not in the predefined range!"); + } + } + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7945d306/server/src/com/cloud/vm/UserVmManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index e8f4dfa..ca31892 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2369,7 +2369,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (requestedIpPair == null) { requestedIpPair = new IpAddresses(null, null); } else { - checkRequestedIpAddresses(requestedIpPair.getIp4Address(), requestedIpPair.getIp6Address()); + _networkModel.checkRequestedIpAddresses(network.getId(), requestedIpPair.getIp4Address(), requestedIpPair.getIp6Address()); } NicProfile profile = new NicProfile(requestedIpPair.getIp4Address(), requestedIpPair.getIp6Address()); @@ -2378,7 +2378,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager defaultNetworkNumber++; // if user requested specific ip for default network, add it if (defaultIps.getIp4Address() != null || defaultIps.getIp6Address() != null) { - checkRequestedIpAddresses(defaultIps.getIp4Address(), defaultIps.getIp6Address()); + _networkModel.checkRequestedIpAddresses(network.getId(), defaultIps.getIp4Address(), defaultIps.getIp6Address()); profile = new NicProfile(defaultIps.getIp4Address(), defaultIps.getIp6Address()); } @@ -2516,19 +2516,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return vm; } - private void checkRequestedIpAddresses(String ip4, String ip6) throws InvalidParameterValueException { - if (ip4 != null) { - if (!NetUtils.isValidIp(ip4)) { - throw new InvalidParameterValueException("Invalid specified IPv4 address " + ip4); - } - } - if (ip6 != null) { - if (!NetUtils.isValidIpv6(ip6)) { - throw new InvalidParameterValueException("Invalid specified IPv6 address " + ip6); - } - } - } - private void validateUserData(String userData) { byte[] decodedUserData = null; if (userData != null) { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7945d306/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 3566ab9..cc83b65 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -817,4 +817,10 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { // TODO Auto-generated method stub } + + @Override + public void checkRequestedIpAddresses(long networkId, String ip4, String ip6) + throws InvalidParameterValueException { + // TODO Auto-generated method stub + } }
