brintos

brintos / linux-shallow public Read only

0
0
Text · 4.7 KiB · 163c099 Raw
163 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2/*3 * INET		An implementation of the TCP/IP protocol suite for the LINUX4 *		operating system.  INET is implemented using the  BSD Socket5 *		interface as the means of communication with the user level.6 *7 *		Definitions for the ICMP protocol.8 *9 * Version:	@(#)icmp.h	1.0.3	04/28/9310 *11 * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>12 *13 *		This program is free software; you can redistribute it and/or14 *		modify it under the terms of the GNU General Public License15 *		as published by the Free Software Foundation; either version16 *		2 of the License, or (at your option) any later version.17 */18#ifndef _UAPI_LINUX_ICMP_H19#define _UAPI_LINUX_ICMP_H20 21#include <linux/types.h>22#include <asm/byteorder.h>23#include <linux/if.h>24#include <linux/in6.h>25 26#define ICMP_ECHOREPLY		0	/* Echo Reply			*/27#define ICMP_DEST_UNREACH	3	/* Destination Unreachable	*/28#define ICMP_SOURCE_QUENCH	4	/* Source Quench		*/29#define ICMP_REDIRECT		5	/* Redirect (change route)	*/30#define ICMP_ECHO		8	/* Echo Request			*/31#define ICMP_TIME_EXCEEDED	11	/* Time Exceeded		*/32#define ICMP_PARAMETERPROB	12	/* Parameter Problem		*/33#define ICMP_TIMESTAMP		13	/* Timestamp Request		*/34#define ICMP_TIMESTAMPREPLY	14	/* Timestamp Reply		*/35#define ICMP_INFO_REQUEST	15	/* Information Request		*/36#define ICMP_INFO_REPLY		16	/* Information Reply		*/37#define ICMP_ADDRESS		17	/* Address Mask Request		*/38#define ICMP_ADDRESSREPLY	18	/* Address Mask Reply		*/39#define NR_ICMP_TYPES		1840 41 42/* Codes for UNREACH. */43#define ICMP_NET_UNREACH	0	/* Network Unreachable		*/44#define ICMP_HOST_UNREACH	1	/* Host Unreachable		*/45#define ICMP_PROT_UNREACH	2	/* Protocol Unreachable		*/46#define ICMP_PORT_UNREACH	3	/* Port Unreachable		*/47#define ICMP_FRAG_NEEDED	4	/* Fragmentation Needed/DF set	*/48#define ICMP_SR_FAILED		5	/* Source Route failed		*/49#define ICMP_NET_UNKNOWN	650#define ICMP_HOST_UNKNOWN	751#define ICMP_HOST_ISOLATED	852#define ICMP_NET_ANO		953#define ICMP_HOST_ANO		1054#define ICMP_NET_UNR_TOS	1155#define ICMP_HOST_UNR_TOS	1256#define ICMP_PKT_FILTERED	13	/* Packet filtered */57#define ICMP_PREC_VIOLATION	14	/* Precedence violation */58#define ICMP_PREC_CUTOFF	15	/* Precedence cut off */59#define NR_ICMP_UNREACH		15	/* instead of hardcoding immediate value */60 61/* Codes for REDIRECT. */62#define ICMP_REDIR_NET		0	/* Redirect Net			*/63#define ICMP_REDIR_HOST		1	/* Redirect Host		*/64#define ICMP_REDIR_NETTOS	2	/* Redirect Net for TOS		*/65#define ICMP_REDIR_HOSTTOS	3	/* Redirect Host for TOS	*/66 67/* Codes for TIME_EXCEEDED. */68#define ICMP_EXC_TTL		0	/* TTL count exceeded		*/69#define ICMP_EXC_FRAGTIME	1	/* Fragment Reass time exceeded	*/70 71/* Codes for EXT_ECHO (PROBE) */72#define ICMP_EXT_ECHO			4273#define ICMP_EXT_ECHOREPLY		4374#define ICMP_EXT_CODE_MAL_QUERY		1	/* Malformed Query */75#define ICMP_EXT_CODE_NO_IF		2	/* No such Interface */76#define ICMP_EXT_CODE_NO_TABLE_ENT	3	/* No such Table Entry */77#define ICMP_EXT_CODE_MULT_IFS		4	/* Multiple Interfaces Satisfy Query */78 79/* Constants for EXT_ECHO (PROBE) */80#define ICMP_EXT_ECHOREPLY_ACTIVE	(1 << 2)/* active bit in reply message */81#define ICMP_EXT_ECHOREPLY_IPV4		(1 << 1)/* ipv4 bit in reply message */82#define ICMP_EXT_ECHOREPLY_IPV6		1	/* ipv6 bit in reply message */83#define ICMP_EXT_ECHO_CTYPE_NAME	184#define ICMP_EXT_ECHO_CTYPE_INDEX	285#define ICMP_EXT_ECHO_CTYPE_ADDR	386#define ICMP_AFI_IP			1	/* Address Family Identifier for ipv4 */87#define ICMP_AFI_IP6			2	/* Address Family Identifier for ipv6 */88 89struct icmphdr {90  __u8		type;91  __u8		code;92  __sum16	checksum;93  union {94	struct {95		__be16	id;96		__be16	sequence;97	} echo;98	__be32	gateway;99	struct {100		__be16	__unused;101		__be16	mtu;102	} frag;103	__u8	reserved[4];104  } un;105};106 107 108/*109 *	constants for (set|get)sockopt110 */111 112#define ICMP_FILTER			1113 114struct icmp_filter {115	__u32		data;116};117 118/* RFC 4884 extension struct: one per message */119struct icmp_ext_hdr {120#if defined(__LITTLE_ENDIAN_BITFIELD)121	__u8		reserved1:4,122			version:4;123#elif defined(__BIG_ENDIAN_BITFIELD)124	__u8		version:4,125			reserved1:4;126#else127#error	"Please fix <asm/byteorder.h>"128#endif129	__u8		reserved2;130	__sum16		checksum;131};132 133/* RFC 4884 extension object header: one for each object */134struct icmp_extobj_hdr {135	__be16		length;136	__u8		class_num;137	__u8		class_type;138};139 140/* RFC 8335: 2.1 Header for c-type 3 payload */141struct icmp_ext_echo_ctype3_hdr {142	__be16		afi;143	__u8		addrlen;144	__u8		reserved;145};146 147/* RFC 8335: 2.1 Interface Identification Object */148struct icmp_ext_echo_iio {149	struct icmp_extobj_hdr extobj_hdr;150	union {151		char name[IFNAMSIZ];152		__be32 ifindex;153		struct {154			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;155			union {156				__be32		ipv4_addr;157				struct in6_addr	ipv6_addr;158			} ip_addr;159		} addr;160	} ident;161};162#endif /* _UAPI_LINUX_ICMP_H */163