From 1295f759bc7a809f46364bc26e69964d2193fa26 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Mon, 27 Jan 2014 10:50:57 -0800 Subject: [PATCH] Making the FLowMods Strict. During update operations, a Non-Strict flow is being incorrectly updated by other flowmods. With this fix, we are able to get DevStack working with ODL-OVSDB-OF1.3 combination. Hopefully this is the final functional fix before the Hydrogen release. Definitely a lot of improvements can be made. But we have a good working start to this story. Change-Id: I83f9b0a3b3419f32d8a31ca592defd6fcd51f8b8 Signed-off-by: Madhu Venugopal --- .../neutron/provider/OF13ProviderManager.java | 77 ++++++++++--------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/provider/OF13ProviderManager.java b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/provider/OF13ProviderManager.java index 2577eb178b..4068414af1 100644 --- a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/provider/OF13ProviderManager.java +++ b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/provider/OF13ProviderManager.java @@ -661,6 +661,7 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add Flow Attributes flowBuilder.setId(new FlowId(flowId)); FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); flowBuilder.setBarrier(false); flowBuilder.setTableId(writeTable); flowBuilder.setKey(key); @@ -691,6 +692,18 @@ class OF13ProviderManager extends ProviderNetworkManager { // TODO Broken In_Port Match flowBuilder.setMatch(createInPortMatch(matchBuilder, dpidLong, inPort).build()); + String flowId = "LocalMac_"+segmentationId+"_"+inPort+"_"+attachedMac; + // Add Flow Attributes + flowBuilder.setId(new FlowId(flowId)); + FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); + flowBuilder.setBarrier(false); + flowBuilder.setTableId(writeTable); + flowBuilder.setKey(key); + flowBuilder.setFlowName(flowId); + flowBuilder.setHardTimeout(0); + flowBuilder.setIdleTimeout(0); + // Instantiate the Builders for the OF Actions and Instructions InstructionBuilder ib = new InstructionBuilder(); InstructionsBuilder isb = new InstructionsBuilder(); @@ -715,16 +728,6 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add InstructionsBuilder to FlowBuilder flowBuilder.setInstructions(isb.build()); - String flowId = "LocalMac_"+segmentationId+"_"+inPort+"_"+attachedMac; - // Add Flow Attributes - flowBuilder.setId(new FlowId(flowId)); - FlowKey key = new FlowKey(new FlowId(flowId)); - flowBuilder.setBarrier(false); - flowBuilder.setTableId(writeTable); - flowBuilder.setKey(key); - flowBuilder.setFlowName(flowId); - flowBuilder.setHardTimeout(0); - flowBuilder.setIdleTimeout(0); writeFlow(flowBuilder, nodeBuilder); } @@ -770,8 +773,8 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add Flow Attributes flowBuilder.setId(new FlowId(flowId)); FlowKey key = new FlowKey(new FlowId(flowId)); - flowBuilder.setBarrier(false); flowBuilder.setStrict(true); + flowBuilder.setBarrier(false); flowBuilder.setTableId((short) 0); flowBuilder.setKey(key); flowBuilder.setFlowName(flowId); @@ -801,6 +804,17 @@ class OF13ProviderManager extends ProviderNetworkManager { flowBuilder.setMatch(createTunnelIDMatch(matchBuilder, new BigInteger(segmentationId)).build()); flowBuilder.setMatch(createDestEthMatch(matchBuilder, new MacAddress(attachedMac), null).build()); + String flowId = "TunnelOut_"+segmentationId+"_"+OFPortOut+"_"+attachedMac; + // Add Flow Attributes + flowBuilder.setId(new FlowId(flowId)); + FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); + flowBuilder.setBarrier(false); + flowBuilder.setTableId(writeTable); + flowBuilder.setKey(key); + flowBuilder.setFlowName(flowId); + flowBuilder.setHardTimeout(0); + flowBuilder.setIdleTimeout(0); // Instantiate the Builders for the OF Actions and Instructions InstructionBuilder ib = new InstructionBuilder(); InstructionsBuilder isb = new InstructionsBuilder(); @@ -825,16 +839,6 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add InstructionsBuilder to FlowBuilder flowBuilder.setInstructions(isb.build()); - String flowId = "TunnelOut_"+segmentationId+"_"+OFPortOut+"_"+attachedMac; - // Add Flow Attributes - flowBuilder.setId(new FlowId(flowId)); - FlowKey key = new FlowKey(new FlowId(flowId)); - flowBuilder.setBarrier(false); - flowBuilder.setTableId(writeTable); - flowBuilder.setKey(key); - flowBuilder.setFlowName(flowId); - flowBuilder.setHardTimeout(0); - flowBuilder.setIdleTimeout(0); writeFlow(flowBuilder, nodeBuilder); } @@ -946,6 +950,7 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add Flow Attributes flowBuilder.setId(new FlowId(flowId)); FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); flowBuilder.setBarrier(false); flowBuilder.setTableId(writeTable); flowBuilder.setKey(key); @@ -975,6 +980,18 @@ class OF13ProviderManager extends ProviderNetworkManager { flowBuilder.setMatch(createTunnelIDMatch(matchBuilder, new BigInteger(segmentationId)).build()); flowBuilder.setMatch(createDestEthMatch(matchBuilder, new MacAddress(attachedMac), null).build()); + String flowId = "UcastOut_"+segmentationId+"_"+localPort+"_"+attachedMac; + // Add Flow Attributes + flowBuilder.setId(new FlowId(flowId)); + FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); + flowBuilder.setBarrier(false); + flowBuilder.setTableId(writeTable); + flowBuilder.setKey(key); + flowBuilder.setFlowName(flowId); + flowBuilder.setHardTimeout(0); + flowBuilder.setIdleTimeout(0); + // Instantiate the Builders for the OF Actions and Instructions InstructionBuilder ib = new InstructionBuilder(); InstructionsBuilder isb = new InstructionsBuilder(); @@ -993,17 +1010,6 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add InstructionsBuilder to FlowBuilder flowBuilder.setInstructions(isb.build()); - - String flowId = "UcastOut_"+segmentationId+"_"+localPort+"_"+attachedMac; - // Add Flow Attributes - flowBuilder.setId(new FlowId(flowId)); - FlowKey key = new FlowKey(new FlowId(flowId)); - flowBuilder.setBarrier(false); - flowBuilder.setTableId(writeTable); - flowBuilder.setKey(key); - flowBuilder.setFlowName(flowId); - flowBuilder.setHardTimeout(0); - flowBuilder.setIdleTimeout(0); writeFlow(flowBuilder, nodeBuilder); } @@ -1030,6 +1036,7 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add Flow Attributes flowBuilder.setId(new FlowId(flowId)); FlowKey key = new FlowKey(new FlowId(flowId)); + flowBuilder.setStrict(true); flowBuilder.setBarrier(false); flowBuilder.setTableId(writeTable); flowBuilder.setKey(key); @@ -1106,8 +1113,8 @@ class OF13ProviderManager extends ProviderNetworkManager { // Add Flow Attributes flowBuilder.setId(new FlowId(flowId)); FlowKey key = new FlowKey(new FlowId(flowId)); - flowBuilder.setBarrier(false); flowBuilder.setStrict(true); + flowBuilder.setBarrier(false); flowBuilder.setTableId(writeTable); flowBuilder.setKey(key); flowBuilder.setPriority(8192); @@ -1460,8 +1467,8 @@ class OF13ProviderManager extends ProviderNetworkManager { oab.setOutputNodeConnector(ncid); ab.setAction(new OutputActionCaseBuilder().setOutputAction(oab.build()).build()); - ab.setOrder(5); - ab.setKey(new ActionKey(5)); + ab.setOrder(0); + ab.setKey(new ActionKey(0)); actionList.add(ab.build()); // Create an Apply Action -- 2.36.6