mstcpip.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _MSTCPIP_
  7. #define _MSTCPIP_
  8. #include <_mingw_unicode.h>
  9. #include <winapifamily.h>
  10. #ifdef __LP64__
  11. #pragma push_macro("u_long")
  12. #undef u_long
  13. #define u_long __ms_u_long
  14. #endif
  15. #if NTDDI_VERSION >= NTDDI_WIN10_RS2
  16. typedef enum _TCPSTATE {
  17. TCPSTATE_CLOSED,
  18. TCPSTATE_LISTEN,
  19. TCPSTATE_SYN_SENT,
  20. TCPSTATE_SYN_RCVD,
  21. TCPSTATE_ESTABLISHED,
  22. TCPSTATE_FIN_WAIT_1,
  23. TCPSTATE_FIN_WAIT_2,
  24. TCPSTATE_CLOSE_WAIT,
  25. TCPSTATE_CLOSING,
  26. TCPSTATE_LAST_ACK,
  27. TCPSTATE_TIME_WAIT,
  28. TCPSTATE_MAX
  29. } TCPSTATE;
  30. #endif
  31. #ifndef _TRANSPORT_SETTING_COMMON_
  32. #define _TRANSPORT_SETTING_COMMON_
  33. typedef struct TRANSPORT_SETTING_ID {
  34. GUID Guid;
  35. } TRANSPORT_SETTING_ID, *PTRANSPORT_SETTING_ID;
  36. #endif
  37. struct tcp_keepalive {
  38. u_long onoff;
  39. u_long keepalivetime;
  40. u_long keepaliveinterval;
  41. };
  42. typedef enum {
  43. CONTROL_CHANNEL_TRIGGER_STATUS_INVALID = 0,
  44. CONTROL_CHANNEL_TRIGGER_STATUS_SOFTWARE_SLOT_ALLOCATED = 1,
  45. CONTROL_CHANNEL_TRIGGER_STATUS_HARDWARE_SLOT_ALLOCATED = 2,
  46. CONTROL_CHANNEL_TRIGGER_STATUS_POLICY_ERROR = 3,
  47. CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR = 4,
  48. CONTROL_CHANNEL_TRIGGER_STATUS_TRANSPORT_DISCONNECTED = 5,
  49. CONTROL_CHANNEL_TRIGGER_STATUS_SERVICE_UNAVAILABLE = 6
  50. } CONTROL_CHANNEL_TRIGGER_STATUS, *PCONTROL_CHANNEL_TRIGGER_STATUS;
  51. #define CONTROL_CHANNEL_TRIGGER_STATUS_MAX CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR
  52. typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT {
  53. TRANSPORT_SETTING_ID TransportSettingId;
  54. GUID BrokerEventGuid;
  55. } REAL_TIME_NOTIFICATION_SETTING_INPUT, *PREAL_TIME_NOTIFICATION_SETTING_INPUT;
  56. typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT_EX {
  57. TRANSPORT_SETTING_ID TransportSettingId;
  58. GUID BrokerEventGuid;
  59. BOOLEAN Unmark;
  60. } REAL_TIME_NOTIFICATION_SETTING_INPUT_EX, *PREAL_TIME_NOTIFICATION_SETTING_INPUT_EX;
  61. typedef struct _REAL_TIME_NOTIFICATION_SETTING_OUTPUT {
  62. CONTROL_CHANNEL_TRIGGER_STATUS ChannelStatus;
  63. } REAL_TIME_NOTIFICATION_SETTING_OUTPUT, *PREAL_TIME_NOTIFICATION_SETTING_OUTPUT;
  64. typedef struct _ASSOCIATE_NAMERES_CONTEXT_INPUT {
  65. TRANSPORT_SETTING_ID TransportSettingId;
  66. UINT64 Handle;
  67. } ASSOCIATE_NAMERES_CONTEXT_INPUT, *PASSOCIATE_NAMERES_CONTEXT_INPUT;
  68. #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
  69. #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2)
  70. #define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3)
  71. #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
  72. #define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR,5)
  73. #define SIO_UCAST_IF _WSAIOW(IOC_VENDOR,6)
  74. #define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7)
  75. #define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR,8)
  76. #define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR,9)
  77. #define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR,10)
  78. #define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR,11)
  79. #define SIO_RCVALL_MCAST_IF _WSAIOW(IOC_VENDOR,13)
  80. #define SIO_RCVALL_IF _WSAIOW(IOC_VENDOR,14)
  81. #define SIO_LOOPBACK_FAST_PATH _WSAIOW(IOC_VENDOR,16)
  82. #define SIO_TCP_INITIAL_RTO _WSAIOW(IOC_VENDOR,17)
  83. #define SIO_APPLY_TRANSPORT_SETTING _WSAIOW(IOC_VENDOR,19)
  84. #define SIO_QUERY_TRANSPORT_SETTING _WSAIOW(IOC_VENDOR,20)
  85. #define SIO_TCP_SET_ICW _WSAIOW(IOC_VENDOR,22)
  86. #define SIO_TCP_SET_ACK_FREQUENCY _WSAIOW(IOC_VENDOR,23)
  87. #if NTDDI_VERSION >= NTDDI_WIN10_RS3
  88. #define SIO_SET_PRIORITY_HINT _WSAIOW(IOC_VENDOR,24)
  89. #endif
  90. #if NTDDI_VERSION >= NTDDI_WIN10_FE
  91. #define SIO_PRIORITY_HINT SIO_SET_PRIORITY_HINT
  92. #endif
  93. #if NTDDI_VERSION >= NTDDI_WIN10_RS2
  94. #define SIO_TCP_INFO _WSAIORW(IOC_VENDOR,39)
  95. #endif
  96. #if NTDDI_VERSION >= NTDDI_WIN10_VB
  97. #define SIO_CPU_AFFINITY _WSAIOW(IOC_VENDOR,21)
  98. #endif
  99. #if NTDDI_VERSION >= NTDDI_WIN10_FE
  100. #define SIO_TIMESTAMPING _WSAIOW(IOC_VENDOR, 235)
  101. typedef struct _TIMESTAMPING_CONFIG {
  102. ULONG Flags;
  103. USHORT TxTimestampsBuffered;
  104. } TIMESTAMPING_CONFIG, *PTIMESTAMPING_CONFIG;
  105. #define TIMESTAMPING_FLAG_RX 0x1
  106. #define TIMESTAMPING_FLAG_TX 0x2
  107. #define SO_TIMESTAMP 0x300A
  108. #define SO_TIMESTAMP_ID 0x300B
  109. #define SIO_GET_TX_TIMESTAMP _WSAIOW(IOC_VENDOR, 234)
  110. typedef enum {
  111. SocketPriorityHintVeryLow = 0,
  112. SocketPriorityHintLow,
  113. SocketPriorityHintNormal,
  114. SocketMaximumPriorityHintType
  115. } SOCKET_PRIORITY_HINT, *PSOCKET_PRIORITY_HINT;
  116. typedef struct _PRIORITY_STATUS {
  117. SOCKET_PRIORITY_HINT Sender;
  118. SOCKET_PRIORITY_HINT Receiver;
  119. } PRIORITY_STATUS, *PPRIORITY_STATUS;
  120. #endif /* NTDDI_WIN10_FE */
  121. typedef enum {
  122. RCVALL_OFF = 0,
  123. RCVALL_ON = 1,
  124. RCVALL_SOCKETLEVELONLY = 2,
  125. RCVALL_IPLEVEL = 3
  126. } RCVALL_VALUE, *PRCVALL_VALUE;
  127. #define RCVALL_MAX RCVALL_IPLEVEL
  128. typedef struct {
  129. RCVALL_VALUE Mode;
  130. ULONG Interface;
  131. } RCVALL_IF, *PRCVALL_IF;
  132. #define TCP_INITIAL_RTO_UNSPECIFIED_RTT ((USHORT) -1)
  133. #define TCP_INITIAL_RTO_UNSPECIFIED_MAX_SYN_RETRANSMISSIONS ((UCHAR) -1)
  134. #define TCP_INITIAL_RTO_DEFAULT_RTT (0)
  135. #define TCP_INITIAL_RTO_DEFAULT_MAX_SYN_RETRANSMISSIONS (0)
  136. #define TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS ((UCHAR) -2)
  137. typedef struct _TCP_INITIAL_RTO_PARAMETERS {
  138. USHORT Rtt;
  139. UCHAR MaxSynRetransmissions;
  140. } TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS;
  141. typedef enum {
  142. TCP_ICW_LEVEL_DEFAULT = 0,
  143. TCP_ICW_LEVEL_HIGH = 1,
  144. TCP_ICW_LEVEL_VERY_HIGH = 2,
  145. TCP_ICW_LEVEL_AGGRESSIVE = 3,
  146. TCP_ICW_LEVEL_EXPERIMENTAL = 4,
  147. TCP_ICW_LEVEL_COMPAT = 254,
  148. TCP_ICW_LEVEL_MAX = 255
  149. } TCP_ICW_LEVEL, *PTCP_ICW_LEVEL;
  150. typedef struct _TCP_ICW_PARAMETERS {
  151. TCP_ICW_LEVEL Level;
  152. } TCP_ICW_PARAMETERS, *PTCP_ICW_PARAMETERS;
  153. typedef struct _TCP_ACK_FREQUENCY_PARAMETERS {
  154. UCHAR TcpDelayedAckFrequency;
  155. } TCP_ACK_FREQUENCY_PARAMETERS, *PTCP_ACK_FREQUENCY_PARAMETERS;
  156. #if NTDDI_VERSION >= NTDDI_WIN10_RS2
  157. typedef struct _TCP_INFO_v0 {
  158. TCPSTATE State;
  159. ULONG Mss;
  160. ULONG64 ConnectionTimeMs;
  161. BOOLEAN TimestampsEnabled;
  162. ULONG RttUs;
  163. ULONG MinRttUs;
  164. ULONG BytesInFlight;
  165. ULONG Cwnd;
  166. ULONG SndWnd;
  167. ULONG RcvWnd;
  168. ULONG RcvBuf;
  169. ULONG64 BytesOut;
  170. ULONG64 BytesIn;
  171. ULONG BytesReordered;
  172. ULONG BytesRetrans;
  173. ULONG FastRetrans;
  174. ULONG DupAcksIn;
  175. ULONG TimeoutEpisodes;
  176. UCHAR SynRetrans;
  177. } TCP_INFO_v0, *PTCP_INFO_v0;
  178. #endif
  179. #if NTDDI_VERSION >= NTDDI_WIN10_RS5
  180. typedef struct _TCP_INFO_v1 {
  181. TCPSTATE State;
  182. ULONG Mss;
  183. ULONG64 ConnectionTimeMs;
  184. BOOLEAN TimestampsEnabled;
  185. ULONG RttUs;
  186. ULONG MinRttUs;
  187. ULONG BytesInFlight;
  188. ULONG Cwnd;
  189. ULONG SndWnd;
  190. ULONG RcvWnd;
  191. ULONG RcvBuf;
  192. ULONG64 BytesOut;
  193. ULONG64 BytesIn;
  194. ULONG BytesReordered;
  195. ULONG BytesRetrans;
  196. ULONG FastRetrans;
  197. ULONG DupAcksIn;
  198. ULONG TimeoutEpisodes;
  199. UCHAR SynRetrans;
  200. ULONG SndLimTransRwin;
  201. ULONG SndLimTimeRwin;
  202. ULONG64 SndLimBytesRwin;
  203. ULONG SndLimTransCwnd;
  204. ULONG SndLimTimeCwnd;
  205. ULONG64 SndLimBytesCwnd;
  206. ULONG SndLimTransSnd;
  207. ULONG SndLimTimeSnd;
  208. ULONG64 SndLimBytesSnd;
  209. } TCP_INFO_v1, *PTCP_INFO_v1;
  210. #endif
  211. #define SIO_ACQUIRE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 100)
  212. #define SIO_RELEASE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 101)
  213. #define SIO_ASSOCIATE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 102)
  214. typedef struct _INET_PORT_RANGE {
  215. USHORT StartPort;
  216. USHORT NumberOfPorts;
  217. } INET_PORT_RANGE, *PINET_PORT_RANGE;
  218. typedef struct _INET_PORT_RANGE INET_PORT_RESERVATION, *PINET_PORT_RESERVATION;
  219. typedef struct {
  220. ULONG64 Token;
  221. } INET_PORT_RESERVATION_TOKEN, *PINET_PORT_RESERVATION_TOKEN;
  222. #define INVALID_PORT_RESERVATION_TOKEN ((ULONG64)0)
  223. typedef struct {
  224. #ifdef __cplusplus
  225. INET_PORT_RESERVATION Reservation;
  226. INET_PORT_RESERVATION_TOKEN Token;
  227. #else
  228. INET_PORT_RESERVATION;
  229. INET_PORT_RESERVATION_TOKEN;
  230. #endif
  231. } INET_PORT_RESERVATION_INSTANCE, *PINET_PORT_RESERVATION_INSTANCE;
  232. typedef struct {
  233. ULONG OwningPid;
  234. } INET_PORT_RESERVATION_INFORMATION, *PINET_PORT_RESERVATION_INFORMATION;
  235. #if (_WIN32_WINNT >= 0x0502)
  236. typedef enum _SOCKET_SECURITY_PROTOCOL {
  237. SOCKET_SECURITY_PROTOCOL_DEFAULT,
  238. SOCKET_SECURITY_PROTOCOL_IPSEC,
  239. #if NTDDI_VERSION >= NTDDI_WIN7
  240. SOCKET_SECURITY_PROTOCOL_IPSEC2,
  241. #endif
  242. SOCKET_SECURITY_PROTOCOL_INVALID
  243. } SOCKET_SECURITY_PROTOCOL;
  244. #define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION 0x1
  245. #define SOCKET_SETTINGS_ALLOW_INSECURE 0x2
  246. typedef enum _SOCKET_USAGE_TYPE {
  247. SYSTEM_CRITICAL_SOCKET = 1
  248. } SOCKET_USAGE_TYPE;
  249. typedef struct _SOCKET_PEER_TARGET_NAME {
  250. SOCKET_SECURITY_PROTOCOL SecurityProtocol;
  251. SOCKADDR_STORAGE PeerAddress;
  252. ULONG PeerTargetNameStringLen;
  253. wchar_t AllStrings[];
  254. } SOCKET_PEER_TARGET_NAME;
  255. #define SOCKET_INFO_CONNECTION_SECURED 0x00000001
  256. #define SOCKET_INFO_CONNECTION_ENCRYPTED 0x00000002
  257. #define SOCKET_INFO_CONNECTION_IMPERSONATED 0x00000004
  258. typedef struct _SOCKET_SECURITY_QUERY_INFO {
  259. SOCKET_SECURITY_PROTOCOL SecurityProtocol;
  260. ULONG Flags;
  261. UINT64 PeerApplicationAccessTokenHandle;
  262. UINT64 PeerMachineAccessTokenHandle;
  263. } SOCKET_SECURITY_QUERY_INFO;
  264. typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE {
  265. SOCKET_SECURITY_PROTOCOL SecurityProtocol;
  266. SOCKADDR_STORAGE PeerAddress;
  267. ULONG PeerTokenAccessMask;
  268. } SOCKET_SECURITY_QUERY_TEMPLATE;
  269. typedef struct _SOCKET_SECURITY_SETTINGS {
  270. SOCKET_SECURITY_PROTOCOL SecurityProtocol;
  271. ULONG SecurityFlags;
  272. } SOCKET_SECURITY_SETTINGS;
  273. #define SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION 0x00000001
  274. typedef struct _SOCKET_SECURITY_SETTINGS_IPSEC {
  275. SOCKET_SECURITY_PROTOCOL SecurityProtocol;
  276. ULONG SecurityFlags;
  277. ULONG IpsecFlags;
  278. GUID AuthipMMPolicyKey;
  279. GUID AuthipQMPolicyKey;
  280. GUID Reserved;
  281. UINT64 Reserved2;
  282. ULONG UserNameStringLen;
  283. ULONG DomainNameStringLen;
  284. ULONG PasswordStringLen;
  285. wchar_t AllStrings[];
  286. } SOCKET_SECURITY_SETTINGS_IPSEC;
  287. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  288. #define RtlIpv6AddressToString __MINGW_NAME_AW(RtlIpv6AddressToString)
  289. #define RtlIpv6AddressToStringEx __MINGW_NAME_AW(RtlIpv6AddressToStringEx)
  290. #ifdef _WS2IPDEF_
  291. LPSTR NTAPI RtlIpv6AddressToStringA(const IN6_ADDR *Addr, LPSTR S);
  292. LPWSTR NTAPI RtlIpv6AddressToStringW(const IN6_ADDR *Addr, LPWSTR S);
  293. LONG NTAPI RtlIpv6AddressToStringExA(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPSTR AddressString, PULONG AddressStringLength);
  294. LONG NTAPI RtlIpv6AddressToStringExW(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength);
  295. #define RtlIpv4AddressToString __MINGW_NAME_AW(RtlIpv4AddressToString)
  296. LPSTR NTAPI RtlIpv4AddressToStringA(const IN_ADDR *Addr, LPSTR S);
  297. LPWSTR NTAPI RtlIpv4AddressToStringW(const IN_ADDR *Addr, LPWSTR S);
  298. #define RtlIpv4AddressToStringEx __MINGW_NAME_AW(RtlIpv4AddressToStringEx)
  299. LONG NTAPI RtlIpv4AddressToStringExA(const IN_ADDR *Address, USHORT Port, LPSTR AddressString, PULONG AddressStringLength);
  300. LONG NTAPI RtlIpv4AddressToStringExW(const IN_ADDR *Address, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength);
  301. #define RtlIpv4StringToAddress __MINGW_NAME_AW(RtlIpv4StringToAddress)
  302. LONG NTAPI RtlIpv4StringToAddressA(PCSTR S, BOOLEAN Strict, LPSTR *Terminator, IN_ADDR *Addr);
  303. LONG NTAPI RtlIpv4StringToAddressW(PCWSTR S, BOOLEAN Strict, LPWSTR *Terminator, IN_ADDR *Addr);
  304. #define RtlIpv4StringToAddressEx __MINGW_NAME_AW(RtlIpv4StringToAddressEx)
  305. LONG NTAPI RtlIpv4StringToAddressExA(PCSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port);
  306. LONG NTAPI RtlIpv4StringToAddressExW(PCWSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port);
  307. #define RtlIpv6StringToAddressEx __MINGW_NAME_AW(RtlIpv6StringToAddressEx)
  308. LONG NTAPI RtlIpv6StringToAddressExA(PCSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port);
  309. LONG NTAPI RtlIpv6StringToAddressExW(PCWSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port);
  310. #endif /* _WS2IPDEF_ */
  311. #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
  312. #endif /*(_WIN32_WINNT >= 0x0502)*/
  313. #ifdef __LP64__
  314. #pragma pop_macro("u_long")
  315. #endif
  316. #endif /* _MSTCPIP_ */