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 
9 #include <_mingw_unicode.h>
10 #include <winapifamily.h>
11 
12 #ifdef __LP64__
13 #pragma push_macro("u_long")
14 #undef u_long
15 #define u_long __ms_u_long
16 #endif
17 
18 struct tcp_keepalive {
19   u_long onoff;
20   u_long keepalivetime;
21   u_long keepaliveinterval;
22 };
23 
24 #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
25 #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2)
26 #define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3)
27 #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
28 #define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR,5)
29 #define SIO_UCAST_IF _WSAIOW(IOC_VENDOR,6)
30 #define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7)
31 #define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR,8)
32 #define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR,9)
33 #define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR,10)
34 #define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR,11)
35 
36 #define RCVALL_OFF 0
37 #define RCVALL_ON 1
38 #define RCVALL_SOCKETLEVELONLY 2
39 #define RCVALL_IPLEVEL 3
40 
41 #if (_WIN32_WINNT >= 0x0502)
42 typedef enum _SOCKET_SECURITY_PROTOCOL {
43   SOCKET_SECURITY_PROTOCOL_DEFAULT,
44   SOCKET_SECURITY_PROTOCOL_IPSEC,
45 #if NTDDI_VERSION >= NTDDI_WIN7
46   SOCKET_SECURITY_PROTOCOL_IPSEC2,
47 #endif
48   SOCKET_SECURITY_PROTOCOL_INVALID
49 } SOCKET_SECURITY_PROTOCOL;
50 
51 #define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION  0x1
52 #define SOCKET_SETTINGS_ALLOW_INSECURE  0x2
53 
54 typedef enum _SOCKET_USAGE_TYPE {
55   SYSTEM_CRITICAL_SOCKET   = 1
56 } SOCKET_USAGE_TYPE;
57 
58 typedef struct _SOCKET_PEER_TARGET_NAME {
59   SOCKET_SECURITY_PROTOCOL SecurityProtocol;
60   SOCKADDR_STORAGE         PeerAddress;
61   ULONG                    PeerTargetNameStringLen;
62   wchar_t                  AllStrings[];
63 } SOCKET_PEER_TARGET_NAME;
64 
65 #define SOCKET_INFO_CONNECTION_SECURED		0x00000001
66 #define SOCKET_INFO_CONNECTION_ENCRYPTED	0x00000002
67 #define SOCKET_INFO_CONNECTION_IMPERSONATED	0x00000004
68 
69 typedef struct _SOCKET_SECURITY_QUERY_INFO {
70   SOCKET_SECURITY_PROTOCOL SecurityProtocol;
71   ULONG                    Flags;
72   UINT64                   PeerApplicationAccessTokenHandle;
73   UINT64                   PeerMachineAccessTokenHandle;
74 } SOCKET_SECURITY_QUERY_INFO;
75 
76 typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE {
77   SOCKET_SECURITY_PROTOCOL SecurityProtocol;
78   SOCKADDR_STORAGE         PeerAddress;
79   ULONG                    PeerTokenAccessMask;
80 } SOCKET_SECURITY_QUERY_TEMPLATE;
81 
82 typedef struct _SOCKET_SECURITY_SETTINGS {
83   SOCKET_SECURITY_PROTOCOL SecurityProtocol;
84   ULONG                    SecurityFlags;
85 } SOCKET_SECURITY_SETTINGS;
86 
87 #define SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION 0x00000001
88 
89 typedef struct _SOCKET_SECURITY_SETTINGS_IPSEC {
90   SOCKET_SECURITY_PROTOCOL SecurityProtocol;
91   ULONG                    SecurityFlags;
92   ULONG                    IpsecFlags;
93   GUID                     AuthipMMPolicyKey;
94   GUID                     AuthipQMPolicyKey;
95   GUID                     Reserved;
96   UINT64                   Reserved2;
97   ULONG                    UserNameStringLen;
98   ULONG                    DomainNameStringLen;
99   ULONG                    PasswordStringLen;
100   wchar_t                  AllStrings[];
101 } SOCKET_SECURITY_SETTINGS_IPSEC;
102 
103 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
104 
105 #define RtlIpv6AddressToString __MINGW_NAME_AW(RtlIpv6AddressToString)
106 #define RtlIpv6AddressToStringEx __MINGW_NAME_AW(RtlIpv6AddressToStringEx)
107 
108 #ifdef _WS2IPDEF_
109 
110 LPSTR NTAPI RtlIpv6AddressToStringA(const IN6_ADDR *Addr, LPSTR S);
111 LPWSTR NTAPI RtlIpv6AddressToStringW(const IN6_ADDR *Addr, LPWSTR S);
112 
113 LONG NTAPI RtlIpv6AddressToStringExA(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPSTR AddressString, PULONG AddressStringLength);
114 LONG NTAPI RtlIpv6AddressToStringExW(const IN6_ADDR *Address, ULONG ScopeId, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength);
115 
116 #define RtlIpv4AddressToString __MINGW_NAME_AW(RtlIpv4AddressToString)
117 LPSTR NTAPI RtlIpv4AddressToStringA(const IN_ADDR *Addr, LPSTR S);
118 LPWSTR NTAPI RtlIpv4AddressToStringW(const IN_ADDR *Addr, LPWSTR S);
119 
120 #define RtlIpv4AddressToStringEx __MINGW_NAME_AW(RtlIpv4AddressToStringEx)
121 LONG NTAPI RtlIpv4AddressToStringExA(const IN_ADDR *Address, USHORT Port, LPSTR AddressString, PULONG AddressStringLength);
122 LONG NTAPI RtlIpv4AddressToStringExW(const IN_ADDR *Address, USHORT Port, LPWSTR AddressString, PULONG AddressStringLength);
123 
124 #define RtlIpv4StringToAddress __MINGW_NAME_AW(RtlIpv4StringToAddress)
125 LONG NTAPI RtlIpv4StringToAddressA(PCSTR S, BOOLEAN Strict, LPSTR *Terminator, IN_ADDR *Addr);
126 LONG NTAPI RtlIpv4StringToAddressW(PCWSTR S, BOOLEAN Strict, LPWSTR *Terminator, IN_ADDR *Addr);
127 
128 #define RtlIpv4StringToAddressEx __MINGW_NAME_AW(RtlIpv4StringToAddressEx)
129 LONG NTAPI RtlIpv4StringToAddressExA(PCSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port);
130 LONG NTAPI RtlIpv4StringToAddressExW(PCWSTR AddressString, BOOLEAN Strict, IN_ADDR *Address, PUSHORT Port);
131 
132 #define RtlIpv6StringToAddressEx __MINGW_NAME_AW(RtlIpv6StringToAddressEx)
133 LONG NTAPI RtlIpv6StringToAddressExA(PCSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port);
134 LONG NTAPI RtlIpv6StringToAddressExW(PCWSTR AddressString, IN6_ADDR *Address, PULONG ScopeId, PUSHORT Port);
135 
136 #endif /* _WS2IPDEF_ */
137 
138 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
139 #endif /*(_WIN32_WINNT >= 0x0502)*/
140 
141 #ifdef __LP64__
142 #pragma pop_macro("u_long")
143 #endif
144 
145 #endif /* _MSTCPIP_ */
146 
147