/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_IPSECTYPES
#define _INC_IPSECTYPES
#include <iketypes.h>

#ifdef __cplusplus
extern "C" {
#endif

#if (_WIN32_WINNT >= 0x0600)

typedef UINT8 IPSEC_AUTH_CONFIG;
typedef UINT8 IPSEC_CIPHER_CONFIG;
typedef UINT32 IPSEC_SA_SPI;
typedef UINT64 IPSEC_TOKEN_HANDLE;
typedef GUID IPSEC_CRYPTO_MODULE_ID;

#ifndef __IPSEC_SA_TRANSFORM0_FWD_DECLARED
#define __IPSEC_SA_TRANSFORM0_FWD_DECLARED
typedef struct IPSEC_SA_TRANSFORM0_ IPSEC_SA_TRANSFORM0;
#endif /* __IPSEC_SA_TRANSFORM0_FWD_DECLARED */

#ifndef __FWPM_FILTER0_FWD_DECLARED
#define __FWPM_FILTER0_FWD_DECLARED
typedef struct FWPM_FILTER0_ FWPM_FILTER0;
#endif /* __FWPM_FILTER0_FWD_DECLARED */

typedef enum IPSEC_FAILURE_POINT_ {
  IPSEC_FAILURE_NONE,
  IPSEC_FAILURE_ME,
  IPSEC_FAILURE_PEER,
  IPSEC_FAILURE_POINT_MAX 
} IPSEC_FAILURE_POINT;

typedef enum IPSEC_TRAFFIC_TYPE_ {
  IPSEC_TRAFFIC_TYPE_TRANSPORT,
  IPSEC_TRAFFIC_TYPE_TUNNEL,
  IPSEC_TRAFFIC_TYPE_MAX 
} IPSEC_TRAFFIC_TYPE;

typedef enum IPSEC_PFS_GROUP_ {
  IPSEC_PFS_NONE,
  IPSEC_PFS_1,
  IPSEC_PFS_2,
  IPSEC_PFS_2048,
  IPSEC_PFS_ECP_256,
  IPSEC_PFS_ECP_384,
  IPSEC_PFS_MM,
  IPSEC_PFS_MAX 
} IPSEC_PFS_GROUP;

typedef enum IPSEC_TRANSFORM_TYPE_ {
  IPSEC_TRANSFORM_AH,
  IPSEC_TRANSFORM_ESP_AUTH,
  IPSEC_TRANSFORM_ESP_CIPHER,
  IPSEC_TRANSFORM_ESP_AUTH_AND_CIPHER,
  IPSEC_TRANSFORM_ESP_AUTH_FW,
  IPSEC_TRANSFORM_TYPE_MAX 
} IPSEC_TRANSFORM_TYPE;

typedef enum IPSEC_AUTH_TYPE_ {
  IPSEC_AUTH_MD5,
  IPSEC_AUTH_SHA_1,
  IPSEC_AUTH_SHA_256,
  IPSEC_AUTH_AES_128,
  IPSEC_AUTH_AES_192,
  IPSEC_AUTH_AES_256,
  IPSEC_AUTH_MAX 
} IPSEC_AUTH_TYPE;

typedef enum IPSEC_CIPHER_TYPE_ {
  IPSEC_CIPHER_TYPE_DES,
  IPSEC_CIPHER_TYPE_3DES,
  IPSEC_CIPHER_TYPE_AES_128,
  IPSEC_CIPHER_TYPE_AES_192,
  IPSEC_CIPHER_TYPE_AES_256,
  IPSEC_CIPHER_TYPE_MAX 
} IPSEC_CIPHER_TYPE;

typedef enum IPSEC_TOKEN_MODE_ {
  IPSEC_TOKEN_MODE_MAIN,
  IPSEC_TOKEN_MODE_EXTENDED,
  IPSEC_TOKEN_MODE_MAX 
} IPSEC_TOKEN_MODE;

typedef enum IPSEC_TOKEN_PRINCIPAL_ {
  IPSEC_TOKEN_PRINCIPAL_LOCAL,
  IPSEC_TOKEN_PRINCIPAL_PEER,
  IPSEC_TOKEN_PRINCIPAL_MAX 
} IPSEC_TOKEN_PRINCIPAL;

typedef enum IPSEC_TOKEN_TYPE_ {
  IPSEC_TOKEN_TYPE_MACHINE,
  IPSEC_TOKEN_TYPE_IMPERSONATION,
  IPSEC_TOKEN_TYPE_MAX 
} IPSEC_TOKEN_TYPE;

typedef struct IPSEC_SA_LIFETIME0_ {
  UINT32 lifetimeSeconds;
  UINT32 lifetimeKilobytes;
  UINT32 lifetimePackets;
} IPSEC_SA_LIFETIME0;

typedef struct IPSEC_KEYING_POLICY0_ {
  UINT32 numKeyMods;
  GUID   *keyModKeys;
} IPSEC_KEYING_POLICY0;

typedef struct IPSEC_SA_IDLE_TIMEOUT0_ {
  UINT32 idleTimeoutSeconds;
  UINT32 idleTimeoutSecondsFailOver;
} IPSEC_SA_IDLE_TIMEOUT0;

typedef struct IPSEC_PROPOSAL0_ {
  IPSEC_SA_LIFETIME0  lifetime;
  UINT32              numSaTransforms;
  IPSEC_SA_TRANSFORM0 *saTransforms;
  IPSEC_PFS_GROUP     pfsGroup;
} IPSEC_PROPOSAL0;

typedef struct IPSEC_TRANSPORT_POLICY0_ {
  UINT32                 numIpsecProposals;
  IPSEC_PROPOSAL0        *ipsecProposals;
  UINT32                 flags;
  UINT32                 ndAllowClearTimeoutSeconds;
  IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
  IKEEXT_EM_POLICY0      *emPolicy;
} IPSEC_TRANSPORT_POLICY0;

typedef struct IPSEC_AUTH_TRANSFORM_ID0_ {
  IPSEC_AUTH_TYPE   authType;
  IPSEC_AUTH_CONFIG authConfig;
} IPSEC_AUTH_TRANSFORM_ID0;

typedef struct IPSEC_AUTH_TRANSFORM0_ {
  IPSEC_AUTH_TRANSFORM_ID0 authTransformId;
  IPSEC_CRYPTO_MODULE_ID   *cryptoModuleId;
} IPSEC_AUTH_TRANSFORM0;

typedef struct IPSEC_CIPHER_TRANSFORM_ID0_ {
  IPSEC_CIPHER_TYPE   cipherType;
  IPSEC_CIPHER_CONFIG cipherConfig;
} IPSEC_CIPHER_TRANSFORM_ID0;

typedef struct IPSEC_CIPHER_TRANSFORM0_ {
  IPSEC_CIPHER_TRANSFORM_ID0 cipherTransformId;
  IPSEC_CRYPTO_MODULE_ID     *cryptoModuleId;
} IPSEC_CIPHER_TRANSFORM0;

typedef struct IPSEC_AUTH_AND_CIPHER_TRANSFORM0_ {
  IPSEC_AUTH_TRANSFORM0   authTransform;
  IPSEC_CIPHER_TRANSFORM0 cipherTransform;
} IPSEC_AUTH_AND_CIPHER_TRANSFORM0;

typedef struct IPSEC_SA_TRANSFORM0_ {
  IPSEC_TRANSFORM_TYPE ipsecTransformType;
  __C89_NAMELESS union {
    IPSEC_AUTH_TRANSFORM0            *ahTransform;
    IPSEC_AUTH_TRANSFORM0            *espAuthTransform;
    IPSEC_CIPHER_TRANSFORM0          *espCipherTransform;
    IPSEC_AUTH_AND_CIPHER_TRANSFORM0 *espAuthAndCipherTransform;
    IPSEC_AUTH_TRANSFORM0            *espAuthFwTransform;
  };
} IPSEC_SA_TRANSFORM0;

typedef struct IPSEC_TUNNEL_ENDPOINTS0_ {
  FWP_IP_VERSION ipVersion;
  __C89_NAMELESS union {
    UINT32 localV4Address;
    UINT8  localV6Address[16];
  };
  __C89_NAMELESS union {
    UINT32 remoteV4Address;
    UINT8  remoteV6Address[16];
  };
} IPSEC_TUNNEL_ENDPOINTS0;

typedef struct IPSEC_TUNNEL_POLICY0_ {
  UINT32                  flags;
  UINT32                  numIpsecProposals;
  IPSEC_PROPOSAL0         *ipsecProposals;
  IPSEC_TUNNEL_ENDPOINTS0 tunnelEndpoints;
  IPSEC_SA_IDLE_TIMEOUT0  saIdleTimeout;
  IKEEXT_EM_POLICY0       *emPolicy;
} IPSEC_TUNNEL_POLICY0;

typedef struct IPSEC_V4_UDP_ENCAPSULATION0_ {
  UINT16 localUdpEncapPort;
  UINT16 remoteUdpEncapPort;
} IPSEC_V4_UDP_ENCAPSULATION0;

typedef struct IPSEC_AGGREGATE_SA_STATISTICS0_ {
  UINT32 activeSas;
  UINT32 pendingSaNegotiations;
  UINT32 totalSasAdded;
  UINT32 totalSasDeleted;
  UINT32 successfulRekeys;
  UINT32 activeTunnels;
  UINT32 offloadedSas;
} IPSEC_AGGREGATE_SA_STATISTICS0;

typedef struct IPSEC_ESP_DROP_PACKET_STATISTICS0_ {
  UINT32 invalidSpisOnInbound;
  UINT32 decryptionFailuresOnInbound;
  UINT32 authenticationFailuresOnInbound;
  UINT32 replayCheckFailuresOnInbound;
  UINT32 saNotInitializedOnInbound;
} IPSEC_ESP_DROP_PACKET_STATISTICS0;

typedef struct IPSEC_AH_DROP_PACKET_STATISTICS0_ {
  UINT32 invalidSpisOnInbound;
  UINT32 authenticationFailuresOnInbound;
  UINT32 replayCheckFailuresOnInbound;
  UINT32 saNotInitializedOnInbound;
} IPSEC_AH_DROP_PACKET_STATISTICS0;

typedef struct IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0_ {
  UINT32 invalidSpisOnInbound;
  UINT32 decryptionFailuresOnInbound;
  UINT32 authenticationFailuresOnInbound;
  UINT32 udpEspValidationFailuresOnInbound;
  UINT32 replayCheckFailuresOnInbound;
  UINT32 invalidClearTextInbound;
  UINT32 saNotInitializedOnInbound;
  UINT32 receiveOverIncorrectSaInbound;
  UINT32 secureReceivesNotMatchingFilters;
} IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0;

typedef struct IPSEC_TRAFFIC_STATISTICS0_ {
  UINT64 encryptedByteCount;
  UINT64 authenticatedAHByteCount;
  UINT64 authenticatedESPByteCount;
  UINT64 transportByteCount;
  UINT64 tunnelByteCount;
  UINT64 offloadByteCount;
} IPSEC_TRAFFIC_STATISTICS0;

typedef struct IPSEC_STATISTICS0_ {
  IPSEC_AGGREGATE_SA_STATISTICS0          aggregateSaStatistics;
  IPSEC_ESP_DROP_PACKET_STATISTICS0       espDropPacketStatistics;
  IPSEC_AH_DROP_PACKET_STATISTICS0        ahDropPacketStatistics;
  IPSEC_AGGREGATE_DROP_PACKET_STATISTICS0 aggregateDropPacketStatistics;
  IPSEC_TRAFFIC_STATISTICS0               inboundTrafficStatistics;
  IPSEC_TRAFFIC_STATISTICS0               outboundTrafficStatistics;
} IPSEC_STATISTICS0;

typedef struct IPSEC_TOKEN0_ {
  IPSEC_TOKEN_TYPE      type;
  IPSEC_TOKEN_PRINCIPAL principal;
  IPSEC_TOKEN_MODE      mode;
  IPSEC_TOKEN_HANDLE    token;
} IPSEC_TOKEN0;

typedef struct IPSEC_ID0_ {
  wchar_t      *mmTargetName;
  wchar_t      *emTargetName;
  UINT32       numTokens;
  IPSEC_TOKEN0 *tokens;
  UINT64       explicitCredentials;
  UINT64       logonId;
} IPSEC_ID0;

typedef struct IPSEC_SA_AUTH_INFORMATION0_ {
  IPSEC_AUTH_TRANSFORM0 authTransform;
  FWP_BYTE_BLOB         authKey;
} IPSEC_SA_AUTH_INFORMATION0;

typedef struct IPSEC_SA_CIPHER_INFORMATION0_ {
  IPSEC_CIPHER_TRANSFORM0 cipherTransform;
  FWP_BYTE_BLOB           cipherKey;
} IPSEC_SA_CIPHER_INFORMATION0;

typedef struct IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0_ {
  IPSEC_SA_CIPHER_INFORMATION0 saCipherInformation;
  IPSEC_SA_AUTH_INFORMATION0   saAuthInformation;
} IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0;

typedef struct IPSEC_SA0_ {
  IPSEC_SA_SPI         spi;
  IPSEC_TRANSFORM_TYPE saTransformType;
  __C89_NAMELESS union {
    IPSEC_SA_AUTH_INFORMATION0            *ahInformation;
    IPSEC_SA_AUTH_INFORMATION0            *espAuthInformation;
    IPSEC_SA_CIPHER_INFORMATION0          *espCipherInformation;
    IPSEC_SA_AUTH_AND_CIPHER_INFORMATION0 *espAuthAndCipherInformation;
    IPSEC_SA_AUTH_INFORMATION0            *espAuthFwInformation;
  };
} IPSEC_SA0;

typedef struct IPSEC_KEYMODULE_STATE0_ {
  GUID          keyModuleKey;
  FWP_BYTE_BLOB stateBlob;
} IPSEC_KEYMODULE_STATE0;

typedef struct IPSEC_SA_BUNDLE0_ {
  UINT32                 flags;
  IPSEC_SA_LIFETIME0     lifetime;
  UINT32                 idleTimeoutSeconds;
  UINT32                 ndAllowClearTimeoutSeconds;
  IPSEC_ID0              *ipsecId;
  UINT32                 napContext;
  UINT32                 qmSaId;
  UINT32                 numSAs;
  IPSEC_SA0              *saList;
  IPSEC_KEYMODULE_STATE0 *keyModuleState;
  FWP_IP_VERSION         ipVersion;
  __C89_NAMELESS union {
    UINT32 peerV4PrivateAddress;
    ;      // case(FWP_IP_VERSION_V6)
  };
  UINT64                 mmSaId;
  IPSEC_PFS_GROUP        pfsGroup;
} IPSEC_SA_BUNDLE0;

typedef struct IPSEC_TRAFFIC0_ {
  FWP_IP_VERSION     ipVersion;
  __C89_NAMELESS union {
    UINT32 localV4Address;
    UINT8  localV6Address[16];
  };
  __C89_NAMELESS union {
    UINT32 remoteV4Address;
    UINT8  remoteV6Address[16];
  };
  IPSEC_TRAFFIC_TYPE trafficType;
  __C89_NAMELESS union {
    UINT64 ipsecFilterId;
    UINT64 tunnelPolicyId;
  };
  UINT16             remotePort;
} IPSEC_TRAFFIC0;

typedef struct IPSEC_SA_DETAILS0_ {
  FWP_IP_VERSION   ipVersion;
  FWP_DIRECTION    saDirection;
  IPSEC_TRAFFIC0   traffic;
  IPSEC_SA_BUNDLE0 saBundle;
  __C89_NAMELESS union {
    IPSEC_V4_UDP_ENCAPSULATION0 *udpEncapsulation;
    ;      // case(FWP_IP_VERSION_V6)
  };
  FWPM_FILTER0     *transportFilter;
} IPSEC_SA_DETAILS0;

typedef struct IPSEC_SA_CONTEXT0_ {
  UINT64            saContextId;
  IPSEC_SA_DETAILS0 *inboundSa;
  IPSEC_SA_DETAILS0 *outboundSa;
} IPSEC_SA_CONTEXT0;

typedef struct IPSEC_GETSPI0_ {
  IPSEC_TRAFFIC0         inboundIpsecTraffic;
  FWP_IP_VERSION         ipVersion;
  __C89_NAMELESS union {
    IPSEC_V4_UDP_ENCAPSULATION0 *inboundUdpEncapsulation;
    ;      // case(FWP_IP_VERSION_V6)
  };
  IPSEC_CRYPTO_MODULE_ID *rngCryptoModuleID;
} IPSEC_GETSPI0;

typedef struct IPSEC_SA_ENUM_TEMPLATE0_ {
  FWP_DIRECTION saDirection;
} IPSEC_SA_ENUM_TEMPLATE0;

typedef struct IPSEC_SA_CONTEXT_ENUM_TEMPLATE0_ {
  FWP_CONDITION_VALUE0 localSubNet;
  FWP_CONDITION_VALUE0 remoteSubNet;
} IPSEC_SA_CONTEXT_ENUM_TEMPLATE0;

#endif /*(_WIN32_WINNT >= 0x0600)*/
#if (_WIN32_WINNT >= 0x0601)

typedef struct IPSEC_TUNNEL_ENDPOINTS1_ {
  FWP_IP_VERSION ipVersion;
  __C89_NAMELESS union {
    UINT32 localV4Address;
    UINT8  localV6Address[16];
  };
  __C89_NAMELESS union {
    UINT32 remoteV4Address;
    UINT8  remoteV6Address[16];
  };
  UINT64         localIfLuid;
} IPSEC_TUNNEL_ENDPOINTS1;

typedef struct IPSEC_TUNNEL_POLICY1_ {
  UINT32                  flags;
  UINT32                  numIpsecProposals;
  IPSEC_PROPOSAL0         *ipsecProposals;
  IPSEC_TUNNEL_ENDPOINTS1 tunnelEndpoints;
  IPSEC_SA_IDLE_TIMEOUT0  saIdleTimeout;
  IKEEXT_EM_POLICY1       *emPolicy;
} IPSEC_TUNNEL_POLICY1;

typedef struct IPSEC_TRANSPORT_POLICY1_ {
  UINT32                 numIpsecProposals;
  IPSEC_PROPOSAL0        *ipsecProposals;
  UINT32                 flags;
  UINT32                 ndAllowClearTimeoutSeconds;
  IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
  IKEEXT_EM_POLICY1      *emPolicy;
} IPSEC_TRANSPORT_POLICY1;

typedef struct _IPSEC_DOSP_OPTIONS0 {
  UINT32               stateIdleTimeoutSeconds;
  UINT32               perIPRateLimitQueueIdleTimeoutSeconds;
  UINT8                ipV6IPsecUnauthDscp;
  UINT32               ipV6IPsecUnauthRateLimitBytesPerSec;
  UINT32               ipV6IPsecUnauthPerIPRateLimitBytesPerSec;
  UINT8                ipV6IPsecAuthDscp;
  UINT32               ipV6IPsecAuthRateLimitBytesPerSec;
  UINT8                icmpV6Dscp;
  UINT32               icmpV6RateLimitBytesPerSec;
  UINT8                ipV6FilterExemptDscp;
  UINT32               ipV6FilterExemptRateLimitBytesPerSec;
  UINT8                defBlockExemptDscp;
  UINT32               defBlockExemptRateLimitBytesPerSec;
  UINT32               maxStateEntries;
  UINT32               maxPerIPRateLimitQueues;
  UINT32               flags;
  UINT32               numPublicIFLuids;
  UINT64               *publicIFLuids;
  UINT32               numInternalIFLuids;
  UINT64               *internalIFLuids;
  FWP_V6_ADDR_AND_MASK publicV6AddrMask;
  FWP_V6_ADDR_AND_MASK internalV6AddrMask;
} IPSEC_DOSP_OPTIONS0;

typedef struct _IPSEC_DOSP_STATISTICS0 {
  UINT64 totalStateEntriesCreated;
  UINT64 currentStateEntries;
  UINT64 totalInboundAllowedIPv6IPsecUnauthPkts;
  UINT64 totalInboundRatelimitDiscardedIPv6IPsecUnauthPkts;
  UINT64 totalInboundPerIPRatelimitDiscardedIPv6IPsecUnauthPkts;
  UINT64 totalInboundOtherDiscardedIPv6IPsecUnauthPkts;
  UINT64 totalInboundAllowedIPv6IPsecAuthPkts;
  UINT64 totalInboundRatelimitDiscardedIPv6IPsecAuthPkts;
  UINT64 totalInboundOtherDiscardedIPv6IPsecAuthPkts;
  UINT64 totalInboundAllowedICMPv6Pkts;
  UINT64 totalInboundRatelimitDiscardedICMPv6Pkts;
  UINT64 totalInboundAllowedIPv6FilterExemptPkts;
  UINT64 totalInboundRatelimitDiscardedIPv6FilterExemptPkts;
  UINT64 totalInboundDiscardedIPv6FilterBlockPkts;
  UINT64 totalInboundAllowedDefBlockExemptPkts;
  UINT64 totalInboundRatelimitDiscardedDefBlockExemptPkts;
  UINT64 totalInboundDiscardedDefBlockPkts;
  UINT64 currentInboundIPv6IPsecUnauthPerIPRateLimitQueues;
} IPSEC_DOSP_STATISTICS0;

typedef struct _IPSEC_DOSP_STATE_ENUM_TEMPLATE0 {
  FWP_V6_ADDR_AND_MASK publicV6AddrMask;
  FWP_V6_ADDR_AND_MASK internalV6AddrMask;
} IPSEC_DOSP_STATE_ENUM_TEMPLATE0;

typedef struct _IPSEC_DOSP_STATE0 {
  UINT8  publicHostV6Addr[16];
  UINT8  internalHostV6Addr[16];
  UINT64 totalInboundIPv6IPsecAuthPackets;
  UINT64 totalOutboundIPv6IPsecAuthPackets;
  UINT32 durationSecs;
} IPSEC_DOSP_STATE0;

typedef struct IPSEC_TRAFFIC_STATISTICS1_ {
  UINT64 encryptedByteCount;
  UINT64 authenticatedAHByteCount;
  UINT64 authenticatedESPByteCount;
  UINT64 transportByteCount;
  UINT64 tunnelByteCount;
  UINT64 offloadByteCount;
  UINT64 totalSuccessfulPackets;
} IPSEC_TRAFFIC_STATISTICS1;

typedef struct IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1_ {
  UINT32 invalidSpisOnInbound;
  UINT32 decryptionFailuresOnInbound;
  UINT32 authenticationFailuresOnInbound;
  UINT32 udpEspValidationFailuresOnInbound;
  UINT32 replayCheckFailuresOnInbound;
  UINT32 invalidClearTextInbound;
  UINT32 saNotInitializedOnInbound;
  UINT32 receiveOverIncorrectSaInbound;
  UINT32 secureReceivesNotMatchingFilters;
  UINT32 totalDropPacketsInbound;
} IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1;

typedef struct IPSEC_STATISTICS1_ {
  IPSEC_AGGREGATE_SA_STATISTICS0          aggregateSaStatistics;
  IPSEC_ESP_DROP_PACKET_STATISTICS0       espDropPacketStatistics;
  IPSEC_AH_DROP_PACKET_STATISTICS0        ahDropPacketStatistics;
  IPSEC_AGGREGATE_DROP_PACKET_STATISTICS1 aggregateDropPacketStatistics;
  IPSEC_TRAFFIC_STATISTICS1               inboundTrafficStatistics;
  IPSEC_TRAFFIC_STATISTICS1               outboundTrafficStatistics;
} IPSEC_STATISTICS1;

typedef struct IPSEC_SA_BUNDLE1_ {
  UINT32                 flags;
  IPSEC_SA_LIFETIME0     lifetime;
  UINT32                 idleTimeoutSeconds;
  UINT32                 ndAllowClearTimeoutSeconds;
  IPSEC_ID0              *ipsecId;
  UINT32                 napContext;
  UINT32                 qmSaId;
  UINT32                 numSAs;
  IPSEC_SA0              *saList;
  IPSEC_KEYMODULE_STATE0 *keyModuleState;
  FWP_IP_VERSION         ipVersion;
  __C89_NAMELESS union {
    UINT32 peerV4PrivateAddress;
    ;      // case(FWP_IP_VERSION_V6)
  };
  UINT64                 mmSaId;
  IPSEC_PFS_GROUP        pfsGroup;
  GUID                   saLookupContext;
  UINT64                 qmFilterId;
} IPSEC_SA_BUNDLE1;

typedef struct _IPSEC_VIRTUAL_IF_TUNNEL_INFO0 {
     UINT64    virtualIfTunnelId;
     UINT64    trafficSelectorId;
} IPSEC_VIRTUAL_IF_TUNNEL_INFO0;

typedef struct IPSEC_TRAFFIC1_ {
  FWP_IP_VERSION     ipVersion;
  __C89_NAMELESS union {
    UINT32 localV4Address;
    UINT8  localV6Address[16];
  };
  __C89_NAMELESS union {
    UINT32 remoteV4Address;
    UINT8  remoteV6Address[16];
  };
  IPSEC_TRAFFIC_TYPE trafficType;
  __C89_NAMELESS union {
    UINT64 ipsecFilterId;
    UINT64 tunnelPolicyId;
  };
  UINT16             remotePort;
  UINT16             localPort;
  UINT8              ipProtocol;
  UINT64             localIfLuid;
  UINT32             realIfProfileId;
} IPSEC_TRAFFIC1;

typedef struct IPSEC_SA_DETAILS1_ {
  FWP_IP_VERSION                ipVersion;
  FWP_DIRECTION                 saDirection;
  IPSEC_TRAFFIC1                traffic;
  IPSEC_SA_BUNDLE1              saBundle;
  __C89_NAMELESS union {
    IPSEC_V4_UDP_ENCAPSULATION0 *udpEncapsulation;
    ;      // case(FWP_IP_VERSION_V6)
  };
  FWPM_FILTER0                  *transportFilter;
  IPSEC_VIRTUAL_IF_TUNNEL_INFO0 *virtualIfTunnelInfo;
} IPSEC_SA_DETAILS1;

typedef struct IPSEC_SA_CONTEXT1_ {
  UINT64            saContextId;
  IPSEC_SA_DETAILS1 *inboundSa;
  IPSEC_SA_DETAILS1 *outboundSa;
} IPSEC_SA_CONTEXT1;

typedef struct IPSEC_GETSPI1_ {
  IPSEC_TRAFFIC1         inboundIpsecTraffic;
  FWP_IP_VERSION         ipVersion;
  __C89_NAMELESS union {
    IPSEC_V4_UDP_ENCAPSULATION0 *inboundUdpEncapsulation;
    ;      // case(FWP_IP_VERSION_V6)
  };
  IPSEC_CRYPTO_MODULE_ID *rngCryptoModuleID;
} IPSEC_GETSPI1;

typedef struct _IPSEC_ADDRESS_INFO0 {
  UINT32           numV4Addresses;
  UINT32           *v4Addresses;
  UINT32           numV6Addresses;
  FWP_BYTE_ARRAY16 *v6Addresses;
} IPSEC_ADDRESS_INFO0;

#endif /*(_WIN32_WINNT >= 0x0601)*/
#ifdef __cplusplus
}
#endif

#endif /*_INC_IPSECTYPES*/
