|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #ifndef _MSTCPIP_ | 
|  | #define _MSTCPIP_ | 
|  |  | 
|  | #include <_mingw_unicode.h> | 
|  | #include <winapifamily.h> | 
|  |  | 
|  | #ifdef __LP64__ | 
|  | #pragma push_macro("u_long") | 
|  | #undef u_long | 
|  | #define u_long __ms_u_long | 
|  | #endif | 
|  |  | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_RS2 | 
|  | typedef enum _TCPSTATE { | 
|  | TCPSTATE_CLOSED, | 
|  | TCPSTATE_LISTEN, | 
|  | TCPSTATE_SYN_SENT, | 
|  | TCPSTATE_SYN_RCVD, | 
|  | TCPSTATE_ESTABLISHED, | 
|  | TCPSTATE_FIN_WAIT_1, | 
|  | TCPSTATE_FIN_WAIT_2, | 
|  | TCPSTATE_CLOSE_WAIT, | 
|  | TCPSTATE_CLOSING, | 
|  | TCPSTATE_LAST_ACK, | 
|  | TCPSTATE_TIME_WAIT, | 
|  | TCPSTATE_MAX | 
|  | } TCPSTATE; | 
|  | #endif | 
|  |  | 
|  | #ifndef _TRANSPORT_SETTING_COMMON_ | 
|  | #define _TRANSPORT_SETTING_COMMON_ | 
|  | typedef struct TRANSPORT_SETTING_ID { | 
|  | GUID Guid; | 
|  | } TRANSPORT_SETTING_ID, *PTRANSPORT_SETTING_ID; | 
|  | #endif | 
|  |  | 
|  | struct tcp_keepalive { | 
|  | u_long onoff; | 
|  | u_long keepalivetime; | 
|  | u_long keepaliveinterval; | 
|  | }; | 
|  |  | 
|  | typedef enum { | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_INVALID = 0, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_SOFTWARE_SLOT_ALLOCATED = 1, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_HARDWARE_SLOT_ALLOCATED = 2, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_POLICY_ERROR = 3, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR = 4, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_TRANSPORT_DISCONNECTED = 5, | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS_SERVICE_UNAVAILABLE = 6 | 
|  | } CONTROL_CHANNEL_TRIGGER_STATUS, *PCONTROL_CHANNEL_TRIGGER_STATUS; | 
|  |  | 
|  | #define CONTROL_CHANNEL_TRIGGER_STATUS_MAX CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR | 
|  |  | 
|  | typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT { | 
|  | TRANSPORT_SETTING_ID TransportSettingId; | 
|  | GUID BrokerEventGuid; | 
|  | } REAL_TIME_NOTIFICATION_SETTING_INPUT, *PREAL_TIME_NOTIFICATION_SETTING_INPUT; | 
|  |  | 
|  | typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT_EX { | 
|  | TRANSPORT_SETTING_ID TransportSettingId; | 
|  | GUID BrokerEventGuid; | 
|  | BOOLEAN Unmark; | 
|  | } REAL_TIME_NOTIFICATION_SETTING_INPUT_EX, *PREAL_TIME_NOTIFICATION_SETTING_INPUT_EX; | 
|  |  | 
|  | typedef struct _REAL_TIME_NOTIFICATION_SETTING_OUTPUT { | 
|  | CONTROL_CHANNEL_TRIGGER_STATUS ChannelStatus; | 
|  | } REAL_TIME_NOTIFICATION_SETTING_OUTPUT, *PREAL_TIME_NOTIFICATION_SETTING_OUTPUT; | 
|  |  | 
|  | typedef struct _ASSOCIATE_NAMERES_CONTEXT_INPUT { | 
|  | TRANSPORT_SETTING_ID TransportSettingId; | 
|  | UINT64 Handle; | 
|  | } ASSOCIATE_NAMERES_CONTEXT_INPUT, *PASSOCIATE_NAMERES_CONTEXT_INPUT; | 
|  |  | 
|  | #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) | 
|  | #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2) | 
|  | #define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3) | 
|  | #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) | 
|  | #define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR,5) | 
|  | #define SIO_UCAST_IF _WSAIOW(IOC_VENDOR,6) | 
|  | #define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7) | 
|  | #define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR,8) | 
|  | #define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR,9) | 
|  | #define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR,10) | 
|  | #define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR,11) | 
|  | #define SIO_RCVALL_MCAST_IF _WSAIOW(IOC_VENDOR,13) | 
|  | #define SIO_RCVALL_IF _WSAIOW(IOC_VENDOR,14) | 
|  | #define SIO_LOOPBACK_FAST_PATH _WSAIOW(IOC_VENDOR,16) | 
|  | #define SIO_TCP_INITIAL_RTO _WSAIOW(IOC_VENDOR,17) | 
|  | #define SIO_APPLY_TRANSPORT_SETTING _WSAIOW(IOC_VENDOR,19) | 
|  | #define SIO_QUERY_TRANSPORT_SETTING _WSAIOW(IOC_VENDOR,20) | 
|  | #define SIO_TCP_SET_ICW _WSAIOW(IOC_VENDOR,22) | 
|  | #define SIO_TCP_SET_ACK_FREQUENCY _WSAIOW(IOC_VENDOR,23) | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_RS3 | 
|  | #define SIO_SET_PRIORITY_HINT _WSAIOW(IOC_VENDOR,24) | 
|  | #endif | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_FE | 
|  | #define SIO_PRIORITY_HINT SIO_SET_PRIORITY_HINT | 
|  | #endif | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_RS2 | 
|  | #define SIO_TCP_INFO _WSAIORW(IOC_VENDOR,39) | 
|  | #endif | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_VB | 
|  | #define SIO_CPU_AFFINITY _WSAIOW(IOC_VENDOR,21) | 
|  | #endif | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_FE | 
|  |  | 
|  | #define SIO_TIMESTAMPING _WSAIOW(IOC_VENDOR, 235) | 
|  |  | 
|  | typedef struct _TIMESTAMPING_CONFIG { | 
|  | ULONG Flags; | 
|  | USHORT TxTimestampsBuffered; | 
|  | } TIMESTAMPING_CONFIG, *PTIMESTAMPING_CONFIG; | 
|  |  | 
|  | #define TIMESTAMPING_FLAG_RX 0x1 | 
|  | #define TIMESTAMPING_FLAG_TX 0x2 | 
|  |  | 
|  | #define SO_TIMESTAMP 0x300A | 
|  |  | 
|  | #define SO_TIMESTAMP_ID 0x300B | 
|  |  | 
|  | #define SIO_GET_TX_TIMESTAMP _WSAIOW(IOC_VENDOR, 234) | 
|  |  | 
|  | typedef enum { | 
|  | SocketPriorityHintVeryLow = 0, | 
|  | SocketPriorityHintLow, | 
|  | SocketPriorityHintNormal, | 
|  | SocketMaximumPriorityHintType | 
|  | } SOCKET_PRIORITY_HINT, *PSOCKET_PRIORITY_HINT; | 
|  |  | 
|  | typedef struct _PRIORITY_STATUS { | 
|  | SOCKET_PRIORITY_HINT Sender; | 
|  | SOCKET_PRIORITY_HINT Receiver; | 
|  | } PRIORITY_STATUS, *PPRIORITY_STATUS; | 
|  | #endif /* NTDDI_WIN10_FE */ | 
|  |  | 
|  | typedef enum { | 
|  | RCVALL_OFF = 0, | 
|  | RCVALL_ON = 1, | 
|  | RCVALL_SOCKETLEVELONLY = 2, | 
|  | RCVALL_IPLEVEL = 3 | 
|  | } RCVALL_VALUE, *PRCVALL_VALUE; | 
|  |  | 
|  | #define RCVALL_MAX RCVALL_IPLEVEL | 
|  |  | 
|  | typedef struct { | 
|  | RCVALL_VALUE Mode; | 
|  | ULONG Interface; | 
|  | } RCVALL_IF, *PRCVALL_IF; | 
|  |  | 
|  | #define TCP_INITIAL_RTO_UNSPECIFIED_RTT ((USHORT) -1) | 
|  | #define TCP_INITIAL_RTO_UNSPECIFIED_MAX_SYN_RETRANSMISSIONS ((UCHAR) -1) | 
|  |  | 
|  | #define TCP_INITIAL_RTO_DEFAULT_RTT (0) | 
|  | #define TCP_INITIAL_RTO_DEFAULT_MAX_SYN_RETRANSMISSIONS (0) | 
|  | #define TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS ((UCHAR) -2) | 
|  |  | 
|  | typedef struct _TCP_INITIAL_RTO_PARAMETERS { | 
|  | USHORT Rtt; | 
|  | UCHAR MaxSynRetransmissions; | 
|  | } TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS; | 
|  |  | 
|  | typedef enum { | 
|  | TCP_ICW_LEVEL_DEFAULT = 0, | 
|  | TCP_ICW_LEVEL_HIGH = 1, | 
|  | TCP_ICW_LEVEL_VERY_HIGH = 2, | 
|  | TCP_ICW_LEVEL_AGGRESSIVE = 3, | 
|  | TCP_ICW_LEVEL_EXPERIMENTAL = 4, | 
|  | TCP_ICW_LEVEL_COMPAT = 254, | 
|  | TCP_ICW_LEVEL_MAX = 255 | 
|  | } TCP_ICW_LEVEL, *PTCP_ICW_LEVEL; | 
|  |  | 
|  | typedef struct _TCP_ICW_PARAMETERS { | 
|  | TCP_ICW_LEVEL Level; | 
|  | } TCP_ICW_PARAMETERS, *PTCP_ICW_PARAMETERS; | 
|  |  | 
|  | typedef struct _TCP_ACK_FREQUENCY_PARAMETERS { | 
|  | UCHAR TcpDelayedAckFrequency; | 
|  | } TCP_ACK_FREQUENCY_PARAMETERS, *PTCP_ACK_FREQUENCY_PARAMETERS; | 
|  |  | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_RS2 | 
|  | typedef struct _TCP_INFO_v0 { | 
|  | TCPSTATE State; | 
|  | ULONG Mss; | 
|  | ULONG64 ConnectionTimeMs; | 
|  | BOOLEAN TimestampsEnabled; | 
|  | ULONG RttUs; | 
|  | ULONG MinRttUs; | 
|  | ULONG BytesInFlight; | 
|  | ULONG Cwnd; | 
|  | ULONG SndWnd; | 
|  | ULONG RcvWnd; | 
|  | ULONG RcvBuf; | 
|  | ULONG64 BytesOut; | 
|  | ULONG64 BytesIn; | 
|  | ULONG BytesReordered; | 
|  | ULONG BytesRetrans; | 
|  | ULONG FastRetrans; | 
|  | ULONG DupAcksIn; | 
|  | ULONG TimeoutEpisodes; | 
|  | UCHAR SynRetrans; | 
|  | } TCP_INFO_v0, *PTCP_INFO_v0; | 
|  | #endif | 
|  |  | 
|  | #if NTDDI_VERSION >= NTDDI_WIN10_RS5 | 
|  | typedef struct _TCP_INFO_v1 { | 
|  | TCPSTATE State; | 
|  | ULONG Mss; | 
|  | ULONG64 ConnectionTimeMs; | 
|  | BOOLEAN TimestampsEnabled; | 
|  | ULONG RttUs; | 
|  | ULONG MinRttUs; | 
|  | ULONG BytesInFlight; | 
|  | ULONG Cwnd; | 
|  | ULONG SndWnd; | 
|  | ULONG RcvWnd; | 
|  | ULONG RcvBuf; | 
|  | ULONG64 BytesOut; | 
|  | ULONG64 BytesIn; | 
|  | ULONG BytesReordered; | 
|  | ULONG BytesRetrans; | 
|  | ULONG FastRetrans; | 
|  | ULONG DupAcksIn; | 
|  | ULONG TimeoutEpisodes; | 
|  | UCHAR SynRetrans; | 
|  | ULONG SndLimTransRwin; | 
|  | ULONG SndLimTimeRwin; | 
|  | ULONG64 SndLimBytesRwin; | 
|  | ULONG SndLimTransCwnd; | 
|  | ULONG SndLimTimeCwnd; | 
|  | ULONG64 SndLimBytesCwnd; | 
|  | ULONG SndLimTransSnd; | 
|  | ULONG SndLimTimeSnd; | 
|  | ULONG64 SndLimBytesSnd; | 
|  | } TCP_INFO_v1, *PTCP_INFO_v1; | 
|  | #endif | 
|  |  | 
|  | #define SIO_ACQUIRE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 100) | 
|  | #define SIO_RELEASE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 101) | 
|  | #define SIO_ASSOCIATE_PORT_RESERVATION _WSAIOW(IOC_VENDOR, 102) | 
|  |  | 
|  | typedef struct _INET_PORT_RANGE { | 
|  | USHORT StartPort; | 
|  | USHORT NumberOfPorts; | 
|  | } INET_PORT_RANGE, *PINET_PORT_RANGE; | 
|  |  | 
|  | typedef struct _INET_PORT_RANGE INET_PORT_RESERVATION, *PINET_PORT_RESERVATION; | 
|  |  | 
|  | typedef struct { | 
|  | ULONG64 Token; | 
|  | } INET_PORT_RESERVATION_TOKEN, *PINET_PORT_RESERVATION_TOKEN; | 
|  |  | 
|  | #define INVALID_PORT_RESERVATION_TOKEN ((ULONG64)0) | 
|  |  | 
|  | typedef struct { | 
|  | #ifdef __cplusplus | 
|  | INET_PORT_RESERVATION Reservation; | 
|  | INET_PORT_RESERVATION_TOKEN Token; | 
|  | #else | 
|  | INET_PORT_RESERVATION; | 
|  | INET_PORT_RESERVATION_TOKEN; | 
|  | #endif | 
|  | } INET_PORT_RESERVATION_INSTANCE, *PINET_PORT_RESERVATION_INSTANCE; | 
|  |  | 
|  | typedef struct { | 
|  | ULONG OwningPid; | 
|  | } INET_PORT_RESERVATION_INFORMATION, *PINET_PORT_RESERVATION_INFORMATION; | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0502) | 
|  | typedef enum _SOCKET_SECURITY_PROTOCOL { | 
|  | SOCKET_SECURITY_PROTOCOL_DEFAULT, | 
|  | SOCKET_SECURITY_PROTOCOL_IPSEC, | 
|  | #if NTDDI_VERSION >= NTDDI_WIN7 | 
|  | SOCKET_SECURITY_PROTOCOL_IPSEC2, | 
|  | #endif | 
|  | SOCKET_SECURITY_PROTOCOL_INVALID | 
|  | } SOCKET_SECURITY_PROTOCOL; | 
|  |  | 
|  | #define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION  0x1 | 
|  | #define SOCKET_SETTINGS_ALLOW_INSECURE  0x2 | 
|  |  | 
|  | typedef enum _SOCKET_USAGE_TYPE { | 
|  | SYSTEM_CRITICAL_SOCKET   = 1 | 
|  | } SOCKET_USAGE_TYPE; | 
|  |  | 
|  | typedef struct _SOCKET_PEER_TARGET_NAME { | 
|  | SOCKET_SECURITY_PROTOCOL SecurityProtocol; | 
|  | SOCKADDR_STORAGE         PeerAddress; | 
|  | ULONG                    PeerTargetNameStringLen; | 
|  | wchar_t                  AllStrings[]; | 
|  | } SOCKET_PEER_TARGET_NAME; | 
|  |  | 
|  | #define SOCKET_INFO_CONNECTION_SECURED		0x00000001 | 
|  | #define SOCKET_INFO_CONNECTION_ENCRYPTED	0x00000002 | 
|  | #define SOCKET_INFO_CONNECTION_IMPERSONATED	0x00000004 | 
|  |  | 
|  | typedef struct _SOCKET_SECURITY_QUERY_INFO { | 
|  | SOCKET_SECURITY_PROTOCOL SecurityProtocol; | 
|  | ULONG                    Flags; | 
|  | UINT64                   PeerApplicationAccessTokenHandle; | 
|  | UINT64                   PeerMachineAccessTokenHandle; | 
|  | } SOCKET_SECURITY_QUERY_INFO; | 
|  |  | 
|  | typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE { | 
|  | SOCKET_SECURITY_PROTOCOL SecurityProtocol; | 
|  | SOCKADDR_STORAGE         PeerAddress; | 
|  | ULONG                    PeerTokenAccessMask; | 
|  | } SOCKET_SECURITY_QUERY_TEMPLATE; | 
|  |  | 
|  | typedef struct _SOCKET_SECURITY_SETTINGS { | 
|  | SOCKET_SECURITY_PROTOCOL SecurityProtocol; | 
|  | ULONG                    SecurityFlags; | 
|  | } SOCKET_SECURITY_SETTINGS; | 
|  |  | 
|  | #define SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION 0x00000001 | 
|  |  | 
|  | typedef struct _SOCKET_SECURITY_SETTINGS_IPSEC { | 
|  | SOCKET_SECURITY_PROTOCOL SecurityProtocol; | 
|  | ULONG                    SecurityFlags; | 
|  | ULONG                    IpsecFlags; | 
|  | GUID                     AuthipMMPolicyKey; | 
|  | GUID                     AuthipQMPolicyKey; | 
|  | GUID                     Reserved; | 
|  | UINT64                   Reserved2; | 
|  | ULONG                    UserNameStringLen; | 
|  | ULONG                    DomainNameStringLen; | 
|  | ULONG                    PasswordStringLen; | 
|  | wchar_t                  AllStrings[]; | 
|  | } SOCKET_SECURITY_SETTINGS_IPSEC; | 
|  |  | 
|  | #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | 
|  |  | 
|  | #define RtlIpv6AddressToString __MINGW_NAME_AW(RtlIpv6AddressToString) | 
|  | #define RtlIpv6AddressToStringEx __MINGW_NAME_AW(RtlIpv6AddressToStringEx) | 
|  |  | 
|  | #ifdef _WS2IPDEF_ | 
|  |  | 
|  | LPSTR NTAPI RtlIpv6AddressToStringA(const IN6_ADDR *Addr, LPSTR S); | 
|  | LPWSTR NTAPI RtlIpv6AddressToStringW(const IN6_ADDR *Addr, LPWSTR S); | 
|  |  | 
|  | LONG NTAPI RtlIpv6AddressToStringExA(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPSTR AddressString, PULONG AddressStringLength); | 
|  | LONG NTAPI RtlIpv6AddressToStringExW(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength); | 
|  |  | 
|  | #define RtlIpv4AddressToString __MINGW_NAME_AW(RtlIpv4AddressToString) | 
|  | LPSTR NTAPI RtlIpv4AddressToStringA(const IN_ADDR *Addr, LPSTR S); | 
|  | LPWSTR NTAPI RtlIpv4AddressToStringW(const IN_ADDR *Addr, LPWSTR S); | 
|  |  | 
|  | #define RtlIpv4AddressToStringEx __MINGW_NAME_AW(RtlIpv4AddressToStringEx) | 
|  | LONG NTAPI RtlIpv4AddressToStringExA(const IN_ADDR *Address, USHORT Port, LPSTR AddressString, PULONG AddressStringLength); | 
|  | LONG NTAPI RtlIpv4AddressToStringExW(const IN_ADDR *Address, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength); | 
|  |  | 
|  | #define RtlIpv4StringToAddress __MINGW_NAME_AW(RtlIpv4StringToAddress) | 
|  | LONG NTAPI RtlIpv4StringToAddressA(PCSTR S, BOOLEAN Strict, LPSTR *Terminator, IN_ADDR *Addr); | 
|  | LONG NTAPI RtlIpv4StringToAddressW(PCWSTR S, BOOLEAN Strict, LPWSTR *Terminator, IN_ADDR *Addr); | 
|  |  | 
|  | #define RtlIpv4StringToAddressEx __MINGW_NAME_AW(RtlIpv4StringToAddressEx) | 
|  | LONG NTAPI RtlIpv4StringToAddressExA(PCSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port); | 
|  | LONG NTAPI RtlIpv4StringToAddressExW(PCWSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port); | 
|  |  | 
|  | #define RtlIpv6StringToAddressEx __MINGW_NAME_AW(RtlIpv6StringToAddressEx) | 
|  | LONG NTAPI RtlIpv6StringToAddressExA(PCSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port); | 
|  | LONG NTAPI RtlIpv6StringToAddressExW(PCWSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port); | 
|  |  | 
|  | #endif /* _WS2IPDEF_ */ | 
|  |  | 
|  | #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ | 
|  | #endif /*(_WIN32_WINNT >= 0x0502)*/ | 
|  |  | 
|  | #ifdef __LP64__ | 
|  | #pragma pop_macro("u_long") | 
|  | #endif | 
|  |  | 
|  | #endif /* _MSTCPIP_ */ | 
|  |  |