From c36f6b18e181aabd39cd6e265b93d5e6b1e899e1 Mon Sep 17 00:00:00 2001 From: Michal Rehak Date: Thu, 17 Apr 2014 17:08:42 +0200 Subject: [PATCH] fix for BUG-709 - mixed up flow cookie and connection cookie - flow cookie [64b] is present at receivedPacket (to distinguish responsible flow) - connection cookie [32b] is present at receivedPacket and is expected to be copied into corresponding transmitPacketInput (to distinguish auxiliary connection) - fixed sal-compatibility, l2switch/implementation, sal-binding-it Change-Id: I331aa3a0f582219a1c604e21466c7a893ee4ed67 Signed-off-by: Michal Rehak --- .../sal/compatibility/MDFlowMapping.xtend | 7 ++++--- .../compatibility/ToSalConversionsUtils.java | 2 +- .../test/TestFromSalConversionsUtils.java | 2 +- .../test/TestToSalConversionsUtils.java | 3 ++- .../src/main/yang/opendaylight-flow-types.yang | 9 +++++++-- .../src/main/yang/packet-processing.yang | 17 +++++++++++------ .../test/sal/binding/it/NoficationTest.java | 5 +++-- .../test/sal/binding/it/RoutedServiceTest.java | 3 ++- .../l2switch/md/flow/FlowWriterServiceImpl.java | 4 +++- 9 files changed, 34 insertions(+), 18 deletions(-) diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend index 6a9712b1c6..75cbf49ee5 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend @@ -113,6 +113,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie public class MDFlowMapping { @@ -127,7 +128,7 @@ public class MDFlowMapping { hardTimeout = sourceFlow.hardTimeout as int idleTimeout = sourceFlow.idleTimeout as int - cookie = BigInteger.valueOf(sourceFlow.id) + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) priority = sourceFlow.priority as int val sourceActions = sourceFlow.actions; @@ -150,7 +151,7 @@ public class MDFlowMapping { val it = new FlowBuilder(); hardTimeout = sourceFlow.hardTimeout as int idleTimeout = sourceFlow.idleTimeout as int - cookie = BigInteger.valueOf(sourceFlow.id) + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) priority = sourceFlow.priority as int id = new FlowId(flowId) @@ -404,7 +405,7 @@ public class MDFlowMapping { hardTimeout = sourceFlow.hardTimeout as int idleTimeout = sourceFlow.idleTimeout as int - cookie = BigInteger.valueOf(sourceFlow.id) + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) priority = sourceFlow.priority as int val sourceActions = sourceFlow.actions; diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java index cb72896858..74b94c7cba 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java @@ -148,7 +148,7 @@ public class ToSalConversionsUtils { target.setActions(actionFrom(actions, node)); } - target.setId(source.getCookie().longValue()); + target.setId(source.getCookie().getValue().longValue()); return target; } diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestFromSalConversionsUtils.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestFromSalConversionsUtils.java index b062b0016d..63c5664a0c 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestFromSalConversionsUtils.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestFromSalConversionsUtils.java @@ -177,7 +177,7 @@ public class TestFromSalConversionsUtils { } private void checkOdFlow(NodeFlow odNodeFlow) { - assertEquals("Cookie is incorrect.", 9223372036854775807L, odNodeFlow.getCookie().longValue()); + assertEquals("Cookie is incorrect.", 9223372036854775807L, odNodeFlow.getCookie().getValue().longValue()); assertEquals("Hard timeout is incorrect.", 32765, odNodeFlow.getHardTimeout().shortValue()); assertEquals("Iddle timeout is incorrect.", 32766, odNodeFlow.getIdleTimeout().shortValue()); assertEquals("Priority is incorrect.", 32767, odNodeFlow.getPriority().shortValue()); diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestToSalConversionsUtils.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestToSalConversionsUtils.java index ca16c65f56..71f2e94805 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestToSalConversionsUtils.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/test/java/org/opendaylight/controller/sal/compatibility/test/TestToSalConversionsUtils.java @@ -105,6 +105,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.addr import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; @@ -347,7 +348,7 @@ public class TestToSalConversionsUtils { private FlowAddedBuilder prepareOdFlowCommon() { FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder(); - odNodeFlowBuilder.setCookie(new BigInteger("9223372036854775807")); + odNodeFlowBuilder.setCookie(new FlowCookie(new BigInteger("9223372036854775807"))); odNodeFlowBuilder.setHardTimeout(32767); odNodeFlowBuilder.setIdleTimeout(32767); odNodeFlowBuilder.setPriority(32767); diff --git a/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang b/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang index 02bdd1a1fa..0d8a0b6f54 100644 --- a/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang +++ b/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang @@ -15,6 +15,11 @@ module opendaylight-flow-types { type instance-identifier; } + typedef flow-cookie { + description "openflow specific type - flow cookie / flow cookie mask"; + type uint64; + } + typedef output-port-values { type enumeration { enum MAX { @@ -143,7 +148,7 @@ module opendaylight-flow-types { } leaf cookie { - type uint64; + type flow-cookie; } leaf table_id { @@ -167,7 +172,7 @@ module opendaylight-flow-types { } leaf cookie_mask { - type uint64; + type flow-cookie; } leaf buffer_id { diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/packet-processing.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/packet-processing.yang index f3db3181f7..50368e46a6 100644 --- a/opendaylight/md-sal/model/model-flow-service/src/main/yang/packet-processing.yang +++ b/opendaylight/md-sal/model/model-flow-service/src/main/yang/packet-processing.yang @@ -9,13 +9,14 @@ module packet-processing { import opendaylight-match-types {prefix match-type;revision-date "2013-10-26";} import opendaylight-table-types {prefix table-type;revision-date "2013-10-26";} import opendaylight-action-types {prefix action-type;revision-date "2013-11-12";} + import opendaylight-flow-types {prefix flow-type;revision-date "2013-10-26";} revision "2013-07-09" { description ""; } - typedef cookie { + typedef connection-cookie { type uint32; } @@ -58,8 +59,12 @@ module packet-processing { } notification packet-received { - leaf cookie { - type cookie; + leaf connection-cookie { + type connection-cookie; + } + + leaf flow-cookie { + type flow-type:flow-cookie; } leaf table-id { @@ -83,14 +88,14 @@ module packet-processing { input { uses inv:node-context-ref; - leaf cookie { - type cookie; + leaf connection-cookie { + type connection-cookie; } leaf egress { type inv:node-connector-ref; } - leaf buffer-id { + leaf buffer-id { type uint32; } diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java index b23ceaaf15..9519a2a732 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java @@ -31,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.Node import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeExperimenterErrorNotification; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SwitchFlowRemoved; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.NotificationListener; import org.opendaylight.yangtools.yang.binding.RpcService; @@ -99,7 +100,7 @@ public class NoficationTest extends AbstractTest { * */ assertEquals(1, listener1.addedFlows.size()); - assertEquals(0, listener1.addedFlows.get(0).getCookie().intValue()); + assertEquals(0, listener1.addedFlows.get(0).getCookie().getValue().intValue()); /** * The registration of the Consumer 2. SalFlowListener is registered @@ -196,7 +197,7 @@ public class NoficationTest extends AbstractTest { */ public static FlowAdded flowAdded(int i) { FlowAddedBuilder ret = new FlowAddedBuilder(); - ret.setCookie(BigInteger.valueOf(i)); + ret.setCookie(new FlowCookie(BigInteger.valueOf(i))); return ret.build(); } diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java index 9c24ca0830..d49d6f0e25 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java @@ -26,6 +26,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; @@ -209,7 +210,7 @@ public class RoutedServiceTest extends AbstractTest { static AddFlowInput createSampleAddFlow(NodeRef node, int cookie) { AddFlowInputBuilder ret = new AddFlowInputBuilder(); ret.setNode(node); - ret.setCookie(BigInteger.valueOf(cookie)); + ret.setCookie(new FlowCookie(BigInteger.valueOf(cookie))); return ret.build(); } } diff --git a/opendaylight/md-sal/samples/l2switch/implementation/src/main/java/org/opendaylight/controller/sample/l2switch/md/flow/FlowWriterServiceImpl.java b/opendaylight/md-sal/samples/l2switch/implementation/src/main/java/org/opendaylight/controller/sample/l2switch/md/flow/FlowWriterServiceImpl.java index f49771a953..065d0ee7ba 100644 --- a/opendaylight/md-sal/samples/l2switch/implementation/src/main/java/org/opendaylight/controller/sample/l2switch/md/flow/FlowWriterServiceImpl.java +++ b/opendaylight/md-sal/samples/l2switch/implementation/src/main/java/org/opendaylight/controller/sample/l2switch/md/flow/FlowWriterServiceImpl.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.sample.l2switch.md.flow; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; + import org.opendaylight.controller.sample.l2switch.md.topology.NetworkGraphService; import org.opendaylight.controller.sample.l2switch.md.util.InstanceIdentifierUtils; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; @@ -25,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; @@ -261,7 +263,7 @@ public class FlowWriterServiceImpl implements FlowWriterService { .setBufferId(0L) // .setHardTimeout(0) // .setIdleTimeout(0) // - .setCookie(BigInteger.valueOf(flowCookieInc.getAndIncrement())) + .setCookie(new FlowCookie(BigInteger.valueOf(flowCookieInc.getAndIncrement()))) .setFlags(new FlowModFlags(false, false, false, false, false)); return macToMacFlow.build(); -- 2.36.6