| /* |
| * ws2san.h |
| * |
| * WinSock Direct (SAN) support |
| * |
| * This file is part of the w32api package. |
| * |
| * Contributors: |
| * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
| * |
| * THIS SOFTWARE IS NOT COPYRIGHTED |
| * |
| * This source code is offered for use in the public domain. You may |
| * use, modify or distribute it freely. |
| * |
| * This code is distributed in the hope that it will be useful but |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| * DISCLAIMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| */ |
| |
| #pragma once |
| |
| #define _WS2SAN_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define SO_MAX_RDMA_SIZE 0x700D |
| #define SO_RDMA_THRESHOLD_SIZE 0x700E |
| |
| #define MEM_READ 1 |
| #define MEM_WRITE 2 |
| #define MEM_READWRITE 3 |
| |
| #define WSAID_REGISTERMEMORY \ |
| {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #define WSAID_DEREGISTERMEMORY \ |
| {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #define WSAID_REGISTERRDMAMEMORY \ |
| {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #define WSAID_DEREGISTERRDMAMEMORY \ |
| {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #define WSAID_RDMAWRITE \ |
| {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #define WSAID_RDMAREAD \ |
| {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}} |
| |
| #if(_WIN32_WINNT >= 0x0501) |
| #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \ |
| {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}} |
| #endif |
| |
| typedef struct _WSPUPCALLTABLEEX { |
| LPWPUCLOSEEVENT lpWPUCloseEvent; |
| LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle; |
| LPWPUCREATEEVENT lpWPUCreateEvent; |
| LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle; |
| LPWPUFDISSET lpWPUFDIsSet; |
| LPWPUGETPROVIDERPATH lpWPUGetProviderPath; |
| LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle; |
| LPWPUPOSTMESSAGE lpWPUPostMessage; |
| LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback; |
| LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext; |
| LPWPUQUEUEAPC lpWPUQueueApc; |
| LPWPURESETEVENT lpWPUResetEvent; |
| LPWPUSETEVENT lpWPUSetEvent; |
| LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread; |
| LPWPUCLOSETHREAD lpWPUCloseThread; |
| LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest; |
| } WSPUPCALLTABLEEX, FAR *LPWSPUPCALLTABLEEX; |
| |
| typedef struct _WSABUFEX { |
| u_long len; |
| char FAR *buf; |
| HANDLE handle; |
| } WSABUFEX, FAR * LPWSABUFEX; |
| |
| typedef int |
| (WSPAPI *LPWSPSTARTUPEX)( |
| IN WORD wVersionRequested, |
| OUT LPWSPDATA lpWSPData, |
| IN LPWSAPROTOCOL_INFOW lpProtocolInfo, |
| IN LPWSPUPCALLTABLEEX lpUpcallTable, |
| OUT LPWSPPROC_TABLE lpProcTable); |
| |
| typedef HANDLE |
| (WSPAPI *LPFN_WSPREGISTERMEMORY)( |
| IN SOCKET s, |
| IN PVOID lpBuffer, |
| IN DWORD dwBufferLength, |
| IN DWORD dwFlags, |
| OUT LPINT lpErrno); |
| |
| typedef int |
| (WSPAPI *LPFN_WSPDEREGISTERMEMORY)( |
| IN SOCKET s, |
| IN HANDLE Handle, |
| OUT LPINT lpErrno); |
| |
| typedef int |
| (WSPAPI *LPFN_WSPREGISTERRDMAMEMORY)( |
| IN SOCKET s, |
| IN PVOID lpBuffer, |
| IN DWORD dwBufferLength, |
| IN DWORD dwFlags, |
| OUT LPVOID lpRdmaBufferDescriptor, |
| IN OUT LPDWORD lpdwDescriptorLength, |
| OUT LPINT lpErrno); |
| |
| typedef int |
| (WSPAPI *LPFN_WSPDEREGISTERRDMAMEMORY)( |
| IN SOCKET s, |
| IN LPVOID lpRdmaBufferDescriptor, |
| IN DWORD dwDescriptorLength, |
| OUT LPINT lpErrno); |
| |
| typedef int |
| (WSPAPI *LPFN_WSPRDMAWRITE)( |
| IN SOCKET s, |
| IN LPWSABUFEX lpBuffers, |
| IN DWORD dwBufferCount, |
| IN LPVOID lpTargetBufferDescriptor, |
| IN DWORD dwTargetDescriptorLength, |
| IN DWORD dwTargetBufferOffset, |
| OUT LPDWORD lpdwNumberOfBytesWritten, |
| IN DWORD dwFlags, |
| IN LPWSAOVERLAPPED lpOverlapped OPTIONAL, |
| IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL, |
| IN LPWSATHREADID lpThreadId, |
| OUT LPINT lpErrno); |
| |
| typedef int |
| (WSPAPI *LPFN_WSPRDMAREAD)( |
| IN SOCKET s, |
| IN LPWSABUFEX lpBuffers, |
| IN DWORD dwBufferCount, |
| IN LPVOID lpTargetBufferDescriptor, |
| IN DWORD dwTargetDescriptorLength, |
| IN DWORD dwTargetBufferOffset, |
| OUT LPDWORD lpdwNumberOfBytesRead, |
| IN DWORD dwFlags, |
| IN LPWSAOVERLAPPED lpOverlapped OPTIONAL, |
| IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL, |
| IN LPWSATHREADID lpThreadId, |
| OUT LPINT lpErrno); |
| |
| #if(_WIN32_WINNT >= 0x0501) |
| typedef int |
| (WSPAPI *LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)( |
| IN PVOID lpvAddress, |
| IN SIZE_T Size, |
| OUT LPINT lpErrno); |
| #endif |
| |
| int |
| WSPAPI |
| WSPStartupEx( |
| IN WORD wVersionRequested, |
| OUT LPWSPDATA lpWSPData, |
| IN LPWSAPROTOCOL_INFOW lpProtocolInfo, |
| IN LPWSPUPCALLTABLEEX lpUpcallTable, |
| OUT LPWSPPROC_TABLE lpProcTable); |
| |
| HANDLE |
| WSPAPI |
| WSPRegisterMemory( |
| IN SOCKET s, |
| IN PVOID lpBuffer, |
| IN DWORD dwBufferLength, |
| IN DWORD dwFlags, |
| OUT LPINT lpErrno); |
| |
| int |
| WSPAPI |
| WSPDeregisterMemory( |
| IN SOCKET s, |
| IN HANDLE Handle, |
| OUT LPINT lpErrno); |
| |
| int |
| WSPAPI |
| WSPRegisterRdmaMemory( |
| IN SOCKET s, |
| IN PVOID lpBuffer, |
| IN DWORD dwBufferLength, |
| IN DWORD dwFlags, |
| OUT LPVOID lpRdmaBufferDescriptor, |
| IN OUT LPDWORD lpdwDescriptorLength, |
| OUT LPINT lpErrno); |
| |
| int |
| WSPAPI |
| WSPDeregisterRdmaMemory( |
| IN SOCKET s, |
| IN LPVOID lpRdmaBufferDescriptor, |
| IN DWORD dwDescriptorLength, |
| OUT LPINT lpErrno); |
| |
| int |
| WSPAPI |
| WSPRdmaWrite( |
| IN SOCKET s, |
| IN LPWSABUFEX lpBuffers, |
| IN DWORD dwBufferCount, |
| IN LPVOID lpTargetBufferDescriptor, |
| IN DWORD dwTargetDescriptorLength, |
| IN DWORD dwTargetBufferOffset, |
| OUT LPDWORD lpdwNumberOfBytesWritten, |
| IN DWORD dwFlags, |
| IN LPWSAOVERLAPPED lpOverlapped OPTIONAL, |
| IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL, |
| IN LPWSATHREADID lpThreadId, |
| OUT LPINT lpErrno); |
| |
| int |
| WSPAPI |
| WSPRdmaRead( |
| IN SOCKET s, |
| IN LPWSABUFEX lpBuffers, |
| IN DWORD dwBufferCount, |
| IN LPVOID lpTargetBufferDescriptor, |
| IN DWORD dwTargetDescriptorLength, |
| IN DWORD dwTargetBufferOffset, |
| OUT LPDWORD lpdwNumberOfBytesRead, |
| IN DWORD dwFlags, |
| IN LPWSAOVERLAPPED lpOverlapped OPTIONAL, |
| IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL, |
| IN LPWSATHREADID lpThreadId, |
| OUT LPINT lpErrno); |
| |
| #if(_WIN32_WINNT >= 0x0501) |
| int |
| WSPAPI |
| WSPMemoryRegistrationCacheCallback( |
| IN PVOID lpvAddress, |
| IN SIZE_T Size, |
| OUT LPINT lpErrno); |
| #endif |
| |
| #ifdef __cplusplus |
| } |
| #endif |