1*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: ip6.h,v 1.23 2007/12/25 18:33:46 perry Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker /* $KAME: ip6.h,v 1.45 2003/06/05 04:46:38 keiichi Exp $ */ 3*8d67ca89SAndroid Build Coastguard Worker 4*8d67ca89SAndroid Build Coastguard Worker /* 5*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 6*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 7*8d67ca89SAndroid Build Coastguard Worker * 8*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 9*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 10*8d67ca89SAndroid Build Coastguard Worker * are met: 11*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 12*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 13*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 14*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 15*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 16*8d67ca89SAndroid Build Coastguard Worker * 3. Neither the name of the project nor the names of its contributors 17*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 18*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 19*8d67ca89SAndroid Build Coastguard Worker * 20*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 21*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 24*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 31*8d67ca89SAndroid Build Coastguard Worker */ 32*8d67ca89SAndroid Build Coastguard Worker 33*8d67ca89SAndroid Build Coastguard Worker /* 34*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1982, 1986, 1993 35*8d67ca89SAndroid Build Coastguard Worker * The Regents of the University of California. All rights reserved. 36*8d67ca89SAndroid Build Coastguard Worker * 37*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 38*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 39*8d67ca89SAndroid Build Coastguard Worker * are met: 40*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 41*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 42*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 43*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 44*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 45*8d67ca89SAndroid Build Coastguard Worker * 3. Neither the name of the University nor the names of its contributors 46*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 47*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 48*8d67ca89SAndroid Build Coastguard Worker * 49*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 50*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 51*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 52*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 53*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 54*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 55*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 56*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 57*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 58*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 59*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 60*8d67ca89SAndroid Build Coastguard Worker * 61*8d67ca89SAndroid Build Coastguard Worker * @(#)ip.h 8.1 (Berkeley) 6/10/93 62*8d67ca89SAndroid Build Coastguard Worker */ 63*8d67ca89SAndroid Build Coastguard Worker 64*8d67ca89SAndroid Build Coastguard Worker #ifndef _NETINET_IP6_H_ 65*8d67ca89SAndroid Build Coastguard Worker #define _NETINET_IP6_H_ 66*8d67ca89SAndroid Build Coastguard Worker 67*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 68*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 69*8d67ca89SAndroid Build Coastguard Worker #include <endian.h> 70*8d67ca89SAndroid Build Coastguard Worker 71*8d67ca89SAndroid Build Coastguard Worker #include <linux/in6.h> 72*8d67ca89SAndroid Build Coastguard Worker 73*8d67ca89SAndroid Build Coastguard Worker /* 74*8d67ca89SAndroid Build Coastguard Worker * Definition for internet protocol version 6. 75*8d67ca89SAndroid Build Coastguard Worker * RFC 2460 76*8d67ca89SAndroid Build Coastguard Worker */ 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker struct ip6_hdr { 79*8d67ca89SAndroid Build Coastguard Worker union { 80*8d67ca89SAndroid Build Coastguard Worker struct ip6_hdrctl { 81*8d67ca89SAndroid Build Coastguard Worker u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */ 82*8d67ca89SAndroid Build Coastguard Worker u_int16_t ip6_un1_plen; /* payload length */ 83*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6_un1_nxt; /* next header */ 84*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6_un1_hlim; /* hop limit */ 85*8d67ca89SAndroid Build Coastguard Worker } ip6_un1; 86*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */ 87*8d67ca89SAndroid Build Coastguard Worker } ip6_ctlun; 88*8d67ca89SAndroid Build Coastguard Worker struct in6_addr ip6_src; /* source address */ 89*8d67ca89SAndroid Build Coastguard Worker struct in6_addr ip6_dst; /* destination address */ 90*8d67ca89SAndroid Build Coastguard Worker } __packed; 91*8d67ca89SAndroid Build Coastguard Worker 92*8d67ca89SAndroid Build Coastguard Worker #define ip6_vfc ip6_ctlun.ip6_un2_vfc 93*8d67ca89SAndroid Build Coastguard Worker #define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow 94*8d67ca89SAndroid Build Coastguard Worker #define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen 95*8d67ca89SAndroid Build Coastguard Worker #define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt 96*8d67ca89SAndroid Build Coastguard Worker #define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim 97*8d67ca89SAndroid Build Coastguard Worker #define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim 98*8d67ca89SAndroid Build Coastguard Worker 99*8d67ca89SAndroid Build Coastguard Worker #define IPV6_VERSION 0x60 100*8d67ca89SAndroid Build Coastguard Worker #define IPV6_VERSION_MASK 0xf0 101*8d67ca89SAndroid Build Coastguard Worker 102*8d67ca89SAndroid Build Coastguard Worker #define IPV6_FLOWINFO_MASK 0xffffff0f /* flow info (28 bits) */ 103*8d67ca89SAndroid Build Coastguard Worker #define IPV6_FLOWLABEL_MASK 0xffff0f00 /* flow label (20 bits) */ 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker #if 1 106*8d67ca89SAndroid Build Coastguard Worker /* ECN bits proposed by Sally Floyd */ 107*8d67ca89SAndroid Build Coastguard Worker #define IP6TOS_CE 0x01 /* congestion experienced */ 108*8d67ca89SAndroid Build Coastguard Worker #define IP6TOS_ECT 0x02 /* ECN-capable transport */ 109*8d67ca89SAndroid Build Coastguard Worker #endif 110*8d67ca89SAndroid Build Coastguard Worker 111*8d67ca89SAndroid Build Coastguard Worker /* 112*8d67ca89SAndroid Build Coastguard Worker * Extension Headers 113*8d67ca89SAndroid Build Coastguard Worker */ 114*8d67ca89SAndroid Build Coastguard Worker 115*8d67ca89SAndroid Build Coastguard Worker struct ip6_ext { 116*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6e_nxt; 117*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6e_len; 118*8d67ca89SAndroid Build Coastguard Worker } __packed; 119*8d67ca89SAndroid Build Coastguard Worker 120*8d67ca89SAndroid Build Coastguard Worker /* Hop-by-Hop options header */ 121*8d67ca89SAndroid Build Coastguard Worker /* XXX should we pad it to force alignment on an 8-byte boundary? */ 122*8d67ca89SAndroid Build Coastguard Worker struct ip6_hbh { 123*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6h_nxt; /* next header */ 124*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6h_len; /* length in units of 8 octets */ 125*8d67ca89SAndroid Build Coastguard Worker /* followed by options */ 126*8d67ca89SAndroid Build Coastguard Worker } __packed; 127*8d67ca89SAndroid Build Coastguard Worker 128*8d67ca89SAndroid Build Coastguard Worker /* Destination options header */ 129*8d67ca89SAndroid Build Coastguard Worker /* XXX should we pad it to force alignment on an 8-byte boundary? */ 130*8d67ca89SAndroid Build Coastguard Worker struct ip6_dest { 131*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6d_nxt; /* next header */ 132*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6d_len; /* length in units of 8 octets */ 133*8d67ca89SAndroid Build Coastguard Worker /* followed by options */ 134*8d67ca89SAndroid Build Coastguard Worker } __packed; 135*8d67ca89SAndroid Build Coastguard Worker 136*8d67ca89SAndroid Build Coastguard Worker /* Option types and related macros */ 137*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_PAD1 0x00 /* 00 0 00000 */ 138*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_PADN 0x01 /* 00 0 00001 */ 139*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */ 140*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_NSAP_ADDR 0xC3 /* 11 0 00011 */ 141*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TUNNEL_LIMIT 0x04 /* 00 0 00100 */ 142*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_RTALERT 0x05 /* 00 0 00101 (KAME definition) */ 143*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_ROUTER_ALERT 0x05 /* (RFC3542 def, recommended) */ 144*8d67ca89SAndroid Build Coastguard Worker 145*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_RTALERT_LEN 4 146*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */ 147*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */ 148*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */ 149*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_MINLEN 2 150*8d67ca89SAndroid Build Coastguard Worker 151*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TYPE(o) ((o) & 0xC0) 152*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TYPE_SKIP 0x00 153*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TYPE_DISCARD 0x40 154*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TYPE_FORCEICMP 0x80 155*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_TYPE_ICMP 0xC0 156*8d67ca89SAndroid Build Coastguard Worker 157*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_MUTABLE 0x20 158*8d67ca89SAndroid Build Coastguard Worker 159*8d67ca89SAndroid Build Coastguard Worker /* IPv6 options: common part */ 160*8d67ca89SAndroid Build Coastguard Worker struct ip6_opt { 161*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6o_type; 162*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6o_len; 163*8d67ca89SAndroid Build Coastguard Worker } __packed; 164*8d67ca89SAndroid Build Coastguard Worker 165*8d67ca89SAndroid Build Coastguard Worker /* Jumbo Payload Option */ 166*8d67ca89SAndroid Build Coastguard Worker struct ip6_opt_jumbo { 167*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6oj_type; 168*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6oj_len; 169*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6oj_jumbo_len[4]; 170*8d67ca89SAndroid Build Coastguard Worker } __packed; 171*8d67ca89SAndroid Build Coastguard Worker #define IP6OPT_JUMBO_LEN 6 172*8d67ca89SAndroid Build Coastguard Worker 173*8d67ca89SAndroid Build Coastguard Worker /* NSAP Address Option */ 174*8d67ca89SAndroid Build Coastguard Worker struct ip6_opt_nsap { 175*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6on_type; 176*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6on_len; 177*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6on_src_nsap_len; 178*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6on_dst_nsap_len; 179*8d67ca89SAndroid Build Coastguard Worker /* followed by source NSAP */ 180*8d67ca89SAndroid Build Coastguard Worker /* followed by destination NSAP */ 181*8d67ca89SAndroid Build Coastguard Worker } __packed; 182*8d67ca89SAndroid Build Coastguard Worker 183*8d67ca89SAndroid Build Coastguard Worker /* Tunnel Limit Option */ 184*8d67ca89SAndroid Build Coastguard Worker struct ip6_opt_tunnel { 185*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6ot_type; 186*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6ot_len; 187*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6ot_encap_limit; 188*8d67ca89SAndroid Build Coastguard Worker } __packed; 189*8d67ca89SAndroid Build Coastguard Worker 190*8d67ca89SAndroid Build Coastguard Worker /* Router Alert Option */ 191*8d67ca89SAndroid Build Coastguard Worker struct ip6_opt_router { 192*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6or_type; 193*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6or_len; 194*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6or_value[2]; 195*8d67ca89SAndroid Build Coastguard Worker } __packed; 196*8d67ca89SAndroid Build Coastguard Worker /* Router alert values (in network byte order) */ 197*8d67ca89SAndroid Build Coastguard Worker #define IP6_ALERT_MLD 0x0000 198*8d67ca89SAndroid Build Coastguard Worker #define IP6_ALERT_RSVP 0x0100 199*8d67ca89SAndroid Build Coastguard Worker #define IP6_ALERT_AN 0x0200 200*8d67ca89SAndroid Build Coastguard Worker 201*8d67ca89SAndroid Build Coastguard Worker /* Routing header */ 202*8d67ca89SAndroid Build Coastguard Worker struct ip6_rthdr { 203*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r_nxt; /* next header */ 204*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r_len; /* length in units of 8 octets */ 205*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r_type; /* routing type */ 206*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r_segleft; /* segments left */ 207*8d67ca89SAndroid Build Coastguard Worker /* followed by routing type specific data */ 208*8d67ca89SAndroid Build Coastguard Worker } __packed; 209*8d67ca89SAndroid Build Coastguard Worker 210*8d67ca89SAndroid Build Coastguard Worker /* Type 0 Routing header */ 211*8d67ca89SAndroid Build Coastguard Worker struct ip6_rthdr0 { 212*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r0_nxt; /* next header */ 213*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r0_len; /* length in units of 8 octets */ 214*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r0_type; /* always zero */ 215*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6r0_segleft; /* segments left */ 216*8d67ca89SAndroid Build Coastguard Worker u_int32_t ip6r0_reserved; /* reserved field */ 217*8d67ca89SAndroid Build Coastguard Worker } __packed; 218*8d67ca89SAndroid Build Coastguard Worker 219*8d67ca89SAndroid Build Coastguard Worker /* Fragment header */ 220*8d67ca89SAndroid Build Coastguard Worker struct ip6_frag { 221*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6f_nxt; /* next header */ 222*8d67ca89SAndroid Build Coastguard Worker u_int8_t ip6f_reserved; /* reserved field */ 223*8d67ca89SAndroid Build Coastguard Worker u_int16_t ip6f_offlg; /* offset, reserved, and flag */ 224*8d67ca89SAndroid Build Coastguard Worker u_int32_t ip6f_ident; /* identification */ 225*8d67ca89SAndroid Build Coastguard Worker } __packed; 226*8d67ca89SAndroid Build Coastguard Worker 227*8d67ca89SAndroid Build Coastguard Worker #define IP6F_OFF_MASK 0xf8ff /* mask out offset from _offlg */ 228*8d67ca89SAndroid Build Coastguard Worker #define IP6F_RESERVED_MASK 0x0600 /* reserved bits in ip6f_offlg */ 229*8d67ca89SAndroid Build Coastguard Worker #define IP6F_MORE_FRAG 0x0100 /* more-fragments flag */ 230*8d67ca89SAndroid Build Coastguard Worker 231*8d67ca89SAndroid Build Coastguard Worker /* 232*8d67ca89SAndroid Build Coastguard Worker * Internet implementation parameters. 233*8d67ca89SAndroid Build Coastguard Worker */ 234*8d67ca89SAndroid Build Coastguard Worker #define IPV6_MAXHLIM 255 /* maximum hoplimit */ 235*8d67ca89SAndroid Build Coastguard Worker #define IPV6_DEFHLIM 64 /* default hlim */ 236*8d67ca89SAndroid Build Coastguard Worker #define IPV6_FRAGTTL 120 /* ttl for fragment packets, in slowtimo tick */ 237*8d67ca89SAndroid Build Coastguard Worker #define IPV6_HLIMDEC 1 /* subtracted when forwarding */ 238*8d67ca89SAndroid Build Coastguard Worker 239*8d67ca89SAndroid Build Coastguard Worker #define IPV6_MMTU 1280 /* minimal MTU and reassembly. 1024 + 256 */ 240*8d67ca89SAndroid Build Coastguard Worker #define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/ 241*8d67ca89SAndroid Build Coastguard Worker 242*8d67ca89SAndroid Build Coastguard Worker #endif /* !_NETINET_IP6_H_ */ 243