summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext
diff options
context:
space:
mode:
authorAnkur Sharma <ankursharma@vmware.com>2014-09-26 17:33:34 -0700
committerBen Pfaff <blp@nicira.com>2014-09-29 09:03:42 -0700
commit3d72793fb2ac1a22c2c3bb98cd995b9e812a27c6 (patch)
tree31ca20c8922b9df9baa64b835e54f0845cd28697 /datapath-windows/ovsext
parent6247bec1331d678bb843827a3851a1d914a766c8 (diff)
downloadopenvswitch-3d72793fb2ac1a22c2c3bb98cd995b9e812a27c6.tar.gz
datapath-windows/Flow.c: DEL_FLOWS command handler.
Added changes to handle DEL_FLOWS (FLUSH) scenario. Signed-off-by: Ankur Sharma <ankursharma@vmware.com> Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Acked-by: Eitan Eliahu <eliahue@vmware.com> Acked-by: Nithin Raju <nithin@vmware.com> Acked-by: Samuel Ghinet <sghinet@cloudbasesolutions.com> Tested-by: Ankur Sharma <ankursharma@vmware.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext')
-rw-r--r--datapath-windows/ovsext/Flow.c19
-rw-r--r--datapath-windows/ovsext/Flow.h2
2 files changed, 11 insertions, 10 deletions
diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c
index 2eb617485..dc00b041b 100644
--- a/datapath-windows/ovsext/Flow.c
+++ b/datapath-windows/ovsext/Flow.c
@@ -212,7 +212,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
@@ -249,6 +250,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 ((_MapNlToFlowPut(msgIn, nlAttrs[OVS_FLOW_ATTR_KEY],
nlAttrs[OVS_FLOW_ATTR_ACTIONS], nlAttrs[OVS_FLOW_ATTR_CLEAR],
&mappedFlow))
@@ -1501,19 +1509,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 e62ba409b..10ef62be5 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);