[ovs-dev] [PATCH 1/4 v2] datapath-windows: move packet read code to User.c

Alin Serdean aserdean at cloudbasesolutions.com
Wed Sep 23 17:56:39 UTC 2015


Still can't get it to apply:
error: patch failed: datapath-windows/ovsext/Datapath.c:1593
error: datapath-windows/ovsext/Datapath.c: patch does not apply

Maybe my git is acting up.

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 1/4 v2] datapath-windows: move packet read
> code to User.c
> 
> Simple code motion.
> 
> 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 | 115 ++-----------------------------------
>  datapath-windows/ovsext/User.c     | 108
> ++++++++++++++++++++++++++++++++++
>  datapath-windows/ovsext/User.h     |   7 +++
>  3 files changed, 119 insertions(+), 111 deletions(-)
> 
> diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-
> windows/ovsext/Datapath.c
> index b7bbf80..1e16604 100644
> --- a/datapath-windows/ovsext/Datapath.c
> +++ b/datapath-windows/ovsext/Datapath.c
> @@ -89,11 +89,8 @@ typedef struct _NETLINK_FAMILY {
> 
>  /* Handlers for the various netlink commands. */  static NetlinkCmdHandler
> OvsPendEventCmdHandler,
> -                         OvsPendPacketCmdHandler,
>                           OvsSubscribeEventCmdHandler,
> -                         OvsSubscribePacketCmdHandler,
>                           OvsReadEventCmdHandler,
> -                         OvsReadPacketCmdHandler,
>                           OvsNewDpCmdHandler,
>                           OvsGetDpCmdHandler,
>                           OvsSetDpCmdHandler;
> @@ -102,7 +99,10 @@ NetlinkCmdHandler        OvsGetNetdevCmdHandler,
>                           OvsGetVportCmdHandler,
>                           OvsSetVportCmdHandler,
>                           OvsNewVportCmdHandler,
> -                         OvsDeleteVportCmdHandler;
> +                         OvsDeleteVportCmdHandler,
> +                         OvsPendPacketCmdHandler,
> +                         OvsSubscribePacketCmdHandler,
> +                         OvsReadPacketCmdHandler;
> 
>  static NTSTATUS HandleGetDpTransaction(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
>                                         UINT32 *replyLen); @@ -1593,110 +1593,3 @@ cleanup:
>      return status;
>  }
> 
> -/*
> - * --------------------------------------------------------------------------
> - * Handler for reading missed pacckets from the driver event queue. This
> - * handler is executed when user modes issues a socket receive on a socket
> - * --------------------------------------------------------------------------
> - */
> -static NTSTATUS
> -OvsReadPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> -                       UINT32 *replyLen)
> -{
> -#ifdef DBG
> -    POVS_MESSAGE msgOut = (POVS_MESSAGE)usrParamsCtx-
> >outputBuffer;
> -#endif
> -    POVS_OPEN_INSTANCE instance =
> -        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> -    NTSTATUS status;
> -
> -    ASSERT(usrParamsCtx->devOp == OVS_READ_DEV_OP);
> -
> -    /* Should never read events with a dump socket */
> -    ASSERT(instance->dumpState.ovsMsg == NULL);
> -
> -    /* Must have an packet queue */
> -    ASSERT(instance->packetQueue != NULL);
> -
> -    /* Output buffer has been validated while validating read dev op. */
> -    ASSERT(msgOut != NULL && usrParamsCtx->outputLength >= sizeof
> *msgOut);
> -
> -    /* Read a packet from the instance queue */
> -    status = OvsReadDpIoctl(instance->fileObject, usrParamsCtx-
> >outputBuffer,
> -                            usrParamsCtx->outputLength, replyLen);
> -    return status;
> -}
> -
> -/*
> - * --------------------------------------------------------------------------
> - *  Handler for the subscription for a packet queue
> - * --------------------------------------------------------------------------
> - */
> -static NTSTATUS
> -OvsSubscribePacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> -                            UINT32 *replyLen)
> -{
> -    NDIS_STATUS status;
> -    BOOLEAN rc;
> -    UINT8 join;
> -    UINT32 pid;
> -    const NL_POLICY policy[] =  {
> -        [OVS_NL_ATTR_PACKET_PID] = {.type = NL_A_U32 },
> -        [OVS_NL_ATTR_PACKET_SUBSCRIBE] = {.type = NL_A_U8 }
> -        };
> -    PNL_ATTR attrs[ARRAY_SIZE(policy)];
> -
> -    UNREFERENCED_PARAMETER(replyLen);
> -
> -    POVS_OPEN_INSTANCE instance =
> -        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> -    POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer;
> -
> -    rc = NlAttrParse(&msgIn->nlMsg, sizeof (*msgIn),
> -         NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, ARRAY_SIZE(policy),
> -                       attrs, ARRAY_SIZE(attrs));
> -    if (!rc) {
> -        status = STATUS_INVALID_PARAMETER;
> -        goto done;
> -    }
> -
> -    join = NlAttrGetU8(attrs[OVS_NL_ATTR_PACKET_PID]);
> -    pid = NlAttrGetU32(attrs[OVS_NL_ATTR_PACKET_PID]);
> -
> -    /* The socket subscribed with must be the same socket we perform
> receive*/
> -    ASSERT(pid == instance->pid);
> -
> -    status = OvsSubscribeDpIoctl(instance, pid, join);
> -
> -    /*
> -     * XXX Need to add this instance to a global data structure
> -     * which hold all packet based instances. The data structure (hash)
> -     * should be searched through the pid field of the instance for
> -     * placing the missed packet into the correct queue
> -     */
> -done:
> -    return status;
> -}
> -
> -/*
> - * --------------------------------------------------------------------------
> - * Handler for queueing an IRP used for missed packet notification. The IRP
> is
> - * completed when a packet received and mismatched. STATUS_PENDING is
> returned
> - * on success. User mode keep a pending IRP at all times.
> - * --------------------------------------------------------------------------
> - */
> -static NTSTATUS
> -OvsPendPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> -                       UINT32 *replyLen)
> -{
> -    UNREFERENCED_PARAMETER(replyLen);
> -
> -    POVS_OPEN_INSTANCE instance =
> -        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> -
> -    /*
> -     * XXX access to packet queue must be through acquiring a lock as user
> mode
> -     * could unsubscribe and the instnace will be freed.
> -     */
> -    return OvsWaitDpIoctl(usrParamsCtx->irp, instance->fileObject);
> -}
> diff --git a/datapath-windows/ovsext/User.c b/datapath-
> windows/ovsext/User.c index 8045e9a..0bbf690 100644
> --- a/datapath-windows/ovsext/User.c
> +++ b/datapath-windows/ovsext/User.c
> @@ -1156,3 +1156,111 @@ fail:
>      OvsFreeMemoryWithTag(elem, OVS_USER_POOL_TAG);
>      return NULL;
>  }
> +
> +/*
> + *
> +-----------------------------------------------------------------------
> +---
> + *  Handler for the subscription for a packet queue
> + *
> +-----------------------------------------------------------------------
> +---
> + */
> +NTSTATUS
> +OvsSubscribePacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                            UINT32 *replyLen) {
> +    NDIS_STATUS status;
> +    BOOLEAN rc;
> +    UINT8 join;
> +    UINT32 pid;
> +    const NL_POLICY policy[] =  {
> +        [OVS_NL_ATTR_PACKET_PID] = {.type = NL_A_U32 },
> +        [OVS_NL_ATTR_PACKET_SUBSCRIBE] = {.type = NL_A_U8 }
> +        };
> +    PNL_ATTR attrs[ARRAY_SIZE(policy)];
> +
> +    UNREFERENCED_PARAMETER(replyLen);
> +
> +    POVS_OPEN_INSTANCE instance =
> +        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> +    POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer;
> +
> +    rc = NlAttrParse(&msgIn->nlMsg, sizeof (*msgIn),
> +         NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, ARRAY_SIZE(policy),
> +                       attrs, ARRAY_SIZE(attrs));
> +    if (!rc) {
> +        status = STATUS_INVALID_PARAMETER;
> +        goto done;
> +    }
> +
> +    join = NlAttrGetU8(attrs[OVS_NL_ATTR_PACKET_PID]);
> +    pid = NlAttrGetU32(attrs[OVS_NL_ATTR_PACKET_PID]);
> +
> +    /* The socket subscribed with must be the same socket we perform
> receive*/
> +    ASSERT(pid == instance->pid);
> +
> +    status = OvsSubscribeDpIoctl(instance, pid, join);
> +
> +    /*
> +     * XXX Need to add this instance to a global data structure
> +     * which hold all packet based instances. The data structure (hash)
> +     * should be searched through the pid field of the instance for
> +     * placing the missed packet into the correct queue
> +     */
> +done:
> +    return status;
> +}
> +
> +/*
> + *
> +-----------------------------------------------------------------------
> +---
> + * Handler for queueing an IRP used for missed packet notification. The
> +IRP is
> + * completed when a packet received and mismatched. STATUS_PENDING
> is
> +returned
> + * on success. User mode keep a pending IRP at all times.
> + *
> +-----------------------------------------------------------------------
> +---
> + */
> +NTSTATUS
> +OvsPendPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                       UINT32 *replyLen) {
> +    UNREFERENCED_PARAMETER(replyLen);
> +
> +    POVS_OPEN_INSTANCE instance =
> +        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> +
> +    /*
> +     * XXX access to packet queue must be through acquiring a lock as user
> mode
> +     * could unsubscribe and the instnace will be freed.
> +     */
> +    return OvsWaitDpIoctl(usrParamsCtx->irp, instance->fileObject); }
> +
> +/*
> + *
> +-----------------------------------------------------------------------
> +---
> + * Handler for reading missed pacckets from the driver event queue.
> +This
> + * handler is executed when user modes issues a socket receive on a
> +socket
> + *
> +-----------------------------------------------------------------------
> +---
> + */
> +NTSTATUS
> +OvsReadPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                       UINT32 *replyLen) { #ifdef DBG
> +    POVS_MESSAGE msgOut = (POVS_MESSAGE)usrParamsCtx-
> >outputBuffer;
> +#endif
> +    POVS_OPEN_INSTANCE instance =
> +        (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance;
> +    NTSTATUS status;
> +
> +    ASSERT(usrParamsCtx->devOp == OVS_READ_DEV_OP);
> +
> +    /* Should never read events with a dump socket */
> +    ASSERT(instance->dumpState.ovsMsg == NULL);
> +
> +    /* Must have an packet queue */
> +    ASSERT(instance->packetQueue != NULL);
> +
> +    /* Output buffer has been validated while validating read dev op. */
> +    ASSERT(msgOut != NULL && usrParamsCtx->outputLength >= sizeof
> + *msgOut);
> +
> +    /* Read a packet from the instance queue */
> +    status = OvsReadDpIoctl(instance->fileObject, usrParamsCtx-
> >outputBuffer,
> +                            usrParamsCtx->outputLength, replyLen);
> +    return status;
> +}
> \ No newline at end of file.
[Alin Gabriel Serdean: ] Newline :).
> diff --git a/datapath-windows/ovsext/User.h b/datapath-
> windows/ovsext/User.h index 139b0ca..8b80ded 100644
> --- a/datapath-windows/ovsext/User.h
> +++ b/datapath-windows/ovsext/User.h
> @@ -118,4 +118,11 @@ OvsAddPidInstance(POVS_SWITCH_CONTEXT
> switchContext, UINT32 pid,  VOID
> OvsDelPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid);
> 
> +NTSTATUS OvsReadPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                                 UINT32 *replyLen); NTSTATUS
> +OvsSubscribePacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                                      UINT32 *replyLen); NTSTATUS
> +OvsPendPacketCmdHandler(POVS_USER_PARAMS_CONTEXT
> usrParamsCtx,
> +                                 UINT32 *replyLen);
> +
>  #endif /* __USER_H_ */
> --
> 1.8.5.6
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev


More information about the dev mailing list