Message ID | 1445903321-7864-2-git-send-email-vsairam@vmware.com |
---|---|
State | Accepted |
Headers | show |
Acked-by: Nithin Raju <nithin@vmware.com> -----Original Message----- From: Sairam Venugopal <vsairam@vmware.com> Date: Monday, October 26, 2015 at 4:48 PM To: "dev@openvswitch.org" <dev@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@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@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=
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;
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@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(-)