"Fossies" - the Fresh Open Source Software Archive

Member "tcpflow-1.6.1/src/wifipcap/ip6.h" (19 Feb 2021, 8017 Bytes) of package /linux/misc/tcpflow-1.6.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "ip6.h" see the Fossies "Dox" file reference documentation.

    1 /* @(#) $Header: /home/cvs/wifitools/wifipcap/ip6.h,v 1.1.1.1 2006/12/14 01:22:11 jpang Exp $ (LBL) */
    2 /*  $NetBSD: ip6.h,v 1.9 2000/07/13 05:34:21 itojun Exp $   */
    3 /*  $KAME: ip6.h,v 1.9 2000/07/02 21:01:32 itojun Exp $ */
    4 
    5 /*
    6  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    7  * All rights reserved.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. Neither the name of the project nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  */
   33 
   34 /*
   35  * Copyright (c) 1982, 1986, 1993
   36  *  The Regents of the University of California.  All rights reserved.
   37  *
   38  * Redistribution and use in source and binary forms, with or without
   39  * modification, are permitted provided that the following conditions
   40  * are met:
   41  * 1. Redistributions of source code must retain the above copyright
   42  *    notice, this list of conditions and the following disclaimer.
   43  * 2. Redistributions in binary form must reproduce the above copyright
   44  *    notice, this list of conditions and the following disclaimer in the
   45  *    documentation and/or other materials provided with the distribution.
   46  * 3. All advertising materials mentioning features or use of this software
   47  *    must display the following acknowledgement:
   48  *  This product includes software developed by the University of
   49  *  California, Berkeley and its contributors.
   50  * 4. Neither the name of the University nor the names of its contributors
   51  *    may be used to endorse or promote products derived from this software
   52  *    without specific prior written permission.
   53  *
   54  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   55  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   56  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   57  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   58  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   59  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   60  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   61  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   62  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   63  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   64  * SUCH DAMAGE.
   65  *
   66  *  @(#)ip.h    8.1 (Berkeley) 6/10/93
   67  */
   68 
   69 #ifndef _NETINET_IP6_H_
   70 #define _NETINET_IP6_H_
   71 
   72 /*
   73  * Definition for internet protocol version 6.
   74  * RFC 2460
   75  */
   76 
   77 struct ip6_hdr {
   78     union {
   79         struct ip6_hdrctl {
   80             u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
   81             u_int16_t ip6_un1_plen; /* payload length */
   82             u_int8_t  ip6_un1_nxt;  /* next header */
   83             u_int8_t  ip6_un1_hlim; /* hop limit */
   84         } ip6_un1;
   85         u_int8_t ip6_un2_vfc;   /* 4 bits version, top 4 bits class */
   86     } ip6_ctlun;
   87     struct in6_addr ip6_src;    /* source address */
   88     struct in6_addr ip6_dst;    /* destination address */
   89 };
   90 
   91 #define ip6_vfc     ip6_ctlun.ip6_un2_vfc
   92 #define ip6_flow    ip6_ctlun.ip6_un1.ip6_un1_flow
   93 #define ip6_plen    ip6_ctlun.ip6_un1.ip6_un1_plen
   94 #define ip6_nxt     ip6_ctlun.ip6_un1.ip6_un1_nxt
   95 #define ip6_hlim    ip6_ctlun.ip6_un1.ip6_un1_hlim
   96 #define ip6_hops    ip6_ctlun.ip6_un1.ip6_un1_hlim
   97 
   98 /* in network endian */
   99 #define IPV6_FLOWINFO_MASK  ((u_int32_t)htonl(0x0fffffff))  /* flow info (28 bits) */
  100 #define IPV6_FLOWLABEL_MASK ((u_int32_t)htonl(0x000fffff))  /* flow label (20 bits) */
  101 #if 1
  102 /* ECN bits proposed by Sally Floyd */
  103 #define IP6TOS_CE       0x01    /* congestion experienced */
  104 #define IP6TOS_ECT      0x02    /* ECN-capable transport */
  105 #endif
  106 
  107 /*
  108  * Extension Headers
  109  */
  110 
  111 struct  ip6_ext {
  112     u_char  ip6e_nxt;
  113     u_char  ip6e_len;
  114 };
  115 
  116 /* Hop-by-Hop options header */
  117 /* XXX should we pad it to force alignment on an 8-byte boundary? */
  118 struct ip6_hbh {
  119     u_int8_t ip6h_nxt;  /* next header */
  120     u_int8_t ip6h_len;  /* length in units of 8 octets */
  121     /* followed by options */
  122 };
  123 
  124 /* Destination options header */
  125 /* XXX should we pad it to force alignment on an 8-byte boundary? */
  126 struct ip6_dest {
  127     u_int8_t ip6d_nxt;  /* next header */
  128     u_int8_t ip6d_len;  /* length in units of 8 octets */
  129     /* followed by options */
  130 };
  131 
  132 /* Option types and related macros */
  133 #define IP6OPT_PAD1     0x00    /* 00 0 00000 */
  134 #define IP6OPT_PADN     0x01    /* 00 0 00001 */
  135 #define IP6OPT_JUMBO        0xC2    /* 11 0 00010 = 194 */
  136 #define IP6OPT_JUMBO_LEN    6
  137 #define IP6OPT_ROUTER_ALERT 0x05    /* 00 0 00101 */
  138 
  139 #define IP6OPT_RTALERT_LEN  4
  140 #define IP6OPT_RTALERT_MLD  0   /* Datagram contains an MLD message */
  141 #define IP6OPT_RTALERT_RSVP 1   /* Datagram contains an RSVP message */
  142 #define IP6OPT_RTALERT_ACTNET   2   /* contains an Active Networks msg */
  143 #define IP6OPT_MINLEN       2
  144 
  145 #define IP6OPT_BINDING_UPDATE   0xc6    /* 11 0 00110 */
  146 #define IP6OPT_BINDING_ACK  0x07    /* 00 0 00111 */
  147 #define IP6OPT_BINDING_REQ  0x08    /* 00 0 01000 */
  148 #define IP6OPT_HOME_ADDRESS 0xc9    /* 11 0 01001 */
  149 #define IP6OPT_EID      0x8a    /* 10 0 01010 */
  150 
  151 #define IP6OPT_TYPE(o)      ((o) & 0xC0)
  152 #define IP6OPT_TYPE_SKIP    0x00
  153 #define IP6OPT_TYPE_DISCARD 0x40
  154 #define IP6OPT_TYPE_FORCEICMP   0x80
  155 #define IP6OPT_TYPE_ICMP    0xC0
  156 
  157 #define IP6OPT_MUTABLE      0x20
  158 
  159 /* Routing header */
  160 struct ip6_rthdr {
  161     u_int8_t  ip6r_nxt; /* next header */
  162     u_int8_t  ip6r_len; /* length in units of 8 octets */
  163     u_int8_t  ip6r_type;    /* routing type */
  164     u_int8_t  ip6r_segleft; /* segments left */
  165     /* followed by routing type specific data */
  166 };
  167 
  168 /* Type 0 Routing header */
  169 struct ip6_rthdr0 {
  170     u_int8_t  ip6r0_nxt;        /* next header */
  171     u_int8_t  ip6r0_len;        /* length in units of 8 octets */
  172     u_int8_t  ip6r0_type;       /* always zero */
  173     u_int8_t  ip6r0_segleft;    /* segments left */
  174     u_int8_t  ip6r0_reserved;   /* reserved field */
  175     u_int8_t  ip6r0_slmap[3];   /* strict/loose bit map */
  176     struct in6_addr ip6r0_addr[1];  /* up to 23 addresses */
  177 };
  178 
  179 /* Fragment header */
  180 struct ip6_frag {
  181     u_int8_t  ip6f_nxt;     /* next header */
  182     u_int8_t  ip6f_reserved;    /* reserved field */
  183     u_int16_t ip6f_offlg;       /* offset, reserved, and flag */
  184     u_int32_t ip6f_ident;       /* identification */
  185 };
  186 
  187 #define IP6F_OFF_MASK       0xfff8  /* mask out offset from ip6f_offlg */
  188 #define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */
  189 #define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */
  190 
  191 #endif /* not _NETINET_IP6_H_ */
  192 
  193 /* Jeff: endian-fixed, decoded version passed to apps (XXX TODO) */
  194 struct ip6_hdr_t {
  195     union {
  196     struct ip6_hdrctl {
  197         u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
  198         u_int16_t ip6_un1_plen; /* payload length */
  199         u_int8_t  ip6_un1_nxt;  /* next header */
  200         u_int8_t  ip6_un1_hlim; /* hop limit */
  201     } ip6_un1;
  202     u_int8_t ip6_un2_vfc;   /* 4 bits version, top 4 bits class */
  203     } ip6_ctlun;
  204     struct in6_addr ip6_src;    /* source address */
  205     struct in6_addr ip6_dst;    /* destination address */
  206 };