blob: 1e1bc24e71cb59f0c9cd5414a5bd287801241be2 [file] [log] [blame]
/**
* 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_ */