From 8b151c98c22e39afb0be6768666b63a17286d410 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Fri, 27 Dec 2013 13:31:44 +0530 Subject: [PATCH] CLOUDSTACK-5403: Shared network - None of PF, LB rules work after router restart, firewall rules dropped from iptables post restart on VR restart, not all public IP's associated with the network are sent with IpAssocCmd to VR. This fix will ensure all the ip's associated with the network irrespective of the account are sent as part of IpAssocCommand Conflicts: server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java --- api/src/com/cloud/network/NetworkModel.java | 2 ++ server/src/com/cloud/network/NetworkModelImpl.java | 13 +++++++++++++ .../router/VirtualNetworkApplianceManagerImpl.java | 11 ++++++++++- .../com/cloud/network/MockNetworkModelImpl.java | 9 +++++++++ server/test/com/cloud/vpc/MockNetworkModelImpl.java | 10 ++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index fcb6a2e58f4..f6555db565e 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -60,6 +60,8 @@ public interface NetworkModel { */ List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); + List listPublicIpsAssignedToGuestNtwk(long associatedNetworkId, Boolean sourceNat); + List getSystemAccountNetworkOfferings(String... offeringNames); List getNics(long vmId); diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 746faa8b6b0..52a08e1480e 100755 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -523,6 +523,19 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { return _ipAddressDao.search(sc, null); } + @Override + public List listPublicIpsAssignedToGuestNtwk(long associatedNetworkId, Boolean sourceNat) { + SearchCriteria sc = IpAddressSearch.create(); + sc.setParameters("associatedWithNetworkId", associatedNetworkId); + + if (sourceNat != null) { + sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); + } + sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); + + return _ipAddressDao.search(sc, null); + } + @Override public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { SearchCriteria sc = IpAddressSearch.create(); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index fdc1b271d6c..cc66199f501 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2571,7 +2571,16 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) { long ownerId = router.getAccountId(); - final List userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); + final List userIps; + + Network guestNetwork = _networkDao.findById(guestNetworkId); + if (guestNetwork.getGuestType() == GuestType.Shared) { + // ignore the account id for the shared network + userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(guestNetworkId, null); + } else { + userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); + } + List allPublicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { boolean addIp = true; diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index 6ae6ae8beef..6c9e597b9f3 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -92,6 +92,15 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return null; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToGuestNtwk(long associatedNetworkId, Boolean sourceNat) { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkModel#getSystemAccountNetworkOfferings(java.lang.String[]) */ diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java index e0583d8d317..67ab8e875cb 100644 --- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java @@ -103,6 +103,16 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return null; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToGuestNtwk(long associatedNetworkId, Boolean sourceNat) { + + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkModel#getSystemAccountNetworkOfferings(java.lang.String[]) */