| /** | |
| * 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_ */ | |