288 lines
6.8 KiB
C
288 lines
6.8 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ws2san.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains the Microsoft-specific extensions to the Windows
|
||
|
Sockets SPI for WinSock Direct (SAN) support.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _WS2SAN_H_
|
||
|
#define _WS2SAN_H_
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Option for getting maximum RDMA transfer size supported by provider
|
||
|
*/
|
||
|
#define SO_MAX_RDMA_SIZE 0x700D
|
||
|
|
||
|
/*
|
||
|
* Option for getting minimum RDMA transfer size feasible (performance-wise)
|
||
|
* for the provider
|
||
|
*/
|
||
|
#define SO_RDMA_THRESHOLD_SIZE 0x700E
|
||
|
|
||
|
/*
|
||
|
* The upcall table. This structure is passed by value to the service
|
||
|
* provider's WSPStartup() entrypoint.
|
||
|
*/
|
||
|
|
||
|
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;
|
||
|
|
||
|
/*
|
||
|
* An extended WSABUF, that includes a registration handle
|
||
|
*/
|
||
|
|
||
|
typedef struct _WSABUFEX {
|
||
|
u_long len; /* the length of the buffer */
|
||
|
char FAR * buf; /* the pointer to the buffer */
|
||
|
HANDLE handle; /* The handle returned by WSPRegisterMemory */
|
||
|
} WSABUFEX, FAR * LPWSABUFEX;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* WinSock 2 SPI socket function prototypes
|
||
|
*/
|
||
|
|
||
|
int
|
||
|
WSPAPI
|
||
|
WSPStartupEx(
|
||
|
IN WORD wVersionRequested,
|
||
|
OUT LPWSPDATA lpWSPData,
|
||
|
IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
||
|
IN LPWSPUPCALLTABLEEX lpUpcallTable,
|
||
|
OUT LPWSPPROC_TABLE lpProcTable
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
int
|
||
|
(WSPAPI * LPWSPSTARTUPEX)(
|
||
|
WORD wVersionRequested,
|
||
|
LPWSPDATA lpWSPData,
|
||
|
LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
||
|
LPWSPUPCALLTABLEEX lpUpcallTable,
|
||
|
LPWSPPROC_TABLE lpProcTable
|
||
|
);
|
||
|
|
||
|
#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}}
|
||
|
|
||
|
#define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
|
||
|
{0xE5DA4AF8,0xD824,0x48CD,{0xA7,0x99,0x63,0x37,0xA9,0x8E,0xD2,0xAF}}
|
||
|
|
||
|
#define MEM_READ 1
|
||
|
#define MEM_WRITE 2
|
||
|
#define MEM_READWRITE 3
|
||
|
|
||
|
|
||
|
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,
|
||
|
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
||
|
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,
|
||
|
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
||
|
IN LPWSATHREADID lpThreadId,
|
||
|
OUT LPINT lpErrno
|
||
|
);
|
||
|
|
||
|
int WSPAPI
|
||
|
WSPMemoryRegistrationCacheCallback(
|
||
|
IN LPVOID lpvAddress,
|
||
|
IN SIZE_T Size,
|
||
|
OUT LPINT lpErrno
|
||
|
);
|
||
|
|
||
|
/*
|
||
|
* "QueryInterface" versions of the above APIs.
|
||
|
*/
|
||
|
|
||
|
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
|
||
|
BOOL
|
||
|
(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,
|
||
|
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
||
|
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,
|
||
|
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
||
|
IN LPWSATHREADID lpThreadId,
|
||
|
OUT LPINT lpErrno
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
int
|
||
|
(WSPAPI * LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
|
||
|
IN LPVOID lpvAddress,
|
||
|
IN SIZE_T Size,
|
||
|
OUT LPINT lpErrno
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // _WS2SAN_H_
|