Hey Ankur,

A problem I see here with flow delete is that Flow delete requires:
- no attributes (i.e. no "key"): if flow flush is requested
- key only: if a specific flow key is to be deleted.

When / if masks will be allowed for flows, the mask is expected not to exist.

How does the current code behave if the userspace gives it a "flow delete" with 
actions (which is invalid)? Will it do a flow set then a flow delete?
As about flow flush, I think that by the current implementation it will crash.

Regards,
Sam
________________________________________
Date: Wed, 24 Sep 2014 00:15:43 -0700
From: Ankur Sharma <ankursha...@vmware.com>
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v1 09/10] datapath-windows/Flow.c: FLOW_DEL
        command handler.
Message-ID: <1411542944-19374-9-git-send-email-ankursha...@vmware.com>

Registered FLOW_DEL command handler. The same command
handler as FLOW_ADD is good enough to handle FLOW_DEL
case as well with minor changes for checking to action
attribute.
---
 datapath-windows/ovsext/Datapath.c | 5 +++++
 datapath-windows/ovsext/Flow.c     | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/datapath-windows/ovsext/Datapath.c 
b/datapath-windows/ovsext/Datapath.c
index 5008aab..5377f09 100644
--- a/datapath-windows/ovsext/Datapath.c
+++ b/datapath-windows/ovsext/Datapath.c
@@ -202,6 +202,11 @@ NETLINK_CMD nlFlowFamilyCmdOps[] = {
       .handler          = OvsFlowNlNewCmdHandler,
       .supportedDevOp   = OVS_TRANSACTION_DEV_OP,
       .validateDpIndex  = FALSE
+    },
+    { .cmd              = OVS_FLOW_CMD_DEL,
+      .handler          = OvsFlowNlNewCmdHandler,
+      .supportedDevOp   = OVS_TRANSACTION_DEV_OP,
+      .validateDpIndex  = FALSE
     }
 };

diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c
index e170de6..b95f69b 100644
--- a/datapath-windows/ovsext/Flow.c
+++ b/datapath-windows/ovsext/Flow.c
@@ -358,8 +358,11 @@ _OvsFlowMapNlToFlowPut(POVS_MESSAGE msgIn, PNL_ATTR 
keyAttr,
                                 mappedFlow);

     /* Map the action */
-    mappedFlow->actionsLen = NlAttrGetSize(actionAttr);
-    mappedFlow->actions = NlAttrGet(actionAttr);
+    if (actionAttr) {
+        mappedFlow->actionsLen = NlAttrGetSize(actionAttr);
+        mappedFlow->actions = NlAttrGet(actionAttr);
+    }
+
     mappedFlow->dpNo = ovsHdr->dp_ifindex;

     _OvsFlowMapNlToFlowPutFlags(genlMsgHdr, flowAttrClear,
--
1.9.1


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to