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