Added changes to handle DEL_FLOWS (FLUSH) scenario.
Signed-off-by: Ankur Sharma ankursha...@vmware.com
Acked-by: Alin Gabriel Serdean aserd...@cloudbasesolutions.com
Acked-by: Eitan Eliahu elia...@vmware.com
---
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 82c1c93..e374e3f 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
@@ -246,6 +247,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))
@@ -1432,19 +1440,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