Oh, now I see, flow flush is handled :)
________________________________________

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

Added changes to handle DEL_FLOWS (FLUSH) scenario.
---
 datapath-windows/ovsext/Flow.c | 19 ++++++++++---------
 datapath-windows/ovsext/Flow.h |  2 +-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c
index b95f69b..0b4a7fa 100644
--- a/datapath-windows/ovsext/Flow.c
+++ b/datapath-windows/ovsext/Flow.c
@@ -209,7 +209,8 @@ static const NL_POLICY nlFlowActionPolicy[] = {
 /*
  *----------------------------------------------------------------------------
  *  OvsFlowNlNewCmdHandler --
- *    Handler for OVS_FLOW_CMD_NEW command.
+ *    Handler for OVS_FLOW_CMD_NEW/SET/DEL command.
+ *    It also handles FLUSH case (DEL w/o any key in input)
  *----------------------------------------------------------------------------
  */
 NTSTATUS
@@ -252,6 +253,13 @@ OvsFlowNlNewCmdHandler(POVS_USER_PARAMS_CONTEXT 
usrParamsCtx,
         goto done;
     }

+    /* FLOW_DEL command w/o any key input is a flush case. */
+    if ((genlMsgHdr->cmd == OVS_FLOW_CMD_DEL) &&
+        (!(nlAttrs[OVS_FLOW_ATTR_KEY]))) {
+        rc = OvsFlushFlowIoctl(ovsHdr->dp_ifindex);
+        goto done;
+    }
+
     if ((_OvsFlowMapNlToFlowPut(msgIn, nlAttrs[OVS_FLOW_ATTR_KEY],
          nlAttrs[OVS_FLOW_ATTR_ACTIONS], nlAttrs[OVS_FLOW_ATTR_CLEAR],
          &mappedFlow))
@@ -1441,19 +1449,12 @@ unlock:
 }

 NTSTATUS
-OvsFlushFlowIoctl(PVOID inputBuffer,
-                  UINT32 inputLength)
+OvsFlushFlowIoctl(UINT32 dpNo)
 {
     NTSTATUS status = STATUS_SUCCESS;
     OVS_DATAPATH *datapath = NULL;
-    UINT32 dpNo;
     LOCK_STATE_EX dpLockState;

-    if (inputLength != sizeof(UINT32) || inputBuffer == NULL) {
-        return STATUS_INFO_LENGTH_MISMATCH;
-    }
-
-    dpNo = *(UINT32 *)inputBuffer;
     NdisAcquireSpinLock(gOvsCtrlLock);
     if (gOvsSwitchContext == NULL ||
         gOvsSwitchContext->dpNo != dpNo) {
diff --git a/datapath-windows/ovsext/Flow.h b/datapath-windows/ovsext/Flow.h
index e62ba40..10ef62b 100644
--- a/datapath-windows/ovsext/Flow.h
+++ b/datapath-windows/ovsext/Flow.h
@@ -68,7 +68,7 @@ NTSTATUS OvsPutFlowIoctl(PVOID inputBuffer, UINT32 
inputLength,
 NTSTATUS OvsGetFlowIoctl(PVOID inputBuffer, UINT32 inputLength,
                          PVOID outputBuffer, UINT32 outputLength,
                          UINT32 *replyLen);
-NTSTATUS OvsFlushFlowIoctl(PVOID inputBuffer, UINT32 inputLength);
+NTSTATUS OvsFlushFlowIoctl(UINT32 dpNo);

 NTSTATUS OvsFlowNlNewCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
                                 UINT32 *replyLen);
--
1.9.1


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

Reply via email to