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 _INC_IPSECTYPES
7 #define _INC_IPSECTYPES
8 #include <iketypes.h>
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #if (_WIN32_WINNT >= 0x0600)
15 
16 typedef UINT8 IPSEC_AUTH_CONFIG;
17 typedef UINT8 IPSEC_CIPHER_CONFIG;
18 typedef UINT32 IPSEC_SA_SPI;
19 typedef UINT64 IPSEC_TOKEN_HANDLE;
20 typedef GUID IPSEC_CRYPTO_MODULE_ID;
21 
22 #ifndef __IPSEC_SA_TRANSFORM0_FWD_DECLARED
23 #define __IPSEC_SA_TRANSFORM0_FWD_DECLARED
24 typedef struct IPSEC_SA_TRANSFORM0_ IPSEC_SA_TRANSFORM0;
25 #endif /* __IPSEC_SA_TRANSFORM0_FWD_DECLARED */
26 
27 #ifndef __FWPM_FILTER0_FWD_DECLARED
28 #define __FWPM_FILTER0_FWD_DECLARED
29 typedef struct FWPM_FILTER0_ FWPM_FILTER0;
30 #endif /* __FWPM_FILTER0_FWD_DECLARED */
31 
32 typedef enum IPSEC_FAILURE_POINT_ {
33   IPSEC_FAILURE_NONE,
34   IPSEC_FAILURE_ME,
35   IPSEC_FAILURE_PEER,
36   IPSEC_FAILURE_POINT_MAX
37 } IPSEC_FAILURE_POINT;
38 
39 typedef enum IPSEC_TRAFFIC_TYPE_ {
40   IPSEC_TRAFFIC_TYPE_TRANSPORT,
41   IPSEC_TRAFFIC_TYPE_TUNNEL,
42   IPSEC_TRAFFIC_TYPE_MAX
43 } IPSEC_TRAFFIC_TYPE;
44 
45 typedef enum IPSEC_PFS_GROUP_ {
46   IPSEC_PFS_NONE,
47   IPSEC_PFS_1,
48   IPSEC_PFS_2,
49   IPSEC_PFS_2048,
50   IPSEC_PFS_ECP_256,
51   IPSEC_PFS_ECP_384,
52   IPSEC_PFS_MM,
53   IPSEC_PFS_MAX
54 } IPSEC_PFS_GROUP;
55 
56 typedef enum IPSEC_TRANSFORM_TYPE_ {
57   IPSEC_TRANSFORM_AH = 1,
58   IPSEC_TRANSFORM_ESP_AUTH,
59   IPSEC_TRANSFORM_ESP_CIPHER,
60   IPSEC_TRANSFORM_ESP_AUTH_AND_CIPHER,
61   IPSEC_TRANSFORM_ESP_AUTH_FW,
62   IPSEC_TRANSFORM_TYPE_MAX
63 } IPSEC_TRANSFORM_TYPE;
64 
65 typedef enum IPSEC_AUTH_TYPE_ {
66   IPSEC_AUTH_MD5,
67   IPSEC_AUTH_SHA_1,
68   IPSEC_AUTH_SHA_256,
69   IPSEC_AUTH_AES_128,
70   IPSEC_AUTH_AES_192,
71   IPSEC_AUTH_AES_256,
72   IPSEC_AUTH_MAX
73 } IPSEC_AUTH_TYPE;
74 
75 typedef enum IPSEC_CIPHER_TYPE_ {
76   IPSEC_CIPHER_TYPE_DES = 1,
77   IPSEC_CIPHER_TYPE_3DES,
78   IPSEC_CIPHER_TYPE_AES_128,
79   IPSEC_CIPHER_TYPE_AES_192,
80   IPSEC_CIPHER_TYPE_AES_256,
81   IPSEC_CIPHER_TYPE_MAX
82 } IPSEC_CIPHER_TYPE;
83 
84 typedef enum IPSEC_TOKEN_MODE_ {
85   IPSEC_TOKEN_MODE_MAIN,
86   IPSEC_TOKEN_MODE_EXTENDED,
87   IPSEC_TOKEN_MODE_MAX
88 } IPSEC_TOKEN_MODE;
89 
90 typedef enum IPSEC_TOKEN_PRINCIPAL_ {
91   IPSEC_TOKEN_PRINCIPAL_LOCAL,
92   IPSEC_TOKEN_PRINCIPAL_PEER,
93   IPSEC_TOKEN_PRINCIPAL_MAX
94 } IPSEC_TOKEN_PRINCIPAL;
95 
96 typedef enum IPSEC_TOKEN_TYPE_ {
97   IPSEC_TOKEN_TYPE_MACHINE,
98   IPSEC_TOKEN_TYPE_IMPERSONATION,
99   IPSEC_TOKEN_TYPE_MAX
100 } IPSEC_TOKEN_TYPE;
101 
102 typedef struct IPSEC_SA_LIFETIME0_ {
103   UINT32 lifetimeSeconds;
104   UINT32 lifetimeKilobytes;
105   UINT32 lifetimePackets;
106 } IPSEC_SA_LIFETIME0;
107 
108 typedef struct IPSEC_KEYING_POLICY0_ {
109   UINT32 numKeyMods;
110   GUID   *keyModKeys;
111 } IPSEC_KEYING_POLICY0;
112 
113 typedef struct IPSEC_SA_IDLE_TIMEOUT0_ {
114   UINT32 idleTimeoutSeconds;
115   UINT32 idleTimeoutSecondsFailOver;
116 } IPSEC_SA_IDLE_TIMEOUT0;
117 
118 typedef struct IPSEC_PROPOSAL0_ {
119   IPSEC_SA_LIFETIME0  lifetime;
120   UINT32              numSaTransforms;
121   IPSEC_SA_TRANSFORM0 *saTransforms;
122   IPSEC_PFS_GROUP     pfsGroup;
123 } IPSEC_PROPOSAL0;
124 
125 typedef struct IPSEC_TRANSPORT_POLICY0_ {
126   UINT32                 numIpsecProposals;
127   IPSEC_PROPOSAL0        *ipsecProposals;
128   UINT32                 flags;
129   UINT32                 ndAllowClearTimeoutSeconds;
130   IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
131   IKEEXT_EM_POLICY0      *emPolicy;
132 } IPSEC_TRANSPORT_POLICY0;
133 
134 typedef struct IPSEC_AUTH_TRANSFORM_ID0_ {
135   IPSEC_AUTH_TYPE   authType;
136   IPSEC_AUTH_CONFIG authConfig;
137 } IPSEC_AUTH_TRANSFORM_ID0;
138 
139 typedef struct IPSEC_AUTH_TRANSFORM0_ {
140   IPSEC_AUTH_TRANSFORM_ID0 authTransformId;
141   IPSEC_CRYPTO_MODULE_ID   *cryptoModuleId;
142 } IPSEC_AUTH_TRANSFORM0;
143 
144 typedef struct IPSEC_CIPHER_TRANSFORM_ID0_ {
145   IPSEC_CIPHER_TYPE   cipherType;
146   IPSEC_CIPHER_CONFIG cipherConfig;
147 } IPSEC_CIPHER_TRANSFORM_ID0;
148 
149 typedef struct IPSEC_CIPHER_TRANSFORM0_ {
150   IPSEC_CIPHER_TRANSFORM_ID0 cipherTransformId;
151   IPSEC_CRYPTO_MODULE_ID     *cryptoModuleId;
152 } IPSEC_CIPHER_TRANSFORM0;
153 
154 typedef struct IPSEC_AUTH_AND_CIPHER_TRANSFORM0_ {
155   IPSEC_AUTH_TRANSFORM0   authTransform;
156   IPSEC_CIPHER_TRANSFORM0 cipherTransform;
157 } IPSEC_AUTH_AND_CIPHER_TRANSFORM0;
158 
159 typedef struct IPSEC_SA_TRANSFORM0_ {
160   IPSEC_TRANSFORM_TYPE ipsecTransformType;
161   __C89_NAMELESS union {
162     IPSEC_AUTH_TRANSFORM0            *ahTransform;
163     IPSEC_AUTH_TRANSFORM0            *espAuthTransform;
164     IPSEC_CIPHER_TRANSFORM0          *espCipherTransform;
165     IPSEC_AUTH_AND_CIPHER_TRANSFORM0 *espAuthAndCipherTransform;
166     IPSEC_AUTH_TRANSFORM0            *espAuthFwTransform;
167   };
168 } IPSEC_SA_TRANSFORM0;
169 
170 typedef struct IPSEC_TUNNEL_ENDPOINTS0_ {
171   FWP_IP_VERSION ipVersion;
172   __C89_NAMELESS union {
173     UINT32 localV4Address;
174     UINT8  localV6Address[16];
175   };
176   __C89_NAMELESS union {
177     UINT32 remoteV4Address;
178     UINT8  remoteV6Address[16];
179   };
180 } IPSEC_TUNNEL_ENDPOINTS0;
181 
182 typedef struct IPSEC_TUNNEL_POLICY0_ {
183   UINT32                  flags;
184   UINT32                  numIpsecProposals;
185   IPSEC_PROPOSAL0         *ipsecProposals;
186   IPSEC_TUNNEL_ENDPOINTS0 tunnelEndpoints;
187   IPSEC_SA_IDLE_TIMEOUT0  saIdleTimeout;
188   IKEEXT_EM_POLICY0       *emPolicy;
189 } IPSEC_TUNNEL_POLICY0;
190 
191 typedef struct IPSEC_V4_UDP_ENCAPSULATION0_ {
192   UINT16 localUdpEncapPort;
193   UINT16 remoteUdpEncapPort;
194 } IPSEC_V4_UDP_ENCAPSULATION0;
195 
196 typedef struct IPSEC_AGGREGATE_SA_STATISTICS0_ {
197   UINT32 activeSas;
198   UINT32 pendingSaNegotiations;
199   UINT32 totalSasAdded;
200   UINT32 totalSasDeleted;
201   UINT32 successfulRekeys;
202   UINT32 activeTunnels;
203   UINT32 offloadedSas;
204 } IPSEC_AGGREGATE_SA_STATISTICS0;
205 
206 typedef struct IPSEC_ESP_DROP_PACKET_STATISTICS0_ {
207   UINT32 invalidSpisOnInbound;
208   UINT32 decryptionFailuresOnInbound;
209   UINT32 authenticationFailuresOnInbound;
210   UINT32 replayCheckFailuresOnInbound;
211   UINT32 saNotInitializedOnInbound;
212 } IPSEC_ESP_DROP_PACKET_STATISTICS0;
213 
214 typedef struct IPSEC_AH_DROP_PACKET_STATISTICS0_ {
215   UINT32 invalidSpisOnInbound;
216   UINT32 authenticationFailuresOnInbound;
217   UINT32 replayCheckFailuresOnInbound;
218   UINT32 saNotInitializedOnInbound;
219 } IPSEC_AH_DROP_PACKET_STATISTICS0;
220 
221 typedef struct IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0_ {
222   UINT32 invalidSpisOnInbound;
223   UINT32 decryptionFailuresOnInbound;
224   UINT32 authenticationFailuresOnInbound;
225   UINT32 udpEspValidationFailuresOnInbound;
226   UINT32 replayCheckFailuresOnInbound;
227   UINT32 invalidClearTextInbound;
228   UINT32 saNotInitializedOnInbound;
229   UINT32 receiveOverIncorrectSaInbound;
230   UINT32 secureReceivesNotMatchingFilters;
231 } IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0;
232 
233 typedef struct IPSEC_TRAFFIC_STATISTICS0_ {
234   UINT64 encryptedByteCount;
235   UINT64 authenticatedAHByteCount;
236   UINT64 authenticatedESPByteCount;
237   UINT64 transportByteCount;
238   UINT64 tunnelByteCount;
239   UINT64 offloadByteCount;
240 } IPSEC_TRAFFIC_STATISTICS0;
241 
242 typedef struct IPSEC_STATISTICS0_ {
243   IPSEC_AGGREGATE_SA_STATISTICS0          aggregateSaStatistics;
244   IPSEC_ESP_DROP_PACKET_STATISTICS0       espDropPacketStatistics;
245   IPSEC_AH_DROP_PACKET_STATISTICS0        ahDropPacketStatistics;
246   IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0 aggregateDropPacketStatistics;
247   IPSEC_TRAFFIC_STATISTICS0               inboundTrafficStatistics;
248   IPSEC_TRAFFIC_STATISTICS0               outboundTrafficStatistics;
249 } IPSEC_STATISTICS0;
250 
251 typedef struct IPSEC_TOKEN0_ {
252   IPSEC_TOKEN_TYPE      type;
253   IPSEC_TOKEN_PRINCIPAL principal;
254   IPSEC_TOKEN_MODE      mode;
255   IPSEC_TOKEN_HANDLE    token;
256 } IPSEC_TOKEN0;
257 
258 typedef struct IPSEC_ID0_ {
259   wchar_t      *mmTargetName;
260   wchar_t      *emTargetName;
261   UINT32       numTokens;
262   IPSEC_TOKEN0 *tokens;
263   UINT64       explicitCredentials;
264   UINT64       logonId;
265 } IPSEC_ID0;
266 
267 typedef struct IPSEC_SA_AUTH_INFORMATION0_ {
268   IPSEC_AUTH_TRANSFORM0 authTransform;
269   FWP_BYTE_BLOB         authKey;
270 } IPSEC_SA_AUTH_INFORMATION0;
271 
272 typedef struct IPSEC_SA_CIPHER_INFORMATION0_ {
273   IPSEC_CIPHER_TRANSFORM0 cipherTransform;
274   FWP_BYTE_BLOB           cipherKey;
275 } IPSEC_SA_CIPHER_INFORMATION0;
276 
277 typedef struct IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0_ {
278   IPSEC_SA_CIPHER_INFORMATION0 saCipherInformation;
279   IPSEC_SA_AUTH_INFORMATION0   saAuthInformation;
280 } IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0;
281 
282 typedef struct IPSEC_SA0_ {
283   IPSEC_SA_SPI         spi;
284   IPSEC_TRANSFORM_TYPE saTransformType;
285   __C89_NAMELESS union {
286     IPSEC_SA_AUTH_INFORMATION0            *ahInformation;
287     IPSEC_SA_AUTH_INFORMATION0            *espAuthInformation;
288     IPSEC_SA_CIPHER_INFORMATION0          *espCipherInformation;
289     IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0 *espAuthAndCipherInformation;
290     IPSEC_SA_AUTH_INFORMATION0            *espAuthFwInformation;
291   };
292 } IPSEC_SA0;
293 
294 typedef struct IPSEC_KEYMODULE_STATE0_ {
295   GUID          keyModuleKey;
296   FWP_BYTE_BLOB stateBlob;
297 } IPSEC_KEYMODULE_STATE0;
298 
299 typedef struct IPSEC_SA_BUNDLE0_ {
300   UINT32                 flags;
301   IPSEC_SA_LIFETIME0     lifetime;
302   UINT32                 idleTimeoutSeconds;
303   UINT32                 ndAllowClearTimeoutSeconds;
304   IPSEC_ID0              *ipsecId;
305   UINT32                 napContext;
306   UINT32                 qmSaId;
307   UINT32                 numSAs;
308   IPSEC_SA0              *saList;
309   IPSEC_KEYMODULE_STATE0 *keyModuleState;
310   FWP_IP_VERSION         ipVersion;
311   __C89_NAMELESS union {
312     UINT32 peerV4PrivateAddress;
313     ;      // case(FWP_IP_VERSION_V6)
314   };
315   UINT64                 mmSaId;
316   IPSEC_PFS_GROUP        pfsGroup;
317 } IPSEC_SA_BUNDLE0;
318 
319 typedef struct IPSEC_TRAFFIC0_ {
320   FWP_IP_VERSION     ipVersion;
321   __C89_NAMELESS union {
322     UINT32 localV4Address;
323     UINT8  localV6Address[16];
324   };
325   __C89_NAMELESS union {
326     UINT32 remoteV4Address;
327     UINT8  remoteV6Address[16];
328   };
329   IPSEC_TRAFFIC_TYPE trafficType;
330   __C89_NAMELESS union {
331     UINT64 ipsecFilterId;
332     UINT64 tunnelPolicyId;
333   };
334   UINT16             remotePort;
335 } IPSEC_TRAFFIC0;
336 
337 typedef struct IPSEC_SA_DETAILS0_ {
338   FWP_IP_VERSION   ipVersion;
339   FWP_DIRECTION    saDirection;
340   IPSEC_TRAFFIC0   traffic;
341   IPSEC_SA_BUNDLE0 saBundle;
342   __C89_NAMELESS union {
343     IPSEC_V4_UDP_ENCAPSULATION0 *udpEncapsulation;
344     ;      // case(FWP_IP_VERSION_V6)
345   };
346   FWPM_FILTER0     *transportFilter;
347 } IPSEC_SA_DETAILS0;
348 
349 typedef struct IPSEC_SA_CONTEXT0_ {
350   UINT64            saContextId;
351   IPSEC_SA_DETAILS0 *inboundSa;
352   IPSEC_SA_DETAILS0 *outboundSa;
353 } IPSEC_SA_CONTEXT0;
354 
355 typedef struct IPSEC_GETSPI0_ {
356   IPSEC_TRAFFIC0         inboundIpsecTraffic;
357   FWP_IP_VERSION         ipVersion;
358   __C89_NAMELESS union {
359     IPSEC_V4_UDP_ENCAPSULATION0 *inboundUdpEncapsulation;
360     ;      // case(FWP_IP_VERSION_V6)
361   };
362   IPSEC_CRYPTO_MODULE_ID *rngCryptoModuleID;
363 } IPSEC_GETSPI0;
364 
365 typedef struct IPSEC_SA_ENUM_TEMPLATE0_ {
366   FWP_DIRECTION saDirection;
367 } IPSEC_SA_ENUM_TEMPLATE0;
368 
369 typedef struct IPSEC_SA_CONTEXT_ENUM_TEMPLATE0_ {
370   FWP_CONDITION_VALUE0 localSubNet;
371   FWP_CONDITION_VALUE0 remoteSubNet;
372 } IPSEC_SA_CONTEXT_ENUM_TEMPLATE0;
373 
374 #endif /*(_WIN32_WINNT >= 0x0600)*/
375 #if (_WIN32_WINNT >= 0x0601)
376 
377 typedef struct IPSEC_TUNNEL_ENDPOINTS1_ {
378   FWP_IP_VERSION ipVersion;
379   __C89_NAMELESS union {
380     UINT32 localV4Address;
381     UINT8  localV6Address[16];
382   };
383   __C89_NAMELESS union {
384     UINT32 remoteV4Address;
385     UINT8  remoteV6Address[16];
386   };
387   UINT64         localIfLuid;
388 } IPSEC_TUNNEL_ENDPOINTS1;
389 
390 typedef struct IPSEC_TUNNEL_POLICY1_ {
391   UINT32                  flags;
392   UINT32                  numIpsecProposals;
393   IPSEC_PROPOSAL0         *ipsecProposals;
394   IPSEC_TUNNEL_ENDPOINTS1 tunnelEndpoints;
395   IPSEC_SA_IDLE_TIMEOUT0  saIdleTimeout;
396   IKEEXT_EM_POLICY1       *emPolicy;
397 } IPSEC_TUNNEL_POLICY1;
398 
399 typedef struct IPSEC_TRANSPORT_POLICY1_ {
400   UINT32                 numIpsecProposals;
401   IPSEC_PROPOSAL0        *ipsecProposals;
402   UINT32                 flags;
403   UINT32                 ndAllowClearTimeoutSeconds;
404   IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
405   IKEEXT_EM_POLICY1      *emPolicy;
406 } IPSEC_TRANSPORT_POLICY1;
407 
408 typedef struct _IPSEC_DOSP_OPTIONS0 {
409   UINT32               stateIdleTimeoutSeconds;
410   UINT32               perIPRateLimitQueueIdleTimeoutSeconds;
411   UINT8                ipV6IPsecUnauthDscp;
412   UINT32               ipV6IPsecUnauthRateLimitBytesPerSec;
413   UINT32               ipV6IPsecUnauthPerIPRateLimitBytesPerSec;
414   UINT8                ipV6IPsecAuthDscp;
415   UINT32               ipV6IPsecAuthRateLimitBytesPerSec;
416   UINT8                icmpV6Dscp;
417   UINT32               icmpV6RateLimitBytesPerSec;
418   UINT8                ipV6FilterExemptDscp;
419   UINT32               ipV6FilterExemptRateLimitBytesPerSec;
420   UINT8                defBlockExemptDscp;
421   UINT32               defBlockExemptRateLimitBytesPerSec;
422   UINT32               maxStateEntries;
423   UINT32               maxPerIPRateLimitQueues;
424   UINT32               flags;
425   UINT32               numPublicIFLuids;
426   UINT64               *publicIFLuids;
427   UINT32               numInternalIFLuids;
428   UINT64               *internalIFLuids;
429   FWP_V6_ADDR_AND_MASK publicV6AddrMask;
430   FWP_V6_ADDR_AND_MASK internalV6AddrMask;
431 } IPSEC_DOSP_OPTIONS0;
432 
433 typedef struct _IPSEC_DOSP_STATISTICS0 {
434   UINT64 totalStateEntriesCreated;
435   UINT64 currentStateEntries;
436   UINT64 totalInboundAllowedIPv6IPsecUnauthPkts;
437   UINT64 totalInboundRatelimitDiscardedIPv6IPsecUnauthPkts;
438   UINT64 totalInboundPerIPRatelimitDiscardedIPv6IPsecUnauthPkts;
439   UINT64 totalInboundOtherDiscardedIPv6IPsecUnauthPkts;
440   UINT64 totalInboundAllowedIPv6IPsecAuthPkts;
441   UINT64 totalInboundRatelimitDiscardedIPv6IPsecAuthPkts;
442   UINT64 totalInboundOtherDiscardedIPv6IPsecAuthPkts;
443   UINT64 totalInboundAllowedICMPv6Pkts;
444   UINT64 totalInboundRatelimitDiscardedICMPv6Pkts;
445   UINT64 totalInboundAllowedIPv6FilterExemptPkts;
446   UINT64 totalInboundRatelimitDiscardedIPv6FilterExemptPkts;
447   UINT64 totalInboundDiscardedIPv6FilterBlockPkts;
448   UINT64 totalInboundAllowedDefBlockExemptPkts;
449   UINT64 totalInboundRatelimitDiscardedDefBlockExemptPkts;
450   UINT64 totalInboundDiscardedDefBlockPkts;
451   UINT64 currentInboundIPv6IPsecUnauthPerIPRateLimitQueues;
452 } IPSEC_DOSP_STATISTICS0;
453 
454 typedef struct _IPSEC_DOSP_STATE_ENUM_TEMPLATE0 {
455   FWP_V6_ADDR_AND_MASK publicV6AddrMask;
456   FWP_V6_ADDR_AND_MASK internalV6AddrMask;
457 } IPSEC_DOSP_STATE_ENUM_TEMPLATE0;
458 
459 typedef struct _IPSEC_DOSP_STATE0 {
460   UINT8  publicHostV6Addr[16];
461   UINT8  internalHostV6Addr[16];
462   UINT64 totalInboundIPv6IPsecAuthPackets;
463   UINT64 totalOutboundIPv6IPsecAuthPackets;
464   UINT32 durationSecs;
465 } IPSEC_DOSP_STATE0;
466 
467 typedef struct IPSEC_TRAFFIC_STATISTICS1_ {
468   UINT64 encryptedByteCount;
469   UINT64 authenticatedAHByteCount;
470   UINT64 authenticatedESPByteCount;
471   UINT64 transportByteCount;
472   UINT64 tunnelByteCount;
473   UINT64 offloadByteCount;
474   UINT64 totalSuccessfulPackets;
475 } IPSEC_TRAFFIC_STATISTICS1;
476 
477 typedef struct IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1_ {
478   UINT32 invalidSpisOnInbound;
479   UINT32 decryptionFailuresOnInbound;
480   UINT32 authenticationFailuresOnInbound;
481   UINT32 udpEspValidationFailuresOnInbound;
482   UINT32 replayCheckFailuresOnInbound;
483   UINT32 invalidClearTextInbound;
484   UINT32 saNotInitializedOnInbound;
485   UINT32 receiveOverIncorrectSaInbound;
486   UINT32 secureReceivesNotMatchingFilters;
487   UINT32 totalDropPacketsInbound;
488 } IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1;
489 
490 typedef struct IPSEC_STATISTICS1_ {
491   IPSEC_AGGREGATE_SA_STATISTICS0          aggregateSaStatistics;
492   IPSEC_ESP_DROP_PACKET_STATISTICS0       espDropPacketStatistics;
493   IPSEC_AH_DROP_PACKET_STATISTICS0        ahDropPacketStatistics;
494   IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1 aggregateDropPacketStatistics;
495   IPSEC_TRAFFIC_STATISTICS1               inboundTrafficStatistics;
496   IPSEC_TRAFFIC_STATISTICS1               outboundTrafficStatistics;
497 } IPSEC_STATISTICS1;
498 
499 typedef struct IPSEC_SA_BUNDLE1_ {
500   UINT32                 flags;
501   IPSEC_SA_LIFETIME0     lifetime;
502   UINT32                 idleTimeoutSeconds;
503   UINT32                 ndAllowClearTimeoutSeconds;
504   IPSEC_ID0              *ipsecId;
505   UINT32                 napContext;
506   UINT32                 qmSaId;
507   UINT32                 numSAs;
508   IPSEC_SA0              *saList;
509   IPSEC_KEYMODULE_STATE0 *keyModuleState;
510   FWP_IP_VERSION         ipVersion;
511   __C89_NAMELESS union {
512     UINT32 peerV4PrivateAddress;
513     ;      // case(FWP_IP_VERSION_V6)
514   };
515   UINT64                 mmSaId;
516   IPSEC_PFS_GROUP        pfsGroup;
517   GUID                   saLookupContext;
518   UINT64                 qmFilterId;
519 } IPSEC_SA_BUNDLE1;
520 
521 typedef struct _IPSEC_VIRTUAL_IF_TUNNEL_INFO0 {
522      UINT64    virtualIfTunnelId;
523      UINT64    trafficSelectorId;
524 } IPSEC_VIRTUAL_IF_TUNNEL_INFO0;
525 
526 typedef struct IPSEC_TRAFFIC1_ {
527   FWP_IP_VERSION     ipVersion;
528   __C89_NAMELESS union {
529     UINT32 localV4Address;
530     UINT8  localV6Address[16];
531   };
532   __C89_NAMELESS union {
533     UINT32 remoteV4Address;
534     UINT8  remoteV6Address[16];
535   };
536   IPSEC_TRAFFIC_TYPE trafficType;
537   __C89_NAMELESS union {
538     UINT64 ipsecFilterId;
539     UINT64 tunnelPolicyId;
540   };
541   UINT16             remotePort;
542   UINT16             localPort;
543   UINT8              ipProtocol;
544   UINT64             localIfLuid;
545   UINT32             realIfProfileId;
546 } IPSEC_TRAFFIC1;
547 
548 typedef struct IPSEC_SA_DETAILS1_ {
549   FWP_IP_VERSION                ipVersion;
550   FWP_DIRECTION                 saDirection;
551   IPSEC_TRAFFIC1                traffic;
552   IPSEC_SA_BUNDLE1              saBundle;
553   __C89_NAMELESS union {
554     IPSEC_V4_UDP_ENCAPSULATION0 *udpEncapsulation;
555     ;      // case(FWP_IP_VERSION_V6)
556   };
557   FWPM_FILTER0                  *transportFilter;
558   IPSEC_VIRTUAL_IF_TUNNEL_INFO0 *virtualIfTunnelInfo;
559 } IPSEC_SA_DETAILS1;
560 
561 typedef struct IPSEC_SA_CONTEXT1_ {
562   UINT64            saContextId;
563   IPSEC_SA_DETAILS1 *inboundSa;
564   IPSEC_SA_DETAILS1 *outboundSa;
565 } IPSEC_SA_CONTEXT1;
566 
567 typedef struct IPSEC_GETSPI1_ {
568   IPSEC_TRAFFIC1         inboundIpsecTraffic;
569   FWP_IP_VERSION         ipVersion;
570   __C89_NAMELESS union {
571     IPSEC_V4_UDP_ENCAPSULATION0 *inboundUdpEncapsulation;
572     ;      // case(FWP_IP_VERSION_V6)
573   };
574   IPSEC_CRYPTO_MODULE_ID *rngCryptoModuleID;
575 } IPSEC_GETSPI1;
576 
577 typedef struct _IPSEC_ADDRESS_INFO0 {
578   UINT32           numV4Addresses;
579   UINT32           *v4Addresses;
580   UINT32           numV6Addresses;
581   FWP_BYTE_ARRAY16 *v6Addresses;
582 } IPSEC_ADDRESS_INFO0;
583 
584 #endif /*(_WIN32_WINNT >= 0x0601)*/
585 #ifdef __cplusplus
586 }
587 #endif
588 
589 #endif /*_INC_IPSECTYPES*/
590