[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