bug 7322: fix NPE when setting firewall rule for 1:1 NAT on kvm

status 7322: resolved fixed
This commit is contained in:
edison 2010-11-23 20:45:35 -08:00
parent 1ce538b6a9
commit bb790b41f7
1 changed files with 48 additions and 13 deletions

View File

@ -447,19 +447,54 @@ public class VirtualRoutingResource implements Manager {
}
protected Answer execute(final SetFirewallRuleCommand cmd) {
final String result = setFirewallRules(cmd.isEnable(),
cmd.getRouterName(),
cmd.getRouterIpAddress(),
cmd.getProtocol().toLowerCase(),
cmd.getPublicIpAddress(),
cmd.getPublicPort(),
cmd.getPrivateIpAddress(),
cmd.getPrivatePort(),
cmd.getOldPrivateIP(),
cmd.getOldPrivatePort(),
cmd.getVlanNetmask());
return new Answer(cmd, result == null, result);
String args;
if(cmd.isNat()){
//1:1 NAT needs instanceip;publicip;domrip;op
if(cmd.isCreate())
args = "-A";
else
args = "-D";
args += " -l " + cmd.getPublicIpAddress();
args += " -i " + cmd.getRouterIpAddress();
args += " -r " + cmd.getPrivateIpAddress();
args += " -G " + cmd.getProtocol();
}else{
if (cmd.isEnable()) {
args = "-A";
} else {
args = "-D";
}
args += " -P " + cmd.getProtocol().toLowerCase();
args += " -l " + cmd.getPublicIpAddress();
args += " -p " + cmd.getPublicPort();
args += " -n " + cmd.getRouterName();
args += " -i " + cmd.getRouterIpAddress();
args += " -r " + cmd.getPrivateIpAddress();
args += " -d " + cmd.getPrivatePort();
args += " -N " + cmd.getVlanNetmask();
String oldPrivateIP = cmd.getOldPrivateIP();
String oldPrivatePort = cmd.getOldPrivatePort();
if (oldPrivateIP != null) {
args += " -w " + oldPrivateIP;
}
if (oldPrivatePort != null) {
args += " -x " + oldPrivatePort;
}
}
final Script command = new Script(_firewallPath, _timeout, s_logger);
String [] argsArray = args.split(" ");
for (String param : argsArray) {
command.add(param);
}
String result = command.execute();
return new Answer(cmd, result == null, result);
}
protected String getDefaultScriptsDir() {