"Fossies" - the Fresh Open Source Software Archive

Member "tcpflow-1.6.1/src/wifipcap/ip.h" (19 Feb 2021, 6773 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 "ip.h" see the Fossies "Dox" file reference documentation.

    1 /* @(#) $Header: /home/cvs/wifitools/wifipcap/ip.h,v 1.1.1.1 2006/12/14 01:22:11 jpang Exp $ (LBL) */
    2 /*
    3  * Copyright (c) 1982, 1986, 1993
    4  *  The Regents of the University of California.  All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the following acknowledgement:
   16  *  This product includes software developed by the University of
   17  *  California, Berkeley and its contributors.
   18  * 4. Neither the name of the University nor the names of its contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  *  @(#)ip.h    8.2 (Berkeley) 6/1/94
   35  */
   36 
   37 /*
   38  * Definitions for internet protocol version 4.
   39  * Per RFC 791, September 1981.
   40  */
   41 #define IPVERSION   4
   42 
   43 /*
   44  * Structure of an internet header, naked of options.
   45  *
   46  * We declare ip_len and ip_off to be short, rather than u_short
   47  * pragmatically since otherwise unsigned comparisons can result
   48  * against negative integers quite easily, and fail in subtle ways.
   49  */
   50 struct ip {
   51     u_int8_t    ip_vhl;     /* header length, version */
   52 #define IP_V(ip)    (((ip)->ip_vhl & 0xf0) >> 4)
   53 #define IP_HL(ip)   ((ip)->ip_vhl & 0x0f)
   54     u_int8_t    ip_tos;     /* type of service */
   55     u_int16_t   ip_len;     /* total length */
   56     u_int16_t   ip_id;      /* identification */
   57     u_int16_t   ip_off;     /* fragment offset field */
   58 #define IP_DF 0x4000            /* dont fragment flag */
   59 #define IP_MF 0x2000            /* more fragments flag */
   60 #define IP_OFFMASK 0x1fff       /* mask for fragmenting bits */
   61     u_int8_t    ip_ttl;     /* time to live */
   62     u_int8_t    ip_p;       /* protocol */
   63     u_int16_t   ip_sum;     /* checksum */
   64     struct  in_addr ip_src,ip_dst;  /* source and dest address */
   65 };
   66 
   67 #define IP_MAXPACKET    65535       /* maximum packet size */
   68 
   69 /*
   70  * Definitions for IP type of service (ip_tos)
   71  */
   72 #define IPTOS_LOWDELAY      0x10
   73 #define IPTOS_THROUGHPUT    0x08
   74 #define IPTOS_RELIABILITY   0x04
   75 
   76 /*
   77  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
   78  */
   79 #define IPTOS_PREC_NETCONTROL       0xe0
   80 #define IPTOS_PREC_INTERNETCONTROL  0xc0
   81 #define IPTOS_PREC_CRITIC_ECP       0xa0
   82 #define IPTOS_PREC_FLASHOVERRIDE    0x80
   83 #define IPTOS_PREC_FLASH        0x60
   84 #define IPTOS_PREC_IMMEDIATE        0x40
   85 #define IPTOS_PREC_PRIORITY     0x20
   86 #define IPTOS_PREC_ROUTINE      0x00
   87 
   88 /*
   89  * Definitions for options.
   90  */
   91 #define IPOPT_COPIED(o)     ((o)&0x80)
   92 #define IPOPT_CLASS(o)      ((o)&0x60)
   93 #define IPOPT_NUMBER(o)     ((o)&0x1f)
   94 
   95 #define IPOPT_CONTROL       0x00
   96 #define IPOPT_RESERVED1     0x20
   97 #define IPOPT_DEBMEAS       0x40
   98 #define IPOPT_RESERVED2     0x60
   99 
  100 #define IPOPT_EOL       0       /* end of option list */
  101 #define IPOPT_NOP       1       /* no operation */
  102 
  103 #define IPOPT_RR        7       /* record packet route */
  104 #define IPOPT_TS        68      /* timestamp */
  105 #define IPOPT_SECURITY      130     /* provide s,c,h,tcc */
  106 #define IPOPT_LSRR      131     /* loose source route */
  107 #define IPOPT_SATID     136     /* satnet id */
  108 #define IPOPT_SSRR      137     /* strict source route */
  109 #define IPOPT_RA                148             /* router-alert, rfc2113 */
  110 
  111 /*
  112  * Offsets to fields in options other than EOL and NOP.
  113  */
  114 #define IPOPT_OPTVAL        0       /* option ID */
  115 #define IPOPT_OLEN      1       /* option length */
  116 #define IPOPT_OFFSET        2       /* offset within option */
  117 #define IPOPT_MINOFF        4       /* min value of above */
  118 
  119 /*
  120  * Time stamp option structure.
  121  */
  122 struct  ip_timestamp {
  123     u_int8_t    ipt_code;   /* IPOPT_TS */
  124     u_int8_t    ipt_len;    /* size of structure (variable) */
  125     u_int8_t    ipt_ptr;    /* index of current entry */
  126     u_int8_t    ipt_oflwflg;    /* flags, overflow counter */
  127 #define IPTS_OFLW(ip)   (((ipt)->ipt_oflwflg & 0xf0) >> 4)
  128 #define IPTS_FLG(ip)    ((ipt)->ipt_oflwflg & 0x0f)
  129     union ipt_timestamp {
  130         u_int32_t ipt_time[1];
  131         struct  ipt_ta {
  132             struct in_addr ipt_addr;
  133             u_int32_t ipt_time;
  134         } ipt_ta[1];
  135     } ipt_timestamp;
  136 };
  137 
  138 /* flag bits for ipt_flg */
  139 #define IPOPT_TS_TSONLY     0       /* timestamps only */
  140 #define IPOPT_TS_TSANDADDR  1       /* timestamps and addresses */
  141 #define IPOPT_TS_PRESPEC    3       /* specified modules only */
  142 
  143 /* bits for security (not byte swapped) */
  144 #define IPOPT_SECUR_UNCLASS 0x0000
  145 #define IPOPT_SECUR_CONFID  0xf135
  146 #define IPOPT_SECUR_EFTO    0x789a
  147 #define IPOPT_SECUR_MMMM    0xbc4d
  148 #define IPOPT_SECUR_RESTR   0xaf13
  149 #define IPOPT_SECUR_SECRET  0xd788
  150 #define IPOPT_SECUR_TOPSECRET   0x6bc5
  151 
  152 /*
  153  * Internet implementation parameters.
  154  */
  155 #define MAXTTL      255     /* maximum time to live (seconds) */
  156 #define IPDEFTTL    64      /* default ttl, from RFC 1340 */
  157 #define IPFRAGTTL   60      /* time to live for frags, slowhz */
  158 #define IPTTLDEC    1       /* subtracted when forwarding */
  159 
  160 #define IP_MSS      576     /* default maximum segment size */
  161 
  162 /* in print-ip.c */
  163 extern u_int32_t ip_finddst(const struct ip *);
  164 
  165 ///////////////////////////////////////////////////////////////////////////////
  166 
  167 /* Jeff: will pass this endian-fixed, fully decoded version to applications */
  168 struct ip4_hdr_t {
  169     u_int8_t  ver;                 /* ip version */
  170     u_int16_t hlen;                /* header length (in bytes) */
  171     u_int8_t  tos;                 /* type of service */
  172     u_int16_t len;                 /* total length (in bytes) */
  173     u_int16_t id;                  /* identification */
  174     bool      df;                  /* don't fragment flag */
  175     bool      mf;                  /* more fragments flag */
  176     u_int16_t fragoff;             /* fragment offset */
  177     u_int8_t  ttl;                 /* time to live */
  178     u_int8_t  proto;               /* protocol */
  179     u_int16_t cksum;               /* header checksum */
  180     struct in_addr src, dst;       /* source and dest address */
  181 };