[ovs-dev] [PATCH v2 1/3] datapath-windows: Move OvsAllocateNBLFromBuffer to BufferMgmt
Nithin Raju
nithin at vmware.com
Tue Oct 27 17:08:47 UTC 2015
Acked-by: Nithin Raju <nithin at vmware.com>
-----Original Message-----
From: Sairam Venugopal <vsairam at vmware.com>
Date: Monday, October 26, 2015 at 4:48 PM
To: "dev at openvswitch.org" <dev at openvswitch.org>
Subject: [ovs-dev] [PATCH v2 1/3] datapath-windows:
Move OvsAllocateNBLFromBuffer to BufferMgmt
>Move the functionality around creating an NBL from Buffer to
>Buffermanagement. This function will be used for converting the buffer
>from user-space to NBL and also by STT - reassembly logic.
>
>Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
>---
> datapath-windows/ovsext/BufferMgmt.c | 46
>++++++++++++++++++++++++++++++++++
> datapath-windows/ovsext/BufferMgmt.h | 3 +++
> datapath-windows/ovsext/User.c | 48
>++----------------------------------
> 3 files changed, 51 insertions(+), 46 deletions(-)
>
>diff --git a/datapath-windows/ovsext/BufferMgmt.c
>b/datapath-windows/ovsext/BufferMgmt.c
>index 9a1cf96..ab7a18e 100644
>--- a/datapath-windows/ovsext/BufferMgmt.c
>+++ b/datapath-windows/ovsext/BufferMgmt.c
>@@ -1308,6 +1308,52 @@ nblcopy_error:
> return NULL;
> }
>
>+/*
>+ *
>--------------------------------------------------------------------------
>+ * OvsAllocateNBLFromBuffer --
>+ *
>+ * This function allocates all the stuff necessary for creating an NBL
>from the
>+ * input buffer of specified length, namely, a nonpaged data buffer of
>size
>+ * length, an MDL from it, and a NB and NBL from it. It does not
>allocate an NBL
>+ * context yet. It also copies data from the specified buffer to the NBL.
>+ *
>--------------------------------------------------------------------------
>+ */
>+PNET_BUFFER_LIST
>+OvsAllocateNBLFromBuffer(PVOID context,
>+ PVOID buffer,
>+ ULONG length)
>+{
>+ POVS_SWITCH_CONTEXT switchContext = (POVS_SWITCH_CONTEXT)context;
>+ UINT8 *data = NULL;
>+ PNET_BUFFER_LIST nbl = NULL;
>+ PNET_BUFFER nb;
>+ PMDL mdl;
>+
>+ if (length > OVS_DEFAULT_DATA_SIZE) {
>+ nbl = OvsAllocateVariableSizeNBL(switchContext, length,
>+ OVS_DEFAULT_HEADROOM_SIZE);
>+
>+ } else {
>+ nbl = OvsAllocateFixSizeNBL(switchContext, length,
>+ OVS_DEFAULT_HEADROOM_SIZE);
>+ }
>+ if (nbl == NULL) {
>+ return NULL;
>+ }
>+
>+ nb = NET_BUFFER_LIST_FIRST_NB(nbl);
>+ mdl = NET_BUFFER_CURRENT_MDL(nb);
>+ data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
>+ NET_BUFFER_CURRENT_MDL_OFFSET(nb);
>+ if (!data) {
>+ OvsCompleteNBL(switchContext, nbl, TRUE);
>+ return NULL;
>+ }
>+
>+ NdisMoveMemory(data, buffer, length);
>+
>+ return nbl;
>+}
>
> /*
> *
>--------------------------------------------------------------------------
>diff --git a/datapath-windows/ovsext/BufferMgmt.h
>b/datapath-windows/ovsext/BufferMgmt.h
>index 915d7f5..79abc3d 100644
>--- a/datapath-windows/ovsext/BufferMgmt.h
>+++ b/datapath-windows/ovsext/BufferMgmt.h
>@@ -113,6 +113,9 @@ PNET_BUFFER_LIST OvsTcpSegmentNBL(PVOID context,
> POVS_PACKET_HDR_INFO hdrInfo,
> UINT32 MSS,
> UINT32 headRoom);
>+PNET_BUFFER_LIST OvsAllocateNBLFromBuffer(PVOID context,
>+ PVOID buffer,
>+ ULONG length);
> PNET_BUFFER_LIST OvsFullCopyToMultipleNBLs(PVOID context,
> PNET_BUFFER_LIST nbl, UINT32 headRoom, BOOLEAN copyNblInfo);
> PNET_BUFFER_LIST OvsCompleteNBL(PVOID context, PNET_BUFFER_LIST nbl,
>diff --git a/datapath-windows/ovsext/User.c
>b/datapath-windows/ovsext/User.c
>index e7be904..7828687 100644
>--- a/datapath-windows/ovsext/User.c
>+++ b/datapath-windows/ovsext/User.c
>@@ -258,50 +258,6 @@
>OvsAllocateForwardingContextForNBL(POVS_SWITCH_CONTEXT switchContext,
> }
>
> /*
>- *
>--------------------------------------------------------------------------
>- * This function allocates all the stuff necessary for creating an NBL
>from the
>- * input buffer of specified length, namely, a nonpaged data buffer of
>size
>- * length, an MDL from it, and a NB and NBL from it. It does not
>allocate an NBL
>- * context yet. It also copies data from the specified buffer to the NBL.
>- *
>--------------------------------------------------------------------------
>- */
>-PNET_BUFFER_LIST
>-OvsAllocateNBLForUserBuffer(POVS_SWITCH_CONTEXT switchContext,
>- PVOID userBuffer,
>- ULONG length)
>-{
>- UINT8 *data = NULL;
>- PNET_BUFFER_LIST nbl = NULL;
>- PNET_BUFFER nb;
>- PMDL mdl;
>-
>- if (length > OVS_DEFAULT_DATA_SIZE) {
>- nbl = OvsAllocateVariableSizeNBL(switchContext, length,
>- OVS_DEFAULT_HEADROOM_SIZE);
>-
>- } else {
>- nbl = OvsAllocateFixSizeNBL(switchContext, length,
>- OVS_DEFAULT_HEADROOM_SIZE);
>- }
>- if (nbl == NULL) {
>- return NULL;
>- }
>-
>- nb = NET_BUFFER_LIST_FIRST_NB(nbl);
>- mdl = NET_BUFFER_CURRENT_MDL(nb);
>- data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
>- NET_BUFFER_CURRENT_MDL_OFFSET(nb);
>- if (!data) {
>- OvsCompleteNBL(switchContext, nbl, TRUE);
>- return NULL;
>- }
>-
>- NdisMoveMemory(data, userBuffer, length);
>-
>- return nbl;
>-}
>-
>-/*
>
>*-------------------------------------------------------------------------
>---
> * OvsNlExecuteCmdHandler --
> * Handler for OVS_PACKET_CMD_EXECUTE command.
>@@ -454,8 +410,8 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
> * Allocate the NBL, copy the data from the userspace buffer.
>Allocate
> * also, the forwarding context for the packet.
> */
>- pNbl = OvsAllocateNBLForUserBuffer(gOvsSwitchContext,
>execute->packetBuf,
>- execute->packetLen);
>+ pNbl = OvsAllocateNBLFromBuffer(gOvsSwitchContext,
>execute->packetBuf,
>+ execute->packetLen);
> if (pNbl == NULL) {
> status = STATUS_NO_MEMORY;
> goto exit;
>--
>1.9.5.msysgit.0
>
>_______________________________________________
>dev mailing list
>dev at openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN
>HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=jZ8HjspFyDiBmgEMY14C-0033lA2z7
>Eu1KTN0Ok4C9E&s=3flOhDCB5ddtDSQT2SxbMKsjlizQXZ7nMcWC8q8mBa4&e=
More information about the dev
mailing list