From 1920c2a735c2c266ba958be7885fe727a7f24d99 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Mon, 23 Jul 2012 21:07:49 -0700 Subject: [PATCH] CS-15534: Mark VPN connection as Disconnected when rebootRouter Conflicts: server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java --- .../element/VpcVirtualRouterElement.java | 7 ------ ...VpcVirtualNetworkApplianceManagerImpl.java | 24 +++++++++++++++---- .../network/vpn/Site2SiteVpnManager.java | 1 + .../network/vpn/Site2SiteVpnManagerImpl.java | 14 +++++++++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 38efd77b559..78d1ff472be 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -42,8 +42,6 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.Site2SiteCustomerGatewayDao; -import com.cloud.network.dao.Site2SiteVpnConnectionDao; import com.cloud.network.dao.Site2SiteVpnGatewayDao; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; @@ -73,15 +71,10 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc @Inject VpcVirtualNetworkApplianceManager _vpcRouterMgr; @Inject - Site2SiteCustomerGatewayDao _customerGatewayDao; - @Inject Site2SiteVpnGatewayDao _vpnGatewayDao; @Inject - Site2SiteVpnConnectionDao _vpnConnectionDao; - @Inject IPAddressDao _ipAddressDao; - private static final Map> capabilities = setCapabilities(); @Override diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 5b14b9b51ca..622eb690c54 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -33,6 +33,7 @@ import com.cloud.agent.api.PlugNicAnswer; import com.cloud.agent.api.PlugNicCommand; import com.cloud.agent.api.SetupGuestNetworkAnswer; import com.cloud.agent.api.SetupGuestNetworkCommand; +import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.UnPlugNicAnswer; import com.cloud.agent.api.UnPlugNicCommand; import com.cloud.agent.api.routing.IpAssocVpcCommand; @@ -75,6 +76,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.network.Site2SiteVpnConnectionVO; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.Site2SiteVpnGatewayVO; import com.cloud.network.VirtualRouterProvider; @@ -84,6 +86,7 @@ import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.Site2SiteVpnConnectionDao; import com.cloud.network.dao.Site2SiteVpnGatewayDao; import com.cloud.network.rules.FirewallRule; import com.cloud.network.vpc.NetworkACLManager; @@ -99,6 +102,7 @@ import com.cloud.network.vpc.Dao.PrivateIpDao; import com.cloud.network.vpc.Dao.StaticRouteDao; import com.cloud.network.vpc.Dao.VpcDao; import com.cloud.network.vpc.Dao.VpcOfferingDao; +import com.cloud.network.vpn.Site2SiteVpnManager; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; import com.cloud.utils.Pair; @@ -144,7 +148,11 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian @Inject Site2SiteVpnGatewayDao _vpnGatewayDao; @Inject + Site2SiteVpnConnectionDao _vpnConnectionDao; + @Inject FirewallRulesDao _firewallDao; + @Inject + Site2SiteVpnManager _s2sVpnMgr; @Override public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, @@ -808,9 +816,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian createStaticRouteCommands(staticRouteProfiles, router, cmds); } - //5) REISSUE VPN CONNECTION - - //6) REPROGRAM GUEST NETWORK + //5) REPROGRAM GUEST NETWORK boolean reprogramGuestNtwks = true; if (profile.getParameter(Param.ReProgramGuestNetworks) != null && (Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) { @@ -1044,11 +1050,11 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian protected boolean applySite2SiteVpn(boolean isCreate, VirtualRouter router, Site2SiteVpnConnection conn) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); - createApplySite2SiteVpnCommands(conn, isCreate, router, cmds); + createSite2SiteVpnCfgCommands(conn, isCreate, router, cmds); return sendCommandsToRouter(router, cmds); } - private void createApplySite2SiteVpnCommands(Site2SiteVpnConnection conn, boolean isCreate, VirtualRouter router, Commands cmds) { + private void createSite2SiteVpnCfgCommands(Site2SiteVpnConnection conn, boolean isCreate, VirtualRouter router, Commands cmds) { Site2SiteCustomerGatewayVO gw = _s2sCustomerGatewayDao.findById(conn.getCustomerGatewayId()); Site2SiteVpnGatewayVO vpnGw = _s2sVpnGatewayDao.findById(conn.getVpnGatewayId()); IpAddress ip = _ipAddressDao.findById(vpnGw.getAddrId()); @@ -1262,4 +1268,12 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian new Pair, Map>(nicsToPlug, nicsToUnplug); return nicsToChange; } + + @Override + public void finalizeStop(VirtualMachineProfile profile, StopAnswer answer) { + super.finalizeStop(profile, answer); + //Mark VPN connections as Disconnected + DomainRouterVO router = profile.getVirtualMachine(); + _s2sVpnMgr.markDisconnectVpnConnByVpc(router.getVpcId()); + } } diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java index 92820f1dfa5..a44c3615ad4 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java @@ -3,4 +3,5 @@ package com.cloud.network.vpn; public interface Site2SiteVpnManager extends Site2SiteVpnService { boolean cleanupVpnConnectionByVpc(long vpcId); boolean cleanupVpnGatewayByVpc(long vpcId); + void markDisconnectVpnConnByVpc(long vpcId); } diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index aa7d2b30afc..3ca1a7ea8e5 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -409,4 +409,18 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { doDeleteVpnGateway(gw.getId()); return true; } + + @Override + public void markDisconnectVpnConnByVpc(long vpcId) { + List conns = _vpnConnectionDao.listByVpcId(vpcId); + for (Site2SiteVpnConnectionVO conn : conns) { + if (conn == null) { + continue; + } + if (conn.getState() == Site2SiteVpnConnection.State.Connected) { + conn.setState(Site2SiteVpnConnection.State.Disconnected); + _vpnConnectionDao.persist(conn); + } + } + } }