diff options
author | Sairam Venugopal <vsairam@vmware.com> | 2015-10-26 16:48:39 -0700 |
---|---|---|
committer | Gurucharan Shetty <gshetty@nicira.com> | 2015-10-27 13:48:06 -0700 |
commit | 9a80ee1443134fe36d15c76bc77b567315f948f9 (patch) | |
tree | a4c75c85cd84e267ac9dc85af369f84907dc04c5 | |
parent | 481c5a6d836f77331e42b1fd65b5fc9786bda5d5 (diff) | |
download | openvswitch-9a80ee1443134fe36d15c76bc77b567315f948f9.tar.gz |
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>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
-rw-r--r-- | datapath-windows/ovsext/BufferMgmt.c | 46 | ||||
-rw-r--r-- | datapath-windows/ovsext/BufferMgmt.h | 3 | ||||
-rw-r--r-- | 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 9a1cf96b1..ab7a18e91 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 915d7f555..79abc3d9d 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 e7be9045c..78286870a 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; |