home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / netinet / ip_icmp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  8.0 KB  |  213 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /*
  23.  * Copyright (c) 1982, 1986, 1993
  24.  *    The Regents of the University of California.  All rights reserved.
  25.  *
  26.  * Redistribution and use in source and binary forms, with or without
  27.  * modification, are permitted provided that the following conditions
  28.  * are met:
  29.  * 1. Redistributions of source code must retain the above copyright
  30.  *    notice, this list of conditions and the following disclaimer.
  31.  * 2. Redistributions in binary form must reproduce the above copyright
  32.  *    notice, this list of conditions and the following disclaimer in the
  33.  *    documentation and/or other materials provided with the distribution.
  34.  * 3. All advertising materials mentioning features or use of this software
  35.  *    must display the following acknowledgement:
  36.  *    This product includes software developed by the University of
  37.  *    California, Berkeley and its contributors.
  38.  * 4. Neither the name of the University nor the names of its contributors
  39.  *    may be used to endorse or promote products derived from this software
  40.  *    without specific prior written permission.
  41.  *
  42.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  43.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  44.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  45.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  46.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  47.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  48.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  49.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  50.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  51.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  52.  * SUCH DAMAGE.
  53.  *
  54.  *    @(#)ip_icmp.h    8.1 (Berkeley) 6/10/93
  55.  */
  56.  
  57. #ifndef _NETINET_IP_ICMP_H_
  58. #define _NETINET_IP_ICMP_H_
  59.  
  60. /*
  61.  * Interface Control Message Protocol Definitions.
  62.  * Per RFC 792, September 1981.
  63.  */
  64.  
  65. /*
  66.  * Internal of an ICMP Router Advertisement
  67.  */
  68. struct icmp_ra_addr {
  69.     u_int32_t ira_addr;
  70.     u_int32_t ira_preference;
  71. };
  72.  
  73. /*
  74.  * Structure of an icmp header.
  75.  */
  76. struct icmp {
  77.     u_char    icmp_type;        /* type of message, see below */
  78.     u_char    icmp_code;        /* type sub code */
  79.     u_short    icmp_cksum;        /* ones complement cksum of struct */
  80.     union {
  81.         u_char ih_pptr;            /* ICMP_PARAMPROB */
  82.         struct in_addr ih_gwaddr;    /* ICMP_REDIRECT */
  83.         struct ih_idseq {
  84.             n_short    icd_id;
  85.             n_short    icd_seq;
  86.         } ih_idseq;
  87.         int ih_void;
  88.  
  89.         /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
  90.         struct ih_pmtu {
  91.             n_short ipm_void;
  92.             n_short ipm_nextmtu;
  93.         } ih_pmtu;
  94.  
  95.         struct ih_rtradv {
  96.             u_char irt_num_addrs;
  97.             u_char irt_wpa;
  98.             u_int16_t irt_lifetime;
  99.         } ih_rtradv;
  100.     } icmp_hun;
  101. #define    icmp_pptr    icmp_hun.ih_pptr
  102. #define    icmp_gwaddr    icmp_hun.ih_gwaddr
  103. #define    icmp_id        icmp_hun.ih_idseq.icd_id
  104. #define    icmp_seq    icmp_hun.ih_idseq.icd_seq
  105. #define    icmp_void    icmp_hun.ih_void
  106. #define    icmp_pmvoid    icmp_hun.ih_pmtu.ipm_void
  107. #define    icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
  108. #define    icmp_num_addrs    icmp_hun.ih_rtradv.irt_num_addrs
  109. #define    icmp_wpa    icmp_hun.ih_rtradv.irt_wpa
  110. #define    icmp_lifetime    icmp_hun.ih_rtradv.irt_lifetime
  111.     union {
  112.         struct id_ts {
  113.             n_time its_otime;
  114.             n_time its_rtime;
  115.             n_time its_ttime;
  116.         } id_ts;
  117.         struct id_ip  {
  118.             struct ip idi_ip;
  119.             /* options and then 64 bits of data */
  120.         } id_ip;
  121.         struct icmp_ra_addr id_radv;
  122.         u_int32_t id_mask;
  123.         char    id_data[1];
  124.     } icmp_dun;
  125. #define    icmp_otime    icmp_dun.id_ts.its_otime
  126. #define    icmp_rtime    icmp_dun.id_ts.its_rtime
  127. #define    icmp_ttime    icmp_dun.id_ts.its_ttime
  128. #define    icmp_ip        icmp_dun.id_ip.idi_ip
  129. #define    icmp_radv    icmp_dun.id_radv
  130. #define    icmp_mask    icmp_dun.id_mask
  131. #define    icmp_data    icmp_dun.id_data
  132. };
  133.  
  134. /*
  135.  * Lower bounds on packet lengths for various types.
  136.  * For the error advice packets must first insure that the
  137.  * packet is large enough to contain the returned ip header.
  138.  * Only then can we do the check to see if 64 bits of packet
  139.  * data have been returned, since we need to check the returned
  140.  * ip header length.
  141.  */
  142. #define    ICMP_MINLEN    8                /* abs minimum */
  143. #define    ICMP_TSLEN    (8 + 3 * sizeof (n_time))    /* timestamp */
  144. #define    ICMP_MASKLEN    12                /* address mask */
  145. #define    ICMP_ADVLENMIN    (8 + sizeof (struct ip) + 8)    /* min */
  146. #ifndef _IP_VHL
  147. #define    ICMP_ADVLEN(p)    (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  148.     /* N.B.: must separately check that ip_hl >= 5 */
  149. #else
  150. #define    ICMP_ADVLEN(p)    (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
  151.     /* N.B.: must separately check that header length >= 5 */
  152. #endif
  153.  
  154. /*
  155.  * Definition of type and code field values.
  156.  */
  157. #define    ICMP_ECHOREPLY        0        /* echo reply */
  158. #define    ICMP_UNREACH        3        /* dest unreachable, codes: */
  159. #define        ICMP_UNREACH_NET    0        /* bad net */
  160. #define        ICMP_UNREACH_HOST    1        /* bad host */
  161. #define        ICMP_UNREACH_PROTOCOL    2        /* bad protocol */
  162. #define        ICMP_UNREACH_PORT    3        /* bad port */
  163. #define        ICMP_UNREACH_NEEDFRAG    4        /* IP_DF caused drop */
  164. #define        ICMP_UNREACH_SRCFAIL    5        /* src route failed */
  165. #define        ICMP_UNREACH_NET_UNKNOWN 6        /* unknown net */
  166. #define        ICMP_UNREACH_HOST_UNKNOWN 7        /* unknown host */
  167. #define        ICMP_UNREACH_ISOLATED    8        /* src host isolated */
  168. #define        ICMP_UNREACH_NET_PROHIB    9        /* prohibited access */
  169. #define        ICMP_UNREACH_HOST_PROHIB 10        /* ditto */
  170. #define        ICMP_UNREACH_TOSNET    11        /* bad tos for net */
  171. #define        ICMP_UNREACH_TOSHOST    12        /* bad tos for host */
  172. #define        ICMP_UNREACH_FILTER_PROHIB 13        /* admin prohib */
  173. #define        ICMP_UNREACH_HOST_PRECEDENCE 14        /* host prec vio. */
  174. #define        ICMP_UNREACH_PRECEDENCE_CUTOFF 15    /* prec cutoff */
  175. #define    ICMP_SOURCEQUENCH    4        /* packet lost, slow down */
  176. #define    ICMP_REDIRECT        5        /* shorter route, codes: */
  177. #define        ICMP_REDIRECT_NET    0        /* for network */
  178. #define        ICMP_REDIRECT_HOST    1        /* for host */
  179. #define        ICMP_REDIRECT_TOSNET    2        /* for tos and net */
  180. #define        ICMP_REDIRECT_TOSHOST    3        /* for tos and host */
  181. #define    ICMP_ECHO        8        /* echo service */
  182. #define    ICMP_ROUTERADVERT    9        /* router advertisement */
  183. #define    ICMP_ROUTERSOLICIT    10        /* router solicitation */
  184. #define    ICMP_TIMXCEED        11        /* time exceeded, code: */
  185. #define        ICMP_TIMXCEED_INTRANS    0        /* ttl==0 in transit */
  186. #define        ICMP_TIMXCEED_REASS    1        /* ttl==0 in reass */
  187. #define    ICMP_PARAMPROB        12        /* ip header bad */
  188. #define        ICMP_PARAMPROB_ERRATPTR 0        /* error at param ptr */
  189. #define        ICMP_PARAMPROB_OPTABSENT 1        /* req. opt. absent */
  190. #define        ICMP_PARAMPROB_LENGTH 2            /* bad length */
  191. #define    ICMP_TSTAMP        13        /* timestamp request */
  192. #define    ICMP_TSTAMPREPLY    14        /* timestamp reply */
  193. #define    ICMP_IREQ        15        /* information request */
  194. #define    ICMP_IREQREPLY        16        /* information reply */
  195. #define    ICMP_MASKREQ        17        /* address mask request */
  196. #define    ICMP_MASKREPLY        18        /* address mask reply */
  197.  
  198. #define    ICMP_MAXTYPE        18
  199.  
  200. #define    ICMP_INFOTYPE(type) \
  201.     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  202.     (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
  203.     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  204.     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  205.     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  206.  
  207. #ifdef KERNEL
  208. void    icmp_error __P((struct mbuf *, int, int, n_long, struct ifnet *));
  209. void    icmp_input __P((struct mbuf *, int));
  210. #endif
  211.  
  212. #endif
  213.