home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilss / sockets / include / netinet / h / ip_icmp < prev    next >
Encoding:
Text File  |  1995-01-11  |  4.8 KB  |  114 lines

  1. /* -*-C-*-
  2.  *
  3.  * $Header: /ax/networking:include/netinet/ip_icmp.h:networking  1.1  $
  4.  * $Source: /ax/networking:include/netinet/ip_icmp.h: $
  5.  *
  6.  * Copyright (c) 1995 Acorn Computers Ltd., Cambridge, England
  7.  *
  8.  * $Log:    ip_icmp.h,v $
  9.  * Revision 1.1  95/01/11  10:16:57  kwelton
  10.  * Initial revision
  11.  * 
  12.  */
  13.  
  14. /*
  15.  * Interface Control Message Protocol Definitions.
  16.  * Per RFC 792, September 1981.
  17.  */
  18.  
  19. /*
  20.  * Structure of an icmp header.
  21.  */
  22. struct icmp {
  23.         u_char  icmp_type;              /* type of message, see below */
  24.         u_char  icmp_code;              /* type sub code */
  25.         u_short icmp_cksum;             /* ones complement cksum of struct */
  26.         union {
  27.                 u_char ih_pptr;                 /* ICMP_PARAMPROB */
  28.                 struct in_addr ih_gwaddr;       /* ICMP_REDIRECT */
  29.                 struct ih_idseq {
  30.                         n_short icd_id;
  31.                         n_short icd_seq;
  32.                 } ih_idseq;
  33.                 int ih_void;
  34.         } icmp_hun;
  35. #define icmp_pptr       icmp_hun.ih_pptr
  36. #define icmp_gwaddr     icmp_hun.ih_gwaddr
  37. #define icmp_id         icmp_hun.ih_idseq.icd_id
  38. #define icmp_seq        icmp_hun.ih_idseq.icd_seq
  39. #define icmp_void       icmp_hun.ih_void
  40.         union {
  41.                 struct id_ts {
  42.                         n_time its_otime;
  43.                         n_time its_rtime;
  44.                         n_time its_ttime;
  45.                 } id_ts;
  46.                 struct id_ip  {
  47.                         struct ip idi_ip;
  48.                         /* options and then 64 bits of data */
  49.                 } id_ip;
  50.                 u_long  id_mask;
  51.                 char    id_data[1];
  52.         } icmp_dun;
  53. #define icmp_otime      icmp_dun.id_ts.its_otime
  54. #define icmp_rtime      icmp_dun.id_ts.its_rtime
  55. #define icmp_ttime      icmp_dun.id_ts.its_ttime
  56. #define icmp_ip         icmp_dun.id_ip.idi_ip
  57. #define icmp_mask       icmp_dun.id_mask
  58. #define icmp_data       icmp_dun.id_data
  59. };
  60.  
  61. /*
  62.  * Lower bounds on packet lengths for various types.
  63.  * For the error advice packets must first insure that the
  64.  * packet is large enought to contain the returned ip header.
  65.  * Only then can we do the check to see if 64 bits of packet
  66.  * data have been returned, since we need to check the returned
  67.  * ip header length.
  68.  */
  69. #define ICMP_MINLEN     8                               /* abs minimum */
  70. #define ICMP_TSLEN      (8 + 3 * sizeof (n_time))       /* timestamp */
  71. #define ICMP_MASKLEN    12                              /* address mask */
  72. #define ICMP_ADVLENMIN  (8 + sizeof (struct ip) + 8)    /* min */
  73. #define ICMP_ADVLEN(p)  (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  74.         /* N.B.: must separately check that ip_hl >= 5 */
  75.  
  76. /*
  77.  * Definition of type and code field values.
  78.  */
  79. #define ICMP_ECHOREPLY          0               /* echo reply */
  80. #define ICMP_UNREACH            3               /* dest unreachable, codes: */
  81. #define         ICMP_UNREACH_NET        0               /* bad net */
  82. #define         ICMP_UNREACH_HOST       1               /* bad host */
  83. #define         ICMP_UNREACH_PROTOCOL   2               /* bad protocol */
  84. #define         ICMP_UNREACH_PORT       3               /* bad port */
  85. #define         ICMP_UNREACH_NEEDFRAG   4               /* IP_DF caused drop */
  86. #define         ICMP_UNREACH_SRCFAIL    5               /* src route failed */
  87. #define ICMP_SOURCEQUENCH       4               /* packet lost, slow down */
  88. #define ICMP_REDIRECT           5               /* shorter route, codes: */
  89. #define         ICMP_REDIRECT_NET       0               /* for network */
  90. #define         ICMP_REDIRECT_HOST      1               /* for host */
  91. #define         ICMP_REDIRECT_TOSNET    2               /* for tos and net */
  92. #define         ICMP_REDIRECT_TOSHOST   3               /* for tos and host */
  93. #define ICMP_ECHO               8               /* echo service */
  94. #define ICMP_TIMXCEED           11              /* time exceeded, code: */
  95. #define         ICMP_TIMXCEED_INTRANS   0               /* ttl==0 in transit */
  96. #define         ICMP_TIMXCEED_REASS     1               /* ttl==0 in reass */
  97. #define ICMP_PARAMPROB          12              /* ip header bad */
  98. #define ICMP_TSTAMP             13              /* timestamp request */
  99. #define ICMP_TSTAMPREPLY        14              /* timestamp reply */
  100. #define ICMP_IREQ               15              /* information request */
  101. #define ICMP_IREQREPLY          16              /* information reply */
  102. #define ICMP_MASKREQ            17              /* address mask request */
  103. #define ICMP_MASKREPLY          18              /* address mask reply */
  104.  
  105. #define ICMP_MAXTYPE            18
  106.  
  107. #define ICMP_INFOTYPE(type) \
  108.         ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  109.         (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  110.         (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  111.         (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  112.  
  113. /* EOF ip_icmp.h */
  114.