ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ip_icmp.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 1982, 1986, 1993
00003  *  The Regents of the University of California.  All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University nor the names of its contributors
00014  *    may be used to endorse or promote products derived from this software
00015  *    without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00027  * SUCH DAMAGE.
00028  *
00029  *  @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
00030  * $FreeBSD: src/sys/netinet/ip_icmp.h,v 1.13 1999/08/28 00:49:24 peter Exp $
00031  */
00032 
00033 #ifndef _NETINET_IP_ICMP_H_
00034 #define _NETINET_IP_ICMP_H_
00035 
00036 /*
00037  * Interface Control Message Protocol Definitions.
00038  * Per RFC 792, September 1981.
00039  */
00040 
00041 /*
00042  * Internal of an ICMP Router Advertisement
00043  */
00044 struct icmp_ra_addr {
00045     u_int32_t ira_addr;
00046     u_int32_t ira_preference;
00047 };
00048 
00049 /*
00050  * Structure of an icmp header.
00051  */
00052 struct icmp {
00053     u_char  icmp_type;      /* type of message, see below */
00054     u_char  icmp_code;      /* type sub code */
00055     u_short icmp_cksum;     /* ones complement cksum of struct */
00056     union {
00057         u_char ih_pptr;         /* ICMP_PARAMPROB */
00058         struct in_addr ih_gwaddr;   /* ICMP_REDIRECT */
00059         struct ih_idseq {
00060             n_short icd_id;
00061             n_short icd_seq;
00062         } ih_idseq;
00063         int ih_void;
00064 
00065         /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
00066         struct ih_pmtu {
00067             n_short ipm_void;
00068             n_short ipm_nextmtu;
00069         } ih_pmtu;
00070 
00071         struct ih_rtradv {
00072             u_char irt_num_addrs;
00073             u_char irt_wpa;
00074             u_int16_t irt_lifetime;
00075         } ih_rtradv;
00076     } icmp_hun;
00077 #define icmp_pptr   icmp_hun.ih_pptr
00078 #define icmp_gwaddr icmp_hun.ih_gwaddr
00079 #define icmp_id     icmp_hun.ih_idseq.icd_id
00080 #define icmp_seq    icmp_hun.ih_idseq.icd_seq
00081 #define icmp_void   icmp_hun.ih_void
00082 #define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
00083 #define icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
00084 #define icmp_num_addrs  icmp_hun.ih_rtradv.irt_num_addrs
00085 #define icmp_wpa    icmp_hun.ih_rtradv.irt_wpa
00086 #define icmp_lifetime   icmp_hun.ih_rtradv.irt_lifetime
00087     union {
00088         struct id_ts {
00089             n_time its_otime;
00090             n_time its_rtime;
00091             n_time its_ttime;
00092         } id_ts;
00093         struct id_ip  {
00094             struct ip idi_ip;
00095             /* options and then 64 bits of data */
00096         } id_ip;
00097         struct icmp_ra_addr id_radv;
00098         u_int32_t id_mask;
00099         char    id_data[1];
00100     } icmp_dun;
00101 #define icmp_otime  icmp_dun.id_ts.its_otime
00102 #define icmp_rtime  icmp_dun.id_ts.its_rtime
00103 #define icmp_ttime  icmp_dun.id_ts.its_ttime
00104 #define icmp_ip     icmp_dun.id_ip.idi_ip
00105 #define icmp_radv   icmp_dun.id_radv
00106 #define icmp_mask   icmp_dun.id_mask
00107 #define icmp_data   icmp_dun.id_data
00108 };
00109 
00110 /*
00111  * Lower bounds on packet lengths for various types.
00112  * For the error advice packets must first insure that the
00113  * packet is large enough to contain the returned ip header.
00114  * Only then can we do the check to see if 64 bits of packet
00115  * data have been returned, since we need to check the returned
00116  * ip header length.
00117  */
00118 #define ICMP_MINLEN 8               /* abs minimum */
00119 #define ICMP_TSLEN  (8 + 3 * sizeof (n_time))   /* timestamp */
00120 #define ICMP_MASKLEN    12              /* address mask */
00121 #define ICMP_ADVLENMIN  (8 + sizeof (struct ip) + 8)    /* min */
00122 #ifndef _IP_VHL
00123 #define ICMP_ADVLEN(p)  (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
00124     /* N.B.: must separately check that ip_hl >= 5 */
00125 #else
00126 #define ICMP_ADVLEN(p)  (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
00127     /* N.B.: must separately check that header length >= 5 */
00128 #endif
00129 
00130 /*
00131  * Definition of type and code field values.
00132  */
00133 #define ICMP_ECHOREPLY      0       /* echo reply */
00134 #define ICMP_UNREACH        3       /* dest unreachable, codes: */
00135 #define     ICMP_UNREACH_NET    0       /* bad net */
00136 #define     ICMP_UNREACH_HOST   1       /* bad host */
00137 #define     ICMP_UNREACH_PROTOCOL   2       /* bad protocol */
00138 #define     ICMP_UNREACH_PORT   3       /* bad port */
00139 #define     ICMP_UNREACH_NEEDFRAG   4       /* IP_DF caused drop */
00140 #define     ICMP_UNREACH_SRCFAIL    5       /* src route failed */
00141 #define     ICMP_UNREACH_NET_UNKNOWN 6      /* unknown net */
00142 #define     ICMP_UNREACH_HOST_UNKNOWN 7     /* unknown host */
00143 #define     ICMP_UNREACH_ISOLATED   8       /* src host isolated */
00144 #define     ICMP_UNREACH_NET_PROHIB 9       /* prohibited access */
00145 #define     ICMP_UNREACH_HOST_PROHIB 10     /* ditto */
00146 #define     ICMP_UNREACH_TOSNET 11      /* bad tos for net */
00147 #define     ICMP_UNREACH_TOSHOST    12      /* bad tos for host */
00148 #define     ICMP_UNREACH_FILTER_PROHIB 13       /* admin prohib */
00149 #define     ICMP_UNREACH_HOST_PRECEDENCE 14     /* host prec vio. */
00150 #define     ICMP_UNREACH_PRECEDENCE_CUTOFF 15   /* prec cutoff */
00151 #define ICMP_SOURCEQUENCH   4       /* packet lost, slow down */
00152 #define ICMP_REDIRECT       5       /* shorter route, codes: */
00153 #define     ICMP_REDIRECT_NET   0       /* for network */
00154 #define     ICMP_REDIRECT_HOST  1       /* for host */
00155 #define     ICMP_REDIRECT_TOSNET    2       /* for tos and net */
00156 #define     ICMP_REDIRECT_TOSHOST   3       /* for tos and host */
00157 #define ICMP_ECHO       8       /* echo service */
00158 #define ICMP_ROUTERADVERT   9       /* router advertisement */
00159 #define ICMP_ROUTERSOLICIT  10      /* router solicitation */
00160 #define ICMP_TIMXCEED       11      /* time exceeded, code: */
00161 #define     ICMP_TIMXCEED_INTRANS   0       /* ttl==0 in transit */
00162 #define     ICMP_TIMXCEED_REASS 1       /* ttl==0 in reass */
00163 #define ICMP_PARAMPROB      12      /* ip header bad */
00164 #define     ICMP_PARAMPROB_OPTABSENT 1      /* req. opt. absent */
00165 #define ICMP_TSTAMP     13      /* timestamp request */
00166 #define ICMP_TSTAMPREPLY    14      /* timestamp reply */
00167 #define ICMP_IREQ       15      /* information request */
00168 #define ICMP_IREQREPLY      16      /* information reply */
00169 #define ICMP_MASKREQ        17      /* address mask request */
00170 #define ICMP_MASKREPLY      18      /* address mask reply */
00171 
00172 #define ICMP_MAXTYPE        18
00173 
00174 #define ICMP_INFOTYPE(type) \
00175     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
00176     (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
00177     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
00178     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
00179     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
00180 
00181 #ifdef KERNEL
00182 void    icmp_error __P((struct mbuf *, int, int, n_long, struct ifnet *));
00183 void    icmp_input __P((struct mbuf *, int));
00184 #endif
00185 
00186 #endif

Generated on Sun May 27 2012 04:24:02 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.