From 4a7149e6b5772489f400a27b05bc9a3c36e15ec9 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Fri, 13 Jul 2012 17:05:33 -0700 Subject: [PATCH] VPC: CS-15580 - don't allow gateway for VPC guest network to be equal to the cidr subnet Conflicts: server/src/com/cloud/network/NetworkManagerImpl.java server/src/com/cloud/network/vpc/VpcManagerImpl.java --- server/src/com/cloud/network/NetworkManager.java | 2 -- .../src/com/cloud/network/NetworkManagerImpl.java | 5 ++--- server/src/com/cloud/network/vpc/VpcManager.java | 3 ++- .../src/com/cloud/network/vpc/VpcManagerImpl.java | 14 ++++++++++---- utils/src/com/cloud/utils/net/NetUtils.java | 1 - 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 2b78238b979..c95b6091c52 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Set; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.agent.api.to.NicTO; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; @@ -55,7 +54,6 @@ import com.cloud.user.Account; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; -import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 94d394e5774..81d90418a01 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2852,8 +2852,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag networkDomain = vpc.getNetworkDomain(); } //1) Validate if network can be created for VPC - _vpcMgr.validateGuestNtkwForVpc(_configMgr.getNetworkOffering(ntwkOffId), cidr, networkDomain, owner, vpc, null); - + _vpcMgr.validateGuestNtkwForVpc(_configMgr.getNetworkOffering(ntwkOffId), cidr, networkDomain, owner, vpc, null, gateway); //2) Create network Network guestNetwork = createGuestNetwork(ntwkOffId, name, displayText, gateway, cidr, vlanId, networkDomain, owner, domainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); @@ -4677,7 +4676,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag //perform below validation if the network is vpc network if (network.getVpcId() != null) { Vpc vpc = _vpcMgr.getVpc(network.getVpcId()); - _vpcMgr.validateGuestNtkwForVpc(networkOffering, null, null, null,vpc, networkId); + _vpcMgr.validateGuestNtkwForVpc(networkOffering, null, null, null,vpc, networkId, null); } if (networkOfferingId != oldNetworkOfferingId) { diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java index cc6d5e365ba..c567e8bae2d 100644 --- a/server/src/com/cloud/network/vpc/VpcManager.java +++ b/server/src/com/cloud/network/vpc/VpcManager.java @@ -68,10 +68,11 @@ public interface VpcManager extends VpcService{ * @param networkOwner * @param vpc TODO * @param networkId TODO + * @param gateway TODO * @return */ void validateGuestNtkwForVpc(NetworkOffering guestNtwkOff, String cidr, String networkDomain, Account networkOwner, - Vpc vpc, Long networkId); + Vpc vpc, Long networkId, String gateway); /** * @return diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index b83a1696d1d..e29c0215967 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -858,11 +858,11 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Override @DB public void validateGuestNtkwForVpc(NetworkOffering guestNtwkOff, String cidr, String networkDomain, - Account networkOwner, Vpc vpc, Long networkId) { - + Account networkOwner, Vpc vpc, Long networkId, String gateway) { + if (networkId == null) { //1) Validate attributes that has to be passed in when create new guest network - validateNewVpcGuestNetwork(cidr, networkOwner, vpc, networkDomain); + validateNewVpcGuestNetwork(cidr, gateway, networkOwner, vpc, networkDomain); } //2) Only Isolated networks with Source nat service enabled can be added to vpc @@ -914,7 +914,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } - protected void validateNewVpcGuestNetwork(String cidr, Account networkOwner, Vpc vpc, String networkDomain) { + protected void validateNewVpcGuestNetwork(String cidr, String gateway, Account networkOwner, Vpc vpc, String networkDomain) { Vpc locked = _vpcDao.acquireInLockTable(vpc.getId()); if (locked == null) { throw new CloudRuntimeException("Unable to acquire lock on " + vpc); @@ -954,6 +954,12 @@ public class VpcManagerImpl implements VpcManager, Manager{ throw new InvalidParameterValueException("Network domain of the new network should match network" + " domain of vpc " + vpc); } + + //6) gateway should never be equal to the cidr subnet + if (NetUtils.getCidrSubNet(cidr).equalsIgnoreCase(gateway)) { + throw new InvalidParameterValueException("Invalid gateway specified. It should never be equal to the cidr subnet value"); + } + } finally { s_logger.debug("Releasing lock for " + locked); _vpcDao.releaseFromLockTable(locked.getId()); diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java index 6d17ffb3112..167e3fd6705 100755 --- a/utils/src/com/cloud/utils/net/NetUtils.java +++ b/utils/src/com/cloud/utils/net/NetUtils.java @@ -516,7 +516,6 @@ public class NetUtils { if (octetString.length() < 1 || octetString.length() > 3) { return false; } - } // IP is good, return true