1/*	$FreeBSD$	*/
2
3/*
4 * (C)opyright 1995 by Darren Reed.
5 *
6 * This code may be freely distributed as long as it retains this notice
7 * and is not changed in any way.  The author accepts no responsibility
8 * for the use of this software.  I hate legaleese, don't you ?
9 *
10 * @(#)ip_compat.h	1.2 12/7/95
11 */
12
13/*
14 * These #ifdef's are here mainly for linux, but who knows, they may
15 * not be in other places or maybe one day linux will grow up and some
16 * of these will turn up there too.
17 */
18#ifndef	ICMP_UNREACH
19# define	ICMP_UNREACH	ICMP_DEST_UNREACH
20#endif
21#ifndef	ICMP_SOURCEQUENCH
22# define	ICMP_SOURCEQUENCH	ICMP_SOURCE_QUENCH
23#endif
24#ifndef	ICMP_TIMXCEED
25# define	ICMP_TIMXCEED	ICMP_TIME_EXCEEDED
26#endif
27#ifndef	ICMP_PARAMPROB
28# define	ICMP_PARAMPROB	ICMP_PARAMETERPROB
29#endif
30#ifndef	IPVERSION
31# define	IPVERSION	4
32#endif
33#ifndef	IPOPT_MINOFF
34# define	IPOPT_MINOFF	4
35#endif
36#ifndef	IPOPT_COPIED
37# define	IPOPT_COPIED(x)	((x)&0x80)
38#endif
39#ifndef	IPOPT_EOL
40# define	IPOPT_EOL	0
41#endif
42#ifndef	IPOPT_NOP
43# define	IPOPT_NOP	1
44#endif
45#ifndef	IP_MF
46# define	IP_MF	((u_short)0x2000)
47#endif
48#ifndef	ETHERTYPE_IP
49# define	ETHERTYPE_IP	((u_short)0x0800)
50#endif
51#ifndef	TH_FIN
52# define	TH_FIN	0x01
53#endif
54#ifndef	TH_SYN
55# define	TH_SYN	0x02
56#endif
57#ifndef	TH_RST
58# define	TH_RST	0x04
59#endif
60#ifndef	TH_PUSH
61# define	TH_PUSH	0x08
62#endif
63#ifndef	TH_ACK
64# define	TH_ACK	0x10
65#endif
66#ifndef	TH_URG
67# define	TH_URG	0x20
68#endif
69#ifndef	IPOPT_EOL
70# define	IPOPT_EOL	0
71#endif
72#ifndef	IPOPT_NOP
73# define	IPOPT_NOP	1
74#endif
75#ifndef	IPOPT_RR
76# define	IPOPT_RR	7
77#endif
78#ifndef	IPOPT_TS
79# define	IPOPT_TS	68
80#endif
81#ifndef	IPOPT_SECURITY
82# define	IPOPT_SECURITY	130
83#endif
84#ifndef	IPOPT_LSRR
85# define	IPOPT_LSRR	131
86#endif
87#ifndef	IPOPT_SATID
88# define	IPOPT_SATID	136
89#endif
90#ifndef	IPOPT_SSRR
91# define	IPOPT_SSRR	137
92#endif
93#ifndef	IPOPT_SECUR_UNCLASS
94# define	IPOPT_SECUR_UNCLASS	((u_short)0x0000)
95#endif
96#ifndef	IPOPT_SECUR_CONFID
97# define	IPOPT_SECUR_CONFID	((u_short)0xf135)
98#endif
99#ifndef	IPOPT_SECUR_EFTO
100# define	IPOPT_SECUR_EFTO	((u_short)0x789a)
101#endif
102#ifndef	IPOPT_SECUR_MMMM
103# define	IPOPT_SECUR_MMMM	((u_short)0xbc4d)
104#endif
105#ifndef	IPOPT_SECUR_RESTR
106# define	IPOPT_SECUR_RESTR	((u_short)0xaf13)
107#endif
108#ifndef	IPOPT_SECUR_SECRET
109# define	IPOPT_SECUR_SECRET	((u_short)0xd788)
110#endif
111#ifndef IPOPT_SECUR_TOPSECRET
112# define	IPOPT_SECUR_TOPSECRET	((u_short)0x6bc5)
113#endif
114
115#ifdef linux
116# if LINUX < 0200
117#  define	icmp	icmphdr
118#  define	icmp_type	type
119#  define	icmp_code	code
120# endif
121
122/*
123 * From /usr/include/netinet/ip_var.h
124 * !%@#!$@# linux...
125 */
126struct ipovly {
127	caddr_t	ih_next, ih_prev;	/* for protocol sequence q's */
128	u_char	ih_x1;			/* (unused) */
129	u_char	ih_pr;			/* protocol */
130	short	ih_len;			/* protocol length */
131	struct	in_addr ih_src;		/* source internet address */
132	struct	in_addr ih_dst;		/* destination internet address */
133};
134
135typedef	struct	{
136	__u16	th_sport;
137	__u16	th_dport;
138	__u32	th_seq;
139	__u32	th_ack;
140# if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
141    defined(vax)
142	__u8	th_res:4;
143	__u8	th_off:4;
144#else
145	__u8	th_off:4;
146	__u8	th_res:4;
147#endif
148	__u8	th_flags;
149	__u16	th_win;
150	__u16	th_sum;
151	__u16	th_urp;
152} tcphdr_t;
153
154typedef	struct	{
155	__u16	uh_sport;
156	__u16	uh_dport;
157	__s16	uh_ulen;
158	__u16	uh_sum;
159} udphdr_t;
160
161typedef	struct	{
162# if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
163    defined(vax)
164	__u8	ip_hl:4;
165	__u8	ip_v:4;
166# else
167	__u8	ip_hl:4;
168	__u8	ip_v:4;
169# endif
170	__u8	ip_tos;
171	__u16	ip_len;
172	__u16	ip_id;
173	__u16	ip_off;
174	__u8	ip_ttl;
175	__u8	ip_p;
176	__u16	ip_sum;
177	struct	in_addr	ip_src;
178	struct	in_addr	ip_dst;
179} ip_t;
180
181typedef	struct	{
182	__u8	ether_dhost[6];
183	__u8	ether_shost[6];
184	__u16	ether_type;
185} ether_header_t;
186
187typedef struct icmp {
188	u_char	icmp_type;		/* type of message, see below */
189	u_char	icmp_code;		/* type sub code */
190	u_short	icmp_cksum;		/* ones complement cksum of struct */
191	union {
192		u_char ih_pptr;			/* ICMP_PARAMPROB */
193		struct in_addr ih_gwaddr;	/* ICMP_REDIRECT */
194		struct ih_idseq {
195			n_short	icd_id;
196			n_short	icd_seq;
197		} ih_idseq;
198		int ih_void;
199	} icmp_hun;
200#define	icmp_pptr	icmp_hun.ih_pptr
201#define	icmp_gwaddr	icmp_hun.ih_gwaddr
202#define	icmp_id		icmp_hun.ih_idseq.icd_id
203#define	icmp_seq	icmp_hun.ih_idseq.icd_seq
204#define	icmp_void	icmp_hun.ih_void
205	union {
206		struct id_ts {
207			n_time its_otime;
208			n_time its_rtime;
209			n_time its_ttime;
210		} id_ts;
211		struct id_ip  {
212			ip_t idi_ip;
213			/* options and then 64 bits of data */
214		} id_ip;
215		u_long	id_mask;
216		char	id_data[1];
217	} icmp_dun;
218#define	icmp_otime	icmp_dun.id_ts.its_otime
219#define	icmp_rtime	icmp_dun.id_ts.its_rtime
220#define	icmp_ttime	icmp_dun.id_ts.its_ttime
221#define	icmp_ip		icmp_dun.id_ip.idi_ip
222#define	icmp_mask	icmp_dun.id_mask
223#define	icmp_data	icmp_dun.id_data
224} icmphdr_t;
225
226# define	bcopy(a,b,c)	memmove(b,a,c)
227# define	bcmp(a,b,c)	memcmp(a,b,c)
228
229# define	ifnet	device
230
231#else
232
233typedef	struct	udphdr	udphdr_t;
234typedef	struct	tcphdr	tcphdr_t;
235typedef	struct	ip	ip_t;
236typedef	struct	ether_header	ether_header_t;
237
238#endif
239
240#if defined(__SVR4) || defined(__svr4__)
241# define	bcopy(a,b,c)	memmove(b,a,c)
242# define	bcmp(a,b,c)	memcmp(a,b,c)
243# define	bzero(a,b)	memset(a,0,b)
244#endif
245