ip_compat.h revision 146277
150276Speter/* $FreeBSD: head/sys/contrib/ipfilter/netinet/ip_compat.h 146277 2005-05-16 16:22:55Z darrenr $ */ 2262685Sdelphij 350276Speter/* 450276Speter * Copyright (C) 1993-2001, 2003 by Darren Reed. 550276Speter * 650276Speter * See the IPFILTER.LICENCE file for details on licencing. 750276Speter * 850276Speter * @(#)ip_compat.h 1.8 1/14/96 950276Speter * $FreeBSD: head/sys/contrib/ipfilter/netinet/ip_compat.h 146277 2005-05-16 16:22:55Z darrenr $ 1050276Speter * Id: ip_compat.h,v 2.142.2.25 2005/03/28 09:33:36 darrenr Exp 1150276Speter */ 1250276Speter 1350276Speter#ifndef __IP_COMPAT_H__ 1450276Speter#define __IP_COMPAT_H__ 1550276Speter 1650276Speter#ifndef __P 1750276Speter# ifdef __STDC__ 1850276Speter# define __P(x) x 1950276Speter# else 2050276Speter# define __P(x) () 2150276Speter# endif 2250276Speter#endif 2350276Speter#ifndef __STDC__ 2450276Speter# undef const 2550276Speter# define const 2650276Speter#endif 2750276Speter 2850276Speter#if defined(_KERNEL) || defined(KERNEL) || defined(__KERNEL__) 2950276Speter# undef KERNEL 30166124Srafan# undef _KERNEL 3150276Speter# undef __KERNEL__ 32166124Srafan# define KERNEL 3350276Speter# define _KERNEL 3450276Speter# define __KERNEL__ 35262685Sdelphij#endif 3650276Speter 3750276Speter#ifndef SOLARIS 3850276Speter#define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4))) 39166124Srafan#endif 4050276Speter#if SOLARIS2 >= 8 4150276Speter# ifndef USE_INET6 4250276Speter# define USE_INET6 4350276Speter# endif 4450276Speter#endif 45166124Srafan#if defined(__FreeBSD_version) && (__FreeBSD_version >= 400000) && \ 4650276Speter !defined(_KERNEL) && !defined(USE_INET6) && !defined(NOINET6) 4750276Speter# define USE_INET6 4850276Speter#endif 4950276Speter#if defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 105000000) && \ 5050276Speter !defined(_KERNEL) && !defined(USE_INET6) 5150276Speter# define USE_INET6 5250276Speter# define IPFILTER_M_IPFILTER 5350276Speter#endif 5450276Speter#if defined(OpenBSD) && (OpenBSD >= 200206) && \ 5550276Speter !defined(_KERNEL) && !defined(USE_INET6) 56166124Srafan# define USE_INET6 5750276Speter#endif 58166124Srafan#if defined(__osf__) 5950276Speter# define USE_INET6 6050276Speter#endif 61166124Srafan#if defined(linux) && (!defined(_KERNEL) || defined(CONFIG_IPV6)) 6250276Speter# define USE_INET6 6350276Speter#endif 6450276Speter#if defined(HPUXREV) && (HPUXREV >= 1111) 6550276Speter# define USE_INET6 6650276Speter#endif 6750276Speter 6850276Speter#if defined(BSD) && (BSD < 199103) && defined(__osf__) 6950276Speter# undef BSD 7050276Speter# define BSD 199103 7150276Speter#endif 7250276Speter 7350276Speter#if defined(__SVR4) || defined(__svr4__) || defined(__sgi) 7450276Speter# define index strchr 7550276Speter# if !defined(_KERNEL) 7650276Speter# define bzero(a,b) memset(a,0,b) 7750276Speter# define bcmp memcmp 7850276Speter# define bcopy(a,b,c) memmove(b,a,c) 7950276Speter# endif 8050276Speter#endif 8150276Speter 82166124Srafan#ifndef LIFNAMSIZ 8350276Speter# ifdef IF_NAMESIZE 8450276Speter# define LIFNAMSIZ IF_NAMESIZE 8550276Speter# else 86166124Srafan# ifdef IFNAMSIZ 8750276Speter# define LIFNAMSIZ IFNAMSIZ 8850276Speter# else 8950276Speter# define LIFNAMSIZ 16 90166124Srafan# endif 9150276Speter# endif 9250276Speter#endif 9350276Speter 94166124Srafan#if defined(__sgi) || defined(bsdi) || defined(__hpux) || defined(hpux) 9550276Speterstruct ether_addr { 96166124Srafan u_char ether_addr_octet[6]; 9750276Speter}; 9850276Speter#endif 9950276Speter 10050276Speter#if defined(__sgi) && !defined(IPFILTER_LKM) 101166124Srafan# ifdef __STDC__ 102166124Srafan# define IPL_EXTERN(ep) ipfilter##ep 103166124Srafan# else 104166124Srafan# define IPL_EXTERN(ep) ipfilter/**/ep 105166124Srafan# endif 106166124Srafan#else 107166124Srafan# ifdef __STDC__ 108166124Srafan# define IPL_EXTERN(ep) ipl##ep 109166124Srafan# else 110166124Srafan# define IPL_EXTERN(ep) ipl/**/ep 111166124Srafan# endif 112166124Srafan#endif 11350276Speter 11450276Speter/* 11550276Speter * This is a workaround for <sys/uio.h> troubles on FreeBSD and OpenBSD. 116166124Srafan */ 117166124Srafan#ifndef linux 118166124Srafan# ifndef _KERNEL 11950276Speter# define ADD_KERNEL 12050276Speter# define _KERNEL 121166124Srafan# define KERNEL 12250276Speter# endif 12350276Speter# ifdef __OpenBSD__ 12450276Speterstruct file; 12550276Speter# endif 12650276Speter# include <sys/uio.h> 12750276Speter# ifdef ADD_KERNEL 12850276Speter# undef _KERNEL 12950276Speter# undef KERNEL 13050276Speter# endif 13150276Speter#endif 13250276Speter 13350276Speter 13450276Speter/* ----------------------------------------------------------------------- */ 13550276Speter/* S O L A R I S */ 13650276Speter/* ----------------------------------------------------------------------- */ 13750276Speter#if SOLARIS 13850276Speter# define MENTAT 1 13950276Speter# include <sys/cmn_err.h> 14050276Speter# include <sys/isa_defs.h> 14150276Speter# include <sys/stream.h> 14250276Speter# include <sys/ioccom.h> 14350276Speter# include <sys/sysmacros.h> 14450276Speter# include <sys/kmem.h> 14550276Speter# if SOLARIS2 >= 10 14650276Speter# include <sys/procset.h> 14750276Speter# include <sys/proc.h> 14850276Speter# include <sys/devops.h> 14950276Speter# include <sys/ddi_impldefs.h> 15050276Speter# endif 15150276Speter/* 15250276Speter * because Solaris 2 defines these in two places :-/ 15350276Speter */ 15450276Speter# ifndef KERNEL 15550276Speter# define _KERNEL 15650276Speter# undef RES_INIT 15750276Speter# endif /* _KERNEL */ 15850276Speter 15950276Speter# if SOLARIS2 >= 8 16050276Speter# include <netinet/ip6.h> 16150276Speter# include <netinet/icmp6.h> 16250276Speter# endif 16350276Speter 16450276Speter# include <inet/common.h> 165166124Srafan/* These 5 are defined in <inet/ip.h> and <netinet/ip.h> */ 16650276Speter# undef IPOPT_EOL 16750276Speter# undef IPOPT_NOP 16850276Speter# undef IPOPT_LSRR 16950276Speter# undef IPOPT_RR 17050276Speter# undef IPOPT_SSRR 17150276Speter# ifdef i386 17250276Speter# define _SYS_PROMIF_H 17350276Speter# endif 17450276Speter# include <inet/ip.h> 175262685Sdelphij# undef COPYOUT 17650276Speter# include <inet/ip_ire.h> 17750276Speter# ifndef KERNEL 17850276Speter# undef _KERNEL 17950276Speter# endif 18050276Speter# if SOLARIS2 >= 8 18150276Speter# define SNPRINTF snprintf 18250276Speter 183262685Sdelphij# include <inet/ip_if.h> 18450276Speter# define ipif_local_addr ipif_lcl_addr 18550276Speter/* Only defined in private include file */ 18650276Speter# ifndef V4_PART_OF_V6 18750276Speter# define V4_PART_OF_V6(v6) v6.s6_addr32[3] 18850276Speter# endif 18950276Speterstruct ip6_ext { 190262685Sdelphij u_char ip6e_nxt; 191262685Sdelphij u_char ip6e_len; 19250276Speter}; 19350276Speter# endif /* SOLARIS2 >= 8 */ 19450276Speter 19550276Speter# if SOLARIS2 >= 6 19650276Speter# include <sys/atomic.h> 197262685Sdelphijtypedef uint32_t u_32_t; 19850276Speter# else 19950276Spetertypedef unsigned int u_32_t; 20050276Speter# endif 20150276Speter# define U_32_T 1 20250276Speter 20350276Speter# ifdef _KERNEL 20450276Speter# define KRWLOCK_T krwlock_t 20550276Speter# define KMUTEX_T kmutex_t 20650276Speter# include "qif.h" 207166124Srafan# include "pfil.h" 208166124Srafan# if SOLARIS2 >= 6 209166124Srafan# if SOLARIS2 == 6 210166124Srafan# define ATOMIC_INCL(x) atomic_add_long((uint32_t*)&(x), 1) 211166124Srafan# define ATOMIC_DECL(x) atomic_add_long((uint32_t*)&(x), -1) 212166124Srafan# else 213166124Srafan# define ATOMIC_INCL(x) atomic_add_long(&(x), 1) 214166124Srafan# define ATOMIC_DECL(x) atomic_add_long(&(x), -1) 215166124Srafan# endif /* SOLARIS2 == 6 */ 216166124Srafan# define ATOMIC_INC64(x) atomic_add_64((uint64_t*)&(x), 1) 217166124Srafan# define ATOMIC_INC32(x) atomic_add_32((uint32_t*)&(x), 1) 218166124Srafan# define ATOMIC_INC16(x) atomic_add_16((uint16_t*)&(x), 1) 219166124Srafan# define ATOMIC_DEC64(x) atomic_add_64((uint64_t*)&(x), -1) 220166124Srafan# define ATOMIC_DEC32(x) atomic_add_32((uint32_t*)&(x), -1) 221166124Srafan# define ATOMIC_DEC16(x) atomic_add_16((uint16_t*)&(x), -1) 222166124Srafan# else 223166124Srafan# define ATOMIC_INC(x) { mutex_enter(&ipf_rw); (x)++; \ 224166124Srafan mutex_exit(&ipf_rw); } 225166124Srafan# define ATOMIC_DEC(x) { mutex_enter(&ipf_rw); (x)--; \ 226166124Srafan mutex_exit(&ipf_rw); } 227166124Srafan# endif /* SOLARIS2 >= 6 */ 228166124Srafan# define USE_MUTEXES 229166124Srafan# define MUTEX_ENTER(x) mutex_enter(&(x)->ipf_lk) 230166124Srafan# define READ_ENTER(x) rw_enter(&(x)->ipf_lk, RW_READER) 231166124Srafan# define WRITE_ENTER(x) rw_enter(&(x)->ipf_lk, RW_WRITER) 232166124Srafan# define MUTEX_DOWNGRADE(x) rw_downgrade(&(x)->ipf_lk) 233166124Srafan# define RWLOCK_INIT(x, y) rw_init(&(x)->ipf_lk, (y), \ 234166124Srafan RW_DRIVER, NULL) 235166124Srafan# define RWLOCK_EXIT(x) rw_exit(&(x)->ipf_lk) 236166124Srafan# define RW_DESTROY(x) rw_destroy(&(x)->ipf_lk) 237166124Srafan# define MUTEX_INIT(x, y) mutex_init(&(x)->ipf_lk, (y), \ 238166124Srafan MUTEX_DRIVER, NULL) 239166124Srafan# define MUTEX_DESTROY(x) mutex_destroy(&(x)->ipf_lk) 240166124Srafan# define MUTEX_NUKE(x) bzero((x), sizeof(*(x))) 241166124Srafan# define MUTEX_EXIT(x) mutex_exit(&(x)->ipf_lk) 242166124Srafan# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 243166124Srafan# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 244166124Srafan# define BCOPYIN(a,b,c) (void) copyin((caddr_t)(a), (caddr_t)(b), (c)) 245166124Srafan# define BCOPYOUT(a,b,c) (void) copyout((caddr_t)(a), (caddr_t)(b), (c)) 246166124Srafan# define UIOMOVE(a,b,c,d) uiomove((caddr_t)a,b,c,d) 247166124Srafan# define KFREE(x) kmem_free((char *)(x), sizeof(*(x))) 248166124Srafan# define KFREES(x,s) kmem_free((char *)(x), (s)) 249166124Srafan# define SPL_NET(x) ; 250166124Srafan# define SPL_IMP(x) ; 251166124Srafan# undef SPL_X 252166124Srafan# define SPL_X(x) ; 253166124Srafan# ifdef sparc 254166124Srafan# define ntohs(x) (x) 255166124Srafan# define ntohl(x) (x) 256166124Srafan# define htons(x) (x) 257166124Srafan# define htonl(x) (x) 258166124Srafan# endif /* sparc */ 259166124Srafan# define KMALLOC(a,b) (a) = (b)kmem_alloc(sizeof(*(a)), KM_NOSLEEP) 260166124Srafan# define KMALLOCS(a,b,c) (a) = (b)kmem_alloc((c), KM_NOSLEEP) 261166124Srafan# define GET_MINOR(x) getminor(x) 262166124Srafanextern void *get_unit __P((char *, int)); 263166124Srafan# define GETIFP(n, v) get_unit(n, v) 264166124Srafan# define IFNAME(x) ((qif_t *)x)->qf_name 265174993Srafan# define COPYIFNAME(x, b) \ 266174993Srafan (void) strncpy(b, ((qif_t *)x)->qf_name, \ 267166124Srafan LIFNAMSIZ) 268174993Srafan# define GETKTIME(x) uniqtime((struct timeval *)x) 269174993Srafan# define MSGDSIZE(x) msgdsize(x) 270174993Srafan# define M_LEN(x) ((x)->b_wptr - (x)->b_rptr) 271174993Srafan# define M_DUPLICATE(x) dupmsg((x)) 272174993Srafan# define MTOD(m,t) ((t)((m)->b_rptr)) 273174993Srafan# define MTYPE(m) ((m)->b_datap->db_type) 274174993Srafan# define FREE_MB_T(m) freemsg(m) 275174993Srafan# define m_next b_cont 276174993Srafan# define CACHE_HASH(x) (((qpktinfo_t *)(x)->fin_qpi)->qpi_num & 7) 277174993Srafan# define IPF_PANIC(x,y) if (x) { printf y; cmn_err(CE_PANIC, "ipf_panic"); } 278166124Srafantypedef mblk_t mb_t; 279166124Srafan# endif /* _KERNEL */ 280166124Srafan 281166124Srafan# if (SOLARIS2 >= 7) 282166124Srafan# ifdef lint 283166124Srafan# define ALIGN32(ptr) (ptr ? 0L : 0L) 284166124Srafan# define ALIGN16(ptr) (ptr ? 0L : 0L) 285166124Srafan# else 286166124Srafan# define ALIGN32(ptr) (ptr) 287166124Srafan# define ALIGN16(ptr) (ptr) 288166124Srafan# endif 289166124Srafan# endif 290166124Srafan 291166124Srafan# if SOLARIS2 < 6 292166124Srafantypedef struct uio uio_t; 293166124Srafan# endif 294166124Srafantypedef int ioctlcmd_t; 295166124Srafan 296166124Srafan# define OS_RECOGNISED 1 297166124Srafan 298166124Srafan#endif /* SOLARIS */ 299166124Srafan 300166124Srafan/* ----------------------------------------------------------------------- */ 301166124Srafan/* H P U X */ 302166124Srafan/* ----------------------------------------------------------------------- */ 303166124Srafan#ifdef __hpux 304166124Srafan# define MENTAT 1 305166124Srafan# include <sys/sysmacros.h> 306166124Srafan# include <sys/spinlock.h> 307166124Srafan# include <sys/lock.h> 308166124Srafan# include <sys/stream.h> 309166124Srafan# ifdef USE_INET6 310166124Srafan# include <netinet/if_ether.h> 311166124Srafan# include <netinet/ip6.h> 312166124Srafan# include <netinet/icmp6.h> 313166124Srafantypedef struct ip6_hdr ip6_t; 314166124Srafan# endif 315166124Srafan 316166124Srafan# ifdef _KERNEL 317166124Srafan# define SNPRINTF sprintf 318166124Srafan# if (HPUXREV >= 1111) 319166124Srafan# define IPL_SELECT 320166124Srafan# ifdef IPL_SELECT 321166124Srafan# include <machine/sys/user.h> 322166124Srafan# include <sys/kthread_iface.h> 323166124Srafan# define READ_COLLISION 0x01 324166124Srafan 325166124Srafantypedef struct iplog_select_s { 326166124Srafan kthread_t *read_waiter; 327166124Srafan int state; 328166124Srafan} iplog_select_t; 329166124Srafan# endif 330166124Srafan# endif 331166124Srafan 332166124Srafan# define GETKTIME(x) uniqtime((struct timeval *)x) 333166124Srafan 334166124Srafan# if HPUXREV == 1111 335166124Srafan# include "kern_svcs.h" 336166124Srafan# else 337166124Srafan# include <sys/kern_svcs.h> 338166124Srafan# endif 339166124Srafan# undef ti_flags 340166124Srafan# undef TCP_NODELAY 341166124Srafan# undef TCP_MAXSEG 342166124Srafan# include <sys/reg.h> 343166124Srafan# include "../netinet/ip_info.h" 344166124Srafan/* 345166124Srafan * According to /usr/include/sys/spinlock.h on HP-UX 11.00, these functions 346166124Srafan * are available. Attempting to use them actually results in unresolved 347166124Srafan * symbols when it comes time to load the module. 348166124Srafan * This has been fixed! Yipee! 349166124Srafan */ 350166124Srafan# if 1 351166124Srafan# ifdef __LP64__ 35250276Speter# define ATOMIC_INCL(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), 1) 353166124Srafan# define ATOMIC_DECL(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), -1) 35450276Speter# else 355166124Srafan# define ATOMIC_INCL(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), 1) 35650276Speter# define ATOMIC_DECL(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), -1) 35750276Speter# endif 35850276Speter# define ATOMIC_INC64(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), 1) 35950276Speter# define ATOMIC_INC32(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), 1) 36050276Speter# define ATOMIC_INC16(x) lock_and_incr_int16(&ipf_rw.ipf_lk, &(x), 1) 361166124Srafan# define ATOMIC_DEC64(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), -1) 362166124Srafan# define ATOMIC_DEC32(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), -1) 36350276Speter# define ATOMIC_DEC16(x) lock_and_incr_int16(&ipf_rw.ipf_lk, &(x), -1) 364166124Srafan# else /* 0 */ 365166124Srafan# define ATOMIC_INC64(x) { MUTEX_ENTER(&ipf_rw); (x)++; \ 36650276Speter MUTEX_EXIT(&ipf_rw); } 367166124Srafan# define ATOMIC_DEC64(x) { MUTEX_ENTER(&ipf_rw); (x)--; \ 368166124Srafan MUTEX_EXIT(&ipf_rw); } 36950276Speter# define ATOMIC_INC32(x) { MUTEX_ENTER(&ipf_rw); (x)++; \ 370166124Srafan MUTEX_EXIT(&ipf_rw); } 37150276Speter# define ATOMIC_DEC32(x) { MUTEX_ENTER(&ipf_rw); (x)--; \ 37250276Speter MUTEX_EXIT(&ipf_rw); } 37350276Speter# define ATOMIC_INCL(x) { MUTEX_ENTER(&ipf_rw); (x)++; \ 374166124Srafan MUTEX_EXIT(&ipf_rw); } 37550276Speter# define ATOMIC_DECL(x) { MUTEX_ENTER(&ipf_rw); (x)--; \ 376166124Srafan MUTEX_EXIT(&ipf_rw); } 37750276Speter# define ATOMIC_INC(x) { MUTEX_ENTER(&ipf_rw); (x)++; \ 37850276Speter MUTEX_EXIT(&ipf_rw); } 37950276Speter# define ATOMIC_DEC(x) { MUTEX_ENTER(&ipf_rw); (x)--; \ 380166124Srafan MUTEX_EXIT(&ipf_rw); } 38150276Speter# endif 38250276Speter# define ip_cksum ip_csuma 383166124Srafan# define memcpy(a,b,c) bcopy((caddr_t)b, (caddr_t)a, c) 384166124Srafan# define USE_MUTEXES 38550276Speter# define MUTEX_INIT(x, y) initlock(&(x)->ipf_lk, 0, 0, (y)) 386166124Srafan# define MUTEX_ENTER(x) spinlock(&(x)->ipf_lk) 387166124Srafan# define MUTEX_EXIT(x) spinunlock(&(x)->ipf_lk); 388166124Srafan# define MUTEX_DESTROY(x) 389166124Srafan# define MUTEX_NUKE(x) bzero((char *)(x), sizeof(*(x))) 39050276Speter# define KMUTEX_T lock_t 391166124Srafan# define kmutex_t lock_t /* for pfil.h */ 39250276Speter# define krwlock_t lock_t /* for pfil.h */ 39350276Speter/* 39450276Speter * The read-write lock implementation in HP-UX 11.0 is crippled - it can 395166124Srafan * only be used by threads working in a user context! 39650276Speter * This has been fixed! Yipee! (Or at least it does in 11.00, not 11.11..) 39750276Speter */ 398166124Srafan# if HPUXREV < 1111 39950276Speter# define MUTEX_DOWNGRADE(x) lock_write_to_read(x) 40050276Speter# define KRWLOCK_T struct rw_lock 40150276Speter# define READ_ENTER(x) lock_read(&(x)->ipf_lk) 40250276Speter# define WRITE_ENTER(x) lock_write(&(x)->ipf_lk) 403166124Srafan# if HPUXREV >= 1111 404166124Srafan# define RWLOCK_INIT(x, y) rwlock_init4(&(x)->ipf_lk, 0, RWLCK_CANSLEEP, 0, y) 40550276Speter# else 406166124Srafan# define RWLOCK_INIT(x, y) lock_init3(&(x)->ipf_lk, 0, 1, 0, 0, y) 407166124Srafan# endif 408166124Srafan# define RWLOCK_EXIT(x) lock_done(&(x)->ipf_lk) 409166124Srafan# else 410166124Srafan# define KRWLOCK_T lock_t 41150276Speter# define KMUTEX_T lock_t 412166124Srafan# define READ_ENTER(x) MUTEX_ENTER(x) 41350276Speter# define WRITE_ENTER(x) MUTEX_ENTER(x) 41450276Speter# define MUTEX_DOWNGRADE(x) 41550276Speter# define RWLOCK_INIT(x, y) initlock(&(x)->ipf_lk, 0, 0, y) 416166124Srafan# define RWLOCK_EXIT(x) MUTEX_EXIT(x) 41750276Speter# endif 41850276Speter# define RW_DESTROY(x) 419166124Srafan# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 42050276Speter# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 42150276Speter# if HPUXREV >= 1111 422166124Srafan# define BCOPYIN(a,b,c) 0; bcopy((caddr_t)(a), (caddr_t)(b), (c)) 42350276Speter# define BCOPYOUT(a,b,c) 0; bcopy((caddr_t)(a), (caddr_t)(b), (c)) 42450276Speter# else 425166124Srafan# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 426166124Srafan# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 42750276Speter# endif 428166124Srafan# define SPL_NET(x) ; 429166124Srafan# define SPL_IMP(x) ; 430166124Srafan# undef SPL_X 431166124Srafan# define SPL_X(x) ; 43250276Speterextern void *get_unit __P((char *, int)); 433166124Srafan# define GETIFP(n, v) get_unit(n, v) 43450276Speter# define IFNAME(x, b) ((ill_t *)x)->ill_name 43550276Speter# define COPYIFNAME(x, b) \ 43650276Speter (void) strncpy(b, ((qif_t *)x)->qf_name, \ 43750276Speter LIFNAMSIZ) 438166124Srafan# define UIOMOVE(a,b,c,d) uiomove((caddr_t)a,b,c,d) 43950276Speter# define SLEEP(id, n) { lock_t *_l = get_sleep_lock((caddr_t)id); \ 440166124Srafan sleep(id, PZERO+1); \ 44150276Speter spinunlock(_l); \ 44250276Speter } 44350276Speter# define WAKEUP(id,x) { lock_t *_l = get_sleep_lock((caddr_t)id); \ 44450276Speter wakeup(id + x); \ 445166124Srafan spinunlock(_l); \ 44650276Speter } 44750276Speter# define KMALLOC(a, b) MALLOC((a), b, sizeof(*(a)), M_IOSYS, M_NOWAIT) 448166124Srafan# define KMALLOCS(a, b, c) MALLOC((a), b, (c), M_IOSYS, M_NOWAIT) 449166124Srafan# define KFREE(x) kmem_free((char *)(x), sizeof(*(x))) 45050276Speter# define KFREES(x,s) kmem_free((char *)(x), (s)) 45150276Speter# define MSGDSIZE(x) msgdsize(x) 45250276Speter# define M_LEN(x) ((x)->b_wptr - (x)->b_rptr) 45350276Speter# define M_DUPLICATE(x) dupmsg((x)) 454166124Srafan# define MTOD(m,t) ((t)((m)->b_rptr)) 455166124Srafan# define MTYPE(m) ((m)->b_datap->db_type) 45650276Speter# define FREE_MB_T(m) freemsg(m) 45750276Speter# define m_next b_cont 45850276Speter# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 45950276Spetertypedef mblk_t mb_t; 46050276Speter 461166124Srafan# define CACHE_HASH(x) (((qpktinfo_t *)(x)->fin_qpi)->qpi_num & 7) 462166124Srafan 46350276Speter# include "qif.h" 464166124Srafan# include "pfil.h" 46550276Speter 46650276Speter# else /* _KERNEL */ 46750276Speter 468166124Srafantypedef unsigned char uchar_t; 469166124Srafan 47050276Speter# ifndef _SYS_STREAM_INCLUDED 47150276Spetertypedef char * mblk_t; 47250276Spetertypedef void * queue_t; 47350276Spetertypedef u_long ulong; 474166124Srafan# endif 47550276Speter# include <netinet/ip_info.h> 47650276Speter 47750276Speter# endif /* _KERNEL */ 478166124Srafan 479166124Srafan# ifdef lint 48050276Speter# define ALIGN32(ptr) (ptr ? 0L : 0L) 48150276Speter# define ALIGN16(ptr) (ptr ? 0L : 0L) 48250276Speter# else 48350276Speter# define ALIGN32(ptr) (ptr) 48450276Speter# define ALIGN16(ptr) (ptr) 485166124Srafan# endif 486166124Srafan 48750276Spetertypedef struct uio uio_t; 48850276Spetertypedef int ioctlcmd_t; 489166124Srafantypedef int minor_t; 49050276Spetertypedef unsigned int u_32_t; 49150276Speter# define U_32_T 1 492166124Srafan 49350276Speter# define OS_RECOGNISED 1 49450276Speter 49550276Speter#endif /* __hpux */ 496166124Srafan 497166124Srafan/* ----------------------------------------------------------------------- */ 49850276Speter/* I R I X */ 49950276Speter/* ----------------------------------------------------------------------- */ 500166124Srafan#ifdef __sgi 501166124Srafan# undef MENTAT 502166124Srafan# if IRIX < 60500 50350276Spetertypedef struct uio uio_t; 504166124Srafan# endif 50550276Spetertypedef int ioctlcmd_t; 506166124Srafantypedef u_int32_t u_32_t; 507166124Srafan# define U_32_T 1 50850276Speter 509166124Srafan# ifdef INET6 510166124Srafan# define USE_INET6 51150276Speter# endif 51250276Speter 51350276Speter# define hz HZ 514166124Srafan# include <sys/ksynch.h> 515262629Sdelphij# define IPF_LOCK_PL plhi 51650276Speter# include <sys/sema.h> 517262629Sdelphij# undef kmutex_t 518262629Sdelphijtypedef struct { 519166124Srafan lock_t *l; 52050276Speter int pl; 52150276Speter} kmutex_t; 52250276Speter 52350276Speter# ifdef MUTEX_INIT 52450276Speter# define KMUTEX_T mutex_t 52550276Speter# else 52650276Speter# define KMUTEX_T kmutex_t 527262629Sdelphij# define KRWLOCK_T kmutex_t 528262629Sdelphij# endif 52950276Speter 53050276Speter# ifdef _KERNEL 53150276Speter# define ATOMIC_INC(x) { MUTEX_ENTER(&ipf_rw); \ 532166124Srafan (x)++; MUTEX_EXIT(&ipf_rw); } 53350276Speter# define ATOMIC_DEC(x) { MUTEX_ENTER(&ipf_rw); \ 534262629Sdelphij (x)--; MUTEX_EXIT(&ipf_rw); } 53550276Speter# define USE_MUTEXES 536262629Sdelphij# ifdef MUTEX_INIT 537166124Srafan# include <sys/atomic_ops.h> 538262629Sdelphij# define ATOMIC_INCL(x) atomicAddUlong(&(x), 1) 539262629Sdelphij# define ATOMIC_INC64(x) atomicAddUint64(&(x), 1) 540262629Sdelphij# define ATOMIC_INC32(x) atomicAddUint(&(x), 1) 54150276Speter# define ATOMIC_INC16 ATOMIC_INC 542262629Sdelphij# define ATOMIC_DECL(x) atomicAddUlong(&(x), -1) 54350276Speter# define ATOMIC_DEC64(x) atomicAddUint64(&(x), -1) 54450276Speter# define ATOMIC_DEC32(x) atomicAddUint(&(x), -1) 545166124Srafan# define ATOMIC_DEC16 ATOMIC_DEC 54650276Speter# undef MUTEX_INIT 547166124Srafan# define MUTEX_INIT(x, y) mutex_init(&(x)->ipf_lk, \ 548166124Srafan MUTEX_DEFAULT, y) 54950276Speter# undef MUTEX_ENTER 550166124Srafan# define MUTEX_ENTER(x) mutex_lock(&(x)->ipf_lk, 0) 55150276Speter# undef MUTEX_EXIT 55250276Speter# define MUTEX_EXIT(x) mutex_unlock(&(x)->ipf_lk) 55350276Speter# undef MUTEX_DESTROY 55450276Speter# define MUTEX_DESTROY(x) mutex_destroy(&(x)->ipf_lk) 55550276Speter# define MUTEX_DOWNGRADE(x) mrdemote(&(x)->ipf_lk) 556166124Srafan# define KRWLOCK_T mrlock_t 557166124Srafan# define RWLOCK_INIT(x, y) mrinit(&(x)->ipf_lk, y) 55850276Speter# undef RW_DESTROY 559166124Srafan# define RW_DESTROY(x) mrfree(&(x)->ipf_lk) 560166124Srafan# define READ_ENTER(x) RW_RDLOCK(&(x)->ipf_lk) 561166124Srafan# define WRITE_ENTER(x) RW_WRLOCK(&(x)->ipf_lk) 562166124Srafan# define RWLOCK_EXIT(x) RW_UNLOCK(&(x)->ipf_lk) 563166124Srafan# else 564166124Srafan# define READ_ENTER(x) MUTEX_ENTER(&(x)->ipf_lk) 56550276Speter# define WRITE_ENTER(x) MUTEX_ENTER(&(x)->ipf_lk) 56650276Speter# define MUTEX_DOWNGRADE(x) ; 56750276Speter# define RWLOCK_EXIT(x) MUTEX_EXIT(&(x)->ipf_lk) 56850276Speter# define MUTEX_EXIT(x) UNLOCK((x)->ipf_lk.l, (x)->ipf_lk.pl); 56950276Speter# define MUTEX_INIT(x,y) (x)->ipf_lk.l = LOCK_ALLOC((uchar_t)-1, IPF_LOCK_PL, (lkinfo_t *)-1, KM_NOSLEEP) 570166124Srafan# define MUTEX_DESTROY(x) LOCK_DEALLOC((x)->ipf_lk.l) 571262629Sdelphij# define MUTEX_ENTER(x) (x)->ipf_lk.pl = LOCK((x)->ipf_lk.l, \ 572262629Sdelphij IPF_LOCK_PL); 573262629Sdelphij# endif 574262629Sdelphij# define MUTEX_NUKE(x) bzero((x), sizeof(*(x))) 575262629Sdelphij# define FREE_MB_T(m) m_freem(m) 576262629Sdelphij# define MTOD(m,t) mtod(m,t) 577262629Sdelphij# define COPYIN(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 578262629Sdelphij# define COPYOUT(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 579262629Sdelphij# define BCOPYIN(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 580262629Sdelphij# define BCOPYOUT(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 581262629Sdelphij# define UIOMOVE(a,b,c,d) uiomove((caddr_t)a,b,c,d) 582262629Sdelphij# define SLEEP(id, n) sleep((id), PZERO+1) 583262629Sdelphij# define WAKEUP(id,x) wakeup(id+x) 584262629Sdelphij# define KFREE(x) kmem_free((char *)(x), sizeof(*(x))) 585262629Sdelphij# define KFREES(x,s) kmem_free((char *)(x), (s)) 586262629Sdelphij# define GETIFP(n,v) ifunit(n) 587262629Sdelphij# include <sys/kmem.h> 588262629Sdelphij# include <sys/ddi.h> 589262629Sdelphij# define KMALLOC(a,b) (a) = (b)kmem_alloc(sizeof(*(a)), KM_NOSLEEP) 59050276Speter# define KMALLOCS(a,b,c) (a) = (b)kmem_alloc((c), KM_NOSLEEP) 591166124Srafan# define GET_MINOR(x) getminor(x) 59250276Speter# define USE_SPL 1 59350276Speter# define SPL_IMP(x) (x) = splimp() 59450276Speter# define SPL_NET(x) (x) = splnet() 59550276Speter# define SPL_X(x) (void) splx(x) 59650276Speterextern void m_copydata __P((struct mbuf *, int, int, caddr_t)); 59750276Speterextern void m_copyback __P((struct mbuf *, int, int, caddr_t)); 59850276Speter# define MSGDSIZE(x) mbufchainlen(x) 599166124Srafan# define M_LEN(x) (x)->m_len 600166124Srafan# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 60150276Speter# define GETKTIME(x) microtime((struct timeval *)x) 60250276Speter# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 60350276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 604262685Sdelphij# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 605262685Sdelphijtypedef struct mbuf mb_t; 606262629Sdelphij# else 607166124Srafan# undef RW_DESTROY 60850276Speter# undef MUTEX_INIT 60950276Speter# undef MUTEX_DESTROY 61050276Speter# endif /* _KERNEL */ 61150276Speter 612166124Srafan# define OS_RECOGNISED 1 61350276Speter 614166124Srafan#endif /* __sgi */ 61550276Speter 61650276Speter/* ----------------------------------------------------------------------- */ 61750276Speter/* T R U 6 4 */ 61850276Speter/* ----------------------------------------------------------------------- */ 61950276Speter#ifdef __osf__ 62050276Speter# undef MENTAT 62150276Speter 62250276Speter# include <kern/lock.h> 62350276Speter# include <sys/sysmacros.h> 62450276Speter 625166124Srafan# ifdef _KERNEL 626166124Srafan# define KMUTEX_T simple_lock_data_t 62750276Speter# define KRWLOCK_T lock_data_t 62850276Speter# include <net/net_globals.h> 62950276Speter# define USE_MUTEXES 63050276Speter# define READ_ENTER(x) lock_read(&(x)->ipf_lk) 63150276Speter# define WRITE_ENTER(x) lock_write(&(x)->ipf_lk) 63250276Speter# define MUTEX_DOWNGRADE(x) lock_write_to_read(&(x)->ipf_lk) 63350276Speter# define RWLOCK_INIT(x, y) lock_init(&(x)->ipf_lk, TRUE) 63450276Speter# define RWLOCK_EXIT(x) lock_done(&(x)->ipf_lk) 63550276Speter# define RW_DESTROY(x) lock_terminate(&(x)->ipf_lk) 63650276Speter# define MUTEX_ENTER(x) simple_lock(&(x)->ipf_lk) 637166124Srafan# define MUTEX_INIT(x, y) simple_lock_init(&(x)->ipf_lk) 638166124Srafan# define MUTEX_DESTROY(x) simple_lock_terminate(&(x)->ipf_lk) 63950276Speter# define MUTEX_EXIT(x) simple_unlock(&(x)->ipf_lk) 64050276Speter# define MUTEX_NUKE(x) bzero(x, sizeof(*(x))) 64150276Speter# define ATOMIC_INC64(x) atomic_incq((uint64_t*)&(x)) 642166124Srafan# define ATOMIC_DEC64(x) atomic_decq((uint64_t*)&(x)) 64350276Speter# define ATOMIC_INC32(x) atomic_incl((uint32_t*)&(x)) 644166124Srafan# define ATOMIC_DEC32(x) atomic_decl((uint32_t*)&(x)) 645166124Srafan# define ATOMIC_INC16(x) { simple_lock(&ipf_rw); (x)++; \ 64650276Speter simple_unlock(&ipf_rw); } 64750276Speter# define ATOMIC_DEC16(x) { simple_lock(&ipf_rw); (x)--; \ 648166124Srafan simple_unlock(&ipf_rw); } 64950276Speter# define ATOMIC_INCL(x) atomic_incl((uint32_t*)&(x)) 65050276Speter# define ATOMIC_DECL(x) atomic_decl((uint32_t*)&(x)) 65150276Speter# define ATOMIC_INC(x) { simple_lock(&ipf_rw); (x)++; \ 65250276Speter simple_unlock(&ipf_rw); } 653166124Srafan# define ATOMIC_DEC(x) { simple_lock(&ipf_rw); (x)--; \ 65450276Speter simple_unlock(&ipf_rw); } 65550276Speter# define SPL_NET(x) ; 656262685Sdelphij# define SPL_IMP(x) ; 65750276Speter# undef SPL_X 65850276Speter# define SPL_X(x) ; 65950276Speter# define UIOMOVE(a,b,c,d) uiomove((caddr_t)a, b, d) 66050276Speter# define FREE_MB_T(m) m_freem(m) 66150276Speter# define MTOD(m,t) mtod(m,t) 662166124Srafan# define GETIFP(n, v) ifunit(n) 66350276Speter# define GET_MINOR getminor 66450276Speter# define WAKEUP(id,x) wakeup(id + x) 665262685Sdelphij# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 66650276Speter# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 66750276Speter# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 66850276Speter# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 669166124Srafan# define KMALLOC(a, b) MALLOC((a), b, sizeof(*(a)), M_PFILT, M_NOWAIT) 67050276Speter# define KMALLOCS(a, b, c) MALLOC((a), b, (c), M_PFILT, \ 671166124Srafan ((c) > 4096) ? M_WAITOK : M_NOWAIT) 672166124Srafan# define KFREE(x) FREE((x), M_PFILT) 67350276Speter# define KFREES(x,s) FREE((x), M_PFILT) 67450276Speter# define MSGDSIZE(x) mbufchainlen(x) 675166124Srafan# define M_LEN(x) (x)->m_len 676166124Srafan# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 677262685Sdelphij# define GETKTIME(x) microtime((struct timeval *)x) 67850276Speter# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 67950276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 680166124Srafan# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 681166124Srafantypedef struct mbuf mb_t; 682166124Srafan# endif /* _KERNEL */ 683166124Srafan 684166124Srafan# if (defined(_KERNEL) || defined(_NO_BITFIELDS) || (__STDC__ == 1)) 685166124Srafan# define IP_V(x) ((x)->ip_vhl >> 4) 686166124Srafan# define IP_HL(x) ((x)->ip_vhl & 0xf) 687166124Srafan# define IP_V_A(x,y) (x)->ip_vhl |= (((y) << 4) & 0xf0) 688166124Srafan# define IP_HL_A(x,y) (x)->ip_vhl |= ((y) & 0xf) 689166124Srafan# define TCP_X2(x) ((x)->th_xoff & 0xf) 690262629Sdelphij# define TCP_X2_A(x,y) (x)->th_xoff |= ((y) & 0xf) 69150276Speter# define TCP_OFF(x) ((x)->th_xoff >> 4) 692166124Srafan# define TCP_OFF_A(x,y) (x)->th_xoff |= (((y) << 4) & 0xf0) 69350276Speter# endif 694166124Srafan 695166124Srafan/* 696166124Srafan * These are from's Solaris' #defines for little endian. 697166124Srafan */ 698166124Srafan#define IP6F_MORE_FRAG 0x0100 699166124Srafan#define IP6F_RESERVED_MASK 0x0600 700166124Srafan#define IP6F_OFF_MASK 0xf8ff 70150276Speter 70250276Speterstruct ip6_ext { 703176187Srafan u_char ip6e_nxt; 704166124Srafan u_char ip6e_len; 705166124Srafan}; 706166124Srafan 707166124Srafantypedef int ioctlcmd_t; 708166124Srafan/* 709166124Srafan * Really, any arch where sizeof(long) != sizeof(int). 710166124Srafan */ 711166124Srafantypedef unsigned int u_32_t; 712166124Srafan# define U_32_T 1 713166124Srafan 714166124Srafan# define OS_RECOGNISED 1 715166124Srafan#endif /* __osf__ */ 716166124Srafan 717166124Srafan/* ----------------------------------------------------------------------- */ 718166124Srafan/* N E T B S D */ 719166124Srafan/* ----------------------------------------------------------------------- */ 720166124Srafan#ifdef __NetBSD__ 721166124Srafan# if defined(_KERNEL) && !defined(IPFILTER_LKM) 722166124Srafan# include "bpfilter.h" 72350276Speter# if defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 104110000) 724166124Srafan# include "opt_inet.h" 725166124Srafan# endif 72650276Speter# ifdef INET6 72750276Speter# define USE_INET6 728166124Srafan# endif 72950276Speter# if (__NetBSD_Version__ >= 105000000) 730166124Srafan# define HAVE_M_PULLDOWN 1 731166124Srafan# endif 732166124Srafan# endif 73350276Speter 734166124Srafan# ifdef _KERNEL 735166124Srafan# define MSGDSIZE(x) mbufchainlen(x) 736166124Srafan# define M_LEN(x) (x)->m_len 737166124Srafan# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 738166124Srafan# define GETKTIME(x) microtime((struct timeval *)x) 739166124Srafan# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 740166124Srafan# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 741166124Srafan# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 742166124Srafan# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 743166124Srafan# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 74450276Spetertypedef struct mbuf mb_t; 74550276Speter# endif /* _KERNEL */ 746166124Srafan# if (NetBSD <= 1991011) && (NetBSD >= 199606) 747166124Srafan# define IFNAME(x) ((struct ifnet *)x)->if_xname 748166124Srafan# define COPYIFNAME(x, b) \ 749166124Srafan (void) strncpy(b, \ 750166124Srafan ((struct ifnet *)x)->if_xname, \ 751166124Srafan LIFNAMSIZ) 752166124Srafan# define CACHE_HASH(x) ((((struct ifnet *)fin->fin_ifp)->if_index)&7) 753166124Srafan# else 754166124Srafan# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 755166124Srafan ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 756262685Sdelphij# endif 757166124Srafan 758166124Srafantypedef struct uio uio_t; 759166124Srafantypedef u_long ioctlcmd_t; 76050276Spetertypedef int minor_t; 761166124Srafantypedef u_int32_t u_32_t; 76250276Speter# define U_32_T 1 76350276Speter 764174993Srafan# define OS_RECOGNISED 1 76550276Speter#endif /* __NetBSD__ */ 766166124Srafan 767174993Srafan 768174993Srafan/* ----------------------------------------------------------------------- */ 769174993Srafan/* F R E E B S D */ 770174993Srafan/* ----------------------------------------------------------------------- */ 771174993Srafan#ifdef __FreeBSD__ 772174993Srafan# if defined(_KERNEL) 773174993Srafan# if (__FreeBSD_version >= 500000) 774174993Srafan# include "opt_bpf.h" 775174993Srafan# else 776174993Srafan# include "bpf.h" 777174993Srafan# endif 778174993Srafan# if defined(__FreeBSD_version) && (__FreeBSD_version >= 400000) 779262629Sdelphij# include "opt_inet6.h" 780174993Srafan# endif 781174993Srafan# if defined(INET6) && !defined(USE_INET6) 782174993Srafan# define USE_INET6 783174993Srafan# endif 784174993Srafan# endif 785174993Srafan 786174993Srafan# if defined(_KERNEL) 787174993Srafan# if (__FreeBSD_version >= 400000) 788174993Srafan/* 789174993Srafan * When #define'd, the 5.2.1 kernel panics when used with the ftp proxy. 790174993Srafan * There may be other, safe, kernels but this is not extensively tested yet. 791174993Srafan */ 792174993Srafan# define HAVE_M_PULLDOWN 793174993Srafan# endif 79450276Speter# if !defined(IPFILTER_LKM) && (__FreeBSD_version >= 300000) 795166124Srafan# include "opt_ipfilter.h" 79650276Speter# endif 797166124Srafan# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 79850276Speter# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 79950276Speter# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 80050276Speter# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 80150276Speter 80250276Speter# if (__FreeBSD_version >= 500043) 80350276Speter# define NETBSD_PF 80450276Speter# endif 80576726Speter# endif /* _KERNEL */ 806166124Srafan 80750276Speter# if (__FreeBSD_version >= 500043) 808166124Srafan# include <sys/mutex.h> 80950276Speter# include <sys/sx.h> 810166124Srafan/* 81150276Speter * Whilst the sx(9) locks on FreeBSD have the right semantics and interface 812166124Srafan * for what we want to use them for, despite testing showing they work - 81350276Speter * with a WITNESS kernel, it generates LOR messages. 814166124Srafan */ 815166124Srafan# define KMUTEX_T struct mtx 81650276Speter# if 1 817166124Srafan# define KRWLOCK_T struct mtx 818166124Srafan# else 81950276Speter# define KRWLOCK_T struct sx 820166124Srafan# endif 821166124Srafan# endif 82250276Speter 82350276Speter# if (__FreeBSD_version >= 501113) 824166124Srafan# include <net/if_var.h> 82550276Speter# define IFNAME(x) ((struct ifnet *)x)->if_xname 82650276Speter# define COPYIFNAME(x, b) \ 82750276Speter (void) strncpy(b, \ 82850276Speter ((struct ifnet *)x)->if_xname, \ 82950276Speter LIFNAMSIZ) 830166124Srafan# endif 83150276Speter# if (__FreeBSD_version >= 500043) 832166124Srafan# define CACHE_HASH(x) ((((struct ifnet *)fin->fin_ifp)->if_index) & 7) 83350276Speter# else 83450276Speter# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 83550276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 836166124Srafan# endif 83750276Speter 838166124Srafan# ifdef _KERNEL 83950276Speter# define GETKTIME(x) microtime((struct timeval *)x) 84050276Speter 84150276Speter# if (__FreeBSD_version >= 500002) 84250276Speter# include <netinet/in_systm.h> 84350276Speter# include <netinet/ip.h> 84450276Speter# include <machine/in_cksum.h> 84550276Speter# endif 84676726Speter 847166124Srafan# if (__FreeBSD_version >= 500043) 84850276Speter# define USE_MUTEXES 84950276Speter# define MUTEX_ENTER(x) mtx_lock(&(x)->ipf_lk) 850166124Srafan# define MUTEX_EXIT(x) mtx_unlock(&(x)->ipf_lk) 85150276Speter# define MUTEX_INIT(x,y) mtx_init(&(x)->ipf_lk, (y), NULL,\ 852262629Sdelphij MTX_DEF) 853166124Srafan# define MUTEX_DESTROY(x) mtx_destroy(&(x)->ipf_lk) 85450276Speter# define MUTEX_NUKE(x) bzero((x), sizeof(*(x))) 85550276Speter/* 85650276Speter * Whilst the sx(9) locks on FreeBSD have the right semantics and interface 857166124Srafan * for what we want to use them for, despite testing showing they work - 85850276Speter * with a WITNESS kernel, it generates LOR messages. 85950276Speter */ 860166124Srafan# if 1 861166124Srafan# define READ_ENTER(x) mtx_lock(&(x)->ipf_lk) 86250276Speter# define WRITE_ENTER(x) mtx_lock(&(x)->ipf_lk) 863262685Sdelphij# define RWLOCK_EXIT(x) mtx_unlock(&(x)->ipf_lk) 86450276Speter# define MUTEX_DOWNGRADE(x) ; 86550276Speter# define RWLOCK_INIT(x,y) mtx_init(&(x)->ipf_lk, (y), NULL,\ 86650276Speter MTX_DEF) 86750276Speter# define RW_DESTROY(x) mtx_destroy(&(x)->ipf_lk) 86850276Speter# else 86950276Speter# define READ_ENTER(x) sx_slock(&(x)->ipf_lk) 870166124Srafan# define WRITE_ENTER(x) sx_xlock(&(x)->ipf_lk) 871166124Srafan# define MUTEX_DOWNGRADE(x) sx_downgrade(&(x)->ipf_lk) 87250276Speter# define RWLOCK_INIT(x, y) sx_init(&(x)->ipf_lk, (y)) 873166124Srafan# define RW_DESTROY(x) sx_destroy(&(x)->ipf_lk) 87450276Speter# ifdef sx_unlock 87550276Speter# define RWLOCK_EXIT(x) sx_unlock(x) 87650276Speter# else 877166124Srafan# define RWLOCK_EXIT(x) do { \ 87850276Speter if ((x)->ipf_lk.sx_cnt < 0) \ 87950276Speter sx_xunlock(&(x)->ipf_lk); \ 88050276Speter else \ 88150276Speter sx_sunlock(&(x)->ipf_lk); \ 88250276Speter } while (0) 88350276Speter# endif 88450276Speter# endif 88550276Speter# include <machine/atomic.h> 88650276Speter# define ATOMIC_INC(x) { mtx_lock(&ipf_rw.ipf_lk); (x)++; \ 88750276Speter mtx_unlock(&ipf_rw.ipf_lk); } 88850276Speter# define ATOMIC_DEC(x) { mtx_lock(&ipf_rw.ipf_lk); (x)--; \ 88950276Speter mtx_unlock(&ipf_rw.ipf_lk); } 890166124Srafan# define ATOMIC_INCL(x) atomic_add_long(&(x), 1) 891166124Srafan# define ATOMIC_INC64(x) ATOMIC_INC(x) 892166124Srafan# define ATOMIC_INC32(x) atomic_add_32(&(x), 1) 89350276Speter# define ATOMIC_INC16(x) atomic_add_16(&(x), 1) 89450276Speter# define ATOMIC_DECL(x) atomic_add_long(&(x), -1) 89550276Speter# define ATOMIC_DEC64(x) ATOMIC_DEC(x) 89650276Speter# define ATOMIC_DEC32(x) atomic_add_32(&(x), -1) 89750276Speter# define ATOMIC_DEC16(x) atomic_add_16(&(x), -1) 89850276Speter# define SPL_X(x) ; 89950276Speter# define SPL_NET(x) ; 900262685Sdelphij# define SPL_IMP(x) ; 90150276Speterextern int in_cksum __P((struct mbuf *, int)); 90250276Speter# endif /* __FreeBSD_version >= 500043 */ 90350276Speter# define MSGDSIZE(x) mbufchainlen(x) 90450276Speter# define M_LEN(x) (x)->m_len 905262685Sdelphij# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 90650276Speter# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 90750276Spetertypedef struct mbuf mb_t; 908166124Srafan# endif /* _KERNEL */ 909166124Srafan 91050276Speter# if __FreeBSD__ < 3 91150276Speter# include <machine/spl.h> 912262685Sdelphij# else 91350276Speter# if __FreeBSD__ == 3 914166124Srafan# if defined(IPFILTER_LKM) && !defined(ACTUALLY_LKM_NOT_KERNEL) 915166124Srafan# define ACTUALLY_LKM_NOT_KERNEL 916166124Srafan# endif 917166124Srafan# endif 91850276Speter# endif 919166124Srafan 92050276Speter# if (__FreeBSD_version >= 300000) 921166124Srafantypedef u_long ioctlcmd_t; 92250276Speter# else 92350276Spetertypedef int ioctlcmd_t; 92450276Speter# endif 92550276Spetertypedef struct uio uio_t; 926166124Srafantypedef int minor_t; 92750276Spetertypedef u_int32_t u_32_t; 928166124Srafan# define U_32_T 1 92950276Speter 93050276Speter# define OS_RECOGNISED 1 93150276Speter#endif /* __FreeBSD__ */ 93250276Speter 93350276Speter 93450276Speter/* ----------------------------------------------------------------------- */ 93550276Speter/* O P E N B S D */ 936166124Srafan/* ----------------------------------------------------------------------- */ 93750276Speter#ifdef __OpenBSD__ 93850276Speter# ifdef INET6 93950276Speter# define USE_INET6 94050276Speter# endif 94150276Speter 94250276Speter# ifdef _KERNEL 94350276Speter# if !defined(IPFILTER_LKM) 94450276Speter# include "bpfilter.h" 94550276Speter# endif 94650276Speter# if (OpenBSD >= 200311) 94750276Speter# define SNPRINTF snprintf 94850276Speter# if defined(USE_INET6) 94950276Speter# include "netinet6/in6_var.h" 95050276Speter# include "netinet6/nd6.h" 95150276Speter# endif 95250276Speter# endif 953166124Srafan# if (OpenBSD >= 200012) 954166124Srafan# define HAVE_M_PULLDOWN 1 955166124Srafan# endif 956166124Srafan# define COPYIN(a,b,c) copyin((caddr_t)(a), (caddr_t)(b), (c)) 95750276Speter# define COPYOUT(a,b,c) copyout((caddr_t)(a), (caddr_t)(b), (c)) 95850276Speter# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 95950276Speter# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 96050276Speter# define GETKTIME(x) microtime((struct timeval *)x) 961166124Srafan# define MSGDSIZE(x) mbufchainlen(x) 96250276Speter# define M_LEN(x) (x)->m_len 963166124Srafan# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 96450276Speter# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 965166124Srafantypedef struct mbuf mb_t; 96650276Speter# endif /* _KERNEL */ 96750276Speter# if (OpenBSD >= 199603) 96850276Speter# define IFNAME(x, b) ((struct ifnet *)x)->if_xname 96950276Speter# define COPYIFNAME(x, b) \ 970166124Srafan (void) strncpy(b, \ 971166124Srafan ((struct ifnet *)x)->if_xname, \ 97250276Speter LIFNAMSIZ) 97350276Speter# define CACHE_HASH(x) ((((struct ifnet *)fin->fin_ifp)->if_index)&7) 974166124Srafan# else 975166124Srafan# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 97650276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 977166124Srafan# endif 97850276Speter 979166124Srafantypedef struct uio uio_t; 98050276Spetertypedef u_long ioctlcmd_t; 981166124Srafantypedef int minor_t; 982166124Srafantypedef u_int32_t u_32_t; 98350276Speter# define U_32_T 1 984166124Srafan 98550276Speter# define OS_RECOGNISED 1 98650276Speter#endif /* __OpenBSD__ */ 98750276Speter 988166124Srafan 98950276Speter/* ----------------------------------------------------------------------- */ 99050276Speter/* B S D O S */ 99150276Speter/* ----------------------------------------------------------------------- */ 99250276Speter#ifdef _BSDI_VERSION 993166124Srafan# ifdef INET6 99450276Speter# define USE_INET6 99550276Speter# endif 99650276Speter 99750276Speter# ifdef _KERNEL 99850276Speter# define GETKTIME(x) microtime((struct timeval *)x) 99950276Speter# define MSGDSIZE(x) mbufchainlen(x) 100050276Speter# define M_LEN(x) (x)->m_len 100150276Speter# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 1002166124Srafan# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 1003166124Srafan ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 100450276Spetertypedef struct mbuf mb_t; 100550276Speter# endif /* _KERNEL */ 100650276Speter 100750276Speter# if (_BSDI_VERSION >= 199701) 1008166124Srafantypedef u_long ioctlcmd_t; 100950276Speter# else 101050276Spetertypedef int ioctlcmd_t; 101150276Speter# endif 1012166124Srafantypedef u_int32_t u_32_t; 101350276Speter# define U_32_T 1 101450276Speter 101550276Speter#endif /* _BSDI_VERSION */ 101650276Speter 101750276Speter 1018166124Srafan/* ----------------------------------------------------------------------- */ 1019166124Srafan/* S U N O S 4 */ 102050276Speter/* ----------------------------------------------------------------------- */ 1021166124Srafan#if defined(sun) && !defined(OS_RECOGNISED) /* SunOS4 */ 102250276Speter# ifdef _KERNEL 102350276Speter# include <sys/kmem_alloc.h> 1024166124Srafan# define GETKTIME(x) uniqtime((struct timeval *)x) 1025166124Srafan# define MSGDSIZE(x) mbufchainlen(x) 102650276Speter# define M_LEN(x) (x)->m_len 1027166124Srafan# define M_DUPLICATE(x) m_copy((x), 0, M_COPYALL) 102850276Speter# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 102950276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 1030166124Srafan# define GETIFP(n, v) ifunit(n, IFNAMSIZ) 1031166124Srafan# define KFREE(x) kmem_free((char *)(x), sizeof(*(x))) 103250276Speter# define KFREES(x,s) kmem_free((char *)(x), (s)) 103350276Speter# define SLEEP(id, n) sleep((id), PZERO+1) 103450276Speter# define WAKEUP(id,x) wakeup(id + x) 103550276Speter# define UIOMOVE(a,b,c,d) uiomove((caddr_t)a,b,c,d) 1036166124Srafan# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 1037262629Sdelphij 1038262629Sdelphijextern void m_copydata __P((struct mbuf *, int, int, caddr_t)); 103950276Speterextern void m_copyback __P((struct mbuf *, int, int, caddr_t)); 104050276Speter 104150276Spetertypedef struct mbuf mb_t; 1042166124Srafan# endif 104350276Speter 1044166124Srafantypedef struct uio uio_t; 104550276Spetertypedef int ioctlcmd_t; 104650276Spetertypedef int minor_t; 104750276Spetertypedef unsigned int u_32_t; 104850276Speter# define U_32_T 1 1049166124Srafan 1050262629Sdelphij# define OS_RECOGNISED 1 1051262629Sdelphij 1052262629Sdelphij#endif /* SunOS 4 */ 1053262629Sdelphij 1054262629Sdelphij/* ----------------------------------------------------------------------- */ 105550276Speter/* L I N U X */ 1056166124Srafan/* ----------------------------------------------------------------------- */ 105750276Speter#if defined(linux) && !defined(OS_RECOGNISED) 105850276Speter#include <linux/config.h> 105950276Speter#include <linux/version.h> 106050276Speter# if LINUX >= 20600 1061166124Srafan# define HDR_T_PRIVATE 1 1062262629Sdelphij# endif 1063262629Sdelphij# undef USE_INET6 1064166124Srafan# ifdef USE_INET6 1065166124Srafanstruct ip6_ext { 106650276Speter u_char ip6e_nxt; 1067262629Sdelphij u_char ip6e_len; 1068262629Sdelphij}; 1069262629Sdelphij# endif 1070262629Sdelphij 1071262629Sdelphij# ifdef _KERNEL 1072262629Sdelphij# define IPF_PANIC(x,y) if (x) { printf y; panic("ipf_panic"); } 1073262629Sdelphij# define BCOPYIN(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 1074262629Sdelphij# define BCOPYOUT(a,b,c) bcopy((caddr_t)(a), (caddr_t)(b), (c)) 1075262629Sdelphij# define COPYIN(a,b,c) copy_from_user((caddr_t)(b), (caddr_t)(a), (c)) 107650276Speter# define COPYOUT(a,b,c) copy_to_user((caddr_t)(b), (caddr_t)(a), (c)) 1077166124Srafan# define FREE_MB_T(m) kfree_skb(m) 1078262629Sdelphij# define GETKTIME(x) do_gettimeofday((struct timeval *)x) 107950276Speter# define SLEEP(x,s) 0, interruptible_sleep_on(x##_linux) 108050276Speter# define WAKEUP(x,y) wake_up(x##_linux + y) 1081166124Srafan# define UIOMOVE(a,b,c,d) uiomove(a,b,c,d) 108250276Speter# define USE_MUTEXES 108350276Speter# define KRWLOCK_T rwlock_t 108450276Speter# define KMUTEX_T spinlock_t 1085166124Srafan# define MUTEX_INIT(x,y) spin_lock_init(&(x)->ipf_lk) 108650276Speter# define MUTEX_ENTER(x) spin_lock(&(x)->ipf_lk) 108750276Speter# define MUTEX_EXIT(x) spin_unlock(&(x)->ipf_lk) 108850276Speter# define MUTEX_DESTROY(x) do { } while (0) 1089166124Srafan# define MUTEX_NUKE(x) bzero(&(x)->ipf_lk, sizeof((x)->ipf_lk)) 109050276Speter# define READ_ENTER(x) ipf_read_enter(x) 109150276Speter# define WRITE_ENTER(x) ipf_write_enter(x) 109250276Speter# define RWLOCK_INIT(x,y) rwlock_init(&(x)->ipf_lk) 109350276Speter# define RW_DESTROY(x) do { } while (0) 109450276Speter# define RWLOCK_EXIT(x) ipf_rw_exit(x) 109550276Speter# define MUTEX_DOWNGRADE(x) ipf_rw_downgrade(x) 109650276Speter# define ATOMIC_INCL(x) MUTEX_ENTER(&ipf_rw); (x)++; \ 1097166124Srafan MUTEX_EXIT(&ipf_rw) 1098166124Srafan# define ATOMIC_DECL(x) MUTEX_ENTER(&ipf_rw); (x)--; \ 109950276Speter MUTEX_EXIT(&ipf_rw) 110050276Speter# define ATOMIC_INC64(x) MUTEX_ENTER(&ipf_rw); (x)++; \ 110150276Speter MUTEX_EXIT(&ipf_rw) 110250276Speter# define ATOMIC_INC32(x) MUTEX_ENTER(&ipf_rw); (x)++; \ 110350276Speter MUTEX_EXIT(&ipf_rw) 110450276Speter# define ATOMIC_INC16(x) MUTEX_ENTER(&ipf_rw); (x)++; \ 110550276Speter MUTEX_EXIT(&ipf_rw) 110650276Speter# define ATOMIC_DEC64(x) MUTEX_ENTER(&ipf_rw); (x)--; \ 1107166124Srafan MUTEX_EXIT(&ipf_rw) 1108166124Srafan# define ATOMIC_DEC32(x) MUTEX_ENTER(&ipf_rw); (x)--; \ 110950276Speter MUTEX_EXIT(&ipf_rw) 1110166124Srafan# define ATOMIC_DEC16(x) MUTEX_ENTER(&ipf_rw); (x)--; \ 111150276Speter MUTEX_EXIT(&ipf_rw) 111250276Speter# define SPL_IMP(x) do { } while (0) 111350276Speter# define SPL_NET(x) do { } while (0) 1114262685Sdelphij# define SPL_X(x) do { } while (0) 1115262629Sdelphij# define IFNAME(x) ((struct net_device*)x)->name 1116262629Sdelphij# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 1117262629Sdelphij ((struct net_device *)fin->fin_ifp)->ifindex) & 7) 111850276Spetertypedef struct sk_buff mb_t; 1119262629Sdelphijextern void m_copydata __P((mb_t *, int, int, caddr_t)); 1120262685Sdelphijextern void m_copyback __P((mb_t *, int, int, caddr_t)); 1121262629Sdelphijextern void m_adj __P((mb_t *, int)); 112250276Speterextern mb_t *m_pullup __P((mb_t *, int)); 112350276Speter# define mbuf sk_buff 112450276Speter 112550276Speter# define mtod(m, t) ((t)(m)->data) 112650276Speter# define m_len len 1127262685Sdelphij# define m_next next 112850276Speter# define M_DUPLICATE(m) skb_clone((m), in_interrupt() ? GFP_ATOMIC : \ 112950276Speter GFP_KERNEL) 1130166124Srafan# define MSGDSIZE(m) (m)->len 113150276Speter# define M_LEN(m) (m)->len 1132166124Srafan 113350276Speter# define splnet(x) ; 1134262685Sdelphij# define printf printk 113550276Speter# define bcopy(s,d,z) memmove(d, s, z) 113650276Speter# define bzero(s,z) memset(s, 0, z) 113750276Speter# define bcmp(a,b,z) memcmp(a, b, z) 113850276Speter 113950276Speter# define ifnet net_device 114050276Speter# define if_xname name 114150276Speter# define if_unit ifindex 114250276Speter 114350276Speter# define KMALLOC(x,t) (x) = (t)kmalloc(sizeof(*(x)), \ 114450276Speter in_interrupt() ? GFP_ATOMIC : GFP_KERNEL) 114550276Speter# define KFREE(x) kfree(x) 1146166124Srafan# define KMALLOCS(x,t,s) (x) = (t)kmalloc((s), \ 114750276Speter in_interrupt() ? GFP_ATOMIC : GFP_KERNEL) 1148166124Srafan# define KFREES(x,s) kfree(x) 114950276Speter 115050276Speter# define GETIFP(n,v) dev_get_by_name(n) 115150276Speter 115250276Speter# else 1153166124Srafan# include <net/ethernet.h> 115450276Speter 115550276Speterstruct mbuf { 1156166124Srafan}; 1157166124Srafan 115850276Speter# ifndef _NET_ROUTE_H 115950276Speterstruct rtentry { 116050276Speter}; 116150276Speter# endif 116250276Speter 1163166124Srafanstruct ifnet { 116450276Speter char if_xname[IFNAMSIZ]; 1165166124Srafan int if_unit; 116650276Speter int (* if_output) __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *)); 116750276Speter struct ifaddr *if_addrlist; 116850276Speter}; 1169166124Srafan# define IFNAME(x) ((struct ifnet *)x)->if_xname 1170166124Srafan 117150276Speter# endif /* _KERNEL */ 1172166124Srafan 1173262685Sdelphij# define COPYIFNAME(x, b) \ 1174166124Srafan (void) strncpy(b, \ 117550276Speter ((struct ifnet *)x)->if_xname, \ 1176166124Srafan LIFNAMSIZ) 1177166124Srafan 1178262685Sdelphij# include <linux/fs.h> 1179166124Srafan# define FWRITE FMODE_WRITE 118050276Speter# define FREAD FMODE_READ 118150276Speter 1182166124Srafan# define __USE_MISC 1 118350276Speter# define __FAVOR_BSD 1 1184262685Sdelphij 1185166124Srafantypedef struct uio { 118650276Speter struct iovec *uio_iov; 118750276Speter void *uio_file; 118850276Speter char *uio_buf; 1189166124Srafan int uio_iovcnt; 119050276Speter int uio_offset; 1191166124Srafan size_t uio_resid; 119250276Speter int uio_rw; 119350276Speter} uio_t; 1194166124Srafan 119550276Speterextern int uiomove __P((caddr_t, size_t, int, struct uio *)); 119650276Speter 1197166124Srafan# define UIO_READ 1 119850276Speter# define UIO_WRITE 2 119950276Speter 1200166124Srafantypedef u_long ioctlcmd_t; 1201166124Srafantypedef int minor_t; 120250276Spetertypedef u_int32_t u_32_t; 120350276Speter# define U_32_T 1 120450276Speter 120550276Speter# define OS_RECOGNISED 1 120650276Speter 120750276Speter#endif 1208166124Srafan 120950276Speter 121050276Speter#ifndef OS_RECOGNISED 1211166124Srafan#error ip_compat.h does not recognise this platform/OS. 121250276Speter#endif 1213166124Srafan 1214262685Sdelphij 1215166124Srafan/* ----------------------------------------------------------------------- */ 121650276Speter/* G E N E R I C */ 1217166124Srafan/* ----------------------------------------------------------------------- */ 1218166124Srafan#ifndef OS_RECOGNISED 121950276Speter#endif 122050276Speter 1221166124Srafan/* 122250276Speter * For BSD kernels, if bpf is in the kernel, enable ipfilter to use bpf in 122350276Speter * filter rules. 122450276Speter */ 1225166124Srafan#if !defined(IPFILTER_BPF) && ((NBPF > 0) || (NBPFILTER > 0) || (DEV_BPF >0)) 122650276Speter# define IPFILTER_BPF 1227166124Srafan#endif 122850276Speter 122950276Speter/* 1230166124Srafan * Userland locking primitives 123150276Speter */ 123250276Spetertypedef struct { 123350276Speter char *eMm_owner; 123450276Speter char *eMm_heldin; 123550276Speter u_int eMm_magic; 123676726Speter int eMm_held; 1237166124Srafan int eMm_heldat; 123850276Speter#ifdef __hpux 123950276Speter char eMm_fill[8]; 124050276Speter#endif 124150276Speter} eMmutex_t; 124250276Speter 1243262629Sdelphijtypedef struct { 1244166124Srafan char *eMrw_owner; 124550276Speter char *eMrw_heldin; 1246166124Srafan u_int eMrw_magic; 124750276Speter short eMrw_read; 1248166124Srafan short eMrw_write; 1249166124Srafan int eMrw_heldat; 125050276Speter#ifdef __hpux 1251166124Srafan char eMm_fill[24]; 1252166124Srafan#endif 125350276Speter} eMrwlock_t; 125450276Speter 1255166124Srafantypedef union { 125650276Speter#ifdef KMUTEX_T 1257166124Srafan struct { 1258166124Srafan KMUTEX_T ipf_slk; 1259262685Sdelphij char *ipf_lname; 126050276Speter } ipf_lkun_s; 126150276Speter#endif 1262166124Srafan eMmutex_t ipf_emu; 1263166124Srafan} ipfmutex_t; 1264166124Srafan 126550276Spetertypedef union { 1266166124Srafan#ifdef KRWLOCK_T 126750276Speter struct { 1268166124Srafan KRWLOCK_T ipf_slk; 1269166124Srafan char *ipf_lname; 1270166124Srafan int ipf_sr; 1271166124Srafan int ipf_sw; 1272166124Srafan u_int ipf_magic; 127350276Speter } ipf_lkun_s; 1274166124Srafan#endif 1275262685Sdelphij eMrwlock_t ipf_emu; 127650276Speter} ipfrwlock_t; 127750276Speter 127850276Speter#define ipf_lk ipf_lkun_s.ipf_slk 1279166124Srafan#define ipf_lname ipf_lkun_s.ipf_lname 128050276Speter#define ipf_isr ipf_lkun_s.ipf_sr 128150276Speter#define ipf_isw ipf_lkun_s.ipf_sw 128250276Speter#define ipf_magic ipf_lkun_s.ipf_magic 128350276Speter 1284166124Srafan#if !defined(__GNUC__) || \ 1285166124Srafan (defined(__FreeBSD_version) && (__FreeBSD_version >= 503000)) 128650276Speter# ifndef INLINE 128750276Speter# define INLINE 128850276Speter# endif 1289166124Srafan#else 129050276Speter# define INLINE __inline__ 129150276Speter#endif 1292166124Srafan 129350276Speter#if defined(linux) && defined(_KERNEL) 129450276Speterextern INLINE void ipf_read_enter __P((ipfrwlock_t *)); 1295166124Srafanextern INLINE void ipf_write_enter __P((ipfrwlock_t *)); 129650276Speterextern INLINE void ipf_rw_exit __P((ipfrwlock_t *)); 129750276Speterextern INLINE void ipf_rw_downgrade __P((ipfrwlock_t *)); 1298166124Srafan#endif 1299166124Srafan 130050276Speter/* 130150276Speter * In a non-kernel environment, there are a lot of macros that need to be 130276726Speter * filled in to be null-ops or to point to some compatibility function, 1303166124Srafan * somewhere in userland. 130450276Speter */ 130550276Speter#ifndef _KERNEL 130650276Spetertypedef struct mb_s { 130750276Speter struct mb_s *mb_next; 130850276Speter int mb_len; 130950276Speter u_long mb_buf[2048]; 1310262629Sdelphij} mb_t; 1311166124Srafan# undef m_next 131250276Speter# define m_next mb_next 1313166124Srafan# define MSGDSIZE(x) (x)->mb_len /* XXX - from ipt.c */ 131450276Speter# define M_LEN(x) (x)->mb_len 1315166124Srafan# define M_DUPLICATE(x) (x) 131650276Speter# define GETKTIME(x) gettimeofday((struct timeval *)(x), NULL) 1317166124Srafan# define MTOD(m, t) ((t)(m)->mb_buf) 1318166124Srafan# define FREE_MB_T(x) 131950276Speter# define SLEEP(x,y) 1; 132050276Speter# define WAKEUP(x,y) ; 132150276Speter# define IPF_PANIC(x,y) ; 132250276Speter# define PANIC(x,y) ; 132350276Speter# define SPL_NET(x) ; 1324262629Sdelphij# define SPL_IMP(x) ; 1325262629Sdelphij# define SPL_X(x) ; 1326262629Sdelphij# define KMALLOC(a,b) (a) = (b)malloc(sizeof(*a)) 1327262629Sdelphij# define KMALLOCS(a,b,c) (a) = (b)malloc(c) 1328262629Sdelphij# define KFREE(x) free(x) 1329262685Sdelphij# define KFREES(x,s) free(x) 133050276Speter# define GETIFP(x, v) get_unit(x,v) 1331262685Sdelphij# define COPYIN(a,b,c) (bcopy((a), (b), (c)), 0) 133250276Speter# define COPYOUT(a,b,c) (bcopy((a), (b), (c)), 0) 1333262685Sdelphij# define BCOPYIN(a,b,c) (bcopy((a), (b), (c)), 0) 133450276Speter# define BCOPYOUT(a,b,c) (bcopy((a), (b), (c)), 0) 133550276Speter# define COPYDATA(m, o, l, b) bcopy(MTOD((mb_t *)m, char *) + (o), \ 133650276Speter (b), (l)) 133750276Speter# define COPYBACK(m, o, l, b) bcopy((b), \ 133850276Speter MTOD((mb_t *)m, char *) + (o), \ 133950276Speter (l)) 1340262685Sdelphij# define UIOMOVE(a,b,c,d) ipfuiomove(a,b,c,d) 1341262685Sdelphijextern void m_copydata __P((mb_t *, int, int, caddr_t)); 134250276Speterextern int ipfuiomove __P((caddr_t, int, int, struct uio *)); 134350276Speter# ifndef CACHE_HASH 134450276Speter# define CACHE_HASH(x) ((IFNAME(fin->fin_ifp)[0] + \ 134550276Speter ((struct ifnet *)fin->fin_ifp)->if_unit) & 7) 134650276Speter# endif 134750276Speter 1348262685Sdelphij# define MUTEX_DESTROY(x) eMmutex_destroy(&(x)->ipf_emu) 134950276Speter# define MUTEX_ENTER(x) eMmutex_enter(&(x)->ipf_emu, \ 135050276Speter __FILE__, __LINE__) 135150276Speter# define MUTEX_EXIT(x) eMmutex_exit(&(x)->ipf_emu) 135250276Speter# define MUTEX_INIT(x,y) eMmutex_init(&(x)->ipf_emu, y) 1353262685Sdelphij# define MUTEX_NUKE(x) bzero((x), sizeof(*(x))) 1354166124Srafan 1355166124Srafan# define MUTEX_DOWNGRADE(x) eMrwlock_downgrade(&(x)->ipf_emu, \ 1356262685Sdelphij __FILE__, __LINE__) 135750276Speter# define READ_ENTER(x) eMrwlock_read_enter(&(x)->ipf_emu, \ 135850276Speter __FILE__, __LINE__) 1359166124Srafan# define RWLOCK_INIT(x, y) eMrwlock_init(&(x)->ipf_emu, y) 1360166124Srafan# define RWLOCK_EXIT(x) eMrwlock_exit(&(x)->ipf_emu) 136150276Speter# define RW_DESTROY(x) eMrwlock_destroy(&(x)->ipf_emu) 136250276Speter# define WRITE_ENTER(x) eMrwlock_write_enter(&(x)->ipf_emu, \ 136350276Speter __FILE__, \ 136450276Speter __LINE__) 136550276Speter 136650276Speter# define USE_MUTEXES 1 136750276Speter 1368166124Srafanextern void eMmutex_destroy __P((eMmutex_t *)); 1369166124Srafanextern void eMmutex_enter __P((eMmutex_t *, char *, int)); 1370166124Srafanextern void eMmutex_exit __P((eMmutex_t *)); 1371166124Srafanextern void eMmutex_init __P((eMmutex_t *, char *)); 137250276Speterextern void eMrwlock_destroy __P((eMrwlock_t *)); 137350276Speterextern void eMrwlock_exit __P((eMrwlock_t *)); 1374262685Sdelphijextern void eMrwlock_init __P((eMrwlock_t *, char *)); 1375166124Srafanextern void eMrwlock_read_enter __P((eMrwlock_t *, char *, int)); 1376166124Srafanextern void eMrwlock_write_enter __P((eMrwlock_t *, char *, int)); 1377166124Srafanextern void eMrwlock_downgrade __P((eMrwlock_t *, char *, int)); 137850276Speter 137950276Speter#endif 138050276Speter 138150276Speter#define MAX_IPV4HDR ((0xf << 2) + sizeof(struct icmp) + sizeof(ip_t) + 8) 1382166124Srafan 1383166124Srafan#ifndef IP_OFFMASK 138450276Speter# define IP_OFFMASK 0x1fff 138550276Speter#endif 138650276Speter 138750276Speter 138850276Speter/* 1389166124Srafan * On BSD's use quad_t as a guarantee for getting at least a 64bit sized 139050276Speter * object. 139150276Speter */ 139250276Speter#if (BSD > 199306) 1393166124Srafan# define USE_QUAD_T 139450276Speter# define U_QUAD_T unsigned long long 139550276Speter# define QUAD_T long long 1396166124Srafan#else /* BSD > 199306 */ 139750276Speter# define U_QUAD_T u_long 139850276Speter# define QUAD_T long 1399166124Srafan#endif /* BSD > 199306 */ 1400166124Srafan 1401166124Srafan 1402166124Srafan#ifdef USE_INET6 140350276Speter# if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \ 140476726Speter defined(__osf__) || defined(linux) 1405166124Srafan# include <netinet/ip6.h> 140650276Speter# include <netinet/icmp6.h> 1407166124Srafan# if !defined(linux) 140850276Speter# if defined(_KERNEL) && !defined(__osf__) 140950276Speter# include <netinet6/ip6_var.h> 1410262629Sdelphij# endif 141150276Speter# endif 1412166124Srafantypedef struct ip6_hdr ip6_t; 1413166124Srafan# endif 141450276Speter#endif 1415166124Srafan 1416166124Srafan#ifndef MAX 1417166124Srafan# define MAX(a,b) (((a) > (b)) ? (a) : (b)) 141850276Speter#endif 1419166124Srafan 142050276Speter#if defined(_KERNEL) 142150276Speter# ifdef MENTAT 1422166124Srafan# define COPYDATA mb_copydata 1423166124Srafan# define COPYBACK mb_copyback 142450276Speter# else 142550276Speter# define COPYDATA m_copydata 1426166124Srafan# define COPYBACK m_copyback 1427262685Sdelphij# endif 142850276Speter# if (BSD >= 199306) || defined(__FreeBSD__) 142950276Speter# if (defined(__NetBSD_Version__) && (__NetBSD_Version__ < 105180000)) || \ 143050276Speter defined(__FreeBSD__) || (defined(OpenBSD) && (OpenBSD < 200206)) || \ 1431262685Sdelphij defined(_BSDI_VERSION) 143250276Speter# include <vm/vm.h> 143350276Speter# endif 143450276Speter# if !defined(__FreeBSD__) || (defined (__FreeBSD_version) && \ 1435166124Srafan (__FreeBSD_version >= 300000)) 1436262685Sdelphij# if (defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 105180000)) || \ 1437166124Srafan (defined(OpenBSD) && (OpenBSD >= 200111)) 1438262685Sdelphij# include <uvm/uvm_extern.h> 1439166124Srafan# else 1440166124Srafan# include <vm/vm_extern.h> 144150276Speterextern vm_map_t kmem_map; 144250276Speter# endif 144350276Speter# include <sys/proc.h> 1444262629Sdelphij# else /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD_version >= 300000) */ 144550276Speter# include <vm/vm_kern.h> 1446166124Srafan# endif /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD_version >= 300000) */ 144750276Speter 144850276Speter# ifdef IPFILTER_M_IPFILTER 144950276Speter# include <sys/malloc.h> 145050276SpeterMALLOC_DECLARE(M_IPFILTER); 145150276Speter# define _M_IPF M_IPFILTER 145276726Speter# else /* IPFILTER_M_IPFILTER */ 145350276Speter# ifdef M_PFIL 1454166124Srafan# define _M_IPF M_PFIL 145550276Speter# else 145650276Speter# ifdef M_IPFILTER 145750276Speter# define _M_IPF M_IPFILTER 1458166124Srafan# else 1459166124Srafan# define _M_IPF M_TEMP 146050276Speter# endif /* M_IPFILTER */ 1461166124Srafan# endif /* M_PFIL */ 146250276Speter# endif /* IPFILTER_M_IPFILTER */ 1463166124Srafan# define KMALLOC(a, b) MALLOC((a), b, sizeof(*(a)), _M_IPF, M_NOWAIT) 1464166124Srafan# define KMALLOCS(a, b, c) MALLOC((a), b, (c), _M_IPF, M_NOWAIT) 146550276Speter# define KFREE(x) FREE((x), _M_IPF) 146650276Speter# define KFREES(x,s) FREE((x), _M_IPF) 146776726Speter# define UIOMOVE(a,b,c,d) uiomove(a,b,d) 146876726Speter# define SLEEP(id, n) tsleep((id), PPAUSE|PCATCH, n, 0) 146976726Speter# define WAKEUP(id,x) wakeup(id+x) 1470166124Srafan# define GETIFP(n, v) ifunit(n) 147176726Speter# endif /* (Free)BSD */ 1472262685Sdelphij 1473166124Srafan# if !defined(USE_MUTEXES) && !defined(SPL_NET) 147450276Speter# if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199407)) || \ 147550276Speter (defined(OpenBSD) && (OpenBSD >= 200006)) 147650276Speter# define SPL_NET(x) x = splsoftnet() 147750276Speter# else 1478166124Srafan# define SPL_IMP(x) x = splimp() 1479166124Srafan# define SPL_NET(x) x = splnet() 1480166124Srafan# endif /* NetBSD && (NetBSD <= 1991011) && (NetBSD >= 199407) */ 148150276Speter# define SPL_X(x) (void) splx(x) 148250276Speter# endif /* !USE_MUTEXES */ 148350276Speter 148450276Speter# ifndef FREE_MB_T 1485166124Srafan# define FREE_MB_T(m) m_freem(m) 148650276Speter# endif 148750276Speter 148850276Speter# ifndef MTOD 148950276Speter# define MTOD(m,t) mtod(m,t) 149050276Speter# endif 149150276Speter 149250276Speter# ifndef COPYIN 149350276Speter# define COPYIN(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 1494166124Srafan# define COPYOUT(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 149550276Speter# define BCOPYIN(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 1496166124Srafan# define BCOPYOUT(a,b,c) (bcopy((caddr_t)(a), (caddr_t)(b), (c)), 0) 149750276Speter# endif 149850276Speter 149950276Speter# ifndef KMALLOC 150050276Speter# define KMALLOC(a,b) (a) = (b)new_kmem_alloc(sizeof(*(a)), \ 150150276Speter KMEM_NOSLEEP) 1502166124Srafan# define KMALLOCS(a,b,c) (a) = (b)new_kmem_alloc((c), KMEM_NOSLEEP) 150350276Speter# endif 1504166124Srafan 1505166124Srafan# ifndef GET_MINOR 150650276Speter# define GET_MINOR(x) minor(x) 150750276Speter# endif 150850276Speter# define PANIC(x,y) if (x) panic y 150950276Speter#endif /* _KERNEL */ 151050276Speter 1511166124Srafan#ifndef IFNAME 1512166124Srafan# define IFNAME(x) ((struct ifnet *)x)->if_name 151350276Speter#endif 151450276Speter#ifndef COPYIFNAME 1515166124Srafan# define NEED_FRGETIFNAME 1516166124Srafanextern char *fr_getifname __P((struct ifnet *, char *)); 1517262629Sdelphij# define COPYIFNAME(x, b) \ 1518166124Srafan fr_getifname((struct ifnet *)x, b) 151950276Speter#endif 1520166124Srafan 152150276Speter#ifndef ASSERT 152250276Speter# define ASSERT(x) 1523166124Srafan#endif 1524166124Srafan 1525166124Srafan/* 1526166124Srafan * Because the ctype(3) posix definition, if used "safely" in code everywhere, 1527166124Srafan * would mean all normal code that walks through strings needed casts. Yuck. 152850276Speter */ 152950276Speter#define ISALNUM(x) isalnum((u_char)(x)) 153050276Speter#define ISALPHA(x) isalpha((u_char)(x)) 1531166124Srafan#define ISASCII(x) isascii((u_char)(x)) 1532166124Srafan#define ISDIGIT(x) isdigit((u_char)(x)) 153350276Speter#define ISPRINT(x) isprint((u_char)(x)) 1534166124Srafan#define ISSPACE(x) isspace((u_char)(x)) 1535166124Srafan#define ISUPPER(x) isupper((u_char)(x)) 153650276Speter#define ISXDIGIT(x) isxdigit((u_char)(x)) 153750276Speter#define ISLOWER(x) islower((u_char)(x)) 153850276Speter#define TOUPPER(x) toupper((u_char)(x)) 1539166124Srafan#define TOLOWER(x) tolower((u_char)(x)) 154050276Speter 154150276Speter/* 154250276Speter * If mutexes aren't being used, turn all the mutex functions into null-ops. 1543166124Srafan */ 154450276Speter#if !defined(USE_MUTEXES) 1545166124Srafan# define USE_SPL 1 1546166124Srafan# undef RW_DESTROY 1547166124Srafan# undef MUTEX_INIT 154850276Speter# undef MUTEX_NUKE 154950276Speter# undef MUTEX_DESTROY 155050276Speter# define MUTEX_ENTER(x) ; 155150276Speter# define READ_ENTER(x) ; 155250276Speter# define WRITE_ENTER(x) ; 1553166124Srafan# define MUTEX_DOWNGRADE(x) ; 1554166124Srafan# define RWLOCK_INIT(x, y) ; 155550276Speter# define RWLOCK_EXIT(x) ; 1556166124Srafan# define RW_DESTROY(x) ; 1557166124Srafan# define MUTEX_EXIT(x) ; 1558166124Srafan# define MUTEX_INIT(x,y) ; 1559262629Sdelphij# define MUTEX_DESTROY(x) ; 1560166124Srafan# define MUTEX_NUKE(x) ; 156150276Speter#endif /* !USE_MUTEXES */ 1562166124Srafan#ifndef ATOMIC_INC 156350276Speter# define ATOMIC_INC(x) (x)++ 156450276Speter# define ATOMIC_DEC(x) (x)-- 1565166124Srafan#endif 1566166124Srafan 156750276Speter/* 156850276Speter * If there are no atomic operations for bit sizes defined, define them to all 156950276Speter * use a generic one that works for all sizes. 1570166124Srafan */ 157150276Speter#ifndef ATOMIC_INCL 157250276Speter# define ATOMIC_INCL ATOMIC_INC 157350276Speter# define ATOMIC_INC64 ATOMIC_INC 1574166124Srafan# define ATOMIC_INC32 ATOMIC_INC 157550276Speter# define ATOMIC_INC16 ATOMIC_INC 1576166124Srafan# define ATOMIC_DECL ATOMIC_DEC 157750276Speter# define ATOMIC_DEC64 ATOMIC_DEC 157850276Speter# define ATOMIC_DEC32 ATOMIC_DEC 157950276Speter# define ATOMIC_DEC16 ATOMIC_DEC 158050276Speter#endif 158150276Speter 1582166124Srafan#ifndef HDR_T_PRIVATE 1583166124Srafantypedef struct tcphdr tcphdr_t; 158450276Spetertypedef struct udphdr udphdr_t; 158550276Speter#endif 158650276Spetertypedef struct icmp icmphdr_t; 1587262629Sdelphijtypedef struct ip ip_t; 1588166124Srafantypedef struct ether_header ether_header_t; 158950276Spetertypedef struct tcpiphdr tcpiphdr_t; 159050276Speter 1591166124Srafan#ifndef FR_GROUPLEN 1592166124Srafan# define FR_GROUPLEN 16 159350276Speter#endif 159450276Speter 1595166124Srafan#ifdef offsetof 159650276Speter# undef offsetof 159750276Speter#endif 1598166124Srafan#ifndef offsetof 159950276Speter# define offsetof(t,m) (int)((&((t *)0L)->m)) 160050276Speter#endif 160150276Speter 1602166124Srafan/* 160350276Speter * This set of macros has been brought about because on Tru64 it is not 1604166124Srafan * possible to easily assign or examine values in a structure that are 160550276Speter * bit fields. 160650276Speter */ 160750276Speter#ifndef IP_V 160850276Speter# define IP_V(x) (x)->ip_v 160950276Speter#endif 1610166124Srafan#ifndef IP_V_A 1611166124Srafan# define IP_V_A(x,y) (x)->ip_v = (y) 161250276Speter#endif 1613262629Sdelphij#ifndef IP_HL 1614166124Srafan# define IP_HL(x) (x)->ip_hl 161550276Speter#endif 161650276Speter#ifndef IP_HL_A 1617166124Srafan# define IP_HL_A(x,y) (x)->ip_hl = (y) 161850276Speter#endif 161950276Speter#ifndef TCP_X2 1620166124Srafan# define TCP_X2(x) (x)->th_x2 162150276Speter#endif 162250276Speter#ifndef TCP_X2_A 162350276Speter# define TCP_X2_A(x,y) (x)->th_x2 = (y) 1624166124Srafan#endif 162550276Speter#ifndef TCP_OFF 1626166124Srafan# define TCP_OFF(x) (x)->th_off 162750276Speter#endif 162850276Speter#ifndef TCP_OFF_A 162950276Speter# define TCP_OFF_A(x,y) (x)->th_off = (y) 163050276Speter#endif 163150276Speter#define IPMINLEN(i, h) ((i)->ip_len >= (IP_HL(i) * 4 + sizeof(struct h))) 1632166124Srafan 1633166124Srafan 163450276Speter/* 163550276Speter * XXX - This is one of those *awful* hacks which nobody likes 1636166124Srafan */ 1637166124Srafan#ifdef ultrix 1638166124Srafan#define A_A 163950276Speter#else 1640262629Sdelphij#define A_A & 1641166124Srafan#endif 164250276Speter 164350276Speter#define TCPF_ALL (TH_FIN|TH_SYN|TH_RST|TH_PUSH|TH_ACK|TH_URG|\ 164450276Speter TH_ECN|TH_CWR) 164550276Speter 1646166124Srafan#if (BSD >= 199306) && !defined(m_act) 1647166124Srafan# define m_act m_nextpkt 1648166124Srafan#endif 164950276Speter 165050276Speter/* 165150276Speter * Security Options for Intenet Protocol (IPSO) as defined in RFC 1108. 1652166124Srafan * 165350276Speter * Basic Option 165450276Speter * 1655166124Srafan * 00000001 - (Reserved 4) 1656166124Srafan * 00111101 - Top Secret 165750276Speter * 01011010 - Secret 165850276Speter * 10010110 - Confidential 165950276Speter * 01100110 - (Reserved 3) 1660166124Srafan * 11001100 - (Reserved 2) 1661166124Srafan * 10101011 - Unclassified 166250276Speter * 11110001 - (Reserved 1) 166350276Speter */ 166450276Speter#define IPSO_CLASS_RES4 0x01 166550276Speter#define IPSO_CLASS_TOPS 0x3d 1666166124Srafan#define IPSO_CLASS_SECR 0x5a 166750276Speter#define IPSO_CLASS_CONF 0x96 1668166124Srafan#define IPSO_CLASS_RES3 0x66 166950276Speter#define IPSO_CLASS_RES2 0xcc 167050276Speter#define IPSO_CLASS_UNCL 0xab 167150276Speter#define IPSO_CLASS_RES1 0xf1 167250276Speter 167350276Speter#define IPSO_AUTH_GENSER 0x80 1674166124Srafan#define IPSO_AUTH_ESI 0x40 1675166124Srafan#define IPSO_AUTH_SCI 0x20 167650276Speter#define IPSO_AUTH_NSA 0x10 167750276Speter#define IPSO_AUTH_DOE 0x08 1678166124Srafan#define IPSO_AUTH_UN 0x06 1679166124Srafan#define IPSO_AUTH_FTE 0x01 1680166124Srafan 1681166124Srafan/* 168250276Speter * IP option #defines 1683262629Sdelphij */ 1684166124Srafan#undef IPOPT_RR 168550276Speter#define IPOPT_RR 7 168650276Speter#undef IPOPT_ZSU 168750276Speter#define IPOPT_ZSU 10 /* ZSU */ 1688166124Srafan#undef IPOPT_MTUP 168950276Speter#define IPOPT_MTUP 11 /* MTUP */ 169050276Speter#undef IPOPT_MTUR 169150276Speter#define IPOPT_MTUR 12 /* MTUR */ 169250276Speter#undef IPOPT_ENCODE 1693166124Srafan#define IPOPT_ENCODE 15 /* ENCODE */ 169450276Speter#undef IPOPT_TS 1695166124Srafan#define IPOPT_TS 68 169650276Speter#undef IPOPT_TR 169750276Speter#define IPOPT_TR 82 /* TR */ 1698166124Srafan#undef IPOPT_SECURITY 1699166124Srafan#define IPOPT_SECURITY 130 1700166124Srafan#undef IPOPT_LSRR 170150276Speter#define IPOPT_LSRR 131 1702166124Srafan#undef IPOPT_E_SEC 1703166124Srafan#define IPOPT_E_SEC 133 /* E-SEC */ 170450276Speter#undef IPOPT_CIPSO 170550276Speter#define IPOPT_CIPSO 134 /* CIPSO */ 1706166124Srafan#undef IPOPT_SATID 1707166124Srafan#define IPOPT_SATID 136 1708166124Srafan#ifndef IPOPT_SID 1709166124Srafan# define IPOPT_SID IPOPT_SATID 171050276Speter#endif 1711166124Srafan#undef IPOPT_SSRR 1712166124Srafan#define IPOPT_SSRR 137 171350276Speter#undef IPOPT_ADDEXT 171450276Speter#define IPOPT_ADDEXT 147 /* ADDEXT */ 1715166124Srafan#undef IPOPT_VISA 1716166124Srafan#define IPOPT_VISA 142 /* VISA */ 171750276Speter#undef IPOPT_IMITD 171850276Speter#define IPOPT_IMITD 144 /* IMITD */ 171950276Speter#undef IPOPT_EIP 1720166124Srafan#define IPOPT_EIP 145 /* EIP */ 172150276Speter#undef IPOPT_RTRALRT 1722166124Srafan#define IPOPT_RTRALRT 148 /* RTRALRT */ 172350276Speter#undef IPOPT_SDB 1724166124Srafan#define IPOPT_SDB 149 172550276Speter#undef IPOPT_NSAPA 1726166124Srafan#define IPOPT_NSAPA 150 172750276Speter#undef IPOPT_DPS 1728166124Srafan#define IPOPT_DPS 151 1729166124Srafan#undef IPOPT_UMP 173050276Speter#define IPOPT_UMP 152 173150276Speter#undef IPOPT_FINN 173250276Speter#define IPOPT_FINN 205 /* FINN */ 1733262629Sdelphij 173450276Speter#ifndef TCPOPT_EOL 173550276Speter# define TCPOPT_EOL 0 1736166124Srafan#endif 1737166124Srafan#ifndef TCPOPT_NOP 173850276Speter# define TCPOPT_NOP 1 173950276Speter#endif 174050276Speter#ifndef TCPOPT_MAXSEG 1741166124Srafan# define TCPOPT_MAXSEG 2 174250276Speter#endif 1743166124Srafan#ifndef TCPOLEN_MAXSEG 174450276Speter# define TCPOLEN_MAXSEG 4 174550276Speter#endif 1746166124Srafan#ifndef TCPOPT_WINDOW 174750276Speter# define TCPOPT_WINDOW 3 174850276Speter#endif 174950276Speter#ifndef TCPOLEN_WINDOW 175050276Speter# define TCPOLEN_WINDOW 3 1751166124Srafan#endif 1752166124Srafan#ifndef TCPOPT_SACK_PERMITTED 175350276Speter# define TCPOPT_SACK_PERMITTED 4 175450276Speter#endif 1755166124Srafan#ifndef TCPOLEN_SACK_PERMITTED 175650276Speter# define TCPOLEN_SACK_PERMITTED 2 1757262629Sdelphij#endif 175850276Speter#ifndef TCPOPT_SACK 1759166124Srafan# define TCPOPT_SACK 5 1760166124Srafan#endif 176150276Speter#ifndef TCPOPT_TIMESTAMP 1762166124Srafan# define TCPOPT_TIMESTAMP 8 1763166124Srafan#endif 176450276Speter 176550276Speter#ifndef ICMP_MINLEN 176650276Speter# define ICMP_MINLEN 8 1767166124Srafan#endif 176850276Speter#ifndef ICMP_ECHOREPLY 1769166124Srafan# define ICMP_ECHOREPLY 0 177050276Speter#endif 177150276Speter#ifndef ICMP_UNREACH 177250276Speter# define ICMP_UNREACH 3 177350276Speter#endif 177450276Speter#ifndef ICMP_UNREACH_NET 1775166124Srafan# define ICMP_UNREACH_NET 0 1776166124Srafan#endif 177750276Speter#ifndef ICMP_UNREACH_HOST 177850276Speter# define ICMP_UNREACH_HOST 1 177950276Speter#endif 1780262629Sdelphij#ifndef ICMP_UNREACH_PROTOCOL 178150276Speter# define ICMP_UNREACH_PROTOCOL 2 178250276Speter#endif 1783166124Srafan#ifndef ICMP_UNREACH_PORT 1784166124Srafan# define ICMP_UNREACH_PORT 3 1785166124Srafan#endif 178650276Speter#ifndef ICMP_UNREACH_NEEDFRAG 178750276Speter# define ICMP_UNREACH_NEEDFRAG 4 178850276Speter#endif 1789166124Srafan#ifndef ICMP_UNREACH_SRCFAIL 179050276Speter# define ICMP_UNREACH_SRCFAIL 5 1791166124Srafan#endif 179250276Speter#ifndef ICMP_UNREACH_NET_UNKNOWN 1793166124Srafan# define ICMP_UNREACH_NET_UNKNOWN 6 179450276Speter#endif 179550276Speter#ifndef ICMP_UNREACH_HOST_UNKNOWN 179650276Speter# define ICMP_UNREACH_HOST_UNKNOWN 7 179750276Speter#endif 179850276Speter#ifndef ICMP_UNREACH_ISOLATED 1799166124Srafan# define ICMP_UNREACH_ISOLATED 8 1800166124Srafan#endif 180150276Speter#ifndef ICMP_UNREACH_NET_PROHIB 180250276Speter# define ICMP_UNREACH_NET_PROHIB 9 1803166124Srafan#endif 1804166124Srafan#ifndef ICMP_UNREACH_HOST_PROHIB 180550276Speter# define ICMP_UNREACH_HOST_PROHIB 10 1806262629Sdelphij#endif 180750276Speter#ifndef ICMP_UNREACH_TOSNET 1808166124Srafan# define ICMP_UNREACH_TOSNET 11 1809166124Srafan#endif 181050276Speter#ifndef ICMP_UNREACH_TOSHOST 181150276Speter# define ICMP_UNREACH_TOSHOST 12 1812166124Srafan#endif 1813166124Srafan#ifndef ICMP_UNREACH_ADMIN_PROHIBIT 181450276Speter# define ICMP_UNREACH_ADMIN_PROHIBIT 13 181550276Speter#endif 181650276Speter#ifndef ICMP_UNREACH_FILTER 1817166124Srafan# define ICMP_UNREACH_FILTER 13 181850276Speter#endif 1819166124Srafan#ifndef ICMP_UNREACH_HOST_PRECEDENCE 182050276Speter# define ICMP_UNREACH_HOST_PRECEDENCE 14 1821166124Srafan#endif 182250276Speter#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF 182350276Speter# define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 182450276Speter#endif 182550276Speter#ifndef ICMP_SOURCEQUENCH 1826166124Srafan# define ICMP_SOURCEQUENCH 4 1827166124Srafan#endif 182850276Speter#ifndef ICMP_REDIRECT_NET 1829166124Srafan# define ICMP_REDIRECT_NET 0 1830166124Srafan#endif 1831166124Srafan#ifndef ICMP_REDIRECT_HOST 1832262629Sdelphij# define ICMP_REDIRECT_HOST 1 1833166124Srafan#endif 183450276Speter#ifndef ICMP_REDIRECT_TOSNET 1835166124Srafan# define ICMP_REDIRECT_TOSNET 2 1836166124Srafan#endif 183750276Speter#ifndef ICMP_REDIRECT_TOSHOST 1838166124Srafan# define ICMP_REDIRECT_TOSHOST 3 183950276Speter#endif 184050276Speter#ifndef ICMP_ALTHOSTADDR 184150276Speter# define ICMP_ALTHOSTADDR 6 1842166124Srafan#endif 184350276Speter#ifndef ICMP_TIMXCEED 1844166124Srafan# define ICMP_TIMXCEED 11 184550276Speter#endif 184650276Speter#ifndef ICMP_TIMXCEED_INTRANS 184750276Speter# define ICMP_TIMXCEED_INTRANS 0 184850276Speter#endif 184950276Speter#ifndef ICMP_TIMXCEED_REASS 185050276Speter# define ICMP_TIMXCEED_REASS 1 1851166124Srafan#endif 1852166124Srafan#ifndef ICMP_PARAMPROB 185350276Speter# define ICMP_PARAMPROB 12 1854166124Srafan#endif 1855166124Srafan#ifndef ICMP_PARAMPROB_ERRATPTR 1856166124Srafan# define ICMP_PARAMPROB_ERRATPTR 0 1857262629Sdelphij#endif 1858166124Srafan#ifndef ICMP_PARAMPROB_OPTABSENT 185950276Speter# define ICMP_PARAMPROB_OPTABSENT 1 186050276Speter#endif 186150276Speter#ifndef ICMP_PARAMPROB_LENGTH 1862166124Srafan# define ICMP_PARAMPROB_LENGTH 2 1863166124Srafan#endif 1864166124Srafan#ifndef ICMP_TSTAMP 186550276Speter# define ICMP_TSTAMP 13 1866166124Srafan#endif 1867166124Srafan#ifndef ICMP_TSTAMPREPLY 186850276Speter# define ICMP_TSTAMPREPLY 14 1869166124Srafan#endif 187050276Speter#ifndef ICMP_IREQ 187150276Speter# define ICMP_IREQ 15 187250276Speter#endif 1873166124Srafan#ifndef ICMP_IREQREPLY 187450276Speter# define ICMP_IREQREPLY 16 1875166124Srafan#endif 187650276Speter#ifndef ICMP_MASKREQ 187750276Speter# define ICMP_MASKREQ 17 187850276Speter#endif 187950276Speter#ifndef ICMP_MASKREPLY 188050276Speter# define ICMP_MASKREPLY 18 188150276Speter#endif 1882166124Srafan#ifndef ICMP_TRACEROUTE 1883166124Srafan# define ICMP_TRACEROUTE 30 188450276Speter#endif 1885262629Sdelphij#ifndef ICMP_DATACONVERR 1886166124Srafan# define ICMP_DATACONVERR 31 188750276Speter#endif 188850276Speter#ifndef ICMP_MOBILE_REDIRECT 1889166124Srafan# define ICMP_MOBILE_REDIRECT 32 189050276Speter#endif 1891166124Srafan#ifndef ICMP_IPV6_WHEREAREYOU 189250276Speter# define ICMP_IPV6_WHEREAREYOU 33 189350276Speter#endif 189450276Speter#ifndef ICMP_IPV6_IAMHERE 1895166124Srafan# define ICMP_IPV6_IAMHERE 34 189650276Speter#endif 1897166124Srafan#ifndef ICMP_MOBILE_REGREQUEST 189850276Speter# define ICMP_MOBILE_REGREQUEST 35 189950276Speter#endif 190050276Speter#ifndef ICMP_MOBILE_REGREPLY 190150276Speter# define ICMP_MOBILE_REGREPLY 36 190250276Speter#endif 190350276Speter#ifndef ICMP_SKIP 1904166124Srafan# define ICMP_SKIP 39 1905166124Srafan#endif 190650276Speter#ifndef ICMP_PHOTURIS 190750276Speter# define ICMP_PHOTURIS 40 190850276Speter#endif 1909262629Sdelphij#ifndef ICMP_PHOTURIS_UNKNOWN_INDEX 1910166124Srafan# define ICMP_PHOTURIS_UNKNOWN_INDEX 1 191150276Speter#endif 191250276Speter#ifndef ICMP_PHOTURIS_AUTH_FAILED 1913166124Srafan# define ICMP_PHOTURIS_AUTH_FAILED 2 1914166124Srafan#endif 191550276Speter#ifndef ICMP_PHOTURIS_DECRYPT_FAILED 191650276Speter# define ICMP_PHOTURIS_DECRYPT_FAILED 3 1917166124Srafan#endif 191850276Speter#ifndef IPVERSION 1919166124Srafan# define IPVERSION 4 192050276Speter#endif 192150276Speter#ifndef IPOPT_MINOFF 1922166124Srafan# define IPOPT_MINOFF 4 192350276Speter#endif 1924166124Srafan#ifndef IPOPT_COPIED 192550276Speter# define IPOPT_COPIED(x) ((x)&0x80) 192650276Speter#endif 192750276Speter#ifndef IPOPT_EOL 192850276Speter# define IPOPT_EOL 0 192950276Speter#endif 1930166124Srafan#ifndef IPOPT_NOP 1931166124Srafan# define IPOPT_NOP 1 193250276Speter#endif 1933166124Srafan#ifndef IP_MF 1934166124Srafan# define IP_MF ((u_short)0x2000) 193550276Speter#endif 1936166124Srafan#ifndef ETHERTYPE_IP 193750276Speter# define ETHERTYPE_IP ((u_short)0x0800) 193850276Speter#endif 1939166124Srafan#ifndef TH_FIN 1940166124Srafan# define TH_FIN 0x01 194150276Speter#endif 194250276Speter#ifndef TH_SYN 194350276Speter# define TH_SYN 0x02 1944166124Srafan#endif 194550276Speter#ifndef TH_RST 1946166124Srafan# define TH_RST 0x04 194750276Speter#endif 1948166124Srafan#ifndef TH_PUSH 194950276Speter# define TH_PUSH 0x08 195050276Speter#endif 195150276Speter#ifndef TH_ACK 195250276Speter# define TH_ACK 0x10 195350276Speter#endif 195450276Speter#ifndef TH_URG 195550276Speter# define TH_URG 0x20 195650276Speter#endif 195750276Speter#undef TH_ACKMASK 195850276Speter#define TH_ACKMASK (TH_FIN|TH_SYN|TH_RST|TH_ACK) 195950276Speter 196050276Speter#ifndef IPOPT_EOL 196150276Speter# define IPOPT_EOL 0 1962166124Srafan#endif 196350276Speter#ifndef IPOPT_NOP 196450276Speter# define IPOPT_NOP 1 196550276Speter#endif 196650276Speter#ifndef IPOPT_RR 196750276Speter# define IPOPT_RR 7 196850276Speter#endif 196950276Speter#ifndef IPOPT_TS 1970166124Srafan# define IPOPT_TS 68 197150276Speter#endif 197250276Speter#ifndef IPOPT_SECURITY 197350276Speter# define IPOPT_SECURITY 130 197450276Speter#endif 1975166124Srafan#ifndef IPOPT_LSRR 197650276Speter# define IPOPT_LSRR 131 197750276Speter#endif 197850276Speter#ifndef IPOPT_SATID 197950276Speter# define IPOPT_SATID 136 198050276Speter#endif 1981166124Srafan#ifndef IPOPT_SSRR 198250276Speter# define IPOPT_SSRR 137 198350276Speter#endif 198450276Speter#ifndef IPOPT_SECUR_UNCLASS 1985166124Srafan# define IPOPT_SECUR_UNCLASS ((u_short)0x0000) 1986166124Srafan#endif 198750276Speter#ifndef IPOPT_SECUR_CONFID 1988166124Srafan# define IPOPT_SECUR_CONFID ((u_short)0xf135) 198950276Speter#endif 199050276Speter#ifndef IPOPT_SECUR_EFTO 199150276Speter# define IPOPT_SECUR_EFTO ((u_short)0x789a) 1992166124Srafan#endif 1993166124Srafan#ifndef IPOPT_SECUR_MMMM 199450276Speter# define IPOPT_SECUR_MMMM ((u_short)0xbc4d) 199550276Speter#endif 199650276Speter#ifndef IPOPT_SECUR_RESTR 199750276Speter# define IPOPT_SECUR_RESTR ((u_short)0xaf13) 199850276Speter#endif 199950276Speter#ifndef IPOPT_SECUR_SECRET 200050276Speter# define IPOPT_SECUR_SECRET ((u_short)0xd788) 2001262685Sdelphij#endif 200250276Speter#ifndef IPOPT_SECUR_TOPSECRET 2003166124Srafan# define IPOPT_SECUR_TOPSECRET ((u_short)0x6bc5) 200450276Speter#endif 200550276Speter#ifndef IPOPT_OLEN 200650276Speter# define IPOPT_OLEN 1 2007166124Srafan#endif 200850276Speter#ifndef IPPROTO_HOPOPTS 2009166124Srafan# define IPPROTO_HOPOPTS 0 201050276Speter#endif 201150276Speter#ifndef IPPROTO_ENCAP 201250276Speter# define IPPROTO_ENCAP 4 201350276Speter#endif 201450276Speter#ifndef IPPROTO_IPV6 2015166124Srafan# define IPPROTO_IPV6 41 2016166124Srafan#endif 201750276Speter#ifndef IPPROTO_ROUTING 2018262629Sdelphij# define IPPROTO_ROUTING 43 2019166124Srafan#endif 202050276Speter#ifndef IPPROTO_FRAGMENT 202150276Speter# define IPPROTO_FRAGMENT 44 202250276Speter#endif 2023166124Srafan#ifndef IPPROTO_GRE 202450276Speter# define IPPROTO_GRE 47 /* GRE encaps RFC 1701 */ 2025166124Srafan#endif 202650276Speter#ifndef IPPROTO_ESP 202750276Speter# define IPPROTO_ESP 50 202850276Speter#endif 202950276Speter#ifndef IPPROTO_AH 203050276Speter# define IPPROTO_AH 51 2031166124Srafan#endif 2032166124Srafan#ifndef IPPROTO_ICMPV6 203350276Speter# define IPPROTO_ICMPV6 58 2034262629Sdelphij#endif 2035166124Srafan#ifndef IPPROTO_NONE 203650276Speter# define IPPROTO_NONE 59 203750276Speter#endif 203850276Speter#ifndef IPPROTO_DSTOPTS 2039166124Srafan# define IPPROTO_DSTOPTS 60 204050276Speter#endif 2041166124Srafan#ifndef IPPROTO_FRAGMENT 204250276Speter# define IPPROTO_FRAGMENT 44 204350276Speter#endif 204450276Speter#ifndef ICMP_ROUTERADVERT 204550276Speter# define ICMP_ROUTERADVERT 9 204650276Speter#endif 2047166124Srafan#ifndef ICMP_ROUTERSOLICIT 2048166124Srafan# define ICMP_ROUTERSOLICIT 10 204950276Speter#endif 2050262629Sdelphij#ifndef ICMP6_DST_UNREACH 2051166124Srafan# define ICMP6_DST_UNREACH 1 205250276Speter#endif 205350276Speter#ifndef ICMP6_PACKET_TOO_BIG 205450276Speter# define ICMP6_PACKET_TOO_BIG 2 2055166124Srafan#endif 205650276Speter#ifndef ICMP6_TIME_EXCEEDED 2057166124Srafan# define ICMP6_TIME_EXCEEDED 3 205850276Speter#endif 205950276Speter#ifndef ICMP6_PARAM_PROB 206050276Speter# define ICMP6_PARAM_PROB 4 206150276Speter#endif 206250276Speter 2063166124Srafan#ifndef ICMP6_ECHO_REQUEST 2064166124Srafan# define ICMP6_ECHO_REQUEST 128 206550276Speter#endif 2066262629Sdelphij#ifndef ICMP6_ECHO_REPLY 2067166124Srafan# define ICMP6_ECHO_REPLY 129 206850276Speter#endif 206950276Speter#ifndef ICMP6_MEMBERSHIP_QUERY 207050276Speter# define ICMP6_MEMBERSHIP_QUERY 130 2071166124Srafan#endif 207250276Speter#ifndef MLD6_LISTENER_QUERY 2073166124Srafan# define MLD6_LISTENER_QUERY 130 207450276Speter#endif 207550276Speter#ifndef ICMP6_MEMBERSHIP_REPORT 207650276Speter# define ICMP6_MEMBERSHIP_REPORT 131 207750276Speter#endif 207850276Speter#ifndef MLD6_LISTENER_REPORT 2079166124Srafan# define MLD6_LISTENER_REPORT 131 2080166124Srafan#endif 208150276Speter#ifndef ICMP6_MEMBERSHIP_REDUCTION 2082262629Sdelphij# define ICMP6_MEMBERSHIP_REDUCTION 132 2083166124Srafan#endif 208450276Speter#ifndef MLD6_LISTENER_DONE 208550276Speter# define MLD6_LISTENER_DONE 132 208650276Speter#endif 2087166124Srafan#ifndef ND_ROUTER_SOLICIT 208850276Speter# define ND_ROUTER_SOLICIT 133 2089166124Srafan#endif 209050276Speter#ifndef ND_ROUTER_ADVERT 209150276Speter# define ND_ROUTER_ADVERT 134 209250276Speter#endif 209350276Speter#ifndef ND_NEIGHBOR_SOLICIT 209450276Speter# define ND_NEIGHBOR_SOLICIT 135 2095166124Srafan#endif 2096166124Srafan#ifndef ND_NEIGHBOR_ADVERT 209750276Speter# define ND_NEIGHBOR_ADVERT 136 2098262629Sdelphij#endif 2099166124Srafan#ifndef ND_REDIRECT 210050276Speter# define ND_REDIRECT 137 210150276Speter#endif 210250276Speter#ifndef ICMP6_ROUTER_RENUMBERING 210350276Speter# define ICMP6_ROUTER_RENUMBERING 138 2104166124Srafan#endif 210550276Speter#ifndef ICMP6_WRUREQUEST 210650276Speter# define ICMP6_WRUREQUEST 139 210750276Speter#endif 210850276Speter#ifndef ICMP6_WRUREPLY 210950276Speter# define ICMP6_WRUREPLY 140 2110166124Srafan#endif 2111166124Srafan#ifndef ICMP6_FQDN_QUERY 211250276Speter# define ICMP6_FQDN_QUERY 139 2113166124Srafan#endif 2114166124Srafan#ifndef ICMP6_FQDN_REPLY 211550276Speter# define ICMP6_FQDN_REPLY 140 2116166124Srafan#endif 211750276Speter#ifndef ICMP6_NI_QUERY 211850276Speter# define ICMP6_NI_QUERY 139 2119166124Srafan#endif 2120166124Srafan#ifndef ICMP6_NI_REPLY 212150276Speter# define ICMP6_NI_REPLY 140 212250276Speter#endif 212350276Speter#ifndef MLD6_MTRACE_RESP 2124166124Srafan# define MLD6_MTRACE_RESP 200 212550276Speter#endif 2126166124Srafan#ifndef MLD6_MTRACE 212750276Speter# define MLD6_MTRACE 201 212850276Speter#endif 212950276Speter#ifndef ICMP6_HADISCOV_REQUEST 2130166124Srafan# define ICMP6_HADISCOV_REQUEST 202 213150276Speter#endif 213250276Speter#ifndef ICMP6_HADISCOV_REPLY 2133166124Srafan# define ICMP6_HADISCOV_REPLY 203 213450276Speter#endif 213550276Speter#ifndef ICMP6_MOBILEPREFIX_SOLICIT 213650276Speter# define ICMP6_MOBILEPREFIX_SOLICIT 204 213750276Speter#endif 213850276Speter#ifndef ICMP6_MOBILEPREFIX_ADVERT 213950276Speter# define ICMP6_MOBILEPREFIX_ADVERT 205 2140166124Srafan#endif 214150276Speter#ifndef ICMP6_MAXTYPE 214250276Speter# define ICMP6_MAXTYPE 205 214350276Speter#endif 214450276Speter 2145166124Srafan#ifndef ICMP6_DST_UNREACH_NOROUTE 214650276Speter# define ICMP6_DST_UNREACH_NOROUTE 0 214750276Speter#endif 214850276Speter#ifndef ICMP6_DST_UNREACH_ADMIN 214950276Speter# define ICMP6_DST_UNREACH_ADMIN 1 2150166124Srafan#endif 215150276Speter#ifndef ICMP6_DST_UNREACH_NOTNEIGHBOR 215250276Speter# define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 215350276Speter#endif 215450276Speter#ifndef ICMP6_DST_UNREACH_BEYONDSCOPE 2155166124Srafan# define ICMP6_DST_UNREACH_BEYONDSCOPE 2 215650276Speter#endif 215750276Speter#ifndef ICMP6_DST_UNREACH_ADDR 215850276Speter# define ICMP6_DST_UNREACH_ADDR 3 215950276Speter#endif 216050276Speter#ifndef ICMP6_DST_UNREACH_NOPORT 2161166124Srafan# define ICMP6_DST_UNREACH_NOPORT 4 216250276Speter#endif 216350276Speter#ifndef ICMP6_TIME_EXCEED_TRANSIT 216450276Speter# define ICMP6_TIME_EXCEED_TRANSIT 0 2165166124Srafan#endif 2166166124Srafan#ifndef ICMP6_TIME_EXCEED_REASSEMBLY 216750276Speter# define ICMP6_TIME_EXCEED_REASSEMBLY 1 216850276Speter#endif 216950276Speter 217050276Speter#ifndef ICMP6_NI_SUCCESS 2171166124Srafan# define ICMP6_NI_SUCCESS 0 2172166124Srafan#endif 217350276Speter#ifndef ICMP6_NI_REFUSED 217450276Speter# define ICMP6_NI_REFUSED 1 217550276Speter#endif 217650276Speter#ifndef ICMP6_NI_UNKNOWN 2177166124Srafan# define ICMP6_NI_UNKNOWN 2 217850276Speter#endif 217950276Speter 218050276Speter#ifndef ICMP6_ROUTER_RENUMBERING_COMMAND 2181166124Srafan# define ICMP6_ROUTER_RENUMBERING_COMMAND 0 218250276Speter#endif 2183166124Srafan#ifndef ICMP6_ROUTER_RENUMBERING_RESULT 218450276Speter# define ICMP6_ROUTER_RENUMBERING_RESULT 1 218550276Speter#endif 218650276Speter#ifndef ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 218750276Speter# define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 218850276Speter#endif 2189166124Srafan 2190166124Srafan#ifndef ICMP6_PARAMPROB_HEADER 219150276Speter# define ICMP6_PARAMPROB_HEADER 0 2192262629Sdelphij#endif 2193166124Srafan#ifndef ICMP6_PARAMPROB_NEXTHEADER 219450276Speter# define ICMP6_PARAMPROB_NEXTHEADER 1 219550276Speter#endif 219650276Speter#ifndef ICMP6_PARAMPROB_OPTION 2197166124Srafan# define ICMP6_PARAMPROB_OPTION 2 219850276Speter#endif 2199166124Srafan 220050276Speter#ifndef ICMP6_NI_SUBJ_IPV6 220150276Speter# define ICMP6_NI_SUBJ_IPV6 0 220250276Speter#endif 220350276Speter#ifndef ICMP6_NI_SUBJ_FQDN 220450276Speter# define ICMP6_NI_SUBJ_FQDN 1 2205166124Srafan#endif 2206166124Srafan#ifndef ICMP6_NI_SUBJ_IPV4 220750276Speter# define ICMP6_NI_SUBJ_IPV4 2 2208262629Sdelphij#endif 2209166124Srafan 221050276Speter/* 221150276Speter * ECN is a new addition to TCP - RFC 2481 221250276Speter */ 2213166124Srafan#ifndef TH_ECN 221450276Speter# define TH_ECN 0x40 2215166124Srafan#endif 221650276Speter#ifndef TH_CWR 221750276Speter# define TH_CWR 0x80 221850276Speter#endif 221950276Speter#define TH_ECNALL (TH_ECN|TH_CWR) 222050276Speter 2221166124Srafan/* 2222166124Srafan * TCP States 222350276Speter */ 2224262629Sdelphij#define IPF_TCPS_CLOSED 0 /* closed */ 2225166124Srafan#define IPF_TCPS_LISTEN 1 /* listening for connection */ 222650276Speter#define IPF_TCPS_SYN_SENT 2 /* active, have sent syn */ 222750276Speter#define IPF_TCPS_SYN_RECEIVED 3 /* have send and received syn */ 222850276Speter#define IPF_TCPS_HALF_ESTAB 4 /* for connections not fully "up" */ 2229166124Srafan/* states < IPF_TCPS_ESTABLISHED are those where connections not established */ 223050276Speter#define IPF_TCPS_ESTABLISHED 5 /* established */ 2231166124Srafan#define IPF_TCPS_CLOSE_WAIT 6 /* rcvd fin, waiting for close */ 223250276Speter/* states > IPF_TCPS_CLOSE_WAIT are those where user has closed */ 223350276Speter#define IPF_TCPS_FIN_WAIT_1 7 /* have closed, sent fin */ 223450276Speter#define IPF_TCPS_CLOSING 8 /* closed xchd FIN; await FIN ACK */ 223550276Speter#define IPF_TCPS_LAST_ACK 9 /* had fin and close; await FIN ACK */ 223650276Speter/* states > IPF_TCPS_CLOSE_WAIT && < IPF_TCPS_FIN_WAIT_2 await ACK of FIN */ 2237166124Srafan#define IPF_TCPS_FIN_WAIT_2 10 /* have closed, fin is acked */ 2238166124Srafan#define IPF_TCPS_TIME_WAIT 11 /* in 2*msl quiet wait after close */ 223950276Speter#define IPF_TCP_NSTATES 12 2240262629Sdelphij 2241166124Srafan#define TCP_MSL 120 224250276Speter 224350276Speter#undef ICMP_MAX_UNREACH 224450276Speter#define ICMP_MAX_UNREACH 14 2245166124Srafan#undef ICMP_MAXTYPE 224650276Speter#define ICMP_MAXTYPE 18 2247166124Srafan 224850276Speter#ifndef IFNAMSIZ 224950276Speter#define IFNAMSIZ 16 225050276Speter#endif 225150276Speter 225250276Speter#ifndef LOG_FTP 2253166124Srafan# define LOG_FTP (11<<3) 2254166124Srafan#endif 225550276Speter#ifndef LOG_AUTHPRIV 2256262629Sdelphij# define LOG_AUTHPRIV (10<<3) 2257166124Srafan#endif 225850276Speter#ifndef LOG_AUDIT 225950276Speter# define LOG_AUDIT (13<<3) 226050276Speter#endif 2261166124Srafan#ifndef LOG_NTP 226250276Speter# define LOG_NTP (12<<3) 2263166124Srafan#endif 226450276Speter#ifndef LOG_SECURITY 226550276Speter# define LOG_SECURITY (13<<3) 226650276Speter#endif 226750276Speter#ifndef LOG_LFMT 226850276Speter# define LOG_LFMT (14<<3) 2269166124Srafan#endif 2270166124Srafan#ifndef LOG_CONSOLE 227150276Speter# define LOG_CONSOLE (14<<3) 2272262629Sdelphij#endif 2273166124Srafan 227450276Speter/* 227550276Speter * ICMP error replies have an IP header (20 bytes), 8 bytes of ICMP data, 227650276Speter * another IP header and then 64 bits of data, totalling 56. Of course, 227750276Speter * the last 64 bits is dependant on that being available. 227850276Speter */ 2279166124Srafan#define ICMPERR_ICMPHLEN 8 228050276Speter#define ICMPERR_IPICMPHLEN (20 + 8) 228150276Speter#define ICMPERR_MINPKTLEN (20 + 8 + 20) 228250276Speter#define ICMPERR_MAXPKTLEN (20 + 8 + 20 + 8) 228350276Speter#define ICMP6ERR_MINPKTLEN (40 + 8) 228450276Speter#define ICMP6ERR_IPICMPHLEN (40 + 8 + 40) 2285166124Srafan 228650276Speter#ifndef MIN 2287166124Srafan# define MIN(a,b) (((a)<(b))?(a):(b)) 228850276Speter#endif 228950276Speter 229050276Speter#ifdef IPF_DEBUG 229150276Speter# define DPRINT(x) printf x 229250276Speter#else 229350276Speter# define DPRINT(x) 2294166124Srafan#endif 2295166124Srafan 229650276Speter#ifdef RESCUE 229750276Speter# undef IPFILTER_BPF 2298166124Srafan#endif 2299166124Srafan 230050276Speter#endif /* __IP_COMPAT_H__ */ 2301166124Srafan