1*10639SDarren.Reed@Sun.COM /* $NetBSD: bpf.h,v 1.50 2009/01/13 19:10:52 christos Exp $ */ 2*10639SDarren.Reed@Sun.COM 3*10639SDarren.Reed@Sun.COM /* 4*10639SDarren.Reed@Sun.COM * Copyright (c) 1990, 1991, 1993 5*10639SDarren.Reed@Sun.COM * The Regents of the University of California. All rights reserved. 6*10639SDarren.Reed@Sun.COM * 7*10639SDarren.Reed@Sun.COM * This code is derived from the Stanford/CMU enet packet filter, 8*10639SDarren.Reed@Sun.COM * (net/enet.c) distributed as part of 4.3BSD, and code contributed 9*10639SDarren.Reed@Sun.COM * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 10*10639SDarren.Reed@Sun.COM * Berkeley Laboratory. 11*10639SDarren.Reed@Sun.COM * 12*10639SDarren.Reed@Sun.COM * Redistribution and use in source and binary forms, with or without 13*10639SDarren.Reed@Sun.COM * modification, are permitted provided that the following conditions 14*10639SDarren.Reed@Sun.COM * are met: 15*10639SDarren.Reed@Sun.COM * 1. Redistributions of source code must retain the above copyright 16*10639SDarren.Reed@Sun.COM * notice, this list of conditions and the following disclaimer. 17*10639SDarren.Reed@Sun.COM * 2. Redistributions in binary form must reproduce the above copyright 18*10639SDarren.Reed@Sun.COM * notice, this list of conditions and the following disclaimer in the 19*10639SDarren.Reed@Sun.COM * documentation and/or other materials provided with the distribution. 20*10639SDarren.Reed@Sun.COM * 3. Neither the name of the University nor the names of its contributors 21*10639SDarren.Reed@Sun.COM * may be used to endorse or promote products derived from this software 22*10639SDarren.Reed@Sun.COM * without specific prior written permission. 23*10639SDarren.Reed@Sun.COM * 24*10639SDarren.Reed@Sun.COM * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25*10639SDarren.Reed@Sun.COM * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26*10639SDarren.Reed@Sun.COM * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27*10639SDarren.Reed@Sun.COM * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28*10639SDarren.Reed@Sun.COM * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29*10639SDarren.Reed@Sun.COM * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30*10639SDarren.Reed@Sun.COM * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31*10639SDarren.Reed@Sun.COM * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32*10639SDarren.Reed@Sun.COM * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33*10639SDarren.Reed@Sun.COM * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34*10639SDarren.Reed@Sun.COM * SUCH DAMAGE. 35*10639SDarren.Reed@Sun.COM * 36*10639SDarren.Reed@Sun.COM * @(#)bpf.h 8.2 (Berkeley) 1/9/95 37*10639SDarren.Reed@Sun.COM * @(#) Header: bpf.h,v 1.36 97/06/12 14:29:53 leres Exp (LBL) 38*10639SDarren.Reed@Sun.COM */ 39*10639SDarren.Reed@Sun.COM /* 40*10639SDarren.Reed@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 41*10639SDarren.Reed@Sun.COM * Use is subject to license terms. 42*10639SDarren.Reed@Sun.COM */ 43*10639SDarren.Reed@Sun.COM 44*10639SDarren.Reed@Sun.COM #ifndef _NET_BPF_H_ 45*10639SDarren.Reed@Sun.COM #define _NET_BPF_H_ 46*10639SDarren.Reed@Sun.COM 47*10639SDarren.Reed@Sun.COM #include <sys/time.h> 48*10639SDarren.Reed@Sun.COM #include <sys/types32.h> 49*10639SDarren.Reed@Sun.COM #include <sys/ioccom.h> 50*10639SDarren.Reed@Sun.COM 51*10639SDarren.Reed@Sun.COM /* BSD style release date */ 52*10639SDarren.Reed@Sun.COM #define BPF_RELEASE 199606 53*10639SDarren.Reed@Sun.COM 54*10639SDarren.Reed@Sun.COM typedef int bpf_int32; 55*10639SDarren.Reed@Sun.COM typedef uint_t bpf_uint_t32; 56*10639SDarren.Reed@Sun.COM typedef uint_t bpf_u_int32; 57*10639SDarren.Reed@Sun.COM 58*10639SDarren.Reed@Sun.COM /* 59*10639SDarren.Reed@Sun.COM * Alignment macros. BPF_WORDALIGN rounds up to the next 60*10639SDarren.Reed@Sun.COM * even multiple of BPF_ALIGNMENT. 61*10639SDarren.Reed@Sun.COM */ 62*10639SDarren.Reed@Sun.COM #define BPF_ALIGNMENT sizeof (uint32_t) 63*10639SDarren.Reed@Sun.COM #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1)) 64*10639SDarren.Reed@Sun.COM 65*10639SDarren.Reed@Sun.COM #define BPF_MAXINSNS 512 66*10639SDarren.Reed@Sun.COM #define BPF_DFLTBUFSIZE (1024*1024) /* default static upper limit */ 67*10639SDarren.Reed@Sun.COM #define BPF_MAXBUFSIZE (1024*1024*16) /* hard limit on sysctl'able value */ 68*10639SDarren.Reed@Sun.COM #define BPF_MINBUFSIZE 32 69*10639SDarren.Reed@Sun.COM 70*10639SDarren.Reed@Sun.COM /* 71*10639SDarren.Reed@Sun.COM * Structure for BIOCSETF. 72*10639SDarren.Reed@Sun.COM */ 73*10639SDarren.Reed@Sun.COM struct bpf_program { 74*10639SDarren.Reed@Sun.COM uint_t bf_len; 75*10639SDarren.Reed@Sun.COM struct bpf_insn *bf_insns; 76*10639SDarren.Reed@Sun.COM }; 77*10639SDarren.Reed@Sun.COM struct bpf_program32 { 78*10639SDarren.Reed@Sun.COM uint_t bf_len; 79*10639SDarren.Reed@Sun.COM caddr32_t bf_insns; 80*10639SDarren.Reed@Sun.COM }; 81*10639SDarren.Reed@Sun.COM 82*10639SDarren.Reed@Sun.COM /* 83*10639SDarren.Reed@Sun.COM * Struct returned by BIOCGSTATS and net.bpf.stats sysctl. 84*10639SDarren.Reed@Sun.COM */ 85*10639SDarren.Reed@Sun.COM struct bpf_stat { 86*10639SDarren.Reed@Sun.COM uint64_t bs_recv; /* number of packets received */ 87*10639SDarren.Reed@Sun.COM uint64_t bs_drop; /* number of packets dropped */ 88*10639SDarren.Reed@Sun.COM uint64_t bs_capt; /* number of packets captured */ 89*10639SDarren.Reed@Sun.COM uint64_t bs_padding[13]; 90*10639SDarren.Reed@Sun.COM }; 91*10639SDarren.Reed@Sun.COM 92*10639SDarren.Reed@Sun.COM /* 93*10639SDarren.Reed@Sun.COM * Struct returned by BIOCGSTATSOLD. 94*10639SDarren.Reed@Sun.COM */ 95*10639SDarren.Reed@Sun.COM struct bpf_stat_old { 96*10639SDarren.Reed@Sun.COM uint_t bs_recv; /* number of packets received */ 97*10639SDarren.Reed@Sun.COM uint_t bs_drop; /* number of packets dropped */ 98*10639SDarren.Reed@Sun.COM }; 99*10639SDarren.Reed@Sun.COM 100*10639SDarren.Reed@Sun.COM /* 101*10639SDarren.Reed@Sun.COM * Struct return by BIOCVERSION. This represents the version number of 102*10639SDarren.Reed@Sun.COM * the filter language described by the instruction encodings below. 103*10639SDarren.Reed@Sun.COM * bpf understands a program iff kernel_major == filter_major && 104*10639SDarren.Reed@Sun.COM * kernel_minor >= filter_minor, that is, if the value returned by the 105*10639SDarren.Reed@Sun.COM * running kernel has the same major number and a minor number equal 106*10639SDarren.Reed@Sun.COM * equal to or less than the filter being downloaded. Otherwise, the 107*10639SDarren.Reed@Sun.COM * results are undefined, meaning an error may be returned or packets 108*10639SDarren.Reed@Sun.COM * may be accepted haphazardly. 109*10639SDarren.Reed@Sun.COM * It has nothing to do with the source code version. 110*10639SDarren.Reed@Sun.COM */ 111*10639SDarren.Reed@Sun.COM struct bpf_version { 112*10639SDarren.Reed@Sun.COM ushort_t bv_major; 113*10639SDarren.Reed@Sun.COM ushort_t bv_minor; 114*10639SDarren.Reed@Sun.COM }; 115*10639SDarren.Reed@Sun.COM /* Current version number of filter architecture. */ 116*10639SDarren.Reed@Sun.COM #define BPF_MAJOR_VERSION 1 117*10639SDarren.Reed@Sun.COM #define BPF_MINOR_VERSION 1 118*10639SDarren.Reed@Sun.COM 119*10639SDarren.Reed@Sun.COM /* 120*10639SDarren.Reed@Sun.COM * BPF ioctls 121*10639SDarren.Reed@Sun.COM * 122*10639SDarren.Reed@Sun.COM * The first set is for compatibility with Sun's pcc style 123*10639SDarren.Reed@Sun.COM * header files. If your using gcc, we assume that you 124*10639SDarren.Reed@Sun.COM * have run fixincludes so the latter set should work. 125*10639SDarren.Reed@Sun.COM */ 126*10639SDarren.Reed@Sun.COM #define BIOCGBLEN _IOR('B', 102, uint_t) 127*10639SDarren.Reed@Sun.COM #define BIOCSBLEN _IOWR('B', 102, uint_t) 128*10639SDarren.Reed@Sun.COM #define BIOCSETF _IOW('B', 103, struct bpf_program) 129*10639SDarren.Reed@Sun.COM #define BIOCFLUSH _IO('B', 104) 130*10639SDarren.Reed@Sun.COM #define BIOCPROMISC _IO('B', 105) 131*10639SDarren.Reed@Sun.COM #define BIOCGDLT _IOR('B', 106, uint_t) 132*10639SDarren.Reed@Sun.COM #define BIOCGETIF _IOR('B', 107, struct ifreq) 133*10639SDarren.Reed@Sun.COM #define BIOCGETLIF _IOR('B', 107, struct lifreq) 134*10639SDarren.Reed@Sun.COM #define BIOCSETIF _IOW('B', 108, struct ifreq) 135*10639SDarren.Reed@Sun.COM #define BIOCSETLIF _IOW('B', 108, struct lifreq) 136*10639SDarren.Reed@Sun.COM #define BIOCGSTATS _IOR('B', 111, struct bpf_stat) 137*10639SDarren.Reed@Sun.COM #define BIOCGSTATSOLD _IOR('B', 111, struct bpf_stat_old) 138*10639SDarren.Reed@Sun.COM #define BIOCIMMEDIATE _IOW('B', 112, uint_t) 139*10639SDarren.Reed@Sun.COM #define BIOCVERSION _IOR('B', 113, struct bpf_version) 140*10639SDarren.Reed@Sun.COM #define BIOCSTCPF _IOW('B', 114, struct bpf_program) 141*10639SDarren.Reed@Sun.COM #define BIOCSUDPF _IOW('B', 115, struct bpf_program) 142*10639SDarren.Reed@Sun.COM #define BIOCGHDRCMPLT _IOR('B', 116, uint_t) 143*10639SDarren.Reed@Sun.COM #define BIOCSHDRCMPLT _IOW('B', 117, uint_t) 144*10639SDarren.Reed@Sun.COM #define BIOCSDLT _IOW('B', 118, uint_t) 145*10639SDarren.Reed@Sun.COM #define BIOCGDLTLIST _IOWR('B', 119, struct bpf_dltlist) 146*10639SDarren.Reed@Sun.COM #define BIOCGSEESENT _IOR('B', 120, uint_t) 147*10639SDarren.Reed@Sun.COM #define BIOCSSEESENT _IOW('B', 121, uint_t) 148*10639SDarren.Reed@Sun.COM #define BIOCSRTIMEOUT _IOW('B', 122, struct timeval) 149*10639SDarren.Reed@Sun.COM #define BIOCGRTIMEOUT _IOR('B', 123, struct timeval) 150*10639SDarren.Reed@Sun.COM /* 151*10639SDarren.Reed@Sun.COM */ 152*10639SDarren.Reed@Sun.COM #define BIOCSETF32 _IOW('B', 103, struct bpf_program32) 153*10639SDarren.Reed@Sun.COM #define BIOCGDLTLIST32 _IOWR('B', 119, struct bpf_dltlist32) 154*10639SDarren.Reed@Sun.COM #define BIOCSRTIMEOUT32 _IOW('B', 122, struct timeval32) 155*10639SDarren.Reed@Sun.COM #define BIOCGRTIMEOUT32 _IOR('B', 123, struct timeval32) 156*10639SDarren.Reed@Sun.COM 157*10639SDarren.Reed@Sun.COM /* 158*10639SDarren.Reed@Sun.COM * Structure prepended to each packet. This is "wire" format, so we 159*10639SDarren.Reed@Sun.COM * cannot change it unfortunately to 64 bit times on 32 bit systems [yet]. 160*10639SDarren.Reed@Sun.COM */ 161*10639SDarren.Reed@Sun.COM struct bpf_timeval { 162*10639SDarren.Reed@Sun.COM int32_t tv_sec; 163*10639SDarren.Reed@Sun.COM int32_t tv_usec; 164*10639SDarren.Reed@Sun.COM }; 165*10639SDarren.Reed@Sun.COM 166*10639SDarren.Reed@Sun.COM struct bpf_hdr { 167*10639SDarren.Reed@Sun.COM struct bpf_timeval bh_tstamp; /* time stamp */ 168*10639SDarren.Reed@Sun.COM uint32_t bh_caplen; /* length of captured portion */ 169*10639SDarren.Reed@Sun.COM uint32_t bh_datalen; /* original length of packet */ 170*10639SDarren.Reed@Sun.COM uint16_t bh_hdrlen; /* length of bpf header (this struct */ 171*10639SDarren.Reed@Sun.COM /* plus alignment padding) */ 172*10639SDarren.Reed@Sun.COM }; 173*10639SDarren.Reed@Sun.COM /* 174*10639SDarren.Reed@Sun.COM * Because the structure above is not a multiple of 4 bytes, some compilers 175*10639SDarren.Reed@Sun.COM * will insist on inserting padding; hence, sizeof(struct bpf_hdr) won't work. 176*10639SDarren.Reed@Sun.COM * Only the kernel needs to know about it; applications use bh_hdrlen. 177*10639SDarren.Reed@Sun.COM * XXX To save a few bytes on 32-bit machines, we avoid end-of-struct 178*10639SDarren.Reed@Sun.COM * XXX padding by using the size of the header data elements. This is 179*10639SDarren.Reed@Sun.COM * XXX fail-safe: on new machines, we just use the 'safe' sizeof. 180*10639SDarren.Reed@Sun.COM */ 181*10639SDarren.Reed@Sun.COM #ifdef _KERNEL 182*10639SDarren.Reed@Sun.COM #if defined(__arm32__) || defined(__i386__) || defined(__m68k__) || \ 183*10639SDarren.Reed@Sun.COM defined(__mips__) || defined(__ns32k__) || defined(__vax__) || \ 184*10639SDarren.Reed@Sun.COM defined(__sh__) || (defined(__sparc__) && !defined(__sparc64__)) 185*10639SDarren.Reed@Sun.COM #define SIZEOF_BPF_HDR 18 186*10639SDarren.Reed@Sun.COM #else 187*10639SDarren.Reed@Sun.COM #define SIZEOF_BPF_HDR sizeof (struct bpf_hdr) 188*10639SDarren.Reed@Sun.COM #endif 189*10639SDarren.Reed@Sun.COM #endif 190*10639SDarren.Reed@Sun.COM 191*10639SDarren.Reed@Sun.COM /* Pull in data-link level type codes. */ 192*10639SDarren.Reed@Sun.COM #include <net/dlt.h> 193*10639SDarren.Reed@Sun.COM 194*10639SDarren.Reed@Sun.COM /* 195*10639SDarren.Reed@Sun.COM * The instruction encodings. 196*10639SDarren.Reed@Sun.COM */ 197*10639SDarren.Reed@Sun.COM /* instruction classes */ 198*10639SDarren.Reed@Sun.COM #define BPF_CLASS(code) ((code) & 0x07) 199*10639SDarren.Reed@Sun.COM #define BPF_LD 0x00 200*10639SDarren.Reed@Sun.COM #define BPF_LDX 0x01 201*10639SDarren.Reed@Sun.COM #define BPF_ST 0x02 202*10639SDarren.Reed@Sun.COM #define BPF_STX 0x03 203*10639SDarren.Reed@Sun.COM #define BPF_ALU 0x04 204*10639SDarren.Reed@Sun.COM #define BPF_JMP 0x05 205*10639SDarren.Reed@Sun.COM #define BPF_RET 0x06 206*10639SDarren.Reed@Sun.COM #define BPF_MISC 0x07 207*10639SDarren.Reed@Sun.COM 208*10639SDarren.Reed@Sun.COM /* ld/ldx fields */ 209*10639SDarren.Reed@Sun.COM #define BPF_SIZE(code) ((code) & 0x18) 210*10639SDarren.Reed@Sun.COM #define BPF_W 0x00 211*10639SDarren.Reed@Sun.COM #define BPF_H 0x08 212*10639SDarren.Reed@Sun.COM #define BPF_B 0x10 213*10639SDarren.Reed@Sun.COM #define BPF_MODE(code) ((code) & 0xe0) 214*10639SDarren.Reed@Sun.COM #define BPF_IMM 0x00 215*10639SDarren.Reed@Sun.COM #define BPF_ABS 0x20 216*10639SDarren.Reed@Sun.COM #define BPF_IND 0x40 217*10639SDarren.Reed@Sun.COM #define BPF_MEM 0x60 218*10639SDarren.Reed@Sun.COM #define BPF_LEN 0x80 219*10639SDarren.Reed@Sun.COM #define BPF_MSH 0xa0 220*10639SDarren.Reed@Sun.COM 221*10639SDarren.Reed@Sun.COM /* alu/jmp fields */ 222*10639SDarren.Reed@Sun.COM #define BPF_OP(code) ((code) & 0xf0) 223*10639SDarren.Reed@Sun.COM #define BPF_ADD 0x00 224*10639SDarren.Reed@Sun.COM #define BPF_SUB 0x10 225*10639SDarren.Reed@Sun.COM #define BPF_MUL 0x20 226*10639SDarren.Reed@Sun.COM #define BPF_DIV 0x30 227*10639SDarren.Reed@Sun.COM #define BPF_OR 0x40 228*10639SDarren.Reed@Sun.COM #define BPF_AND 0x50 229*10639SDarren.Reed@Sun.COM #define BPF_LSH 0x60 230*10639SDarren.Reed@Sun.COM #define BPF_RSH 0x70 231*10639SDarren.Reed@Sun.COM #define BPF_NEG 0x80 232*10639SDarren.Reed@Sun.COM #define BPF_JA 0x00 233*10639SDarren.Reed@Sun.COM #define BPF_JEQ 0x10 234*10639SDarren.Reed@Sun.COM #define BPF_JGT 0x20 235*10639SDarren.Reed@Sun.COM #define BPF_JGE 0x30 236*10639SDarren.Reed@Sun.COM #define BPF_JSET 0x40 237*10639SDarren.Reed@Sun.COM #define BPF_SRC(code) ((code) & 0x08) 238*10639SDarren.Reed@Sun.COM #define BPF_K 0x00 239*10639SDarren.Reed@Sun.COM #define BPF_X 0x08 240*10639SDarren.Reed@Sun.COM 241*10639SDarren.Reed@Sun.COM /* ret - BPF_K and BPF_X also apply */ 242*10639SDarren.Reed@Sun.COM #define BPF_RVAL(code) ((code) & 0x18) 243*10639SDarren.Reed@Sun.COM #define BPF_A 0x10 244*10639SDarren.Reed@Sun.COM 245*10639SDarren.Reed@Sun.COM /* misc */ 246*10639SDarren.Reed@Sun.COM #define BPF_MISCOP(code) ((code) & 0xf8) 247*10639SDarren.Reed@Sun.COM #define BPF_TAX 0x00 248*10639SDarren.Reed@Sun.COM #define BPF_TXA 0x80 249*10639SDarren.Reed@Sun.COM 250*10639SDarren.Reed@Sun.COM /* 251*10639SDarren.Reed@Sun.COM * The instruction data structure. 252*10639SDarren.Reed@Sun.COM */ 253*10639SDarren.Reed@Sun.COM struct bpf_insn { 254*10639SDarren.Reed@Sun.COM uint16_t code; 255*10639SDarren.Reed@Sun.COM uint8_t jt; 256*10639SDarren.Reed@Sun.COM uint8_t jf; 257*10639SDarren.Reed@Sun.COM uint32_t k; 258*10639SDarren.Reed@Sun.COM }; 259*10639SDarren.Reed@Sun.COM 260*10639SDarren.Reed@Sun.COM /* 261*10639SDarren.Reed@Sun.COM * Macros for insn array initializers. 262*10639SDarren.Reed@Sun.COM */ 263*10639SDarren.Reed@Sun.COM #define BPF_STMT(code, k) { (uint16_t)(code), 0, 0, k } 264*10639SDarren.Reed@Sun.COM #define BPF_JUMP(code, k, jt, jf) { (uint16_t)(code), jt, jf, k } 265*10639SDarren.Reed@Sun.COM 266*10639SDarren.Reed@Sun.COM /* 267*10639SDarren.Reed@Sun.COM * Structure to retrieve available DLTs for the interface. 268*10639SDarren.Reed@Sun.COM */ 269*10639SDarren.Reed@Sun.COM struct bpf_dltlist { 270*10639SDarren.Reed@Sun.COM uint_t bfl_len; /* number of bfd_list array */ 271*10639SDarren.Reed@Sun.COM uint_t *bfl_list; /* array of DLTs */ 272*10639SDarren.Reed@Sun.COM }; 273*10639SDarren.Reed@Sun.COM struct bpf_dltlist32 { 274*10639SDarren.Reed@Sun.COM uint_t bfl_len; 275*10639SDarren.Reed@Sun.COM caddr32_t bfl_list; 276*10639SDarren.Reed@Sun.COM }; 277*10639SDarren.Reed@Sun.COM 278*10639SDarren.Reed@Sun.COM #ifdef _KERNEL 279*10639SDarren.Reed@Sun.COM #include <sys/mac.h> 280*10639SDarren.Reed@Sun.COM #include <sys/dls_impl.h> 281*10639SDarren.Reed@Sun.COM 282*10639SDarren.Reed@Sun.COM typedef void (*bpf_itap_fn_t)(void *, mblk_t *, boolean_t, uint_t); 283*10639SDarren.Reed@Sun.COM 284*10639SDarren.Reed@Sun.COM extern void bpfattach(uintptr_t, int, zoneid_t, int); 285*10639SDarren.Reed@Sun.COM extern void bpfdetach(uintptr_t); 286*10639SDarren.Reed@Sun.COM extern uint_t bpf_filter(struct bpf_insn *, uchar_t *, uint_t, uint_t); 287*10639SDarren.Reed@Sun.COM extern void bpf_itap(void *, mblk_t *, boolean_t, uint_t); 288*10639SDarren.Reed@Sun.COM extern void bpf_mtap(void *, mac_resource_handle_t, mblk_t *, boolean_t); 289*10639SDarren.Reed@Sun.COM extern int bpf_validate(struct bpf_insn *, int); 290*10639SDarren.Reed@Sun.COM 291*10639SDarren.Reed@Sun.COM #endif /* _KERNEL */ 292*10639SDarren.Reed@Sun.COM 293*10639SDarren.Reed@Sun.COM /* 294*10639SDarren.Reed@Sun.COM * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST). 295*10639SDarren.Reed@Sun.COM */ 296*10639SDarren.Reed@Sun.COM #define BPF_MEMWORDS 16 297*10639SDarren.Reed@Sun.COM 298*10639SDarren.Reed@Sun.COM #endif /* !_NET_BPF_H_ */ 299