diff options
author | Ankur Sharma <ankursharma@vmware.com> | 2014-09-26 17:33:34 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-09-29 09:03:42 -0700 |
commit | 3d72793fb2ac1a22c2c3bb98cd995b9e812a27c6 (patch) | |
tree | 31ca20c8922b9df9baa64b835e54f0845cd28697 | |
parent | 6247bec1331d678bb843827a3851a1d914a766c8 (diff) | |
download | openvswitch-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>
-rw-r--r-- | datapath-windows/ovsext/Flow.c | 19 | ||||
-rw-r--r-- | 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 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); |