Skip to content

Commit f5173f0

Browse files
committed
Fix error when applying port forwarding rules during restart with clean-up
1 parent 37f6af9 commit f5173f0

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
@@ -27,6 +27,7 @@
2727

2828
import javax.inject.Inject;
2929

30+
import com.cloud.network.rules.PortForwardingRuleVO;
3031
import org.apache.cloudstack.api.ApiConstants;
3132
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
3233
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -396,6 +397,7 @@ public void createApplyPortForwardingRulesCommands(final List<? extends PortForw
396397
final List<PortForwardingRuleTO> rulesTO = new ArrayList<PortForwardingRuleTO>();
397398
if (rules != null) {
398399
for (final PortForwardingRule rule : rules) {
400+
_rulesDao.loadSourceCidrs((PortForwardingRuleVO) rule);
399401
final IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId());
400402
final PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, null, sourceIp.getAddress().addr());
401403
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
@@ -898,7 +898,7 @@ protected boolean applyPortForwardingRules(long ipId, boolean continueOnError, A
898898
_accountMgr.checkAccess(caller, null, true, rules.toArray(new PortForwardingRuleVO[rules.size()]));
899899
}
900900

901-
for (PortForwardingRuleVO rule: rules){
901+
for (PortForwardingRuleVO rule : rules) {
902902
rule.setSourceCidrList(firewallCidrsDao.getSourceCidrs(rule.getId()));
903903
}
904904

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

958+
for (PortForwardingRuleVO rule: rules) {
959+
rule.setSourceCidrList(firewallCidrsDao.getSourceCidrs(rule.getId()));
960+
}
961+
958962
try {
959963
if (!_firewallMgr.applyRules(rules, continueOnError, true)) {
960964
return false;

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

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

12191219
def forward_vpc(self, rule):
1220-
source_cidr_list = rule['source_cidr_list']
1221-
if source_cidr_list:
1222-
source_cidr_list = "-s " + source_cidr_list
1223-
fw_prerout_rule = "-A PREROUTING %s -d %s/32 " % (source_cidr_list, rule["public_ip"])
1220+
fw_prerout_rule = "-A PREROUTING"
1221+
if "source_cidr_list" in rule and rule["source_cidr_list"]:
1222+
fw_prerout_rule += " -s %s" % rule["source_cidr_list"]
1223+
fw_prerout_rule += " -d %s/32" % rule["public_ip"]
12241224
if not rule["protocol"] == "any":
12251225
fw_prerout_rule += " -m %s -p %s" % (rule["protocol"], rule["protocol"])
12261226
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)