1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * INET		An implementation of the TCP/IP protocol suite for the LINUX
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		operating system.  INET is implemented using the  BSD Socket
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		interface as the means of communication with the user level.
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		Definitions for the ICMP protocol.
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Version:	@(#)icmp.h	1.0.3	04/28/93
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		This program is free software; you can redistribute it and/or
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		modify it under the terms of the GNU General Public License
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		as published by the Free Software Foundation; either version
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *		2 of the License, or (at your option) any later version.
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_ICMP_H
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	_LINUX_ICMP_H
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h>
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_ECHOREPLY		0	/* Echo Reply			*/
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_DEST_UNREACH	3	/* Destination Unreachable	*/
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_SOURCE_QUENCH	4	/* Source Quench		*/
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_REDIRECT		5	/* Redirect (change route)	*/
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_ECHO		8	/* Echo Request			*/
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_TIME_EXCEEDED	11	/* Time Exceeded		*/
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PARAMETERPROB	12	/* Parameter Problem		*/
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_TIMESTAMP		13	/* Timestamp Request		*/
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_TIMESTAMPREPLY	14	/* Timestamp Reply		*/
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_INFO_REQUEST	15	/* Information Request		*/
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_INFO_REPLY		16	/* Information Reply		*/
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_ADDRESS		17	/* Address Mask Request		*/
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_ADDRESSREPLY	18	/* Address Mask Reply		*/
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NR_ICMP_TYPES		18
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Codes for UNREACH. */
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_NET_UNREACH	0	/* Network Unreachable		*/
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_HOST_UNREACH	1	/* Host Unreachable		*/
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PROT_UNREACH	2	/* Protocol Unreachable		*/
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PORT_UNREACH	3	/* Port Unreachable		*/
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_FRAG_NEEDED	4	/* Fragmentation Needed/DF set	*/
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_SR_FAILED		5	/* Source Route failed		*/
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_NET_UNKNOWN	6
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_HOST_UNKNOWN	7
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_HOST_ISOLATED	8
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_NET_ANO		9
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_HOST_ANO		10
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_NET_UNR_TOS	11
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_HOST_UNR_TOS	12
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PKT_FILTERED	13	/* Packet filtered */
53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PREC_VIOLATION	14	/* Precedence violation */
54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_PREC_CUTOFF	15	/* Precedence cut off */
55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NR_ICMP_UNREACH		15	/* instead of hardcoding immediate value */
56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Codes for REDIRECT. */
58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_REDIR_NET		0	/* Redirect Net			*/
59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_REDIR_HOST		1	/* Redirect Host		*/
60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_REDIR_NETTOS	2	/* Redirect Net for TOS		*/
61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_REDIR_HOSTTOS	3	/* Redirect Host for TOS	*/
62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Codes for TIME_EXCEEDED. */
64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_EXC_TTL		0	/* TTL count exceeded		*/
65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_EXC_FRAGTIME	1	/* Fragment Reass time exceeded	*/
66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct icmphdr {
69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  __u8		type;
70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  __u8		code;
71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  __u16		checksum;
72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  union {
73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct {
74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		__u16	id;
75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		__u16	sequence;
76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	} echo;
77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32	gateway;
78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct {
79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if 0	/* BIONIC: __unused is defined as "" */
80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		__u16	__unused;
81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else
82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u16   __unused_field;
83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		__u16	mtu;
85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	} frag;
86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  } un;
87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *	constants for (set|get)sockopt
91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ICMP_FILTER			1
94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct icmp_filter {
96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32		data;
97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif	/* _LINUX_ICMP_H */
101