Acked-by: Sairam Venugopal <vsai...@vmware.com>

On 9/15/15, 11:52 AM, "Nithin Raju" <nit...@vmware.com> wrote:

>The kernel datapath returns a NL error message upon any errors
>during read operations, and returns STATUS_SUCCESS as the return
>code. We reply on the input NL request to get the family ID, and the
>PID. However, when the request is of type OVS_CTRL_CMD_EVENT_NOTIFY
>and OVS_CTRL_CMD_READ_NOTIFY, there's no input buffer associated
>with the request. So, we use a temporary input buffer to be able to
>call the Netlink APIs for constructing the output NL error message.
>
>Signed-off-by: Nithin Raju <nit...@vmware.com>
>---
> datapath-windows/ovsext/Datapath.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
>diff --git a/datapath-windows/ovsext/Datapath.c
>b/datapath-windows/ovsext/Datapath.c
>index 409c4bb..8dce97d 100644
>--- a/datapath-windows/ovsext/Datapath.c
>+++ b/datapath-windows/ovsext/Datapath.c
>@@ -1020,10 +1020,25 @@ InvokeNetlinkCmdHandler(POVS_USER_PARAMS_CONTEXT
>usrParamsCtx,
>     if (status != STATUS_SUCCESS && status != STATUS_PENDING) {
>         if (usrParamsCtx->devOp != OVS_WRITE_DEV_OP && *replyLen == 0) {
>             NL_ERROR nlError = NlMapStatusToNlErr(status);
>-            POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer;
>+            OVS_MESSAGE msgInTmp = { 0 };
>+            POVS_MESSAGE msgIn = NULL;
>             POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
>                 usrParamsCtx->outputBuffer;
> 
>+            if (usrParamsCtx->ovsMsg->genlMsg.cmd ==
>OVS_CTRL_CMD_EVENT_NOTIFY ||
>+                usrParamsCtx->ovsMsg->genlMsg.cmd ==
>OVS_CTRL_CMD_READ_NOTIFY) {
>+                /* There's no input buffer associated with such
>requests. */
>+                msgInTmp.nlMsg.nlmsgLen = 0;
>+                msgInTmp.nlMsg.nlmsgType =  nlFamilyOps->id;
>+                msgInTmp.nlMsg.nlmsgFlags = 0;
>+                msgInTmp.nlMsg.nlmsgSeq = 0;
>+                msgInTmp.nlMsg.nlmsgPid = usrParamsCtx->ovsInstance->pid;
>+                msgIn = &msgInTmp;
>+            } else {
>+                msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer;
>+            }
>+
>+            ASSERT(msgIn);
>             ASSERT(msgError);
>             NlBuildErrorMsg(msgIn, msgError, nlError);
>             *replyLen = msgError->nlMsg.nlmsgLen;
>-- 
>1.8.5.6
>
>_______________________________________________
>dev mailing list
>dev@openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Dc
>ruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=fVZ2fP_SDXKNCKrglHfU-wgr_QVTUe
>I8IqoPOpOTbNc&s=ZE2Nxv2llugjT6mzOnB7bWqonbHf6ywDl5gXPmBUfSs&e= 

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to