home *** CD-ROM | disk | FTP | other *** search
/ ftp.muug.mb.ca / 2014.06.ftp.muug.mb.ca.tar / ftp.muug.mb.ca / pub / src / traceroute / ip_icmp.h < prev    next >
C/C++ Source or Header  |  1989-10-13  |  4KB  |  118 lines

  1. /*    @(#)ip_icmp.h 1.9 88/08/19 SMI; from UCB 7.3 12/7/87    */
  2.  
  3. /*
  4.  * Copyright (c) 1982, 1986 Regents of the University of California.
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms are permitted
  8.  * provided that this notice is preserved and that due credit is given
  9.  * to the University of California at Berkeley. The name of the University
  10.  * may not be used to endorse or promote products derived from this
  11.  * software without specific prior written permission. This software
  12.  * is provided ``as is'' without express or implied warranty.
  13.  */
  14.  
  15. /*
  16.  * Interface Control Message Protocol Definitions.
  17.  * Per RFC 792, September 1981.
  18.  */
  19.  
  20. #ifndef _netinet_ip_icmp_h
  21. #define _netinet_ip_icmp_h
  22.  
  23. /*
  24.  * Structure of an icmp header.
  25.  */
  26. struct icmp {
  27.     u_char    icmp_type;        /* type of message, see below */
  28.     u_char    icmp_code;        /* type sub code */
  29.     u_short    icmp_cksum;        /* ones complement cksum of struct */
  30.     union {
  31.         u_char ih_pptr;            /* ICMP_PARAMPROB */
  32.         struct in_addr ih_gwaddr;    /* ICMP_REDIRECT */
  33.         struct ih_idseq {
  34.             n_short    icd_id;
  35.             n_short    icd_seq;
  36.         } ih_idseq;
  37.         int ih_void;
  38.     } icmp_hun;
  39. #define    icmp_pptr    icmp_hun.ih_pptr
  40. #define    icmp_gwaddr    icmp_hun.ih_gwaddr
  41. #define    icmp_id        icmp_hun.ih_idseq.icd_id
  42. #define    icmp_seq    icmp_hun.ih_idseq.icd_seq
  43. #define    icmp_void    icmp_hun.ih_void
  44.     union {
  45.         struct id_ts {
  46.             n_time its_otime;
  47.             n_time its_rtime;
  48.             n_time its_ttime;
  49.         } id_ts;
  50.         struct id_ip  {
  51.             struct ip idi_ip;
  52.             /* options and then 64 bits of data */
  53.         } id_ip;
  54.         u_long    id_mask;
  55.         char    id_data[1];
  56.     } icmp_dun;
  57. #define    icmp_otime    icmp_dun.id_ts.its_otime
  58. #define    icmp_rtime    icmp_dun.id_ts.its_rtime
  59. #define    icmp_ttime    icmp_dun.id_ts.its_ttime
  60. #define    icmp_ip        icmp_dun.id_ip.idi_ip
  61. #define    icmp_mask    icmp_dun.id_mask
  62. #define    icmp_data    icmp_dun.id_data
  63. };
  64.  
  65. /*
  66.  * Lower bounds on packet lengths for various types.
  67.  * For the error advice packets must first insure that the
  68.  * packet is large enought to contain the returned ip header.
  69.  * Only then can we do the check to see if 64 bits of packet
  70.  * data have been returned, since we need to check the returned
  71.  * ip header length.
  72.  */
  73. #define    ICMP_MINLEN    8                /* abs minimum */
  74. #define    ICMP_TSLEN    (8 + 3 * sizeof (n_time))    /* timestamp */
  75. #define    ICMP_MASKLEN    12                /* address mask */
  76. #define    ICMP_ADVLENMIN    (8 + sizeof (struct ip) + 8)    /* min */
  77. #define    ICMP_ADVLEN(p)    (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  78.     /* N.B.: must separately check that ip_hl >= 5 */
  79.  
  80. /*
  81.  * Definition of type and code field values.
  82.  */
  83. #define    ICMP_ECHOREPLY        0        /* echo reply */
  84. #define    ICMP_UNREACH        3        /* dest unreachable, codes: */
  85. #define        ICMP_UNREACH_NET    0        /* bad net */
  86. #define        ICMP_UNREACH_HOST    1        /* bad host */
  87. #define        ICMP_UNREACH_PROTOCOL    2        /* bad protocol */
  88. #define        ICMP_UNREACH_PORT    3        /* bad port */
  89. #define        ICMP_UNREACH_NEEDFRAG    4        /* IP_DF caused drop */
  90. #define        ICMP_UNREACH_SRCFAIL    5        /* src route failed */
  91. #define    ICMP_SOURCEQUENCH    4        /* packet lost, slow down */
  92. #define    ICMP_REDIRECT        5        /* shorter route, codes: */
  93. #define        ICMP_REDIRECT_NET    0        /* for network */
  94. #define        ICMP_REDIRECT_HOST    1        /* for host */
  95. #define        ICMP_REDIRECT_TOSNET    2        /* for tos and net */
  96. #define        ICMP_REDIRECT_TOSHOST    3        /* for tos and host */
  97. #define    ICMP_ECHO        8        /* echo service */
  98. #define    ICMP_TIMXCEED        11        /* time exceeded, code: */
  99. #define        ICMP_TIMXCEED_INTRANS    0        /* ttl==0 in transit */
  100. #define        ICMP_TIMXCEED_REASS    1        /* ttl==0 in reass */
  101. #define    ICMP_PARAMPROB        12        /* ip header bad */
  102. #define    ICMP_TSTAMP        13        /* timestamp request */
  103. #define    ICMP_TSTAMPREPLY    14        /* timestamp reply */
  104. #define    ICMP_IREQ        15        /* information request */
  105. #define    ICMP_IREQREPLY        16        /* information reply */
  106. #define    ICMP_MASKREQ        17        /* address mask request */
  107. #define    ICMP_MASKREPLY        18        /* address mask reply */
  108.  
  109. #define    ICMP_MAXTYPE        18
  110.  
  111. #define    ICMP_INFOTYPE(type) \
  112.     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  113.     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  114.     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  115.     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  116.  
  117. #endif /*!_netinet_ip_icmp_h*/
  118.