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