|
|
1.1 ! root 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.