home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / netinet / ip_var.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  5.0 KB  |  137 lines

  1. /*
  2.  * Copyright (c) 1982, 1986 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  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. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.  *    @(#)ip_var.h    7.7 (Berkeley) 6/28/90
  34.  */
  35.  
  36. /*
  37.  * Overlay for ip header used by other protocols (tcp, udp).
  38.  */
  39. struct ipovly {
  40.     caddr_t    ih_next, ih_prev;    /* for protocol sequence q's */
  41.     u_char    ih_x1;            /* (unused) */
  42.     u_char    ih_pr;            /* protocol */
  43.     short    ih_len;            /* protocol length */
  44.     struct    in_addr ih_src;        /* source internet address */
  45.     struct    in_addr ih_dst;        /* destination internet address */
  46. };
  47.  
  48. /*
  49.  * Ip reassembly queue structure.  Each fragment
  50.  * being reassembled is attached to one of these structures.
  51.  * They are timed out after ipq_ttl drops to 0, and may also
  52.  * be reclaimed if memory becomes tight.
  53.  */
  54. struct ipq {
  55.     struct    ipq *next,*prev;    /* to other reass headers */
  56.     u_char    ipq_ttl;        /* time for reass q to live */
  57.     u_char    ipq_p;            /* protocol of this fragment */
  58.     u_short    ipq_id;            /* sequence id for reassembly */
  59.     struct    ipasfrag *ipq_next,*ipq_prev;
  60.                     /* to ip headers of fragments */
  61.     struct    in_addr ipq_src,ipq_dst;
  62. };
  63.  
  64. /*
  65.  * Ip header, when holding a fragment.
  66.  *
  67.  * Note: ipf_next must be at same offset as ipq_next above
  68.  */
  69. struct    ipasfrag {
  70. #if BYTE_ORDER == LITTLE_ENDIAN 
  71.     u_char    ip_hl:4,
  72.         ip_v:4;
  73. #endif
  74. #if BYTE_ORDER == BIG_ENDIAN 
  75.     u_char    ip_v:4,
  76.         ip_hl:4;
  77. #endif
  78.     u_char    ipf_mff;        /* copied from (ip_off&IP_MF) */
  79.     short    ip_len;
  80.     u_short    ip_id;
  81.     short    ip_off;
  82.     u_char    ip_ttl;
  83.     u_char    ip_p;
  84.     u_short    ip_sum;
  85.     struct    ipasfrag *ipf_next;    /* next fragment */
  86.     struct    ipasfrag *ipf_prev;    /* previous fragment */
  87. };
  88.  
  89. /*
  90.  * Structure stored in mbuf in inpcb.ip_options
  91.  * and passed to ip_output when ip options are in use.
  92.  * The actual length of the options (including ipopt_dst)
  93.  * is in m_len.
  94.  */
  95. #define MAX_IPOPTLEN    40
  96.  
  97. struct ipoption {
  98.     struct    in_addr ipopt_dst;    /* first-hop dst if source routed */
  99.     char    ipopt_list[MAX_IPOPTLEN];    /* options proper */
  100. };
  101.  
  102. struct    ipstat {
  103.     long    ips_total;        /* total packets received */
  104.     long    ips_badsum;        /* checksum bad */
  105.     long    ips_tooshort;        /* packet too short */
  106.     long    ips_toosmall;        /* not enough data */
  107.     long    ips_badhlen;        /* ip header length < data size */
  108.     long    ips_badlen;        /* ip length < ip header length */
  109.     long    ips_fragments;        /* fragments received */
  110.     long    ips_fragdropped;    /* frags dropped (dups, out of space) */
  111.     long    ips_fragtimeout;    /* fragments timed out */
  112.     long    ips_forward;        /* packets forwarded */
  113.     long    ips_cantforward;    /* packets rcvd for unreachable dest */
  114.     long    ips_redirectsent;    /* packets forwarded on same net */
  115.     long    ips_noproto;        /* unknown or unsupported protocol */
  116.     long    ips_delivered;        /* packets consumed here */
  117.     long    ips_localout;        /* total ip packets generated here */
  118.     long    ips_odropped;        /* lost packets due to nobufs, etc. */
  119.     long    ips_reassembled;    /* total packets reassembled ok */
  120.     long    ips_fragmented;        /* output packets fragmented ok */
  121.     long    ips_ofragments;        /* output fragments created */
  122.     long    ips_cantfrag;        /* don't fragment flag was set, etc. */
  123. };
  124.  
  125. #ifdef KERNEL
  126. /* flags passed to ip_output as last parameter */
  127. #define    IP_FORWARDING        0x1        /* most of ip header exists */
  128. #define    IP_ROUTETOIF        SO_DONTROUTE    /* bypass routing tables */
  129. #define    IP_ALLOWBROADCAST    SO_BROADCAST    /* can send broadcast packets */
  130.  
  131. struct    ipstat    ipstat;
  132. struct    ipq    ipq;            /* ip reass. queue */
  133. u_short    ip_id;                /* ip packet ctr, for ids */
  134.  
  135. struct    mbuf *ip_srcroute();
  136. #endif
  137.