]> git.saurik.com Git - apple/xnu.git/blob - bsd/netinet/ip_compat.h
xnu-123.5.tar.gz
[apple/xnu.git] / bsd / netinet / ip_compat.h
1 /*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22 /*
23 * Copyright (C) 1993-1997 by Darren Reed.
24 *
25 * Redistribution and use in source and binary forms are permitted
26 * provided that this notice is preserved and due credit is given
27 * to the original author and the contributors.
28 *
29 * @(#)ip_compat.h 1.8 1/14/96
30 */
31
32 #if 0
33
34 #ifndef __IP_COMPAT_H__
35 #define __IP_COMPAT_H__
36
37 #ifndef __P
38 # ifdef __STDC__
39 # define __P(x) x
40 # else
41 # define __P(x) ()
42 # define const
43 # endif
44 #endif
45
46 #ifndef SOLARIS
47 #define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
48 #endif
49
50 #if defined(_KERNEL) && !defined(KERNEL)
51 # define KERNEL
52 #endif
53 #if defined(KERNEL) && !defined(_KERNEL)
54 # define _KERNEL
55 #endif
56 #if!defined(__KERNEL__) && defined(KERNEL)
57 # define __KERNEL__
58 #endif
59
60 #if defined(__SVR4) || defined(__svr4__) || defined(__sgi)
61 #define index strchr
62 # if !defined(_KERNEL)
63 # define bzero(a,b) memset(a,0,b)
64 # define bcmp memcmp
65 # define bcopy(a,b,c) memmove(b,a,c)
66 # endif
67 #endif
68
69 struct ether_addr {
70 u_char ether_addr_octet[6];
71 };
72
73
74 #if defined(__sgi) && !defined(IPFILTER_LKM)
75 # ifdef __STDC__
76 # define IPL_EXTERN(ep) ipfilter##ep
77 # else
78 # define IPL_EXTERN(ep) ipfilter/**/ep
79 # endif
80 #else
81 # ifdef __STDC__
82 # define IPL_EXTERN(ep) ipl##ep
83 # else
84 # define IPL_EXTERN(ep) ipl/**/ep
85 # endif
86 #endif
87
88 #ifdef linux
89 # include <sys/sysmacros.h>
90 #endif
91 #if SOLARIS
92 # define MTYPE(m) ((m)->b_datap->db_type)
93 # include <sys/ioccom.h>
94 # include <sys/sysmacros.h>
95 # include <sys/kmem.h>
96 /*
97 * because Solaris 2 defines these in two places :-/
98 */
99 # undef IPOPT_EOL
100 # undef IPOPT_NOP
101 # undef IPOPT_LSRR
102 # undef IPOPT_RR
103 # undef IPOPT_SSRR
104 # ifndef _KERNEL
105 # define _KERNEL
106 # undef RES_INIT
107 # include <inet/common.h>
108 # include <inet/ip.h>
109 # include <inet/ip_ire.h>
110 # undef _KERNEL
111 # else /* _KERNEL */
112 # include <inet/common.h>
113 # include <inet/ip.h>
114 # include <inet/ip_ire.h>
115 # endif /* _KERNEL */
116 #endif /* SOLARIS */
117 #define IPMINLEN(i, h) ((i)->ip_len >= ((i)->ip_hl * 4 + sizeof(struct h)))
118
119 #ifndef IP_OFFMASK
120 #define IP_OFFMASK 0x1fff
121 #endif
122
123 #if BSD > 199306
124 # define USE_QUAD_T
125 # define U_QUAD_T u_quad_t
126 # define QUAD_T quad_t
127 #else /* BSD > 199306 */
128 # define U_QUAD_T u_long
129 # define QUAD_T long
130 #endif /* BSD > 199306 */
131
132 /*
133 * These operating systems already take care of the problem for us.
134 */
135 #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \
136 defined(__sgi)
137 typedef u_int32_t u_32_t;
138 #else
139 /*
140 * Really, any arch where sizeof(long) != sizeof(int).
141 */
142 # if defined(__alpha__) || defined(__alpha)
143 typedef unsigned int u_32_t;
144 # else
145 typedef unsigned long u_32_t;
146 # endif
147 #endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __sgi */
148
149 #ifndef MAX
150 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
151 #endif
152
153 /*
154 * Security Options for Intenet Protocol (IPSO) as defined in RFC 1108.
155 *
156 * Basic Option
157 *
158 * 00000001 - (Reserved 4)
159 * 00111101 - Top Secret
160 * 01011010 - Secret
161 * 10010110 - Confidential
162 * 01100110 - (Reserved 3)
163 * 11001100 - (Reserved 2)
164 * 10101011 - Unclassified
165 * 11110001 - (Reserved 1)
166 */
167 #define IPSO_CLASS_RES4 0x01
168 #define IPSO_CLASS_TOPS 0x3d
169 #define IPSO_CLASS_SECR 0x5a
170 #define IPSO_CLASS_CONF 0x96
171 #define IPSO_CLASS_RES3 0x66
172 #define IPSO_CLASS_RES2 0xcc
173 #define IPSO_CLASS_UNCL 0xab
174 #define IPSO_CLASS_RES1 0xf1
175
176 #define IPSO_AUTH_GENSER 0x80
177 #define IPSO_AUTH_ESI 0x40
178 #define IPSO_AUTH_SCI 0x20
179 #define IPSO_AUTH_NSA 0x10
180 #define IPSO_AUTH_DOE 0x08
181 #define IPSO_AUTH_UN 0x06
182 #define IPSO_AUTH_FTE 0x01
183
184 /*
185 * IP option #defines
186 */
187 /*#define IPOPT_RR 7 */
188 #define IPOPT_ZSU 10 /* ZSU */
189 #define IPOPT_MTUP 11 /* MTUP */
190 #define IPOPT_MTUR 12 /* MTUR */
191 #define IPOPT_ENCODE 15 /* ENCODE */
192 /*#define IPOPT_TS 68 */
193 #define IPOPT_TR 82 /* TR */
194 /*#define IPOPT_SECURITY 130 */
195 /*#define IPOPT_LSRR 131 */
196 #define IPOPT_E_SEC 133 /* E-SEC */
197 #define IPOPT_CIPSO 134 /* CIPSO */
198 /*#define IPOPT_SATID 136 */
199 #ifndef IPOPT_SID
200 # define IPOPT_SID IPOPT_SATID
201 #endif
202 /*#define IPOPT_SSRR 137 */
203 #define IPOPT_ADDEXT 147 /* ADDEXT */
204 #define IPOPT_VISA 142 /* VISA */
205 #define IPOPT_IMITD 144 /* IMITD */
206 #define IPOPT_EIP 145 /* EIP */
207 #define IPOPT_FINN 205 /* FINN */
208
209
210 #if defined(__FreeBSD__) && defined(KERNEL)
211 # if __FreeBSD__ < 3
212 # include <machine/spl.h>
213 # endif
214 # if defined(IPFILTER_LKM) && !defined(ACTUALLY_LKM_NOT_KERNEL)
215 # define ACTUALLY_LKM_NOT_KERNEL
216 # endif
217 #endif /* __FreeBSD__ && KERNEL */
218
219 /*
220 * Build some macros and #defines to enable the same code to compile anywhere
221 * Well, that's the idea, anyway :-)
222 */
223 #if KERNEL
224 # if SOLARIS
225 # define MUTEX_ENTER(x) mutex_enter(x)
226 # define MUTEX_EXIT(x) mutex_exit(x)
227 # define MTOD(m,t) (t)((m)->b_rptr)
228 # define IRCOPY(a,b,c) copyin((a), (b), (c))
229 # define IWCOPY(a,b,c) copyout((a), (b), (c))
230 # define FREE_MB_T(m) freemsg(m)
231 # define SPL_NET(x) ;
232 # define SPL_IMP(x) ;
233 # undef SPL_X
234 # define SPL_X(x) ;
235 # ifdef sparc
236 # define ntohs(x) (x)
237 # define ntohl(x) (x)
238 # define htons(x) (x)
239 # define htonl(x) (x)
240 # endif /* sparc */
241 # define KMALLOC(a,b,c) (a) = (b)kmem_alloc((c), KM_NOSLEEP)
242 # define GET_MINOR(x) getminor(x)
243 typedef struct qif {
244 struct qif *qf_next;
245 ill_t *qf_ill;
246 kmutex_t qf_lock;
247 void *qf_iptr;
248 void *qf_optr;
249 queue_t *qf_in;
250 queue_t *qf_out;
251 struct qinit *qf_wqinfo;
252 struct qinit *qf_rqinfo;
253 struct qinit qf_wqinit;
254 struct qinit qf_rqinit;
255 mblk_t *qf_m; /* These three fields are for passing data up from */
256 queue_t *qf_q; /* fr_qin and fr_qout to the packet processing. */
257 int qf_off;
258 int qf_len; /* this field is used for in ipfr_fastroute */
259 char qf_name[8];
260 /*
261 * in case the ILL has disappeared...
262 */
263 int qf_hl; /* header length */
264 } qif_t;
265 extern ill_t *get_unit __P((char *));
266 # define GETUNIT(n) get_unit((n))
267 # else /* SOLARIS */
268 # if defined(__sgi)
269 # include <sys/ksynch.h>
270 # define IPF_LOCK_PL plhi
271 # include <sys/sema.h>
272 #undef kmutex_t
273 typedef struct {
274 lock_t *l;
275 int pl;
276 } kmutex_t;
277 # define MUTEX_ENTER(x) (x)->pl = LOCK((x)->l, IPF_LOCK_PL);
278 # define MUTEX_EXIT(x) UNLOCK((x)->l, (x)->pl);
279 # else /* __sgi */
280 # define MUTEX_ENTER(x) ;
281 # define MUTEX_EXIT(x) ;
282 # endif /* __sgi */
283 # ifndef linux
284 # define FREE_MB_T(m) m_freem(m)
285 # define MTOD(m,t) mtod(m,t)
286 # define IRCOPY(a,b,c) bcopy((a), (b), (c))
287 # define IWCOPY(a,b,c) bcopy((a), (b), (c))
288 # endif /* !linux */
289 # endif /* SOLARIS */
290
291 # ifdef sun
292 # if !SOLARIS
293 # include <sys/kmem_alloc.h>
294 # define GETUNIT(n) ifunit((n), IFNAMSIZ)
295 # endif
296 # else
297 # ifndef linux
298 # define GETUNIT(n) ifunit((n))
299 # endif
300 # endif /* sun */
301
302 # if defined(sun) && !defined(linux) || defined(__sgi)
303 # define UIOMOVE(a,b,c,d) uiomove((caddr_t)a,b,c,d)
304 # define SLEEP(id, n) sleep((id), PZERO+1)
305 # define WAKEUP(id) wakeup(id)
306 # define KFREE(x) kmem_free((char *)(x), sizeof(*(x)))
307 # define KFREES(x,s) kmem_free((char *)(x), (s))
308 # if !SOLARIS
309 extern void m_copydata __P((struct mbuf *, int, int, caddr_t));
310 extern void m_copyback __P((struct mbuf *, int, int, caddr_t));
311 # endif
312 # ifdef __sgi
313 # include <sys/kmem.h>
314 # include <sys/ddi.h>
315 # define KMALLOC(a,b,c) (a) = (b)kmem_alloc((c), KM_NOSLEEP)
316 # define GET_MINOR(x) getminor(x)
317 # else
318 # if !SOLARIS
319 # define KMALLOC(a,b,c) (a) = (b)new_kmem_alloc((c), KMEM_NOSLEEP)
320 # endif /* SOLARIS */
321 # endif /* __sgi */
322 # endif /* sun && !linux */
323 # ifndef GET_MINOR
324 # define GET_MINOR(x) minor(x)
325 # endif
326 # if (BSD >= 199306) || defined(__FreeBSD__)
327 # include <vm/vm.h>
328 # if !defined(__FreeBSD__) || (defined (__FreeBSD__) && __FreeBSD__>=3)
329 # include <vm/vm_extern.h>
330 # include <sys/proc.h>
331 extern vm_map_t kmem_map;
332 # else /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD__>=3) */
333 # include <vm/vm_kern.h>
334 # endif /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD__>=3) */
335 # ifdef M_PFIL
336 # define KMALLOC(a, b, c) MALLOC((a), b, (c), M_PFIL, M_NOWAIT)
337 # define KFREE(x) FREE((x), M_PFIL)
338 # define KFREES(x,s) FREE((x), M_PFIL)
339 # else
340 # define KMALLOC(a, b, c) MALLOC((a), b, (c), M_TEMP, M_NOWAIT)
341 # define KFREE(x) FREE((x), M_TEMP)
342 # define KFREES(x,s) FREE((x), M_TEMP)
343 # endif /* M_PFIL */
344 # define UIOMOVE(a,b,c,d) uiomove(a,b,d)
345 # define SLEEP(id, n) tsleep((id), PPAUSE|PCATCH, n, 0)
346 # define WAKEUP(id) wakeup(id)
347 # endif /* BSD */
348 # if defined(NetBSD) && NetBSD <= 1991011 && NetBSD >= 199407
349 # define SPL_NET(x) x = splsoftnet()
350 # define SPL_X(x) (void) splx(x)
351 # else
352 # if !SOLARIS && !defined(linux)
353 # define SPL_IMP(x) x = splimp()
354 # define SPL_NET(x) x = splnet()
355 # define SPL_X(x) (void) splx(x)
356 # endif
357 # endif /* NetBSD && NetBSD <= 1991011 && NetBSD >= 199407 */
358 # define PANIC(x,y) if (x) panic y
359 #else /* KERNEL */
360 # define SLEEP(x,y) ;
361 # define WAKEUP(x) ;
362 # define PANIC(x,y) ;
363 # define MUTEX_ENTER(x) ;
364 # define MUTEX_EXIT(x) ;
365 # define SPL_NET(x) ;
366 # define SPL_IMP(x) ;
367 # undef SPL_X
368 # define SPL_X(x) ;
369 /*# define KMALLOC(a,b,c) (a) = (b)malloc(c) */
370 # define KFREE(x) FREE(x)
371 # define KFREES(x,s) FREE(x)
372 # define GETUNIT(x) get_unit(x)
373 # define IRCOPY(a,b,c) bcopy((a), (b), (c))
374 # define IWCOPY(a,b,c) bcopy((a), (b), (c))
375 #endif /* KERNEL */
376
377 #if SOLARIS
378 typedef mblk_t mb_t;
379 #else
380 # ifdef linux
381 typedef struct sk_buff mb_t;
382 # else
383 typedef struct mbuf mb_t;
384 # endif
385 #endif /* SOLARIS */
386
387 #if defined(linux) || defined(__sgi)
388 /*
389 * These #ifdef's are here mainly for linux, but who knows, they may
390 * not be in other places or maybe one day linux will grow up and some
391 * of these will turn up there too.
392 */
393 #ifndef ICMP_MINLEN
394 # define ICMP_MINLEN 8
395 #endif
396 #ifndef ICMP_UNREACH
397 # define ICMP_UNREACH ICMP_DEST_UNREACH
398 #endif
399 #ifndef ICMP_SOURCEQUENCH
400 # define ICMP_SOURCEQUENCH ICMP_SOURCE_QUENCH
401 #endif
402 #ifndef ICMP_TIMXCEED
403 # define ICMP_TIMXCEED ICMP_TIME_EXCEEDED
404 #endif
405 #ifndef ICMP_PARAMPROB
406 # define ICMP_PARAMPROB ICMP_PARAMETERPROB
407 #endif
408 #ifndef ICMP_TSTAMP
409 # define ICMP_TSTAMP ICMP_TIMESTAMP
410 #endif
411 #ifndef ICMP_TSTAMPREPLY
412 # define ICMP_TSTAMPREPLY ICMP_TIMESTAMPREPLY
413 #endif
414 #ifndef ICMP_IREQ
415 # define ICMP_IREQ ICMP_INFO_REQUEST
416 #endif
417 #ifndef ICMP_IREQREPLY
418 # define ICMP_IREQREPLY ICMP_INFO_REPLY
419 #endif
420 #ifndef ICMP_MASKREQ
421 # define ICMP_MASKREQ ICMP_ADDRESS
422 #endif
423 #ifndef ICMP_MASKREPLY
424 # define ICMP_MASKREPLY ICMP_ADDRESSREPLY
425 #endif
426 #ifndef IPVERSION
427 # define IPVERSION 4
428 #endif
429 #ifndef IPOPT_MINOFF
430 # define IPOPT_MINOFF 4
431 #endif
432 #ifndef IPOPT_COPIED
433 # define IPOPT_COPIED(x) ((x)&0x80)
434 #endif
435 #ifndef IPOPT_EOL
436 # define IPOPT_EOL 0
437 #endif
438 #ifndef IPOPT_NOP
439 # define IPOPT_NOP 1
440 #endif
441 #ifndef IP_MF
442 # define IP_MF ((u_short)0x2000)
443 #endif
444 #ifndef ETHERTYPE_IP
445 # define ETHERTYPE_IP ((u_short)0x0800)
446 #endif
447 #ifndef TH_FIN
448 # define TH_FIN 0x01
449 #endif
450 #ifndef TH_SYN
451 # define TH_SYN 0x02
452 #endif
453 #ifndef TH_RST
454 # define TH_RST 0x04
455 #endif
456 #ifndef TH_PUSH
457 # define TH_PUSH 0x08
458 #endif
459 #ifndef TH_ACK
460 # define TH_ACK 0x10
461 #endif
462 #ifndef TH_URG
463 # define TH_URG 0x20
464 #endif
465 #ifndef IPOPT_EOL
466 # define IPOPT_EOL 0
467 #endif
468 #ifndef IPOPT_NOP
469 # define IPOPT_NOP 1
470 #endif
471 #ifndef IPOPT_RR
472 # define IPOPT_RR 7
473 #endif
474 #ifndef IPOPT_TS
475 # define IPOPT_TS 68
476 #endif
477 #ifndef IPOPT_SECURITY
478 # define IPOPT_SECURITY 130
479 #endif
480 #ifndef IPOPT_LSRR
481 # define IPOPT_LSRR 131
482 #endif
483 #ifndef IPOPT_SATID
484 # define IPOPT_SATID 136
485 #endif
486 #ifndef IPOPT_SSRR
487 # define IPOPT_SSRR 137
488 #endif
489 #ifndef IPOPT_SECUR_UNCLASS
490 # define IPOPT_SECUR_UNCLASS ((u_short)0x0000)
491 #endif
492 #ifndef IPOPT_SECUR_CONFID
493 # define IPOPT_SECUR_CONFID ((u_short)0xf135)
494 #endif
495 #ifndef IPOPT_SECUR_EFTO
496 # define IPOPT_SECUR_EFTO ((u_short)0x789a)
497 #endif
498 #ifndef IPOPT_SECUR_MMMM
499 # define IPOPT_SECUR_MMMM ((u_short)0xbc4d)
500 #endif
501 #ifndef IPOPT_SECUR_RESTR
502 # define IPOPT_SECUR_RESTR ((u_short)0xaf13)
503 #endif
504 #ifndef IPOPT_SECUR_SECRET
505 # define IPOPT_SECUR_SECRET ((u_short)0xd788)
506 #endif
507 #ifndef IPOPT_SECUR_TOPSECRET
508 # define IPOPT_SECUR_TOPSECRET ((u_short)0x6bc5)
509 #endif
510 #ifndef IPOPT_OLEN
511 # define IPOPT_OLEN 1
512 #endif
513 #endif /* linux || __sgi */
514
515 #ifdef linux
516 /*
517 * TCP States
518 */
519 #define TCPS_CLOSED 0 /* closed */
520 #define TCPS_LISTEN 1 /* listening for connection */
521 #define TCPS_SYN_SENT 2 /* active, have sent syn */
522 #define TCPS_SYN_RECEIVED 3 /* have send and received syn */
523 /* states < TCPS_ESTABLISHED are those where connections not established */
524 #define TCPS_ESTABLISHED 4 /* established */
525 #define TCPS_CLOSE_WAIT 5 /* rcvd fin, waiting for close */
526 /* states > TCPS_CLOSE_WAIT are those where user has closed */
527 #define TCPS_FIN_WAIT_1 6 /* have closed, sent fin */
528 #define TCPS_CLOSING 7 /* closed xchd FIN; await FIN ACK */
529 #define TCPS_LAST_ACK 8 /* had fin and close; await FIN ACK */
530 /* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
531 #define TCPS_FIN_WAIT_2 9 /* have closed, fin is acked */
532 #define TCPS_TIME_WAIT 10 /* in 2*msl quiet wait after close */
533
534 /*
535 * file flags.
536 */
537 #define FWRITE WRITE
538 #define FREAD READ
539 /*
540 * mbuf related problems.
541 */
542 #define mtod(m,t) (t)((m)->data)
543 #define m_len len
544 #define m_next next
545
546 #define IP_DF 0x8000
547
548 typedef struct {
549 __u16 th_sport;
550 __u16 th_dport;
551 __u32 th_seq;
552 __u32 th_ack;
553 # if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
554 defined(vax)
555 __u8 th_res:4;
556 __u8 th_off:4;
557 #else
558 __u8 th_off:4;
559 __u8 th_res:4;
560 #endif
561 __u8 th_flags;
562 __u16 th_win;
563 __u16 th_sum;
564 __u16 th_urp;
565 } tcphdr_t;
566
567 typedef struct {
568 __u16 uh_sport;
569 __u16 uh_dport;
570 __u16 uh_ulen;
571 __u16 uh_sum;
572 } udphdr_t;
573
574 typedef struct {
575 # if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
576 defined(vax)
577 __u8 ip_hl:4;
578 __u8 ip_v:4;
579 # else
580 __u8 ip_hl:4;
581 __u8 ip_v:4;
582 # endif
583 __u8 ip_tos;
584 __u16 ip_len;
585 __u16 ip_id;
586 __u16 ip_off;
587 __u8 ip_ttl;
588 __u8 ip_p;
589 __u16 ip_sum;
590 struct in_addr ip_src;
591 struct in_addr ip_dst;
592 } ip_t;
593
594 /*
595 * Structure of an icmp header.
596 */
597 typedef struct icmp {
598 u_char icmp_type; /* type of message, see below */
599 u_char icmp_code; /* type sub code */
600 u_short icmp_cksum; /* ones complement cksum of struct */
601 union {
602 u_char ih_pptr; /* ICMP_PARAMPROB */
603 struct in_addr ih_gwaddr; /* ICMP_REDIRECT */
604 struct ih_idseq {
605 n_short icd_id;
606 n_short icd_seq;
607 } ih_idseq;
608 int ih_void;
609 } icmp_hun;
610 # define icmp_pptr icmp_hun.ih_pptr
611 # define icmp_gwaddr icmp_hun.ih_gwaddr
612 # define icmp_id icmp_hun.ih_idseq.icd_id
613 # define icmp_seq icmp_hun.ih_idseq.icd_seq
614 # define icmp_void icmp_hun.ih_void
615 union {
616 struct id_ts {
617 n_time its_otime;
618 n_time its_rtime;
619 n_time its_ttime;
620 } id_ts;
621 struct id_ip {
622 ip_t idi_ip;
623 /* options and then 64 bits of data */
624 } id_ip;
625 u_long id_mask;
626 char id_data[1];
627 } icmp_dun;
628 # define icmp_otime icmp_dun.id_ts.its_otime
629 # define icmp_rtime icmp_dun.id_ts.its_rtime
630 # define icmp_ttime icmp_dun.id_ts.its_ttime
631 # define icmp_ip icmp_dun.id_ip.idi_ip
632 # define icmp_mask icmp_dun.id_mask
633 # define icmp_data icmp_dun.id_data
634 } icmphdr_t;
635
636 # ifndef LINUX_IPOVLY
637 # define LINUX_IPOVLY
638 struct ipovly {
639 caddr_t ih_next, ih_prev; /* for protocol sequence q's */
640 u_char ih_x1; /* (unused) */
641 u_char ih_pr; /* protocol */
642 short ih_len; /* protocol length */
643 struct in_addr ih_src; /* source internet address */
644 struct in_addr ih_dst; /* destination internet address */
645 };
646 # endif
647
648 typedef struct {
649 __u8 ether_dhost[6];
650 __u8 ether_shost[6];
651 __u16 ether_type;
652 } ether_header_t;
653
654 typedef struct uio {
655 int uio_resid;
656 int uio_rw;
657 caddr_t uio_buf;
658 } uio_t;
659
660 # define UIO_READ 0
661 # define UIO_WRITE 1
662 # define UIOMOVE(a, b, c, d) uiomove(a,b,c,d)
663
664 /*
665 * For masking struct ifnet onto struct device
666 */
667 # define if_name name
668
669 # ifdef KERNEL
670 # define GETUNIT(x) dev_get(x)
671 # define FREE_MB_T(m) kfree_skb(m, FREE_WRITE)
672 # define uniqtime do_gettimeofday
673 # undef INT_MAX
674 # undef UINT_MAX
675 # undef LONG_MAX
676 # undef ULONG_MAX
677 # include <linux/netdevice.h>
678 # define SPL_X(x)
679 # define SPL_NET(x)
680 # define SPL_IMP(x)
681
682 # define bcmp(a,b,c) memcmp(a,b,c)
683 # define bcopy(a,b,c) memcpy(b,a,c)
684 # define bzero(a,c) memset(a,0,c)
685
686 # define UNITNAME(n) dev_get((n))
687
688 # define KMALLOC(a,b,c) (a) = (b)kmalloc((c), GFP_ATOMIC)
689 # define KFREE(x) kfree_s((x), sizeof(*(x)))
690 # define KFREES(x,s) kfree_s((x), (s))
691 # define IRCOPY(a,b,c) { \
692 error = verify_area(VERIFY_READ, (a) ,(c)); \
693 if (!error) \
694 memcpy_fromfs((b), (a), (c)); \
695 }
696 # define IWCOPY(a,b,c) { \
697 error = verify_area(VERIFY_WRITE, (b), (c)); \
698 if (!error) \
699 memcpy_tofs((b), (a), (c)); \
700 }
701 # else
702 # define __KERNEL__
703 # undef INT_MAX
704 # undef UINT_MAX
705 # undef LONG_MAX
706 # undef ULONG_MAX
707 # define s8 __s8
708 # define u8 __u8
709 # define s16 __s16
710 # define u16 __u16
711 # define s32 __s32
712 # define u32 __u32
713 # include <linux/netdevice.h>
714 # undef __KERNEL__
715 # endif
716 # define ifnet device
717 #else
718 typedef struct tcphdr tcphdr_t;
719 typedef struct udphdr udphdr_t;
720 typedef struct icmp icmphdr_t;
721 typedef struct ip ip_t;
722 typedef struct ether_header ether_header_t;
723 #endif /* linux */
724 typedef struct tcpiphdr tcpiphdr_t;
725
726 #if defined(hpux) || defined(linux)
727 struct ether_addr {
728 char ether_addr_octet[6];
729 };
730 #endif
731
732 /*
733 * XXX - This is one of those *awful* hacks which nobody likes
734 */
735 #ifdef ultrix
736 #define A_A
737 #else
738 #define A_A &
739 #endif
740
741 #ifndef ICMP_ROUTERADVERT
742 # define ICMP_ROUTERADVERT 9
743 #endif
744 #ifndef ICMP_ROUTERSOLICIT
745 # define ICMP_ROUTERSOLICIT 10
746 #endif
747
748 #endif /* __IP_COMPAT_H__ */
749
750 #endif /* #if 0 */