2 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the project nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * Copyright (c) 1982, 1986, 1993
32 * The Regents of the University of California. All rights reserved.
34 * Redistribution and use in source and binary forms, with or without
35 * modification, are permitted provided that the following conditions
37 * 1. Redistributions of source code must retain the above copyright
38 * notice, this list of conditions and the following disclaimer.
39 * 2. Redistributions in binary form must reproduce the above copyright
40 * notice, this list of conditions and the following disclaimer in the
41 * documentation and/or other materials provided with the distribution.
42 * 3. Neither the name of the University nor the names of its contributors
43 * may be used to endorse or promote products derived from this software
44 * without specific prior written permission.
46 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
47 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
49 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
52 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
53 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
54 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
55 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 * @(#)ip.h 8.1 (Berkeley) 6/10/93
61 #ifndef _NETINET_IP6_H_
62 #define _NETINET_IP6_H_
64 #include <netinet/in.h>
65 #include "byte-order.h"
68 * Definition for internet protocol version 6.
75 u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
76 u_int16_t ip6_un1_plen; /* payload length */
77 u_int8_t ip6_un1_nxt; /* next header */
78 u_int8_t ip6_un1_hlim; /* hop limit */
80 u_int8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */
82 struct in6_addr ip6_src; /* source address */
83 struct in6_addr ip6_dst; /* destination address */
86 #define ip6_vfc ip6_ctlun.ip6_un2_vfc
87 #define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
88 #define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
89 #define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
90 #define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
91 #define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
93 #define IPV6_VERSION 0x60
94 #define IPV6_VERSION_MASK 0xf0
96 #define IPV6_FLOWINFO_MASK CONSTANT_HTONL(0x0fffffff) /* flow info (28 bits) */
97 #define IPV6_FLOWLABEL_MASK CONSTANT_HTONL(0x000fffff) /* flow label (20 bits) */
99 /* ECN bits proposed by Sally Floyd */
100 #define IP6TOS_CE 0x01 /* congestion experienced */
101 #define IP6TOS_ECT 0x02 /* ECN-capable transport */
113 /* Hop-by-Hop options header */
114 /* XXX should we pad it to force alignment on an 8-byte boundary? */
116 u_int8_t ip6h_nxt; /* next header */
117 u_int8_t ip6h_len; /* length in units of 8 octets */
118 /* followed by options */
121 /* Destination options header */
122 /* XXX should we pad it to force alignment on an 8-byte boundary? */
124 u_int8_t ip6d_nxt; /* next header */
125 u_int8_t ip6d_len; /* length in units of 8 octets */
126 /* followed by options */
129 /* Option types and related macros */
130 #define IP6OPT_PAD1 0x00 /* 00 0 00000 */
131 #define IP6OPT_PADN 0x01 /* 00 0 00001 */
132 #define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */
133 #define IP6OPT_NSAP_ADDR 0xC3 /* 11 0 00011 */
134 #define IP6OPT_TUNNEL_LIMIT 0x04 /* 00 0 00100 */
135 #define IP6OPT_RTALERT 0x05 /* 00 0 00101 (KAME definition) */
136 #define IP6OPT_ROUTER_ALERT 0x05 /* (RFC3542 def, recommended) */
138 #define IP6OPT_RTALERT_LEN 4
139 #define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */
140 #define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */
141 #define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */
142 #define IP6OPT_MINLEN 2
144 #define IP6OPT_TYPE(o) ((o) & 0xC0)
145 #define IP6OPT_TYPE_SKIP 0x00
146 #define IP6OPT_TYPE_DISCARD 0x40
147 #define IP6OPT_TYPE_FORCEICMP 0x80
148 #define IP6OPT_TYPE_ICMP 0xC0
150 #define IP6OPT_MUTABLE 0x20
152 /* IPv6 options: common part */
158 /* Jumbo Payload Option */
159 struct ip6_opt_jumbo {
162 u_int8_t ip6oj_jumbo_len[4];
164 #define IP6OPT_JUMBO_LEN 6
166 /* NSAP Address Option */
167 struct ip6_opt_nsap {
170 u_int8_t ip6on_src_nsap_len;
171 u_int8_t ip6on_dst_nsap_len;
172 /* followed by source NSAP */
173 /* followed by destination NSAP */
176 /* Tunnel Limit Option */
177 struct ip6_opt_tunnel {
180 u_int8_t ip6ot_encap_limit;
183 /* Router Alert Option */
184 struct ip6_opt_router {
187 u_int8_t ip6or_value[2];
189 /* Router alert values (in network byte order) */
190 #define IP6_ALERT_MLD CONSTANT_HTONS(0x0000)
191 #define IP6_ALERT_RSVP CONSTANT_HTONS(0x0001)
192 #define IP6_ALERT_AN CONSTANT_HTONS(0x0002)
196 u_int8_t ip6r_nxt; /* next header */
197 u_int8_t ip6r_len; /* length in units of 8 octets */
198 u_int8_t ip6r_type; /* routing type */
199 u_int8_t ip6r_segleft; /* segments left */
200 /* followed by routing type specific data */
203 /* Type 0 Routing header */
205 u_int8_t ip6r0_nxt; /* next header */
206 u_int8_t ip6r0_len; /* length in units of 8 octets */
207 u_int8_t ip6r0_type; /* always zero */
208 u_int8_t ip6r0_segleft; /* segments left */
209 u_int32_t ip6r0_reserved; /* reserved field */
212 /* Fragment header */
214 u_int8_t ip6f_nxt; /* next header */
215 u_int8_t ip6f_reserved; /* reserved field */
216 u_int16_t ip6f_offlg; /* offset, reserved, and flag */
217 u_int32_t ip6f_ident; /* identification */
220 #define IP6F_OFF_MASK CONSTANT_HTONS(0xfff8) /* mask out offset from _offlg */
221 #define IP6F_RESERVED_MASK CONSTANT_HTONS(0x0006) /* reserved bits in ip6f_offlg */
222 #define IP6F_MORE_FRAG CONSTANT_HTONS(0x0001) /* more-fragments flag */
225 * Internet implementation parameters.
227 #define IPV6_MAXHLIM 255 /* maximum hoplimit */
228 #define IPV6_DEFHLIM 64 /* default hlim */
229 #define IPV6_FRAGTTL 120 /* ttl for fragment packets, in slowtimo tick */
230 #define IPV6_HLIMDEC 1 /* subtracted when forwarding */
232 #define IPV6_MMTU 1280 /* minimal MTU and reassembly. 1024 + 256 */
233 #define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/
235 #endif /* !_NETINET_IP6_H_ */