]> git.sur5r.net Git - freertos/blob - FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/WinPCap/ip6_misc.h
Add the Labs projects provided in the V10.2.1_191129 zip file.
[freertos] / FreeRTOS-Labs / Demo / FreeRTOS_IoT_Libraries / mqtt / common / WinPCap / ip6_misc.h
1 /*\r
2  * Copyright (c) 1993, 1994, 1997\r
3  *      The Regents of the University of California.  All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that: (1) source code distributions\r
7  * retain the above copyright notice and this paragraph in its entirety, (2)\r
8  * distributions including binary code include the above copyright notice and\r
9  * this paragraph in its entirety in the documentation or other materials\r
10  * provided with the distribution, and (3) all advertising materials mentioning\r
11  * features or use of this software display the following acknowledgement:\r
12  * ``This product includes software developed by the University of California,\r
13  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of\r
14  * the University nor the names of its contributors may be used to endorse\r
15  * or promote products derived from this software without specific prior\r
16  * written permission.\r
17  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED\r
18  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.\r
20  *\r
21  * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)\r
22  */\r
23 \r
24 /*\r
25  * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows\r
26  */\r
27 \r
28 #include <winsock2.h>\r
29 \r
30 #include <ws2tcpip.h>\r
31 \r
32 #ifndef __MINGW32__\r
33 #define IN_MULTICAST(a)         IN_CLASSD(a)\r
34 #endif\r
35 \r
36 #define IN_EXPERIMENTAL(a)      ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000)\r
37 \r
38 #define IN_LOOPBACKNET          127\r
39 \r
40 #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)\r
41 /* IPv6 address */\r
42 struct in6_addr\r
43   {\r
44     union\r
45       {\r
46         u_int8_t                u6_addr8[16];\r
47         u_int16_t       u6_addr16[8];\r
48         u_int32_t       u6_addr32[4];\r
49       } in6_u;\r
50 #define s6_addr                 in6_u.u6_addr8\r
51 #define s6_addr16               in6_u.u6_addr16\r
52 #define s6_addr32               in6_u.u6_addr32\r
53 #define s6_addr64               in6_u.u6_addr64\r
54   };\r
55 \r
56 #define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }\r
57 #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }\r
58 #endif /* __MINGW32__ */\r
59 \r
60 \r
61 #if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF))\r
62 typedef unsigned short  sa_family_t;\r
63 #endif\r
64 \r
65 \r
66 #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)\r
67 \r
68 #define __SOCKADDR_COMMON(sa_prefix) \\r
69   sa_family_t sa_prefix##family\r
70 \r
71 /* Ditto, for IPv6.  */\r
72 struct sockaddr_in6\r
73   {\r
74     __SOCKADDR_COMMON (sin6_);\r
75     u_int16_t sin6_port;                /* Transport layer port # */\r
76     u_int32_t sin6_flowinfo;    /* IPv6 flow information */\r
77     struct in6_addr sin6_addr;  /* IPv6 address */\r
78   };\r
79 \r
80 #define IN6_IS_ADDR_V4MAPPED(a) \\r
81         ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \\r
82          (((u_int32_t *) (a))[2] == htonl (0xffff)))\r
83 \r
84 #define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)\r
85 \r
86 #define IN6_IS_ADDR_LINKLOCAL(a) \\r
87         ((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))\r
88 \r
89 #define IN6_IS_ADDR_LOOPBACK(a) \\r
90         (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \\r
91          ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))\r
92 #endif /* __MINGW32__ */\r
93 \r
94 #define ip6_vfc   ip6_ctlun.ip6_un2_vfc\r
95 #define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow\r
96 #define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen\r
97 #define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt\r
98 #define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim\r
99 #define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim\r
100 \r
101 #define nd_rd_type               nd_rd_hdr.icmp6_type\r
102 #define nd_rd_code               nd_rd_hdr.icmp6_code\r
103 #define nd_rd_cksum              nd_rd_hdr.icmp6_cksum\r
104 #define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]\r
105 \r
106 /*\r
107  *      IPV6 extension headers\r
108  */\r
109 #define IPPROTO_HOPOPTS         0       /* IPv6 hop-by-hop options      */\r
110 #define IPPROTO_IPV6            41  /* IPv6 header.  */\r
111 #define IPPROTO_ROUTING         43      /* IPv6 routing header          */\r
112 #define IPPROTO_FRAGMENT        44      /* IPv6 fragmentation header    */\r
113 #define IPPROTO_ESP             50      /* encapsulating security payload */\r
114 #define IPPROTO_AH              51      /* authentication header        */\r
115 #define IPPROTO_ICMPV6          58      /* ICMPv6                       */\r
116 #define IPPROTO_NONE            59      /* IPv6 no next header          */\r
117 #define IPPROTO_DSTOPTS         60      /* IPv6 destination options     */\r
118 #define IPPROTO_PIM                     103 /* Protocol Independent Multicast.  */\r
119 \r
120 #define  IPV6_RTHDR_TYPE_0 0\r
121 \r
122 /* Option types and related macros */\r
123 #define IP6OPT_PAD1             0x00    /* 00 0 00000 */\r
124 #define IP6OPT_PADN             0x01    /* 00 0 00001 */\r
125 #define IP6OPT_JUMBO            0xC2    /* 11 0 00010 = 194 */\r
126 #define IP6OPT_JUMBO_LEN        6\r
127 #define IP6OPT_ROUTER_ALERT     0x05    /* 00 0 00101 */\r
128 \r
129 #define IP6OPT_RTALERT_LEN      4\r
130 #define IP6OPT_RTALERT_MLD      0       /* Datagram contains an MLD message */\r
131 #define IP6OPT_RTALERT_RSVP     1       /* Datagram contains an RSVP message */\r
132 #define IP6OPT_RTALERT_ACTNET   2       /* contains an Active Networks msg */\r
133 #define IP6OPT_MINLEN           2\r
134 \r
135 #define IP6OPT_BINDING_UPDATE   0xc6    /* 11 0 00110 */\r
136 #define IP6OPT_BINDING_ACK      0x07    /* 00 0 00111 */\r
137 #define IP6OPT_BINDING_REQ      0x08    /* 00 0 01000 */\r
138 #define IP6OPT_HOME_ADDRESS     0xc9    /* 11 0 01001 */\r
139 #define IP6OPT_EID              0x8a    /* 10 0 01010 */\r
140 \r
141 #define IP6OPT_TYPE(o)          ((o) & 0xC0)\r
142 #define IP6OPT_TYPE_SKIP        0x00\r
143 #define IP6OPT_TYPE_DISCARD     0x40\r
144 #define IP6OPT_TYPE_FORCEICMP   0x80\r
145 #define IP6OPT_TYPE_ICMP        0xC0\r
146 \r
147 #define IP6OPT_MUTABLE          0x20\r
148 \r
149 \r
150 #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)\r
151 #ifndef EAI_ADDRFAMILY\r
152 struct addrinfo {\r
153         int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */\r
154         int     ai_family;      /* PF_xxx */\r
155         int     ai_socktype;    /* SOCK_xxx */\r
156         int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */\r
157         size_t  ai_addrlen;     /* length of ai_addr */\r
158         char    *ai_canonname;  /* canonical name for hostname */\r
159         struct sockaddr *ai_addr;       /* binary address */\r
160         struct addrinfo *ai_next;       /* next structure in linked list */\r
161 };\r
162 #endif\r
163 #endif /* __MINGW32__ */\r