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");