summaryrefslogtreecommitdiffstats
path: root/plugins/linux.h
blob: 3b39d322dc1353eb00be9e9a8341ed8baa115033 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * Special compatibility definitions for linux.
 *
 *	On the linux platform, several IP-related structures have
 *	different names. Also some of the structure fields have
 *	other names, although the layout is (obviously) fixed.
 *	Several constants are not defined in the standard files.
 *
 *	@(#)linux.h             e07@nikhef.nl (Eric Wassenaar) 960301
 * 
 * XXX [src] - This is a complete ripoff from the fping program
 */

#if defined(linux)

#include <endian.h>				/* to get the proper BYTE_ORDER */

#if !defined(BYTE_ORDER) || (BYTE_ORDER != BIG_ENDIAN && \
     BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != PDP_ENDIAN)
error "Undefined or invalid BYTE_ORDER";
#endif

/*
 * Structure of an ip header, without options.
 */

#define	IPVERSION	4

struct ip {
#if (BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN)
	u_char ip_hl:4,				/* header length */
	  ip_v:4;					/* version */
#else
	u_char ip_v:4,				/* version */
	  ip_hl:4;					/* header length */
#endif
	u_char ip_tos;				/* type of service */
	short ip_len;				/* total length */
	u_short ip_id;				/* identification */
	short ip_off;				/* fragment offset field */
#define	IP_DF 0x4000			/* dont fragment flag */
#define	IP_MF 0x2000			/* more fragments flag */
	u_char ip_ttl;				/* time to live */
	u_char ip_p;				/* protocol */
	u_short ip_sum;				/* checksum */
	struct in_addr ip_src, ip_dst;	/* source and dest address */
};

#define	IP_MAXPACKET	65535	/* maximum packet size */

/*
 * Structure of an icmp header.
 */

struct icmp {
	u_char icmp_type;			/* type of message, see below */
	u_char icmp_code;			/* type sub code */
	u_short icmp_cksum;			/* ones complement cksum of struct */
	union {
		u_char ih_pptr;			/* ICMP_PARAMPROB */
		struct in_addr ih_gwaddr;	/* ICMP_REDIRECT */
		struct ih_idseq {
			n_short icd_id;
			n_short icd_seq;
		} ih_idseq;
		int ih_void;
	} icmp_hun;
#define	icmp_pptr	icmp_hun.ih_pptr
#define	icmp_gwaddr	icmp_hun.ih_gwaddr
#define	icmp_id		icmp_hun.ih_idseq.icd_id
#define	icmp_seq	icmp_hun.ih_idseq.icd_seq
#define	icmp_void	icmp_hun.ih_void
	union {
		struct id_ts {
			n_time its_otime;
			n_time its_rtime;
			n_time its_ttime;
		} id_ts;
		struct id_ip {
			struct ip idi_ip;
			/* options and then 64 bits of data */
		} id_ip;
		u_long id_mask;
		char id_data[1];
	} icmp_dun;
#define	icmp_otime	icmp_dun.id_ts.its_otime
#define	icmp_rtime	icmp_dun.id_ts.its_rtime
#define	icmp_ttime	icmp_dun.id_ts.its_ttime
#define	icmp_ip		icmp_dun.id_ip.idi_ip
#define	icmp_mask	icmp_dun.id_mask
#define	icmp_data	icmp_dun.id_data
};

#define	ICMP_MINLEN	8			/* abs minimum */

/*
 * Definition of icmp type and code field values.
 */

#define	ICMP_ECHOREPLY		0	/* echo reply */
#define	ICMP_UNREACH		3	/* dest unreachable, codes: */
#define		ICMP_UNREACH_NET		0	/* bad net */
#define		ICMP_UNREACH_HOST		1	/* bad host */
#define		ICMP_UNREACH_PROTOCOL	2	/* bad protocol */
#define		ICMP_UNREACH_PORT		3	/* bad port */
#define		ICMP_UNREACH_NEEDFRAG	4	/* IP_DF caused drop */
#define		ICMP_UNREACH_SRCFAIL	5	/* src route failed */
#define	ICMP_SOURCEQUENCH	4	/* packet lost, slow down */
#define	ICMP_REDIRECT		5	/* shorter route, codes: */
#define		ICMP_REDIRECT_NET		0	/* for network */
#define		ICMP_REDIRECT_HOST		1	/* for host */
#define		ICMP_REDIRECT_TOSNET	2	/* for tos and net */
#define		ICMP_REDIRECT_TOSHOST	3	/* for tos and host */
#define	ICMP_ECHO			8	/* echo service */
#define	ICMP_TIMXCEED		11	/* time exceeded, codes: */
#define		ICMP_TIMXCEED_INTRANS	0	/* ttl==0 in transit */
#define		ICMP_TIMXCEED_REASS		1	/* ttl==0 in reass */
#define	ICMP_PARAMPROB		12		/* ip header bad */
#define	ICMP_TSTAMP			13		/* timestamp request */
#define	ICMP_TSTAMPREPLY	14		/* timestamp reply */
#define	ICMP_IREQ			15		/* information request */
#define	ICMP_IREQREPLY		16		/* information reply */
#define	ICMP_MASKREQ		17		/* address mask request */
#define	ICMP_MASKREPLY		18		/* address mask reply */

/*
 * Definitions needed for the udp header structure.
 */

#define uh_sport	source
#define uh_dport	dest
#define uh_ulen		len
#define uh_sum		check

#endif /* linux */