- Fix netstat build.
[reactos.git] / include / ddk / ws2san.h
1 /*
2 * ws2san.h
3 *
4 * WinSock Direct (SAN) support
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #define SO_MAX_RDMA_SIZE 0x700D
30 #define SO_RDMA_THRESHOLD_SIZE 0x700E
31
32 #define MEM_READ 1
33 #define MEM_WRITE 2
34 #define MEM_READWRITE 3
35
36 #define WSAID_REGISTERMEMORY \
37 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
38
39 #define WSAID_DEREGISTERMEMORY \
40 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
41
42 #define WSAID_REGISTERRDMAMEMORY \
43 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
44
45 #define WSAID_DEREGISTERRDMAMEMORY \
46 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
47
48 #define WSAID_RDMAWRITE \
49 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
50
51 #define WSAID_RDMAREAD \
52 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
53
54 #if(_WIN32_WINNT >= 0x0501)
55 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
56 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
57 #endif
58
59 typedef struct _WSPUPCALLTABLEEX {
60 LPWPUCLOSEEVENT lpWPUCloseEvent;
61 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
62 LPWPUCREATEEVENT lpWPUCreateEvent;
63 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
64 LPWPUFDISSET lpWPUFDIsSet;
65 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
66 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
67 LPWPUPOSTMESSAGE lpWPUPostMessage;
68 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
69 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
70 LPWPUQUEUEAPC lpWPUQueueApc;
71 LPWPURESETEVENT lpWPUResetEvent;
72 LPWPUSETEVENT lpWPUSetEvent;
73 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
74 LPWPUCLOSETHREAD lpWPUCloseThread;
75 LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
76 } WSPUPCALLTABLEEX, FAR *LPWSPUPCALLTABLEEX;
77
78 typedef struct _WSABUFEX {
79 u_long len;
80 char FAR *buf;
81 HANDLE handle;
82 } WSABUFEX, FAR * LPWSABUFEX;
83
84 typedef int
85 (WSPAPI *LPWSPSTARTUPEX)(
86 IN WORD wVersionRequested,
87 OUT LPWSPDATA lpWSPData,
88 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
89 IN LPWSPUPCALLTABLEEX lpUpcallTable,
90 OUT LPWSPPROC_TABLE lpProcTable);
91
92 typedef HANDLE
93 (WSPAPI *LPFN_WSPREGISTERMEMORY)(
94 IN SOCKET s,
95 IN PVOID lpBuffer,
96 IN DWORD dwBufferLength,
97 IN DWORD dwFlags,
98 OUT LPINT lpErrno);
99
100 typedef int
101 (WSPAPI *LPFN_WSPDEREGISTERMEMORY)(
102 IN SOCKET s,
103 IN HANDLE Handle,
104 OUT LPINT lpErrno);
105
106 typedef int
107 (WSPAPI *LPFN_WSPREGISTERRDMAMEMORY)(
108 IN SOCKET s,
109 IN PVOID lpBuffer,
110 IN DWORD dwBufferLength,
111 IN DWORD dwFlags,
112 OUT LPVOID lpRdmaBufferDescriptor,
113 IN OUT LPDWORD lpdwDescriptorLength,
114 OUT LPINT lpErrno);
115
116 typedef int
117 (WSPAPI *LPFN_WSPDEREGISTERRDMAMEMORY)(
118 IN SOCKET s,
119 IN LPVOID lpRdmaBufferDescriptor,
120 IN DWORD dwDescriptorLength,
121 OUT LPINT lpErrno);
122
123 typedef int
124 (WSPAPI *LPFN_WSPRDMAWRITE)(
125 IN SOCKET s,
126 IN LPWSABUFEX lpBuffers,
127 IN DWORD dwBufferCount,
128 IN LPVOID lpTargetBufferDescriptor,
129 IN DWORD dwTargetDescriptorLength,
130 IN DWORD dwTargetBufferOffset,
131 OUT LPDWORD lpdwNumberOfBytesWritten,
132 IN DWORD dwFlags,
133 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
134 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
135 IN LPWSATHREADID lpThreadId,
136 OUT LPINT lpErrno);
137
138 typedef int
139 (WSPAPI *LPFN_WSPRDMAREAD)(
140 IN SOCKET s,
141 IN LPWSABUFEX lpBuffers,
142 IN DWORD dwBufferCount,
143 IN LPVOID lpTargetBufferDescriptor,
144 IN DWORD dwTargetDescriptorLength,
145 IN DWORD dwTargetBufferOffset,
146 OUT LPDWORD lpdwNumberOfBytesRead,
147 IN DWORD dwFlags,
148 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
149 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
150 IN LPWSATHREADID lpThreadId,
151 OUT LPINT lpErrno);
152
153 #if(_WIN32_WINNT >= 0x0501)
154 typedef int
155 (WSPAPI *LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
156 IN PVOID lpvAddress,
157 IN SIZE_T Size,
158 OUT LPINT lpErrno);
159 #endif
160
161 int
162 WSPAPI
163 WSPStartupEx(
164 IN WORD wVersionRequested,
165 OUT LPWSPDATA lpWSPData,
166 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
167 IN LPWSPUPCALLTABLEEX lpUpcallTable,
168 OUT LPWSPPROC_TABLE lpProcTable);
169
170 HANDLE
171 WSPAPI
172 WSPRegisterMemory(
173 IN SOCKET s,
174 IN PVOID lpBuffer,
175 IN DWORD dwBufferLength,
176 IN DWORD dwFlags,
177 OUT LPINT lpErrno);
178
179 int
180 WSPAPI
181 WSPDeregisterMemory(
182 IN SOCKET s,
183 IN HANDLE Handle,
184 OUT LPINT lpErrno);
185
186 int
187 WSPAPI
188 WSPRegisterRdmaMemory(
189 IN SOCKET s,
190 IN PVOID lpBuffer,
191 IN DWORD dwBufferLength,
192 IN DWORD dwFlags,
193 OUT LPVOID lpRdmaBufferDescriptor,
194 IN OUT LPDWORD lpdwDescriptorLength,
195 OUT LPINT lpErrno);
196
197 int
198 WSPAPI
199 WSPDeregisterRdmaMemory(
200 IN SOCKET s,
201 IN LPVOID lpRdmaBufferDescriptor,
202 IN DWORD dwDescriptorLength,
203 OUT LPINT lpErrno);
204
205 int
206 WSPAPI
207 WSPRdmaWrite(
208 IN SOCKET s,
209 IN LPWSABUFEX lpBuffers,
210 IN DWORD dwBufferCount,
211 IN LPVOID lpTargetBufferDescriptor,
212 IN DWORD dwTargetDescriptorLength,
213 IN DWORD dwTargetBufferOffset,
214 OUT LPDWORD lpdwNumberOfBytesWritten,
215 IN DWORD dwFlags,
216 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
217 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
218 IN LPWSATHREADID lpThreadId,
219 OUT LPINT lpErrno);
220
221 int
222 WSPAPI
223 WSPRdmaRead(
224 IN SOCKET s,
225 IN LPWSABUFEX lpBuffers,
226 IN DWORD dwBufferCount,
227 IN LPVOID lpTargetBufferDescriptor,
228 IN DWORD dwTargetDescriptorLength,
229 IN DWORD dwTargetBufferOffset,
230 OUT LPDWORD lpdwNumberOfBytesRead,
231 IN DWORD dwFlags,
232 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
233 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
234 IN LPWSATHREADID lpThreadId,
235 OUT LPINT lpErrno);
236
237 #if(_WIN32_WINNT >= 0x0501)
238 int
239 WSPAPI
240 WSPMemoryRegistrationCacheCallback(
241 IN PVOID lpvAddress,
242 IN SIZE_T Size,
243 OUT LPINT lpErrno);
244 #endif
245
246 #ifdef __cplusplus
247 }
248 #endif