From 1c0e2cf3f5969305346cd8190f30f4813c19c6c1 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 31 Oct 2012 09:42:04 -0600 Subject: [PATCH] Summary: Implement Static NAT for KVM VPC Detail: SetVPCStaticNatRules was one command that was left off of the initial VPC implementation. This adds it in. BUG-ID : CLOUDSTACK-426 Reviewed-by: Marcus Sorensen Reported-by: Marcus Sorensen Signed-off-by: Marcus Sorensen 1351698124 -0600 --- .../VirtualRoutingResource.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 7e53f03e431..2dc7950b2b7 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -264,8 +264,35 @@ public class VirtualRoutingResource implements Manager { return new SetPortForwardingRulesAnswer(cmd, results, endResult); } + + protected Answer SetVPCStaticNatRules(SetStaticNatRulesCommand cmd) { + String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String[] results = new String[cmd.getRules().length]; + int i = 0; + boolean endResult = true; + + for (StaticNatRuleTO rule : cmd.getRules()) { + String args = rule.revoked() ? " -D" : " -A"; + args += " -l " + rule.getSrcIp(); + args += " -r " + rule.getDstIp(); + + String result = routerProxy("vpc_staticnat.sh", routerIp, args); + + if(result == null) { + results[i++] = null; + } else { + results[i++] = "Failed"; + endResult = false; + } + } + return new SetStaticNatRulesAnswer(cmd, results, endResult); + + } private Answer execute(SetStaticNatRulesCommand cmd) { + if ( cmd.getVpcId() != null ) { + return SetVPCStaticNatRules(cmd); + } String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); String[] results = new String[cmd.getRules().length]; int i = 0;