Home | History | Annotate | Download | only in include
      1 /**
      2  * This file is part of the mingw-w64 runtime package.
      3  * No warranty is given; refer to the file DISCLAIMER within this package.
      4  */
      5 #ifndef _WS2IPDEF_
      6 #define _WS2IPDEF_
      7 
      8 #include <_mingw_unicode.h>
      9 #include <winapifamily.h>
     10 
     11 #ifdef __LP64__
     12 #pragma push_macro("u_long")
     13 #undef u_long
     14 #define u_long __ms_u_long
     15 #endif
     16 
     17 #include <in6addr.h>
     18 
     19 #ifdef __cplusplus
     20 extern "C" {
     21 #endif
     22 
     23 typedef struct ipv6_mreq {
     24   struct in6_addr ipv6mr_multiaddr;
     25   unsigned int ipv6mr_interface;
     26 } IPV6_MREQ;
     27 
     28 struct sockaddr_in6_old {
     29   short sin6_family;
     30   u_short sin6_port;
     31   u_long sin6_flowinfo;
     32   struct in6_addr sin6_addr;
     33 };
     34 
     35 typedef union sockaddr_gen {
     36   struct sockaddr Address;
     37   struct sockaddr_in AddressIn;
     38   struct sockaddr_in6_old AddressIn6;
     39 } sockaddr_gen;
     40 
     41 struct sockaddr_in6 {
     42   short sin6_family;
     43   u_short sin6_port;
     44   u_long sin6_flowinfo;
     45   struct in6_addr sin6_addr;
     46   __C89_NAMELESS union {
     47     u_long sin6_scope_id;
     48     SCOPE_ID sin6_scope_struct;
     49   };
     50 };
     51 
     52 typedef struct sockaddr_in6 SOCKADDR_IN6;
     53 typedef struct sockaddr_in6 *PSOCKADDR_IN6;
     54 typedef struct sockaddr_in6 *LPSOCKADDR_IN6;
     55 
     56 typedef struct _INTERFACE_INFO {
     57   u_long iiFlags;
     58   sockaddr_gen iiAddress;
     59   sockaddr_gen iiBroadcastAddress;
     60   sockaddr_gen iiNetmask;
     61 } INTERFACE_INFO,*LPINTERFACE_INFO;
     62 
     63 typedef enum _MULTICAST_MODE_TYPE {
     64   MCAST_INCLUDE   = 0,
     65   MCAST_EXCLUDE
     66 } MULTICAST_MODE_TYPE;
     67 
     68 typedef struct _sockaddr_in6_pair {
     69   PSOCKADDR_IN6 SourceAddress;
     70   PSOCKADDR_IN6 DestinationAddress;
     71 } SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR;
     72 
     73 typedef union _SOCKADDR_INET {
     74   SOCKADDR_IN    Ipv4;
     75   SOCKADDR_IN6   Ipv6;
     76   ADDRESS_FAMILY si_family;
     77 } SOCKADDR_INET, *PSOCKADDR_INET;
     78 
     79 typedef struct group_filter {
     80   ULONG               gf_interface;
     81   SOCKADDR_STORAGE    gf_group;
     82   MULTICAST_MODE_TYPE gf_fmode;
     83   ULONG               gf_numsrc;
     84   SOCKADDR_STORAGE    gf_slist[1];
     85 } GROUP_FILTER, *PGROUP_FILTER;
     86 
     87 typedef struct group_req {
     88   ULONG            gr_interface;
     89   SOCKADDR_STORAGE gr_group;
     90 } GROUP_REQ, *PGROUP_REQ;
     91 
     92 typedef struct group_source_req {
     93   ULONG            gsr_interface;
     94   SOCKADDR_STORAGE gsr_group;
     95   SOCKADDR_STORAGE gsr_source;
     96 } GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ;
     97 
     98 #define IPV6_HOPOPTS           1
     99 #define IPV6_HDRINCL           2
    100 #define IPV6_UNICAST_HOPS      4
    101 #define IPV6_MULTICAST_IF      9
    102 #define IPV6_MULTICAST_HOPS    10
    103 #define IPV6_MULTICAST_LOOP    11
    104 #define IPV6_ADD_MEMBERSHIP    12
    105 #define IPV6_JOIN_GROUP        IPV6_ADD_MEMBERSHIP
    106 #define IPV6_DROP_MEMBERSHIP   13
    107 #define IPV6_LEAVE_GROUP       IPV6_DROP_MEMBERSHIP
    108 #define IPV6_DONTFRAG          14
    109 #define IPV6_PKTINFO           19
    110 #define IPV6_HOPLIMIT          21
    111 #define IPV6_PROTECTION_LEVEL  23
    112 #define IPV6_RECVIF            24
    113 #define IPV6_RECVDSTADDR       25
    114 #define IPV6_CHECKSUM          26
    115 #define IPV6_V6ONLY            27
    116 #define IPV6_IFLIST            28
    117 #define IPV6_ADD_IFLIST        29
    118 #define IPV6_DEL_IFLIST        30
    119 #define IPV6_UNICAST_IF        31
    120 #define IPV6_RTHDR             32
    121 #define IPV6_RECVRTHDR         38
    122 #define IPV6_TCLASS            39
    123 #define IPV6_RECVTCLASS        40
    124 
    125 #define WS2TCPIP_INLINE __CRT_INLINE
    126 
    127 int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *);
    128 WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a, const struct in6_addr *b) {
    129     return !memcmp(a, b, sizeof(struct in6_addr));
    130 }
    131 
    132 #define IN6_ARE_ADDR_EQUAL IN6_ADDR_EQUAL
    133 
    134 #ifdef __cplusplus
    135 }
    136 #endif
    137 
    138 #ifdef __LP64__
    139 #pragma pop_macro("u_long")
    140 #endif
    141 
    142 #endif /*_WS2IPDEF_ */
    143