From 2715fd4dd94daee5503603f3fdd44b663575cdaf 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 --- api/src/com/cloud/network/NetworkModel.java | 2 ++ server/src/com/cloud/network/NetworkModelImpl.java | 13 +++++++++++++ .../router/VirtualNetworkApplianceManagerImpl.java | 13 +++++++++++-- .../com/cloud/network/MockNetworkModelImpl.java | 9 +++++++++ server/test/com/cloud/vpc/MockNetworkModelImpl.java | 10 ++++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index 8ae1cb70958..99ce1f5bd64 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -61,6 +61,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 2533ce89931..27b200633e5 100755 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -529,6 +529,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 15b5ff27b21..3fe9363a106 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2467,7 +2467,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; @@ -3434,7 +3443,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V protected boolean sendCommandsToRouter(final VirtualRouter router, Commands cmds) throws AgentUnavailableException { if(!checkRouterVersion(router)){ - throw new CloudRuntimeException("Router requires upgrade. Unable to send command to router:" + router.getId()); + //throw new CloudRuntimeException("Router requires upgrade. Unable to send command to router:" + router.getId()); } Answer[] answers = null; try { diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index f9dd9feb75d..04c50c0ab65 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -93,6 +93,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 19ed9d5167e..e98253b534b 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[]) */