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 <vsai...@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 http://openvswitch.org/mailman/listinfo/dev