ws2san.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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. #pragma once
  23. #define _WS2SAN_H_
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #define SO_MAX_RDMA_SIZE 0x700D
  28. #define SO_RDMA_THRESHOLD_SIZE 0x700E
  29. #define MEM_READ 1
  30. #define MEM_WRITE 2
  31. #define MEM_READWRITE 3
  32. #define WSAID_REGISTERMEMORY \
  33. {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  34. #define WSAID_DEREGISTERMEMORY \
  35. {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  36. #define WSAID_REGISTERRDMAMEMORY \
  37. {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  38. #define WSAID_DEREGISTERRDMAMEMORY \
  39. {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  40. #define WSAID_RDMAWRITE \
  41. {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  42. #define WSAID_RDMAREAD \
  43. {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
  44. #if(_WIN32_WINNT >= 0x0501)
  45. #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
  46. {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
  47. #endif
  48. typedef struct _WSPUPCALLTABLEEX {
  49. LPWPUCLOSEEVENT lpWPUCloseEvent;
  50. LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
  51. LPWPUCREATEEVENT lpWPUCreateEvent;
  52. LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
  53. LPWPUFDISSET lpWPUFDIsSet;
  54. LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
  55. LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
  56. LPWPUPOSTMESSAGE lpWPUPostMessage;
  57. LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
  58. LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
  59. LPWPUQUEUEAPC lpWPUQueueApc;
  60. LPWPURESETEVENT lpWPUResetEvent;
  61. LPWPUSETEVENT lpWPUSetEvent;
  62. LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
  63. LPWPUCLOSETHREAD lpWPUCloseThread;
  64. LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
  65. } WSPUPCALLTABLEEX, FAR *LPWSPUPCALLTABLEEX;
  66. typedef struct _WSABUFEX {
  67. u_long len;
  68. char FAR *buf;
  69. HANDLE handle;
  70. } WSABUFEX, FAR * LPWSABUFEX;
  71. typedef int
  72. (WSPAPI *LPWSPSTARTUPEX)(
  73. IN WORD wVersionRequested,
  74. OUT LPWSPDATA lpWSPData,
  75. IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
  76. IN LPWSPUPCALLTABLEEX lpUpcallTable,
  77. OUT LPWSPPROC_TABLE lpProcTable);
  78. typedef HANDLE
  79. (WSPAPI *LPFN_WSPREGISTERMEMORY)(
  80. IN SOCKET s,
  81. IN PVOID lpBuffer,
  82. IN DWORD dwBufferLength,
  83. IN DWORD dwFlags,
  84. OUT LPINT lpErrno);
  85. typedef int
  86. (WSPAPI *LPFN_WSPDEREGISTERMEMORY)(
  87. IN SOCKET s,
  88. IN HANDLE Handle,
  89. OUT LPINT lpErrno);
  90. typedef int
  91. (WSPAPI *LPFN_WSPREGISTERRDMAMEMORY)(
  92. IN SOCKET s,
  93. IN PVOID lpBuffer,
  94. IN DWORD dwBufferLength,
  95. IN DWORD dwFlags,
  96. OUT LPVOID lpRdmaBufferDescriptor,
  97. IN OUT LPDWORD lpdwDescriptorLength,
  98. OUT LPINT lpErrno);
  99. typedef int
  100. (WSPAPI *LPFN_WSPDEREGISTERRDMAMEMORY)(
  101. IN SOCKET s,
  102. IN LPVOID lpRdmaBufferDescriptor,
  103. IN DWORD dwDescriptorLength,
  104. OUT LPINT lpErrno);
  105. typedef int
  106. (WSPAPI *LPFN_WSPRDMAWRITE)(
  107. IN SOCKET s,
  108. IN LPWSABUFEX lpBuffers,
  109. IN DWORD dwBufferCount,
  110. IN LPVOID lpTargetBufferDescriptor,
  111. IN DWORD dwTargetDescriptorLength,
  112. IN DWORD dwTargetBufferOffset,
  113. OUT LPDWORD lpdwNumberOfBytesWritten,
  114. IN DWORD dwFlags,
  115. IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
  116. IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
  117. IN LPWSATHREADID lpThreadId,
  118. OUT LPINT lpErrno);
  119. typedef int
  120. (WSPAPI *LPFN_WSPRDMAREAD)(
  121. IN SOCKET s,
  122. IN LPWSABUFEX lpBuffers,
  123. IN DWORD dwBufferCount,
  124. IN LPVOID lpTargetBufferDescriptor,
  125. IN DWORD dwTargetDescriptorLength,
  126. IN DWORD dwTargetBufferOffset,
  127. OUT LPDWORD lpdwNumberOfBytesRead,
  128. IN DWORD dwFlags,
  129. IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
  130. IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
  131. IN LPWSATHREADID lpThreadId,
  132. OUT LPINT lpErrno);
  133. #if(_WIN32_WINNT >= 0x0501)
  134. typedef int
  135. (WSPAPI *LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
  136. IN PVOID lpvAddress,
  137. IN SIZE_T Size,
  138. OUT LPINT lpErrno);
  139. #endif
  140. int
  141. WSPAPI
  142. WSPStartupEx(
  143. IN WORD wVersionRequested,
  144. OUT LPWSPDATA lpWSPData,
  145. IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
  146. IN LPWSPUPCALLTABLEEX lpUpcallTable,
  147. OUT LPWSPPROC_TABLE lpProcTable);
  148. HANDLE
  149. WSPAPI
  150. WSPRegisterMemory(
  151. IN SOCKET s,
  152. IN PVOID lpBuffer,
  153. IN DWORD dwBufferLength,
  154. IN DWORD dwFlags,
  155. OUT LPINT lpErrno);
  156. int
  157. WSPAPI
  158. WSPDeregisterMemory(
  159. IN SOCKET s,
  160. IN HANDLE Handle,
  161. OUT LPINT lpErrno);
  162. int
  163. WSPAPI
  164. WSPRegisterRdmaMemory(
  165. IN SOCKET s,
  166. IN PVOID lpBuffer,
  167. IN DWORD dwBufferLength,
  168. IN DWORD dwFlags,
  169. OUT LPVOID lpRdmaBufferDescriptor,
  170. IN OUT LPDWORD lpdwDescriptorLength,
  171. OUT LPINT lpErrno);
  172. int
  173. WSPAPI
  174. WSPDeregisterRdmaMemory(
  175. IN SOCKET s,
  176. IN LPVOID lpRdmaBufferDescriptor,
  177. IN DWORD dwDescriptorLength,
  178. OUT LPINT lpErrno);
  179. int
  180. WSPAPI
  181. WSPRdmaWrite(
  182. IN SOCKET s,
  183. IN LPWSABUFEX lpBuffers,
  184. IN DWORD dwBufferCount,
  185. IN LPVOID lpTargetBufferDescriptor,
  186. IN DWORD dwTargetDescriptorLength,
  187. IN DWORD dwTargetBufferOffset,
  188. OUT LPDWORD lpdwNumberOfBytesWritten,
  189. IN DWORD dwFlags,
  190. IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
  191. IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
  192. IN LPWSATHREADID lpThreadId,
  193. OUT LPINT lpErrno);
  194. int
  195. WSPAPI
  196. WSPRdmaRead(
  197. IN SOCKET s,
  198. IN LPWSABUFEX lpBuffers,
  199. IN DWORD dwBufferCount,
  200. IN LPVOID lpTargetBufferDescriptor,
  201. IN DWORD dwTargetDescriptorLength,
  202. IN DWORD dwTargetBufferOffset,
  203. OUT LPDWORD lpdwNumberOfBytesRead,
  204. IN DWORD dwFlags,
  205. IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
  206. IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
  207. IN LPWSATHREADID lpThreadId,
  208. OUT LPINT lpErrno);
  209. #if(_WIN32_WINNT >= 0x0501)
  210. int
  211. WSPAPI
  212. WSPMemoryRegistrationCacheCallback(
  213. IN PVOID lpvAddress,
  214. IN SIZE_T Size,
  215. OUT LPINT lpErrno);
  216. #endif
  217. #ifdef __cplusplus
  218. }
  219. #endif