|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1982, 1986 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution is only permitted until one year after the first shipment ! 6: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and ! 7: * binary forms are permitted provided that: (1) source distributions retain ! 8: * this entire copyright notice and comment, and (2) distributions including ! 9: * binaries display the following acknowledgement: This product includes ! 10: * software developed by the University of California, Berkeley and its ! 11: * contributors'' in the documentation or other materials provided with the ! 12: * distribution and in all advertising materials mentioning features or use ! 13: * of this software. Neither the name of the University nor the names of ! 14: * its contributors may be used to endorse or promote products derived from ! 15: * this software without specific prior written permission. ! 16: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 17: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 18: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 19: * ! 20: * @(#)ip_icmp.h 7.5 (Berkeley) 6/28/90 ! 21: */ ! 22: ! 23: /* ! 24: * Interface Control Message Protocol Definitions. ! 25: * Per RFC 792, September 1981. ! 26: */ ! 27: ! 28: /* ! 29: * Structure of an icmp header. ! 30: */ ! 31: struct icmp { ! 32: u_char icmp_type; /* type of message, see below */ ! 33: u_char icmp_code; /* type sub code */ ! 34: u_short icmp_cksum; /* ones complement cksum of struct */ ! 35: union { ! 36: u_char ih_pptr; /* ICMP_PARAMPROB */ ! 37: struct in_addr ih_gwaddr; /* ICMP_REDIRECT */ ! 38: struct ih_idseq { ! 39: n_short icd_id; ! 40: n_short icd_seq; ! 41: } ih_idseq; ! 42: int ih_void; ! 43: } icmp_hun; ! 44: #define icmp_pptr icmp_hun.ih_pptr ! 45: #define icmp_gwaddr icmp_hun.ih_gwaddr ! 46: #define icmp_id icmp_hun.ih_idseq.icd_id ! 47: #define icmp_seq icmp_hun.ih_idseq.icd_seq ! 48: #define icmp_void icmp_hun.ih_void ! 49: union { ! 50: struct id_ts { ! 51: n_time its_otime; ! 52: n_time its_rtime; ! 53: n_time its_ttime; ! 54: } id_ts; ! 55: struct id_ip { ! 56: struct ip idi_ip; ! 57: /* options and then 64 bits of data */ ! 58: } id_ip; ! 59: u_long id_mask; ! 60: char id_data[1]; ! 61: } icmp_dun; ! 62: #define icmp_otime icmp_dun.id_ts.its_otime ! 63: #define icmp_rtime icmp_dun.id_ts.its_rtime ! 64: #define icmp_ttime icmp_dun.id_ts.its_ttime ! 65: #define icmp_ip icmp_dun.id_ip.idi_ip ! 66: #define icmp_mask icmp_dun.id_mask ! 67: #define icmp_data icmp_dun.id_data ! 68: }; ! 69: ! 70: /* ! 71: * Lower bounds on packet lengths for various types. ! 72: * For the error advice packets must first insure that the ! 73: * packet is large enought to contain the returned ip header. ! 74: * Only then can we do the check to see if 64 bits of packet ! 75: * data have been returned, since we need to check the returned ! 76: * ip header length. ! 77: */ ! 78: #define ICMP_MINLEN 8 /* abs minimum */ ! 79: #define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */ ! 80: #define ICMP_MASKLEN 12 /* address mask */ ! 81: #define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */ ! 82: #define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) ! 83: /* N.B.: must separately check that ip_hl >= 5 */ ! 84: ! 85: /* ! 86: * Definition of type and code field values. ! 87: */ ! 88: #define ICMP_ECHOREPLY 0 /* echo reply */ ! 89: #define ICMP_UNREACH 3 /* dest unreachable, codes: */ ! 90: #define ICMP_UNREACH_NET 0 /* bad net */ ! 91: #define ICMP_UNREACH_HOST 1 /* bad host */ ! 92: #define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ ! 93: #define ICMP_UNREACH_PORT 3 /* bad port */ ! 94: #define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */ ! 95: #define ICMP_UNREACH_SRCFAIL 5 /* src route failed */ ! 96: #define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */ ! 97: #define ICMP_REDIRECT 5 /* shorter route, codes: */ ! 98: #define ICMP_REDIRECT_NET 0 /* for network */ ! 99: #define ICMP_REDIRECT_HOST 1 /* for host */ ! 100: #define ICMP_REDIRECT_TOSNET 2 /* for tos and net */ ! 101: #define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */ ! 102: #define ICMP_ECHO 8 /* echo service */ ! 103: #define ICMP_TIMXCEED 11 /* time exceeded, code: */ ! 104: #define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ ! 105: #define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ ! 106: #define ICMP_PARAMPROB 12 /* ip header bad */ ! 107: #define ICMP_TSTAMP 13 /* timestamp request */ ! 108: #define ICMP_TSTAMPREPLY 14 /* timestamp reply */ ! 109: #define ICMP_IREQ 15 /* information request */ ! 110: #define ICMP_IREQREPLY 16 /* information reply */ ! 111: #define ICMP_MASKREQ 17 /* address mask request */ ! 112: #define ICMP_MASKREPLY 18 /* address mask reply */ ! 113: ! 114: #define ICMP_MAXTYPE 18 ! 115: ! 116: #define ICMP_INFOTYPE(type) \ ! 117: ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \ ! 118: (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \ ! 119: (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \ ! 120: (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.