[ovs-dev] [PATCH 3/4 v2] datapath-windows: return netlink error for read operation

Alin Serdean aserdean at cloudbasesolutions.com
Wed Sep 23 17:57:51 UTC 2015


Acked-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>

> -----Mesaj original-----
> De la: dev [mailto:dev-bounces at openvswitch.org] În numele Nithin Raju
> Trimis: Wednesday, September 23, 2015 7:16 PM
> Către: dev at openvswitch.org
> Subiect: [ovs-dev] [PATCH 3/4 v2] datapath-windows: return netlink error for
> read operation
> 
> 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 <nithin at vmware.com>
> Acked-by: Sairam Venugopal <vsairam at vmware.com>
> ---
> v2: addressed ALin's review comments
> ---
>  datapath-windows/ovsext/Datapath.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-
> windows/ovsext/Datapath.c
> index 1e16604..b3dbd71 100644
> --- a/datapath-windows/ovsext/Datapath.c
> +++ b/datapath-windows/ovsext/Datapath.c
> @@ -1020,10 +1020,24 @@
> 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. */
> +                NL_BUFFER nlBuffer;
> +                msgIn = &msgInTmp;
> +                NlBufInit(&nlBuffer, (PCHAR)msgIn, sizeof *msgIn);
> +                NlFillNlHdr(&nlBuffer, nlFamilyOps->id, 0, 0,
> +                            usrParamsCtx->ovsInstance->pid);
> +            } 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 at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev


More information about the dev mailing list