diff options
author | Samuel Ghinet <sghinet@cloudbasesolutions.com> | 2014-08-29 04:06:48 +0000 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-08-29 07:55:05 -0700 |
commit | fa1324c92810c6b1e33b7e87caaaf2e6c4041040 (patch) | |
tree | 8e06f5d991d755215bb6839a997bc58721b2d754 /datapath-windows/ovsext/BufferMgmt.h | |
parent | fd972eb87a888242fb1a8ec2394fa7b3030fbd7d (diff) | |
download | openvswitch-fa1324c92810c6b1e33b7e87caaaf2e6c4041040.tar.gz |
datapath-windows: Rename files.
This patch includes the file renaming and accommodations needed for the file
renaming to build the forwarding extension for Hyper-V.
This patch is also a follow-up for the thread:
http://openvswitch.org/pipermail/dev/2014-August/044005.html
Signed-off-by: Samuel Ghinet <sghinet@cloudbasesolutions.com>
Co-authored-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/BufferMgmt.h')
-rw-r--r-- | datapath-windows/ovsext/BufferMgmt.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/BufferMgmt.h b/datapath-windows/ovsext/BufferMgmt.h new file mode 100644 index 000000000..915d7f555 --- /dev/null +++ b/datapath-windows/ovsext/BufferMgmt.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2014 VMware, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __BUFFER_MGMT_H_ +#define __BUFFER_MGMT_H_ 1 + +#define MEM_ALIGN MEMORY_ALLOCATION_ALIGNMENT +#define MEM_ALIGN_SIZE(_x) ((MEM_ALIGN - 1 + (_x))/MEM_ALIGN * MEM_ALIGN) +#define OVS_CTX_MAGIC 0xabcd + +#define OVS_DEFAULT_NBL_CONTEXT_SIZE MEM_ALIGN_SIZE(64) +#define OVS_DEFAULT_NBL_CONTEXT_FILL \ + (OVS_DEFAULT_NBL_CONTEXT_SIZE - sizeof (OVS_BUFFER_CONTEXT)) + +#define OVS_DEFAULT_DATA_SIZE 256 +#define OVS_DEFAULT_HEADROOM_SIZE 128 +#define OVS_FIX_NBL_DATA_SIZE (OVS_DEFAULT_DATA_SIZE + OVS_DEFAULT_HEADROOM_SIZE) + +/* Default we copy 18 bytes, to make sure ethernet header and vlan is in + * continuous buffer */ +#define OVS_DEFAULT_COPY_SIZE 18 + +enum { + OVS_BUFFER_NEED_COMPLETE = BIT16(0), + OVS_BUFFER_PRIVATE_MDL = BIT16(1), + OVS_BUFFER_PRIVATE_DATA = BIT16(2), + OVS_BUFFER_PRIVATE_NET_BUFFER = BIT16(3), + OVS_BUFFER_PRIVATE_FORWARD_CONTEXT = BIT16(4), + OVS_BUFFER_PRIVATE_CONTEXT = BIT16(5), + OVS_BUFFER_FROM_FIX_SIZE_POOL = BIT16(6), + OVS_BUFFER_FROM_ZERO_SIZE_POOL = BIT16(7), + OVS_BUFFER_FROM_NBL_ONLY_POOL = BIT16(8), + OVS_BUFFER_RECV_BUFFER = BIT16(9), + OVS_BUFFER_SEND_BUFFER = BIT16(10), + OVS_BUFFER_FRAGMENT = BIT16(11), +}; + +typedef union _OVS_BUFFER_CONTEXT { + struct { + UINT16 magic; + UINT16 flags; + UINT32 srcPortNo; + UINT32 refCount; + union { + UINT32 origDataLength; + UINT32 dataOffsetDelta; + }; + }; + + UINT64 value[MEM_ALIGN_SIZE(16) >> 3]; +} OVS_BUFFER_CONTEXT, *POVS_BUFFER_CONTEXT; + + +typedef struct _OVS_NBL_POOL { + NDIS_SWITCH_CONTEXT ndisContext; + NDIS_HANDLE ndisHandle; + NDIS_HANDLE fixSizePool; // data size of 256 + NDIS_HANDLE zeroSizePool; // no data, NBL + NB + Context + NDIS_HANDLE nblOnlyPool; // NBL + context for clone + NDIS_HANDLE nbPool; // NB for clone +#ifdef DBG + LONG fixNBLCount; + LONG zeroNBLCount; + LONG nblOnlyCount; + LONG nbCount; + LONG sysNBLCount; + LONG fragNBLCount; +#endif +} OVS_NBL_POOL, *POVS_NBL_POOL; + + +NDIS_STATUS OvsInitBufferPool(PVOID context); +VOID OvsCleanupBufferPool(PVOID context); + +PNET_BUFFER_LIST OvsAllocateFixSizeNBL(PVOID context, + UINT32 size, + UINT32 headRoom); +PNET_BUFFER_LIST OvsAllocateVariableSizeNBL(PVOID context, + UINT32 size, + UINT32 headRoom); + +POVS_BUFFER_CONTEXT OvsInitExternalNBLContext(PVOID context, + PNET_BUFFER_LIST nbl, + BOOLEAN isRecv); + +PNET_BUFFER_LIST OvsPartialCopyNBL(PVOID context, + PNET_BUFFER_LIST nbl, + UINT32 copySize, + UINT32 headRoom, + BOOLEAN copyNblInfo); +PNET_BUFFER_LIST OvsPartialCopyToMultipleNBLs(PVOID context, + PNET_BUFFER_LIST nbl, + UINT32 copySize, + UINT32 headRoom, + BOOLEAN copyNblInfo); +PNET_BUFFER_LIST OvsFullCopyNBL(PVOID context, PNET_BUFFER_LIST nbl, + UINT32 headRoom, BOOLEAN copyNblInfo); +PNET_BUFFER_LIST OvsTcpSegmentNBL(PVOID context, + PNET_BUFFER_LIST nbl, + POVS_PACKET_HDR_INFO hdrInfo, + UINT32 MSS, + UINT32 headRoom); +PNET_BUFFER_LIST OvsFullCopyToMultipleNBLs(PVOID context, + PNET_BUFFER_LIST nbl, UINT32 headRoom, BOOLEAN copyNblInfo); +PNET_BUFFER_LIST OvsCompleteNBL(PVOID context, PNET_BUFFER_LIST nbl, + BOOLEAN updateRef); +NDIS_STATUS OvsSetCtxSourcePortNo(PNET_BUFFER_LIST nbl, UINT32 portNo); + +NDIS_STATUS OvsGetCtxSourcePortNo(PNET_BUFFER_LIST nbl, UINT32 *portNo); + +#endif /* __BUFFER_MGMT_H_ */ |