3333
3434import javax .inject .Inject ;
3535
36- import com .cloud .network .dao .PublicIpQuarantineDao ;
37- import com .cloud .network .vo .PublicIpQuarantineVO ;
38- import com .cloud .resourcelimit .CheckedReservation ;
3936import org .apache .cloudstack .acl .ControlledEntity .ACLType ;
4037import org .apache .cloudstack .acl .SecurityChecker .AccessType ;
4138import org .apache .cloudstack .annotation .AnnotationService ;
5754import org .apache .cloudstack .reservation .dao .ReservationDao ;
5855import org .apache .commons .collections .CollectionUtils ;
5956
60- import com .cloud .agent .AgentManager ;
61- import com .cloud .alert .AlertManager ;
6257import com .cloud .api .ApiDBUtils ;
63- import com .cloud .configuration .ConfigurationManager ;
6458import com .cloud .configuration .Resource .ResourceType ;
6559import com .cloud .dc .AccountVlanMapVO ;
6660import com .cloud .dc .DataCenter ;
7569import com .cloud .dc .dao .AccountVlanMapDao ;
7670import com .cloud .dc .dao .DataCenterDao ;
7771import com .cloud .dc .dao .DataCenterIpAddressDao ;
78- import com .cloud .dc .dao .DataCenterVnetDao ;
7972import com .cloud .dc .dao .DomainVlanMapDao ;
8073import com .cloud .dc .dao .HostPodDao ;
8174import com .cloud .dc .dao .PodVlanMapDao ;
8275import com .cloud .dc .dao .VlanDao ;
8376import com .cloud .deploy .DeployDestination ;
8477import com .cloud .domain .Domain ;
85- import com .cloud .domain .dao .DomainDao ;
8678import com .cloud .event .ActionEventUtils ;
8779import com .cloud .event .EventTypes ;
8880import com .cloud .event .UsageEventUtils ;
89- import com .cloud .event .dao .UsageEventDao ;
9081import com .cloud .exception .AccountLimitException ;
9182import com .cloud .exception .ConcurrentOperationException ;
9283import com .cloud .exception .InsufficientAddressCapacityException ;
9687import com .cloud .exception .PermissionDeniedException ;
9788import com .cloud .exception .ResourceAllocationException ;
9889import com .cloud .exception .ResourceUnavailableException ;
99- import com .cloud .host .dao .HostDao ;
10090import com .cloud .network .IpAddress .State ;
10191import com .cloud .network .Network .Capability ;
10292import com .cloud .network .Network .GuestType ;
10797import com .cloud .network .Networks .IsolationType ;
10898import com .cloud .network .Networks .TrafficType ;
10999import com .cloud .network .addr .PublicIp ;
110- import com .cloud .network .dao .AccountGuestVlanMapDao ;
111100import com .cloud .network .dao .FirewallRulesDao ;
112101import com .cloud .network .dao .IPAddressDao ;
113102import com .cloud .network .dao .IPAddressVO ;
114- import com .cloud .network .dao .LoadBalancerDao ;
115- import com .cloud .network .dao .NetworkAccountDao ;
116103import com .cloud .network .dao .NetworkDao ;
117104import com .cloud .network .dao .NetworkDetailsDao ;
118105import com .cloud .network .dao .NetworkDetailVO ;
119- import com .cloud .network .dao .NetworkDomainDao ;
120- import com .cloud .network .dao .NetworkServiceMapDao ;
121106import com .cloud .network .dao .PhysicalNetworkDao ;
122- import com .cloud .network .dao .PhysicalNetworkServiceProviderDao ;
123- import com .cloud .network .dao .PhysicalNetworkTrafficTypeDao ;
124- import com .cloud .network .dao .UserIpv6AddressDao ;
107+ import com .cloud .network .dao .PublicIpQuarantineDao ;
125108import com .cloud .network .element .IpDeployer ;
126109import com .cloud .network .element .IpDeployingRequester ;
127110import com .cloud .network .element .NetworkElement ;
134117import com .cloud .network .rules .FirewallRuleVO ;
135118import com .cloud .network .rules .RulesManager ;
136119import com .cloud .network .rules .StaticNat ;
137- import com .cloud .network .rules .dao .PortForwardingRulesDao ;
138- import com .cloud .network .vpc .NetworkACLManager ;
120+ import com .cloud .network .vo .PublicIpQuarantineVO ;
139121import com .cloud .network .vpc .VpcManager ;
122+ import com .cloud .network .vpc .VpcOffering ;
140123import com .cloud .network .vpc .VpcVO ;
141- import com .cloud .network .vpc .dao .PrivateIpDao ;
142124import com .cloud .network .vpc .dao .VpcDao ;
143125import com .cloud .network .vpc .dao .VpcOfferingDao ;
144126import com .cloud .network .vpn .RemoteAccessVpnService ;
145127import com .cloud .offering .NetworkOffering ;
146128import com .cloud .offering .NetworkOffering .Availability ;
147129import com .cloud .offerings .NetworkOfferingVO ;
148130import com .cloud .offerings .dao .NetworkOfferingDao ;
149- import com .cloud .offerings .dao .NetworkOfferingDetailsDao ;
150131import com .cloud .offerings .dao .NetworkOfferingServiceMapDao ;
151132import com .cloud .org .Grouping ;
133+ import com .cloud .resourcelimit .CheckedReservation ;
152134import com .cloud .user .Account ;
153135import com .cloud .user .AccountManager ;
154136import com .cloud .user .ResourceLimitService ;
184166import com .cloud .vm .ReservationContextImpl ;
185167import com .cloud .vm .VirtualMachine ;
186168import com .cloud .vm .VirtualMachineProfile ;
187- import com .cloud .vm .dao .NicDao ;
188169import com .cloud .vm .dao .NicIpAliasDao ;
189- import com .cloud .vm .dao .NicSecondaryIpDao ;
190- import com .cloud .vm .dao .UserVmDao ;
191- import com .cloud .vm .dao .VMInstanceDao ;
192170
193171public class IpAddressManagerImpl extends ManagerBase implements IpAddressManager , Configurable {
194172
@@ -205,20 +183,12 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
205183 @ Inject
206184 AccountDao _accountDao ;
207185 @ Inject
208- DomainDao _domainDao ;
209- @ Inject
210186 UserDao _userDao ;
211187 @ Inject
212188 ConfigurationDao _configDao ;
213189 @ Inject
214- UserVmDao _userVmDao ;
215- @ Inject
216- AlertManager _alertMgr ;
217- @ Inject
218190 AccountManager _accountMgr ;
219191 @ Inject
220- ConfigurationManager _configMgr ;
221- @ Inject
222192 AccountVlanMapDao _accountVlanMapDao ;
223193 @ Inject
224194 DomainVlanMapDao _domainVlanMapDao ;
@@ -229,8 +199,6 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
229199 @ Inject
230200 NetworkDetailsDao _networkDetailsDao ;
231201 @ Inject
232- NicDao _nicDao ;
233- @ Inject
234202 RulesManager _rulesMgr ;
235203 @ Inject
236204 LoadBalancingRulesManager _lbMgr ;
@@ -239,22 +207,10 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
239207 @ Inject
240208 PodVlanMapDao _podVlanMapDao ;
241209 @ Inject
242- NetworkOfferingDetailsDao _ntwkOffDetailsDao ;
243- @ Inject
244- AccountGuestVlanMapDao _accountGuestVlanMapDao ;
245- @ Inject
246- DataCenterVnetDao _datacenterVnetDao ;
247- @ Inject
248- NetworkAccountDao _networkAccountDao ;
249- @ Inject
250210 protected NicIpAliasDao _nicIpAliasDao ;
251211 @ Inject
252212 protected IPAddressDao _publicIpAddressDao ;
253213 @ Inject
254- NetworkDomainDao _networkDomainDao ;
255- @ Inject
256- VMInstanceDao _vmDao ;
257- @ Inject
258214 FirewallManager _firewallMgr ;
259215 @ Inject
260216 FirewallRulesDao _firewallDao ;
@@ -268,36 +224,10 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
268224 @ Inject
269225 PhysicalNetworkDao _physicalNetworkDao ;
270226 @ Inject
271- PhysicalNetworkServiceProviderDao _pNSPDao ;
272- @ Inject
273- PortForwardingRulesDao _portForwardingRulesDao ;
274- @ Inject
275- LoadBalancerDao _lbDao ;
276- @ Inject
277- PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao ;
278- @ Inject
279- AgentManager _agentMgr ;
280- @ Inject
281- HostDao _hostDao ;
282- @ Inject
283- NetworkServiceMapDao _ntwkSrvcDao ;
284- @ Inject
285- StorageNetworkManager _stnwMgr ;
286- @ Inject
287227 VpcManager _vpcMgr ;
288228 @ Inject
289- PrivateIpDao _privateIpDao ;
290- @ Inject
291- NetworkACLManager _networkACLMgr ;
292- @ Inject
293- UsageEventDao _usageEventDao ;
294- @ Inject
295229 NetworkModel _networkModel ;
296230 @ Inject
297- NicSecondaryIpDao _nicSecondaryIpDao ;
298- @ Inject
299- UserIpv6AddressDao _ipv6Dao ;
300- @ Inject
301231 Ipv6AddressManager _ipv6Mgr ;
302232 @ Inject
303233 PortableIpDao _portableIpDao ;
@@ -573,12 +503,8 @@ boolean checkIfIpAssocRequired(Network network, boolean postApplyRules, List<Pub
573503 }
574504
575505 for (PublicIp ip : publicIps ) {
576- if (ip .isSourceNat ()) {
577- continue ;
578- } else if (ip .isOneToOneNat ()) {
579- continue ;
580- } else {
581- Long totalCount = null ;
506+ if ( ! (ip .isSourceNat () || ip .isOneToOneNat ())) {
507+ long totalCount ;
582508 Long revokeCount = null ;
583509 Long activeCount = null ;
584510 Long addCount = null ;
@@ -591,13 +517,13 @@ boolean checkIfIpAssocRequired(Network network, boolean postApplyRules, List<Pub
591517 addCount = _firewallDao .countRulesByIpIdAndState (ip .getId (), FirewallRule .State .Add );
592518 }
593519
594- if (totalCount == null || totalCount . longValue () == 0L ) {
520+ if (totalCount == 0L ) {
595521 continue ;
596522 }
597523
598524 if (postApplyRules ) {
599525
600- if (revokeCount != null && revokeCount .longValue () == totalCount . longValue () ) {
526+ if (revokeCount != null && revokeCount .longValue () == totalCount ) {
601527 logger .trace ("All rules are in Revoke state, have to dis-assiciate IP from the backend" );
602528 return true ;
603529 }
@@ -610,12 +536,9 @@ boolean checkIfIpAssocRequired(Network network, boolean postApplyRules, List<Pub
610536 // reboot the VR. So ipassoc is needed.
611537 return true ;
612538 }
613- continue ;
614- } else if (addCount != null && addCount .longValue () == totalCount .longValue ()) {
539+ } else if (addCount != null && addCount .longValue () == totalCount ) {
615540 logger .trace ("All rules are in Add state, have to assiciate IP with the backend" );
616541 return true ;
617- } else {
618- continue ;
619542 }
620543 }
621544 }
@@ -1121,12 +1044,27 @@ public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network gu
11211044 if (sourceNatIp != null ) {
11221045 ipToReturn = PublicIp .createFromAddrAndVlan (sourceNatIp , _vlanDao .findById (sourceNatIp .getVlanId ()));
11231046 } else {
1124- ipToReturn = assignDedicateIpAddress (owner , guestNetwork .getId (), null , dcId , true );
1047+ ipToReturn = assignDedicateIpAddress (owner , guestNetwork .getId (), null , dcId , ! isRouted ( guestNetwork ) );
11251048 }
11261049
11271050 return ipToReturn ;
11281051 }
11291052
1053+ private boolean isRouted (Network guestNetwork ) {
1054+ VpcOffering vpcOffer = null ;
1055+ NetworkOffering netOffer = _networkOfferingDao .findById (guestNetwork .getNetworkOfferingId ());
1056+ if (netOffer == null ) {
1057+ throw new CloudRuntimeException ("network without offering found???" );
1058+ }
1059+ if (netOffer .isForVpc () && guestNetwork .getVpcId () != null ) {
1060+ VpcVO vpc = _vpcDao .findById (guestNetwork .getVpcId ());
1061+ if (vpc != null ) {
1062+ vpcOffer = vpcOfferingDao .findById (vpc .getVpcOfferingId ());
1063+ }
1064+ }
1065+ return netOffer .getRoutingMode () != null || (vpcOffer != null && vpcOffer .getRoutingMode () != null );
1066+ }
1067+
11301068 @ DB
11311069 @ Override
11321070 public PublicIp assignDedicateIpAddress (Account owner , final Long guestNtwkId , final Long vpcId , final long dcId , final boolean isSourceNat )
@@ -1649,7 +1587,7 @@ private static void validateNetworkAndIpOwnership(Account owner, IPAddressVO ipT
16491587 */
16501588 protected boolean isSourceNatAvailableForNetwork (Account owner , IPAddressVO ipToAssoc , Network network ) {
16511589 NetworkOffering offering = _networkOfferingDao .findById (network .getNetworkOfferingId ());
1652- boolean sharedSourceNat = offering .isSharedSourceNat ();
1590+ boolean sharedSourceNat = offering .isSharedSourceNat () || offering . getRoutingMode () != null ;
16531591 boolean isSourceNat = false ;
16541592 if (!sharedSourceNat ) {
16551593 if (getExistingSourceNatInNetwork (owner .getId (), network .getId ()) == null ) {
0 commit comments