From 371c65647d29712b92836dcc2b178d42aecbf9c7 Mon Sep 17 00:00:00 2001 From: eeiillu Date: Thu, 12 Jan 2017 10:29:18 +0530 Subject: [PATCH] Bug 7453 - FlowRemoved doesn't have Removed Reason Information On flow being removed from switch on idle timeout, onFlowRemoved() api was invoked and while conversion reason was not being converted and added, so the application using API onFlowRemoved() was not getting the reason for flow being removed from the switch. This change will provide the reason invoking onFlowRemoved() API Change-Id: Id8b957b5b2cc581215fb84b8ca84d1d9a04e5619 Signed-off-by: eeiillu (cherry picked from commit 80cee5d71d306b8806d9316d12dceb5c1d1d63e6) --- .../main/yang/opendaylight-flow-types.yang | 30 +++++++++++------ .../src/main/yang/sal-flow.yang | 5 ++- .../translator/FlowRemovedTranslator.java | 28 +++++++++++++++- .../translator/FlowRemovedTranslator.java | 32 +++++++++++++------ 4 files changed, 74 insertions(+), 21 deletions(-) diff --git a/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang b/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang index 9de9cb7215..ad70cda601 100644 --- a/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang +++ b/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang @@ -122,15 +122,27 @@ module opendaylight-flow-types { bit SEND_FLOW_REM; } } + typedef removed-flow-reason { + type enumeration { + enum OFPRR_IDLE_TIMEOUT{ + value 0; + description "Flow idle time exceeded idle_timeout."; + } + enum OFPRR_HARD_TIMEOUT { + value 1; + description "Time exceeded hard_timeout."; + } + enum OFPRR_DELETE { + value 2; + description "Evicted by a DELETE flow mod."; + } + enum OFPRR_GROUP_DELETE { + value 3; + description "Group was removed."; + } - typedef removed_reason_flags { - type bits { - bit IDLE_TIMEOUT; - bit HARD_TIMEOUT; - bit DELETE; - bit GROUP_DELETE; - } - } + } + } grouping generic_flow_attributes { leaf priority { @@ -245,7 +257,7 @@ module opendaylight-flow-types { uses generic_flow_attributes; leaf removed_reason { - type removed_reason_flags; + type removed-flow-reason; } leaf duration_nsec { diff --git a/model/model-flow-service/src/main/yang/sal-flow.yang b/model/model-flow-service/src/main/yang/sal-flow.yang index 4cabb74ea5..2fe3c117ed 100644 --- a/model/model-flow-service/src/main/yang/sal-flow.yang +++ b/model/model-flow-service/src/main/yang/sal-flow.yang @@ -4,7 +4,7 @@ module sal-flow { import yang-ext {prefix ext; revision-date "2013-07-09";} import opendaylight-inventory {prefix inv;revision-date "2013-08-19";} - import opendaylight-flow-types {prefix types;revision-date "2013-10-26";} + import opendaylight-flow-types {prefix types;revision-date "2013-10-26";} import opendaylight-group-types {prefix group-type;revision-date "2013-10-18";} import opendaylight-meter-types {prefix meter-type;revision-date "2013-09-18";} import flow-capable-transaction {prefix tr; revision-date "2015-03-04";} @@ -157,6 +157,9 @@ module sal-flow { leaf flow-ref { type types:flow-ref; } + leaf reason { + type types:removed-flow-reason; + } uses node-flow; uses tr:transaction-aware; } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/FlowRemovedTranslator.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/FlowRemovedTranslator.java index eb9ff12296..86d4c9c3a4 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/FlowRemovedTranslator.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/FlowRemovedTranslator.java @@ -7,6 +7,7 @@ */ package org.opendaylight.openflowplugin.impl.translator; +import java.util.Objects; import java.util.Optional; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; import org.opendaylight.openflowplugin.api.openflow.device.MessageTranslator; @@ -14,16 +15,19 @@ import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorE import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemovedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.RemovedFlowReason; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * translate {@link FlowRemoved} message to FlowRemoved notification (omit instructions) */ public class FlowRemovedTranslator implements MessageTranslator { private final ConvertorExecutor convertorExecutor; - + private static final Logger logger = LoggerFactory.getLogger(FlowRemovedTranslator.class); public FlowRemovedTranslator(ConvertorExecutor convertorExecutor) { this.convertorExecutor = convertorExecutor; } @@ -41,6 +45,10 @@ public class FlowRemovedTranslator implements MessageTranslator