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

Message ID 1443024933-47622-1-git-send-email-nithin@vmware.com
State Accepted
Headers show

Commit Message

Nithin Raju Sept. 23, 2015, 4:15 p.m. UTC
Simple code motion.

Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Sairam Venugopal <vsairam@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(-)

Comments

Alin Serdean Sept. 23, 2015, 5:56 p.m. UTC | #1
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@cloudbasesolutions.com>


> -----Mesaj original-----

> De la: dev [mailto:dev-bounces@openvswitch.org] În numele Nithin Raju

> Trimis: Wednesday, September 23, 2015 7:16 PM

> Către: dev@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@vmware.com>

> Acked-by: Sairam Venugopal <vsairam@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@openvswitch.org

> http://openvswitch.org/mailman/listinfo/dev
Ben Pfaff Sept. 29, 2015, 6:58 p.m. UTC | #2
Applied to master and branch-2.4, thanks everyone.

On Wed, Sep 23, 2015 at 05:56:39PM +0000, Alin Serdean wrote:
> 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@cloudbasesolutions.com>
> 
> > -----Mesaj original-----
> > De la: dev [mailto:dev-bounces@openvswitch.org] În numele Nithin Raju
> > Trimis: Wednesday, September 23, 2015 7:16 PM
> > Către: dev@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@vmware.com>
> > Acked-by: Sairam Venugopal <vsairam@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@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev

Patch
diff mbox

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
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_ */