Updated Branches: refs/heads/network-refactor 2ca8af319 -> bec030fda
IPv6: Fix generate random ip in range. Ported from ipv6 branch. Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/bec030fd Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/bec030fd Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/bec030fd Branch: refs/heads/network-refactor Commit: bec030fda858ad853fe4094b0d1f6f7e83ae7b9d Parents: 2ca8af3 Author: Sheng Yang <[email protected]> Authored: Thu Jan 31 17:16:53 2013 -0800 Committer: Sheng Yang <[email protected]> Committed: Thu Jan 31 17:16:53 2013 -0800 ---------------------------------------------------------------------- .../src/com/cloud/network/NetworkManagerImpl.java | 19 +++++++++++---- 1 files changed, 14 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bec030fd/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index dd61715..1239110 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -302,11 +302,20 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { s_logger.debug("Cannot find related vlan or too many vlan attached to network " + networkId); return null; } - String ip = NetUtils.getIp6FromRange(vlan.getIp6Range()); - //Check for duplicate IP - if (_ipv6Dao.findByDcIdAndIp(dcId, ip) != null) { - //TODO regenerate ip - throw new CloudRuntimeException("Fail to get unique ipv6 address"); + String ip = null; + int count = 0; + while (ip == null || count >= 10) { + ip = NetUtils.getIp6FromRange(vlan.getIp6Range()); + //Check for duplicate IP + if (_ipv6Dao.findByDcIdAndIp(dcId, ip) == null) { + break; + } else { + ip = null; + } + count ++; + } + if (ip == null) { + throw new CloudRuntimeException("Fail to get unique ipv6 address after 10 times trying!"); } DataCenterVO dc = _dcDao.findById(dcId); Long mac = dc.getMacAddress();
