From 9c2db92b635539a50fb198691b15a68079b6c55c Mon Sep 17 00:00:00 2001 From: alena Date: Tue, 15 Feb 2011 10:44:16 -0800 Subject: [PATCH] Fixed the bug when port forwarding rules were not reset correctly on domR restart/start (multiple public ip addresses case) --- .../src/com/cloud/network/dao/FirewallRulesDao.java | 2 +- .../router/VirtualNetworkApplianceManagerImpl.java | 12 ++++++------ .../com/cloud/network/rules/RulesManagerImpl.java | 8 +++++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/server/src/com/cloud/network/dao/FirewallRulesDao.java b/server/src/com/cloud/network/dao/FirewallRulesDao.java index 595509cb84e..8e089af4ec6 100644 --- a/server/src/com/cloud/network/dao/FirewallRulesDao.java +++ b/server/src/com/cloud/network/dao/FirewallRulesDao.java @@ -36,7 +36,7 @@ public interface FirewallRulesDao extends GenericDao { boolean releasePorts(long ipAddressId, String protocol, FirewallRule.Purpose purpose, int[] ports); - List listByIpAndPurpose(long ipAddressId, FirewallRule.Purpose purpose); + List listByIpAndPurpose(long ipAddressId, FirewallRule.Purpose purpose); List listByNetworkIdAndPurpose(long networkId, FirewallRule.Purpose purpose); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 58cc8d60b2c..3368fc960c1 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1023,7 +1023,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router.getId() + " start."); + s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); if (!publicIps.isEmpty()) { @@ -1031,13 +1031,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian createAssociateIPCommands(router, publicIps, cmds, 0); List vpns = new ArrayList(); - List pfRules = null; - List staticNatFirewallRules = null; + List pfRules = new ArrayList(); + List staticNatFirewallRules = new ArrayList(); for (PublicIpAddress ip : publicIps) { - pfRules = _pfRulesDao.listForApplication(ip.getId()); - staticNatFirewallRules = _rulesDao.listByIpAndPurpose(ip.getId(), Purpose.StaticNat); - + pfRules.addAll(_pfRulesDao.listForApplication(ip.getId())); + staticNatFirewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), Purpose.StaticNat)); + RemoteAccessVpn vpn = _vpnDao.findById(ip.getId()); if (vpn != null) { vpns.add(vpn); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 2edc0225bc2..2a43f0f9224 100644 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -629,7 +629,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Override public boolean applyStaticNatRules(long sourceIpId, boolean continueOnError, Account caller){ - List rules = _firewallDao.listByIpAndPurpose(sourceIpId, Purpose.StaticNat); + List rules = _firewallDao.listByIpAndPurpose(sourceIpId, Purpose.StaticNat); List staticNatRules = new ArrayList(); if (rules.size() == 0) { @@ -637,7 +637,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { return true; } - for (FirewallRuleVO rule : rules) { + for (FirewallRule rule : rules) { IpAddress sourceIp = _ipAddressDao.findById(rule.getSourceIpAddressId()); UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId()); @@ -650,7 +650,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { throw new CloudRuntimeException("Unable to find ip address to map to in vm id=" + vm.getId()); } - staticNatRules.add(new StaticNatRuleImpl(rule, dstIp.addr())); + FirewallRuleVO ruleVO = _firewallDao.findById(rule.getId()); + + staticNatRules.add(new StaticNatRuleImpl(ruleVO, dstIp.addr())); } if (caller != null) {