You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2012/12/06 17:21:55 UTC
git commit: Fix bug in Port Forwarding
Updated Branches:
refs/heads/master cfd2a0bdf -> 1fbf2a286
Fix bug in Port Forwarding
Nicira NVP can't handle a range of port when implementing port
forwarding, so return an error message when a rule is being implemented
that uses port ranges.
Include unittest to verify this behaviour
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/1fbf2a28
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/1fbf2a28
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/1fbf2a28
Branch: refs/heads/master
Commit: 1fbf2a2864700208453aa322be0d52e33eef6fac
Parents: cfd2a0b
Author: Hugo Trippaers <tr...@gmail.com>
Authored: Thu Dec 6 16:50:56 2012 +0100
Committer: Hugo Trippaers <tr...@gmail.com>
Committed: Thu Dec 6 16:50:56 2012 +0100
----------------------------------------------------------------------
.../cloud/network/resource/NiciraNvpResource.java | 4 ++
.../network/resource/NiciraNvpResourceTest.java | 36 ++++++++++++++-
2 files changed, 39 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1fbf2a28/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
index 3dd0145..12ed72a 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
@@ -604,6 +604,10 @@ public class NiciraNvpResource implements ServerResource {
continue;
}
+ if (rule.getDstPortRange()[0] != rule.getDstPortRange()[1]) {
+ return new ConfigurePortForwardingRulesOnLogicalRouterAnswer(cmd, false, "Nicira NVP doesn't support port ranges for port forwarding");
+ }
+
NatRule[] rulepair = generatePortForwardingRulePair(rule.getDstIp(), rule.getDstPortRange(), rule.getSrcIp(), rule.getSrcPortRange(), rule.getProtocol());
NatRule incoming = null;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1fbf2a28/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java
index 0c7bb70..e378910 100644
--- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java
+++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java
@@ -758,7 +758,41 @@ public class NiciraNvpResourceTest {
assertFalse(a.getResult());
verify(_nvpApi, atLeastOnce()).deleteLogicalRouterNatRule(eq("aaaaa"), eq("bbbbb"));
}
-
+
+ @Test
+ public void testConfigurePortForwardingRulesOnLogicalRouterPortRange() throws ConfigurationException, NiciraNvpApiException {
+ _resource.configure("NiciraNvpResource", _parameters);
+ /* StaticNat
+ * Outside IP: 11.11.11.11
+ * Inside IP: 10.10.10.10
+ */
+
+ // Mock the command
+ ConfigurePortForwardingRulesOnLogicalRouterCommand cmd = mock(ConfigurePortForwardingRulesOnLogicalRouterCommand.class);
+ PortForwardingRuleTO rule = new PortForwardingRuleTO(1,"11.11.11.11", 80, 85, "10.10.10.10", 80, 85, "tcp", false, false);
+ List<PortForwardingRuleTO> rules = new ArrayList<PortForwardingRuleTO>();
+ rules.add(rule);
+ when(cmd.getRules()).thenReturn(rules);
+ when(cmd.getLogicalRouterUuid()).thenReturn("aaaaa");
+
+ // Mock the api find call
+ @SuppressWarnings("unchecked")
+ NiciraNvpList<NatRule> storedRules = mock(NiciraNvpList.class);
+ when(_nvpApi.findNatRulesByLogicalRouterUuid("aaaaa")).thenReturn(storedRules);
+
+ // Mock the api create calls
+ NatRule[] rulepair = _resource.generatePortForwardingRulePair("10.10.10.10", new int[] { 80, 85 }, "11.11.11.11", new int[] { 80, 85}, "tcp");
+ rulepair[0].setUuid("bbbbb");
+ rulepair[1].setUuid("ccccc");
+ when(_nvpApi.createLogicalRouterNatRule(eq("aaaaa"), (NatRule)any())).thenReturn(rulepair[0]).thenReturn(rulepair[1]);
+
+ ConfigurePortForwardingRulesOnLogicalRouterAnswer a = (ConfigurePortForwardingRulesOnLogicalRouterAnswer) _resource.executeRequest(cmd);
+
+ // The expected result is false, Nicira does not support port ranges in DNAT
+ assertFalse(a.getResult());
+
+ }
+
@Test
public void testGenerateStaticNatRulePair() {
NatRule[] rules = _resource.generateStaticNatRulePair("10.10.10.10", "11.11.11.11");