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