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