Skip to content

Commit 7aed9ea

Browse files
author
Sheng Yang
committed
Add checking for specified cidr when create network and update network
1 parent e3aa4fb commit 7aed9ea

9 files changed

Lines changed: 64 additions & 2 deletions

File tree

api/src/com/cloud/network/Network.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,4 +286,6 @@ private State(String description) {
286286
void setPhysicalNetworkId(Long physicalNetworkId);
287287

288288
ACLType getAclType();
289+
290+
boolean isSpecifiedCidr();
289291
}

api/src/com/cloud/network/NetworkProfile.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public class NetworkProfile implements Network {
4848
private Network.GuestType guestType;
4949
private Long physicalNetworkId;
5050
private ACLType aclType;
51+
private boolean specifiedCidr;
5152

5253
public NetworkProfile(Network network) {
5354
this.id = network.getId();
@@ -70,6 +71,7 @@ public NetworkProfile(Network network) {
7071
this.guestType = network.getGuestType();
7172
this.physicalNetworkId = network.getPhysicalNetworkId();
7273
this.aclType = network.getAclType();
74+
this.specifiedCidr = network.isSpecifiedCidr();
7375
}
7476

7577
public String getDns1() {
@@ -196,4 +198,14 @@ public void setPhysicalNetworkId(Long physicalNetworkId) {
196198
public ACLType getAclType() {
197199
return aclType;
198200
}
201+
202+
@Override
203+
public boolean isSpecifiedCidr() {
204+
return specifiedCidr;
205+
}
206+
207+
public void setSpecifiedCidr(boolean specifiedCidr) {
208+
this.specifiedCidr = specifiedCidr;
209+
}
210+
199211
}

server/src/com/cloud/network/NetworkManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ boolean reallocate(VirtualMachineProfile<? extends VMInstanceVO> vm,
248248
boolean getAllowSubdomainAccessGlobal();
249249

250250
boolean isProviderForNetwork(Provider provider, long networkId);
251+
252+
boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId);
251253

252254
void canProviderSupportServices(Map<Provider, Set<Service>> providersMap);
253255

server/src/com/cloud/network/NetworkManagerImpl.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1871,6 +1871,10 @@ public Network createNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityEx
18711871
throw new InvalidParameterValueException("Cidr size can't be less than " + _cidrLimit);
18721872
}
18731873
}
1874+
1875+
if (cidr != null && networkOfferingIsConfiguredForExternalNetworking(networkOfferingId)) {
1876+
throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external firewall!");
1877+
}
18741878

18751879
Transaction txn = Transaction.currentTxn();
18761880
txn.start();
@@ -3112,6 +3116,18 @@ public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networ
31123116
}
31133117
}
31143118

3119+
public boolean networkOfferingIsConfiguredForExternalNetworking(long networkOfferingId) {
3120+
boolean netscalerInNetworkOffering = isProviderForNetworkOffering(Network.Provider.Netscaler, networkOfferingId);
3121+
boolean juniperInNetworkOffering = isProviderForNetworkOffering(Network.Provider.JuniperSRX, networkOfferingId);
3122+
boolean f5InNetworkOffering = isProviderForNetworkOffering(Network.Provider.F5BigIp, networkOfferingId);
3123+
3124+
if (netscalerInNetworkOffering || juniperInNetworkOffering || f5InNetworkOffering) {
3125+
return true;
3126+
} else {
3127+
return false;
3128+
}
3129+
}
3130+
31153131
@Override
31163132
public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) {
31173133
return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services));
@@ -3342,6 +3358,9 @@ public Network updateGuestNetwork(long networkId, String name, String displayTex
33423358
}
33433359

33443360
if (networkOfferingId != oldNetworkOfferingId) {
3361+
if (network.isSpecifiedCidr() && networkOfferingIsConfiguredForExternalNetworking(networkOfferingId)) {
3362+
throw new InvalidParameterValueException("Network offering " + networkOffering + " contained external network elements, can't be upgraded from a CIDR specify network!");
3363+
}
33453364
//check if the network is upgradable
33463365
if (!canUpgrade(oldNetworkOfferingId, networkOfferingId)) {
33473366
throw new InvalidParameterValueException("Can't upgrade from network offering " + oldNetworkOfferingId + " to " + networkOfferingId + "; check logs for more information");
@@ -5094,6 +5113,15 @@ public boolean isProviderForNetwork(Provider provider, long networkId) {
50945113
}
50955114
}
50965115

5116+
@Override
5117+
public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) {
5118+
if (_ntwkOfferingSrvcDao.isProviderForNetworkOffering(networkOfferingId, provider)) {
5119+
return true;
5120+
} else {
5121+
return false;
5122+
}
5123+
}
5124+
50975125
@Override
50985126
public void canProviderSupportServices(Map<Provider, Set<Service>> providersMap) {
50995127
for (Provider provider : providersMap.keySet()) {

server/src/com/cloud/network/NetworkVO.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public NetworkVO(long id, Network that, long offeringId, String guruName, long d
188188
state = State.Allocated;
189189
}
190190
this.uuid = UUID.randomUUID().toString();
191+
this.specifiedCidr = that.isSpecifiedCidr();
191192
}
192193

193194
/**
@@ -464,6 +465,7 @@ public ControlledEntity.ACLType getAclType() {
464465
return aclType;
465466
}
466467

468+
@Override
467469
public boolean isSpecifiedCidr() {
468470
return specifiedCidr;
469471
}

server/src/com/cloud/network/guru/DirectNetworkGuru.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
108108
if (userSpecified.getCidr() != null) {
109109
config.setCidr(userSpecified.getCidr());
110110
config.setGateway(userSpecified.getGateway());
111+
config.setSpecifiedCidr(true);
111112
}
112113

113114
if (userSpecified.getBroadcastUri() != null) {
@@ -118,7 +119,6 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
118119
if (userSpecified.getBroadcastDomainType() != null) {
119120
config.setBroadcastDomainType(userSpecified.getBroadcastDomainType());
120121
}
121-
122122
}
123123

124124
boolean isSecurityGroupEnabled = _networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup);

server/src/com/cloud/network/guru/GuestNetworkGuru.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
111111
if (userSpecified.getCidr() != null) {
112112
network.setCidr(userSpecified.getCidr());
113113
network.setGateway(userSpecified.getGateway());
114+
network.setSpecifiedCidr(true);
114115
} else {
115116
String guestNetworkCidr = dc.getGuestNetworkCidr();
116117
// guest network cidr can be null for Basic zone
@@ -125,7 +126,6 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
125126
network.setBroadcastUri(userSpecified.getBroadcastUri());
126127
network.setState(State.Setup);
127128
}
128-
network.setSpecifiedCidr(true);
129129
} else {
130130
String guestNetworkCidr = dc.getGuestNetworkCidr();
131131
String[] cidrTuple = guestNetworkCidr.split("\\/");

server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.List;
2121

22+
import com.cloud.network.Network.Provider;
2223
import com.cloud.network.Network.Service;
2324
import com.cloud.offerings.NetworkOfferingServiceMapVO;
2425
import com.cloud.utils.db.GenericDao;
@@ -33,6 +34,7 @@ public interface NetworkOfferingServiceMapDao extends GenericDao<NetworkOffering
3334
List<NetworkOfferingServiceMapVO> listByNetworkOfferingId(long networkOfferingId);
3435
void deleteByOfferingId(long networkOfferingId);
3536
List<String> listProvidersForServiceForNetworkOffering(long networkOfferingId, Service service);
37+
boolean isProviderForNetworkOffering(long networkOfferingId, Provider provider);
3638
}
3739

3840

server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.cloud.exception.UnsupportedServiceException;
2626
import com.cloud.network.NetworkServiceMapVO;
2727
import com.cloud.network.Network.Service;
28+
import com.cloud.network.Network.Provider;
2829
import com.cloud.offerings.NetworkOfferingServiceMapVO;
2930
import com.cloud.utils.db.DB;
3031
import com.cloud.utils.db.GenericDaoBase;
@@ -113,4 +114,17 @@ public List<String> listProvidersForServiceForNetworkOffering(long networkOfferi
113114

114115
return customSearch(sc, null);
115116
}
117+
118+
@Override
119+
public boolean isProviderForNetworkOffering(long networkOfferingId, Provider provider) {
120+
SearchCriteria<NetworkOfferingServiceMapVO> sc = AllFieldsSearch.create();;
121+
122+
sc.setParameters("networkOfferingId", networkOfferingId);
123+
sc.setParameters("provider", provider.getName());
124+
125+
if (findOneBy(sc) != null) {
126+
return true;
127+
}
128+
return false;
129+
}
116130
}

0 commit comments

Comments
 (0)