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
+       }
 }

Reply via email to