/*
 *  ws2ipdef.h  Windows Sockets (version 2) IP definitions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _WS2IPDEF_
#define _WS2IPDEF_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

#include <in6addr.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Interface information flags */
#define IFF_UP              0x00000001L
#define IFF_BROADCAST       0x00000002L
#define IFF_LOOPBACK        0x00000004L
#define IFF_POINTTOPOINT    0x00000008L
#define IFF_MULTICAST       0x00000010L

/* IP socket options */
#define IP_OPTIONS                  1
#define IP_HDRINCL                  2
#define IP_TOS                      3
#define IP_TTL                      4
#define IP_MULTICAST_IF             9
#define IP_MULTICAST_TTL            10
#define IP_MULTICAST_LOOP           11
#define IP_ADD_MEMBERSHIP           12
#define IP_DROP_MEMBERSHIP          13
#define IP_DONTFRAGMENT             14
#define IP_ADD_SOURCE_MEMBERSHIP    15
#define IP_DROP_SOURCE_MEMBERSHIP   16
#define IP_BLOCK_SOURCE             17
#define IP_UNBLOCK_SOURCE           18
#define IP_PKTINFO                  19
#define IP_HOPLIMIT                 21
#define IP_RECEIVE_BROADCAST        22
#define IP_RECVIF                   24
#define IP_RECVDSTADDR              25
#define IP_IFLIST                   28
#define IP_ADD_IFLIST               29
#define IP_DEL_IFLIST               30
#define IP_UNICAST_IF               31
#define IP_RTHDR                    32
#define IP_RECVRTHDR                38
#define IP_TCLASS                   39
#define IP_RECVTCLASS               40
#define IP_ORIGINAL_ARRIVAL_IF      47

/* Macro to extract port from socket address */
#define SS_PORT( x )    (((PSOCKADDR_IN)(x))->sin_port)

/* Specific IPv6 addresses */
#if (NTDDI_VERSION >= 0x05000100)
    #define IN6ADDR_ANY_INIT                { 0 }
    #define IN6ADDR_LOOPBACK_INIT \
        { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
        0x00, 0x00, 0x01 }
    #define IN6ADDR_ALLNODESONNODE_INIT \
        { 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
        0x00, 0x00, 0x01 }
    #define IN6ADDR_ALLNODESONLINK_INIT \
        { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
        0x00, 0x00, 0x01 }
    #define IN6ADDR_ALLROUTERSONLINK_INIT \
        { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
        0x00, 0x00, 0x02 }
    #define IN6ADDR_ALLMLDV2ROUTERSONLINK_INIT \
        { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
        0x00, 0x00, 0x16 }
    #define IN6ADDR_TEREDOINITIALLINKLOCALADDRESS_INIT \
        { 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, \
        0xFF, 0xFF, 0xFE }
    #define IN6ADDR_TEREDOOLDLINKLOCALADDRESSXP_INIT \
        { 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'T', 'E', R', \
        'E', 'D', 'O' }
    #define IN6ADDR_TEREDOOLDLINKLOCALADDRESSVISTA_INIT \
        { 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, \
        0xFF, 0xFF, 0xFF }
    #define IN6ADDR_LINKLOCALPREFIX_INIT    { 0xFE, 0x80 }
    #define IN6ADDR_MULTICASTPREFIX_INIT    { 0xFF, 0x00 }
    #define IN6ADDR_SOLICITEDNODEMULTICASTPREFIX_INIT \
        { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF }
    #define IN6ADDR_V4MAPPEDPREFIX_INIT \
        { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF }
    #define IN6ADDR_6TO4PREFIX_INIT         { 0x20, 0x02 }
    #define IN6ADDR_TEREDOPREFIX_INIT       { 0x20, 0x01, 0x00, 0x00 }
    #define IN6ADDR_TEREDOPREFIX_INIT_OLD   { 0x3F, 0xFE, 0x83, 0x1F }
    #define IN6ADDR_LINKLOCALPREFIX_LENGTH  64
    #define IN6ADDR_MULTICASTPREFIX_LENGTH  8
    #define IN6ADDR_SOLICITEDNODEMULTICASTPREFIX_LENGTH 104
    #define IN6ADDR_V4MAPPEDPREFIX_LENGTH   96
    #define IN6ADDR_6TO4PREFIX_LENGTH       16
    #define IN6ADDR_TEREDOPREFIX_LENGTH     32
#endif

/* Macros to manipulate IP addresses */
#if (NTDDI_VERSION >= 0x05010000)
    #define IN6_ADDR_EQUAL( p1, p2 ) \
        (BOOLEAN)((((__int64 *)(p1))[0] == ((__int64 *)(p2))[0]) && \
        (((__int64 *)(p1))[1] == ((__int64 *)(p2))[1]))
    #define IN6_ARE_ADDR_EQUAL  IN6_ADDR_EQUAL
    #define IN6_IS_ADDR_UNSPECIFIED( x ) \
        (BOOLEAN)(((x)->s6_words[0] == 0) && ((x)->s6_words[1] == 0) && \
        ((x)->s6_words[2] == 0) && ((x)->s6_words[3] == 0) && \
        ((x)->s6_words[4] == 0) && ((x)->s6_words[5] == 0) && \
        ((x)->s6_words[6] == 0) && ((x)->s6_words[7] == 0))
    #define IN6_IS_ADDR_LOOPBACK( x ) \
        (BOOLEAN)(((x)->s6_words[0] == 0) && ((x)->s6_words[1] == 0) && \
        ((x)->s6_words[2] == 0) && ((x)->s6_words[3] == 0) && \
        ((x)->s6_words[4] == 0) && ((x)->s6_words[5] == 0) && \
        ((x)->s6_words[6] == 0) && ((x)->s6_words[7] == 0x0100))
    #define IN6_IS_ADDR_MULTICAST( x ) \
        (BOOLEAN)((x)->s6_bytes[0] == 0xFF)
    #define IN6_IS_ADDR_EUI64( x ) \
        (BOOLEAN)((((x)->s6_bytes[0] & 0xE0) != 0) && !IN6_IS_ADDR_MULTICAST( x ))
    #define IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST( x ) \
        (BOOLEAN)(IN6_IS_ADDR_EUI64( x ) && ((x)->s6_words[4] == 0) && \
        ((x)->s6_words[5] == 0) && ((x)->s6_words[6] == 0) && \
        ((x)->s6_words[7] == 0))
    #define IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST( x ) \
        (BOOLEAN)(IN6_IS_ADDR_EUI64( x ) && ((x)->s6_words[4] == 0xFFFD) && \
        ((x)->s6_words[5] == 0xFFFF) && ((x)->s6_words[6] == 0xFFFF) && \
        (((x)->s6_words[7] & 0x80FF) == 0x80FF))
    #define IN6_IS_ADDR_ANYCAST( x ) \
        (IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST( x ) || \
        IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST( x ))
    #define IN6_IS_ADDR_LINKLOCAL( x ) \
        (BOOLEAN)(((x)->s6_bytes[0] == 0xFE) && (((x)->s6_bytes[1] & 0xC0) == 0x80))
    #define IN6_IS_ADDR_SITELOCAL( x ) \
        (BOOLEAN)(((x)->s6_bytes[0] == 0xFE) && (((x)->s6_bytes[1] & 0xC0) == 0xC0))
    #define IN6_IS_ADDR_GLOBAL( x ) \
        (BOOLEAN)((((x)->s6_bytes[0] & 0xF0) != 0) && \
        (((x)->s6_bytes[0] & 0xF0) != 0xF0))
    #define IN6_IS_ADDR_V4MAPPED( x ) \
        (BOOLEAN)(((x)->s6_words[0] == 0) && ((x)->s6_words[1] == 0) && \
        ((x)->s6_words[2] == 0) && ((x)->s6_words[3] == 0) && \
        ((x)->s6_words[4] == 0) && ((x)->s6_words[5] == 0xFFFF))
    #define IN6_IS_ADDR_V4COMPAT( x ) \
        (BOOLEAN)(((x)->s6_words[0] == 0) && ((x)->s6_words[1] == 0) && \
        ((x)->s6_words[2] == 0) && ((x)->s6_words[3] == 0) && \
        ((x)->s6_words[4] == 0) && ((x)->s6_words[5] == 0) && \
        !(((x)->s6_words[6] == 0) && ((x)->s6_addr[14] == 0) && \
        (((x)->s6_addr[15] == 0) || ((x)->s6_addr[15] == 1))))
    #define IN6_IS_ADDR_V4TRANSLATED( x ) \
        (BOOLEAN)(((x)->s6_words[0] == 0) && ((x)->s6_words[1] == 0) && \
        ((x)->s6_words[2] == 0) && ((x)->s6_words[3] == 0) && \
        ((x)->s6_words[4] == 0xFFFF) && ((x)->s6_words[5] == 0))
    #define IN6_IS_ADDR_MC_NODELOCAL( x ) \
        (BOOLEAN)(IN6_IS_ADDR_MULTICAST( x ) && (((x)->s6_bytes[1] & 0x0F) == 1))
    #define IN6_IS_ADDR_MC_LINKLOCAL( x ) \
        (BOOLEAN)(IN6_IS_ADDR_MULTICAST( x ) && (((x)->s6_bytes[1] & 0x0F) == 2))
    #define IN6_IS_ADDR_MC_SITELOCAL( x ) \
        (BOOLEAN)(IN6_IS_ADDR_MULTICAST( x ) && (((x)->s6_bytes[1] & 0x0F) == 5))
    #define IN6_IS_ADDR_MC_ORGLOCAL( x ) \
        (BOOLEAN)(IN6_IS_ADDR_MULTICAST( x ) && (((x)->s6_bytes[1] & 0x0F) == 8))
    #define IN6_IS_ADDR_MC_GLOBAL( x ) \
        (BOOLEAN)(IN6_IS_ADDR_MULTICAST( x ) && (((x)->s6_bytes[1] & 0x0F) == 0x0E))
    #define IN6_SET_ADDR_UNSPECIFIED( x ) \
        memset( (x)->s6_bytes, 0, sizeof( IN6_ADDR ) )
    #define IN6_SET_ADDR_LOOPBACK( x ) \
        { \
            memset( (x)->s6_bytes, 0, sizeof( IN6_ADDR ) ); \
            (x)->s6_bytes[15] = 1; \
        }
    #define IN6ADDR_SETANY( x ) \
        { \
            (x)->sin6_family = AF_INET6; \
            (x)->sin6_port = 0; \
            (x)->sin6_flowinfo = 0; \
            IN6_SET_ADDR_UNSPECIFIED( &(x)->sin6_addr ); \
            (x)->sin6_scope_id = 0; \
        }
    #define IN6ADDR_SETLOOPBACK( x ) \
        { \
            (x)->sin6_family = AF_INET6; \
            (x)->sin6_port = 0; \
            (x)->sin6_flowinfo = 0; \
            IN6_SET_ADDR_UNSPECIFIED( &(x)->sin6_addr ); \
            (x)->sin6_scope_id = 0; \
        }
    #define IN6ADDR_ISANY( x ) \
        IN6_IS_ADDR_UNSPECIFIED( &(x)->sin6_addr )
    #define IN6ADDR_LOOPBACK( x ) \
        IN6_IS_ADDR_LOOPBACK( &(x)->sin6_addr )
    #define IN6ADDR_ISEQUAL( p1, p2 ) \
        (BOOLEAN)((p1)->sin6_scope_id == (p2)->sin6_scope_id && \
        IN6_ADDR_EQUAL( &(p1)->sin6_addr, &(p2)->sin6_addr ))
    #define IN6ADDR_ISUNSPECIFIED( x ) \
        (BOOLEAN)((x)->sin6_scope_id == 0 && IN6_IS_ADDR_UNSPECIFIED( &(x)->sin6_addr ))
#endif

/* TCP/IP I/O control codes */
#define SIO_GET_INTERFACE_LIST              _IOR( 't', 127, ULONG )
#define SIO_GET_INTERFACE_LIST_EX           _IOR( 't', 126, ULONG )
#define SIO_SET_MULTICAST_FILTER            _IOW( 't', 125, ULONG )
#define SIO_GET_MULTICAST_FILTER            _IOW( 't', 124 | IOC_IN, ULONG )
#define SIOCSIPMSFILTER                     SIO_SET_MULTICAST_FILTER
#define SIOCGIPMSFILTER                     SIO_GET_MULTICAST_FILTER
#define SIOCSMSFILTER                       _IOW( 't', 126, ULONG )
#define SIOCGMSFILTER                       _IOW( 't', 127 | IOC_IN, ULONG )
#if (NTDDI_VERSION >= 0x06000100)
    #define IDEAL_SEND_BACKLOG_IOCTLS
    #define SIO_IDEAL_SEND_BACKLOG_QUERY    _IOR( 't', 123, ULONG )
    #define SIO_IDEAL_SEND_BACKLOG_CHANGE   _IO( 't', 122 )
#endif

/* Multicast filter options */
#define MCAST_JOIN_GROUP            41
#define MCAST_LEAVE_GROUP           42
#define MCAST_BLOCK_SOURCE          43
#define MCAST_UNBLOCK_SOURCE        44
#define MCAST_JOIN_SOURCE_GROUP     45
#define MCAST_LEAVE_SOURCE_GROUP    46

/* IPv6 socket options */
#define IPV6_HOPOPTS            1
#define IPV6_HDRINCL            2
#define IPV6_UNICAST_HOPS       4
#define IPV6_MULTICAST_IF       9
#define IPV6_MULTICAST_HOPS     10
#define IPV6_MULTICAST_LOOP     11
#define IPV6_ADD_MEMBERSHIP     12
#define IPV6_JOIN_GROUP         IPV6_ADD_MEMBERSHIP
#define IPV6_DROP_MEMBERSHIP    13
#define IPV6_LEAVE_GROUP        IPV6_DROP_MEMBERSHIP
#define IPV6_DONTFRAG           14
#define IPV6_PKTINFO            19
#define IPV6_HOPLIMIT           21
#define IPV6_PROTECTION_LEVEL   23
#define IPV6_RECVIF             24
#define IPV6_RECVDSTADDR        25
#define IPV6_CHECKSUM           26
#define IPV6_V6ONLY             27
#define IPV6_IFLIST             28
#define IPV6_ADD_IFLIST         29
#define IPV6_DEL_IFLIST         30
#define IPV6_UNICAST_IF         31
#define IPV6_RTHDR              32
#define IPV6_RECVRTHDR          38
#define IPV6_TCLASS             39
#define IPV6_RECVTCLASS         40
#define IP_PROTECTION_LEVEL     IPV6_PROTECTION_LEVEL

/* IP hop limit special value */
#define IP_UNSPECIFIED_HOP_LIMIT    (-1)

/* IPv6 protection levels */
#define PROTECTION_LEVEL_UNRESTRICTED   10
#define PROTECTION_LEVEL_EDGERESTRICTED 20
#define PROTECTION_LEVEL_RESTRICTED     30
#if (NTDDI_VERSION < 0x06000000)
    #define PROTECTION_LEVEL_DEFAULT    PROTECTION_LEVEL_EDGERESTRICTED
#else
    #define PROTECTION_LEVEL_DEFAULT    ((UINT)-1)
#endif

/* Maximum address length */
#define INET_ADDRSTRLEN     22
#define INET6_ADDRSTRLEN    65

/* TCP offload preference values */
#define TCP_OFFLOAD_NO_PREFERENCE   0
#define TCP_OFFLOAD_NOT_PREFERRED   1
#define TCP_OFFLOAD_PREFERRED       2

/* TCP options */
#define TCP_KEEPALIVE               3
#define TCP_MAXSEG                  4
#define TCP_MAXRT                   5
#define TCP_STDURG                  6
#define TCP_NOURG                   7
#define TCP_ATMARK                  8
#define TCP_NOSYNRETRIES            9
#define TCP_TIMESTAMPS              10
#define TCP_OFFLOAD_PREFERENCE      11
#define TCP_CONGESTION_ALGORITHM    12
#define TCP_DELAY_FIN_ACK           13

/* Old IPv6 socket address */
struct sockaddr_in6_old {
    SHORT       sin6_family;
    USHORT      sin6_port;
    ULONG       sin6_flowinfo;
    IN6_ADDR    sin6_addr;
};

/* General socket address */
typedef union sockaddr_gen {
    struct sockaddr         Address;
    struct sockaddr_in      AddressIn;
    struct sockaddr_in6_old AddressIn6;
} sockaddr_gen;

/* Interface information */
typedef struct _INTERFACE_INFO {
    ULONG           iiFlags;
    sockaddr_gen    iiAddress;
    sockaddr_gen    iiBroadcastAddress;
    sockaddr_gen    iiNetmask;
} INTERFACE_INFO;
typedef INTERFACE_INFO  *LPINTERFACE_INFO;

/* Interface information (extended version) */
typedef struct _INTERFACE_INFO_EX {
    ULONG           iiFlags;
    SOCKET_ADDRESS  iiAddress;
    SOCKET_ADDRESS  iiBroadcastAddress;
    SOCKET_ADDRESS  iiNetmask;
} INTERFACE_INFO_EX;
typedef INTERFACE_INFO_EX   *LPINTERFACE_INFO_EX;

/* IPv6 socket address */
typedef struct sockaddr_in6 {
    ADDRESS_FAMILY  sin6_family;
    USHORT          sin6_port;
    ULONG           sin6_flowinfo;
    IN6_ADDR        sin6_addr;
    union {
        ULONG       sin6_scope_id;
        SCOPE_ID    sin6_scope_struct;
    };
} SOCKADDR_IN6_LH;
typedef SOCKADDR_IN6_LH     *PSOCKADDR_IN6_LH;
typedef SOCKADDR_IN6_LH     *LPSOCKADDR_IN6_LH;
typedef struct sockaddr_in6_w2ksp1 {
    short           sin6_family;
    USHORT          sin6_port;
    ULONG           sin6_flowinfo;
    struct in6_addr sin6_addr;
    ULONG           sin6_scope_id;
} SOCKADDR_IN6_W2KSP1;
typedef SOCKADDR_IN6_W2KSP1 *PSOCKADDR_IN6_W2KSP1;
typedef SOCKADDR_IN6_W2KSP1 *LPSOCKADDR_IN6_W2KSP1;
#if (NTDDI_VERSION >= 0x05000100) && (NTDDI_VERSION < 0x06000000)
typedef SOCKADDR_IN6_W2KSP1 SOCKADDR_IN6;
typedef SOCKADDR_IN6_W2KSP1 *PSOCKADDR_IN6;
typedef SOCKADDR_IN6_W2KSP1 *LPSOCKADDR_IN6;
#else
typedef SOCKADDR_IN6_LH     SOCKADDR_IN6;
typedef SOCKADDR_IN6_LH     *PSOCKADDR_IN6;
typedef SOCKADDR_IN6_LH     *LPSOCKADDR_IN6;
#endif

/* Internet socket address */
typedef union _SOCKADDR_INET {
    SOCKADDR_IN     Ipv4;
    SOCKADDR_IN6    Ipv6;
    ADDRESS_FAMILY  si_family;
} SOCKADDR_INET;
typedef SOCKADDR_INET   *PSOCKADDR_INET;

/* IPv6 socket address pair */
typedef struct _sockaddr_in6_pair {
    PSOCKADDR_IN6   SourceAddress;
    PSOCKADDR_IN6   DestinationAddress;
} SOCKADDR_IN6_PAIR;
typedef SOCKADDR_IN6_PAIR   *PSOCKADDR_IN6_PAIR;

/* Multicast mode types */
typedef enum {
    MCAST_INCLUDE   = 0,
    MCAST_EXCLUDE   = 1
} MULTICAST_MODE_TYPE;

/* IP membership requirement */
typedef struct ip_mreq {
    IN_ADDR imr_multiaddr;
    IN_ADDR imr_interface;
} IP_MREQ;
typedef IP_MREQ *PIP_MREQ;

/* IP membership requirement source */
typedef struct ip_mreq_source {
    IN_ADDR imr_multiaddr;
    IN_ADDR imr_sourceaddr;
    IN_ADDR imr_interface;
} IP_MREQ_SOURCE;
typedef IP_MREQ_SOURCE  *PIP_MREQ_SOURCE;

/* IP Microsoft filter information */
typedef struct ip_msfilter {
    IN_ADDR             imsf_multiaddr;
    IN_ADDR             imsf_interface;
    MULTICAST_MODE_TYPE imsf_fmode;
    ULONG               imsf_numsrc;
    IN_ADDR             imsf_slist[1];
} IP_MSFILTER;
typedef IP_MSFILTER *PIP_MSFILTER;
#define IP_MSFILTER_SIZE( x ) \
    (sizeof( IP_MSFILTER ) - sizeof( IN_ADDR ) + (x) * sizeof( IN_ADDR ))

/* IPv6 membership requirement */
typedef struct ipv6_mreq {
    IN6_ADDR    ipv6mr_multiaddr;
    ULONG       ipv6mr_interface;
} IPV6_MREQ;
typedef IPV6_MREQ   *PIPV6_MREQ;

/* Group requirement */
#if (NTDDI_VERSION >= 0x05010000)
typedef struct group_req {
    ULONG               gr_interface;
    SOCKADDR_STORAGE    gr_group;
} GROUP_REQ;
typedef GROUP_REQ   *PGROUP_REQ;
#endif

/* Group source requirement */
#if (NTDDI_VERSION >= 0x05010000)
typedef struct group_storage_req {
    ULONG               gsr_interface;
    SOCKADDR_STORAGE    gsr_group;
    SOCKADDR_STORAGE    gsr_source;
} GROUP_STORAGE_REQ;
typedef GROUP_STORAGE_REQ   *PGROUP_STORAGE_GROUP;
#endif

/* Group filter */
#if (NTDDI_VERSION >= 0x05010000)
typedef struct group_filter {
    ULONG               gf_interface;
    SOCKADDR_STORAGE    gf_group;
    MULTICAST_MODE_TYPE gf_fmode;
    ULONG               gf_numsrc;
    SOCKADDR_STORAGE    gf_slist[1];
} GROUP_FILTER;
typedef GROUP_FILTER    *PGROUP_FILTER;
#define GROUP_FITLER_SIZE( x ) \
    (sizeof( GROUP_FILTER ) - sizeof( SOCKADDR_STORAGE ) + (x) * \
    sizeof( SOCKADDR_STORAGE ))
#endif

/* IP packet information */
typedef struct in_pktinfo {
    IN_ADDR ipi_addr;
    ULONG   ipi_ifindex;
} IN_PKTINFO;
typedef IN_PKTINFO  *PIN_PKTINFO;

/* IPv6 packet information */
typedef struct in6_pktinfo {
    IN6_ADDR    ipi6_addr;
    ULONG       ipi6_ifindex;
} IN6_PKTINFO;
typedef IN6_PKTINFO *PIN6_PKTINFO;

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* _WS2IPDEF_ */
