[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