Skip to content

Commit 1a09b1d

Browse files
committed
Fix error when applying port forwarding rules during restart with clean-up
1 parent 6b47cf4 commit 1a09b1d

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

server/src/main/java/com/cloud/network/router/CommandSetupHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import javax.inject.Inject;
3030

31+
import com.cloud.network.rules.PortForwardingRuleVO;
3132
import org.apache.cloudstack.api.ApiConstants;
3233
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
3334
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -408,6 +409,7 @@ public void createApplyPortForwardingRulesCommands(final List<? extends PortForw
408409
final List<PortForwardingRuleTO> rulesTO = new ArrayList<PortForwardingRuleTO>();
409410
if (rules != null) {
410411
for (final PortForwardingRule rule : rules) {
412+
_rulesDao.loadSourceCidrs((PortForwardingRuleVO) rule);
411413
final IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId());
412414
final PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, null, sourceIp.getAddress().addr());
413415
rulesTO.add(ruleTO);

server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ protected boolean applyPortForwardingRules(long ipId, boolean continueOnError, A
896896
_accountMgr.checkAccess(caller, null, true, rules.toArray(new PortForwardingRuleVO[rules.size()]));
897897
}
898898

899-
for (PortForwardingRuleVO rule : rules){
899+
for (PortForwardingRuleVO rule : rules) {
900900
rule.setSourceCidrList(firewallCidrsDao.getSourceCidrs(rule.getId()));
901901
}
902902

@@ -953,6 +953,10 @@ public boolean applyPortForwardingRulesForNetwork(long networkId, boolean contin
953953
_accountMgr.checkAccess(caller, null, true, rules.toArray(new PortForwardingRuleVO[rules.size()]));
954954
}
955955

956+
for (PortForwardingRuleVO rule: rules) {
957+
rule.setSourceCidrList(firewallCidrsDao.getSourceCidrs(rule.getId()));
958+
}
959+
956960
try {
957961
if (!_firewallMgr.applyRules(rules, continueOnError, true)) {
958962
return false;

systemvm/debian/opt/cloud/bin/configure.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,10 +1467,10 @@ def forward_vr(self, rule):
14671467
self.fw.append(["filter", "", fw7])
14681468

14691469
def forward_vpc(self, rule):
1470-
source_cidr_list = rule['source_cidr_list']
1471-
if source_cidr_list:
1472-
source_cidr_list = "-s " + source_cidr_list
1473-
fw_prerout_rule = "-A PREROUTING %s -d %s/32 " % (source_cidr_list, rule["public_ip"])
1470+
fw_prerout_rule = "-A PREROUTING"
1471+
if "source_cidr_list" in rule and rule["source_cidr_list"]:
1472+
fw_prerout_rule += " -s %s" % rule["source_cidr_list"]
1473+
fw_prerout_rule += " -d %s/32" % rule["public_ip"]
14741474
if not rule["protocol"] == "any":
14751475
fw_prerout_rule += " -m %s -p %s" % (rule["protocol"], rule["protocol"])
14761476
if not rule["public_ports"] == "any":

systemvm/debian/opt/cloud/bin/cs_forwardingrules.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ def merge(dbag, rules):
3535
newrule["public_ports"] = rule["source_port_range"]
3636
newrule["internal_ports"] = rule["destination_port_range"]
3737
newrule["protocol"] = rule["protocol"]
38-
newrule["source_cidr_list"] = rule["source_cidr_list"]
38+
if "source_cidr_list" in rule:
39+
newrule["source_cidr_list"] = rule["source_cidr_list"]
3940

4041
if not revoke:
4142
if rules["type"] == "staticnatrules":

0 commit comments

Comments
 (0)