From e043298a801a8239b8e06a8e986576ac4c8cbeec Mon Sep 17 00:00:00 2001 From: Flavio Fernandes Date: Thu, 6 Nov 2014 06:46:18 -0500 Subject: [PATCH] Bug 2021 - NORMAL and CONTROLLER flows should not use hard coded strings The output port value should be using the node connector id assembled from the sal-compatibility library, which is provided by the controller. Patch 3: Add feedback from code review Change-Id: I3aa503bfd54e3cfcd7fa6dd730849b88f90a38c1 Signed-off-by: Flavio Fernandes --- .../netvirt/providers/openflow13/OF13Provider.java | 2 +- .../openflow13/services/ClassifierService.java | 2 +- .../java/org/opendaylight/ovsdb/ovssfc/Flows.java | 4 ++-- utils/mdsal-openflow/pom.xml | 5 +++++ .../utils/mdsal/openflow/InstructionUtils.java | 14 ++++++++------ 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java b/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java index 27dec7aa4c..e24653a6c3 100644 --- a/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java +++ b/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java @@ -1398,7 +1398,7 @@ public class OF13Provider implements NetworkingProvider { List instructions = Lists.newArrayList(); // Call the InstructionBuilder Methods Containing Actions - InstructionUtils.createNormalInstructions(ib); + InstructionUtils.createNormalInstructions(nodeName, ib); ib.setOrder(0); ib.setKey(new InstructionKey(0)); instructions.add(ib.build()); diff --git a/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java b/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java index 95713134df..40461f7461 100644 --- a/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java +++ b/openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java @@ -425,7 +425,7 @@ public class ClassifierService extends AbstractServiceInstance implements Classi List instructions = Lists.newArrayList(); // Call the InstructionBuilder Methods Containing Actions - InstructionUtils.createSendToControllerInstructions(ib); + InstructionUtils.createSendToControllerInstructions(nodeName, ib); ib.setOrder(0); ib.setKey(new InstructionKey(0)); instructions.add(ib.build()); diff --git a/ovs-sfc/src/main/java/org/opendaylight/ovsdb/ovssfc/Flows.java b/ovs-sfc/src/main/java/org/opendaylight/ovsdb/ovssfc/Flows.java index b871a20237..01b8805af4 100644 --- a/ovs-sfc/src/main/java/org/opendaylight/ovsdb/ovssfc/Flows.java +++ b/ovs-sfc/src/main/java/org/opendaylight/ovsdb/ovssfc/Flows.java @@ -142,7 +142,7 @@ public class Flows { List instructions = Lists.newArrayList(); // Call the InstructionBuilder Methods Containing Actions - InstructionUtils.createSendToControllerInstructions(ib); + InstructionUtils.createSendToControllerInstructions(nodeName, ib); ib.setOrder(0); ib.setKey(new InstructionKey(0)); instructions.add(ib.build()); @@ -188,7 +188,7 @@ public class Flows { List instructions = Lists.newArrayList(); // Call the InstructionBuilder Methods Containing Actions - InstructionUtils.createNormalInstructions(ib); + InstructionUtils.createNormalInstructions(nodeName, ib); ib.setOrder(0); ib.setKey(new InstructionKey(0)); instructions.add(ib.build()); diff --git a/utils/mdsal-openflow/pom.xml b/utils/mdsal-openflow/pom.xml index 99e6ec7579..65d03c8888 100644 --- a/utils/mdsal-openflow/pom.xml +++ b/utils/mdsal-openflow/pom.xml @@ -43,6 +43,11 @@ org.opendaylight.controller sal + + org.opendaylight.controller + sal-compatibility + ${mdsal.version} + org.opendaylight.ovsdb library diff --git a/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java b/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java index 213123be22..0f333cefa7 100644 --- a/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java +++ b/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java @@ -10,6 +10,7 @@ package org.opendaylight.ovsdb.utils.mdsal.openflow; import static org.opendaylight.ovsdb.utils.mdsal.openflow.ActionUtils.dropAction; +import org.opendaylight.controller.sal.compatibility.NodeMapping; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; @@ -57,6 +58,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder; @@ -84,18 +86,18 @@ public class InstructionUtils { /** * Create Send to Controller Reserved Port Instruction (packet_in) * + * @param nodeName Uri Prefix, containing nodeConnectorType and dpId (aka NodeId) * @param ib Map InstructionBuilder without any instructions * @return ib Map InstructionBuilder with instructions */ - public static InstructionBuilder createSendToControllerInstructions(InstructionBuilder ib) { + public static InstructionBuilder createSendToControllerInstructions(String nodeName, InstructionBuilder ib) { List actionList = Lists.newArrayList(); ActionBuilder ab = new ActionBuilder(); OutputActionBuilder output = new OutputActionBuilder(); output.setMaxLength(MAX_LENGTH); - Uri value = new Uri("CONTROLLER"); - output.setOutputNodeConnector(value); + output.setOutputNodeConnector(NodeMapping.toControllerNodeConnectorId(new NodeId(nodeName))); ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build()); ab.setOrder(0); ab.setKey(new ActionKey(0)); @@ -114,18 +116,18 @@ public class InstructionUtils { /** * Create NORMAL Reserved Port Instruction (packet_in) * + * @param nodeId Uri Prefix, containing nodeConnectorType and dpId (aka NodeId) * @param ib Map InstructionBuilder without any instructions * @return ib Map InstructionBuilder with instructions */ - public static InstructionBuilder createNormalInstructions(InstructionBuilder ib) { + public static InstructionBuilder createNormalInstructions(String nodeId, InstructionBuilder ib) { List actionList = Lists.newArrayList(); ActionBuilder ab = new ActionBuilder(); OutputActionBuilder output = new OutputActionBuilder(); - Uri value = new Uri("NORMAL"); - output.setOutputNodeConnector(value); + output.setOutputNodeConnector(NodeMapping.toNormalNodeConnectorId(new NodeId(nodeId))); ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build()); ab.setOrder(0); ab.setKey(new ActionKey(0)); -- 2.36.6