xref: /aosp_15_r20/external/libpcap/pcap/bpf.h (revision 8b26181f966a6af5cf6981a6f474313de533bb28)
1*8b26181fSAndroid Build Coastguard Worker /*-
2*8b26181fSAndroid Build Coastguard Worker  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
3*8b26181fSAndroid Build Coastguard Worker  *	The Regents of the University of California.  All rights reserved.
4*8b26181fSAndroid Build Coastguard Worker  *
5*8b26181fSAndroid Build Coastguard Worker  * This code is derived from the Stanford/CMU enet packet filter,
6*8b26181fSAndroid Build Coastguard Worker  * (net/enet.c) distributed as part of 4.3BSD, and code contributed
7*8b26181fSAndroid Build Coastguard Worker  * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
8*8b26181fSAndroid Build Coastguard Worker  * Berkeley Laboratory.
9*8b26181fSAndroid Build Coastguard Worker  *
10*8b26181fSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
11*8b26181fSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
12*8b26181fSAndroid Build Coastguard Worker  * are met:
13*8b26181fSAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
14*8b26181fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
15*8b26181fSAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
16*8b26181fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
17*8b26181fSAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
18*8b26181fSAndroid Build Coastguard Worker  * 3. Neither the name of the University nor the names of its contributors
19*8b26181fSAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
20*8b26181fSAndroid Build Coastguard Worker  *    without specific prior written permission.
21*8b26181fSAndroid Build Coastguard Worker  *
22*8b26181fSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23*8b26181fSAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24*8b26181fSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*8b26181fSAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26*8b26181fSAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*8b26181fSAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28*8b26181fSAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29*8b26181fSAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30*8b26181fSAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31*8b26181fSAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32*8b26181fSAndroid Build Coastguard Worker  * SUCH DAMAGE.
33*8b26181fSAndroid Build Coastguard Worker  *
34*8b26181fSAndroid Build Coastguard Worker  *      @(#)bpf.h       7.1 (Berkeley) 5/7/91
35*8b26181fSAndroid Build Coastguard Worker  */
36*8b26181fSAndroid Build Coastguard Worker 
37*8b26181fSAndroid Build Coastguard Worker /*
38*8b26181fSAndroid Build Coastguard Worker  * This is libpcap's cut-down version of bpf.h; it includes only
39*8b26181fSAndroid Build Coastguard Worker  * the stuff needed for the code generator and the userland BPF
40*8b26181fSAndroid Build Coastguard Worker  * interpreter, and the libpcap APIs for setting filters, etc..
41*8b26181fSAndroid Build Coastguard Worker  *
42*8b26181fSAndroid Build Coastguard Worker  * "pcap-bpf.c" will include the native OS version, as it deals with
43*8b26181fSAndroid Build Coastguard Worker  * the OS's BPF implementation.
44*8b26181fSAndroid Build Coastguard Worker  *
45*8b26181fSAndroid Build Coastguard Worker  * At least two programs found by Google Code Search explicitly includes
46*8b26181fSAndroid Build Coastguard Worker  * <pcap/bpf.h> (even though <pcap.h>/<pcap/pcap.h> includes it for you),
47*8b26181fSAndroid Build Coastguard Worker  * so moving that stuff to <pcap/pcap.h> would break the build for some
48*8b26181fSAndroid Build Coastguard Worker  * programs.
49*8b26181fSAndroid Build Coastguard Worker  */
50*8b26181fSAndroid Build Coastguard Worker 
51*8b26181fSAndroid Build Coastguard Worker /*
52*8b26181fSAndroid Build Coastguard Worker  * If we've already included <net/bpf.h>, don't re-define this stuff.
53*8b26181fSAndroid Build Coastguard Worker  * We assume BSD-style multiple-include protection in <net/bpf.h>,
54*8b26181fSAndroid Build Coastguard Worker  * which is true of all but the oldest versions of FreeBSD and NetBSD,
55*8b26181fSAndroid Build Coastguard Worker  * or Tru64 UNIX-style multiple-include protection (or, at least,
56*8b26181fSAndroid Build Coastguard Worker  * Tru64 UNIX 5.x-style; I don't have earlier versions available to check),
57*8b26181fSAndroid Build Coastguard Worker  * or AIX-style multiple-include protection (or, at least, AIX 5.x-style;
58*8b26181fSAndroid Build Coastguard Worker  * I don't have earlier versions available to check), or QNX-style
59*8b26181fSAndroid Build Coastguard Worker  * multiple-include protection (as per GitHub pull request #394).
60*8b26181fSAndroid Build Coastguard Worker  *
61*8b26181fSAndroid Build Coastguard Worker  * We trust that they will define structures and macros and types in
62*8b26181fSAndroid Build Coastguard Worker  * a fashion that's source-compatible and binary-compatible with our
63*8b26181fSAndroid Build Coastguard Worker  * definitions.
64*8b26181fSAndroid Build Coastguard Worker  *
65*8b26181fSAndroid Build Coastguard Worker  * We do not check for BPF_MAJOR_VERSION, as that's defined by
66*8b26181fSAndroid Build Coastguard Worker  * <linux/filter.h>, which is directly or indirectly included in some
67*8b26181fSAndroid Build Coastguard Worker  * programs that also include pcap.h, and <linux/filter.h> doesn't
68*8b26181fSAndroid Build Coastguard Worker  * define stuff we need.  We *do* protect against <linux/filter.h>
69*8b26181fSAndroid Build Coastguard Worker  * defining various macros for BPF code itself; <linux/filter.h> says
70*8b26181fSAndroid Build Coastguard Worker  *
71*8b26181fSAndroid Build Coastguard Worker  *	Try and keep these values and structures similar to BSD, especially
72*8b26181fSAndroid Build Coastguard Worker  *	the BPF code definitions which need to match so you can share filters
73*8b26181fSAndroid Build Coastguard Worker  *
74*8b26181fSAndroid Build Coastguard Worker  * so we trust that it will define them in a fashion that's source-compatible
75*8b26181fSAndroid Build Coastguard Worker  * and binary-compatible with our definitions.
76*8b26181fSAndroid Build Coastguard Worker  *
77*8b26181fSAndroid Build Coastguard Worker  * This also provides our own multiple-include protection.
78*8b26181fSAndroid Build Coastguard Worker  */
79*8b26181fSAndroid Build Coastguard Worker #if !defined(_NET_BPF_H_) && !defined(_NET_BPF_H_INCLUDED) && !defined(_BPF_H_) && !defined(_H_BPF) && !defined(lib_pcap_bpf_h)
80*8b26181fSAndroid Build Coastguard Worker #define lib_pcap_bpf_h
81*8b26181fSAndroid Build Coastguard Worker 
82*8b26181fSAndroid Build Coastguard Worker #include <pcap/funcattrs.h>
83*8b26181fSAndroid Build Coastguard Worker #include <pcap/dlt.h>
84*8b26181fSAndroid Build Coastguard Worker 
85*8b26181fSAndroid Build Coastguard Worker #ifdef __cplusplus
86*8b26181fSAndroid Build Coastguard Worker extern "C" {
87*8b26181fSAndroid Build Coastguard Worker #endif
88*8b26181fSAndroid Build Coastguard Worker 
89*8b26181fSAndroid Build Coastguard Worker /* BSD style release date */
90*8b26181fSAndroid Build Coastguard Worker #define BPF_RELEASE 199606
91*8b26181fSAndroid Build Coastguard Worker 
92*8b26181fSAndroid Build Coastguard Worker #ifdef MSDOS /* must be 32-bit */
93*8b26181fSAndroid Build Coastguard Worker typedef long          bpf_int32;
94*8b26181fSAndroid Build Coastguard Worker typedef unsigned long bpf_u_int32;
95*8b26181fSAndroid Build Coastguard Worker #else
96*8b26181fSAndroid Build Coastguard Worker typedef	int bpf_int32;
97*8b26181fSAndroid Build Coastguard Worker typedef	u_int bpf_u_int32;
98*8b26181fSAndroid Build Coastguard Worker #endif
99*8b26181fSAndroid Build Coastguard Worker 
100*8b26181fSAndroid Build Coastguard Worker /*
101*8b26181fSAndroid Build Coastguard Worker  * Alignment macros.  BPF_WORDALIGN rounds up to the next
102*8b26181fSAndroid Build Coastguard Worker  * even multiple of BPF_ALIGNMENT.
103*8b26181fSAndroid Build Coastguard Worker  *
104*8b26181fSAndroid Build Coastguard Worker  * Tcpdump's print-pflog.c uses this, so we define it here.
105*8b26181fSAndroid Build Coastguard Worker  */
106*8b26181fSAndroid Build Coastguard Worker #ifndef __NetBSD__
107*8b26181fSAndroid Build Coastguard Worker #define BPF_ALIGNMENT sizeof(bpf_int32)
108*8b26181fSAndroid Build Coastguard Worker #else
109*8b26181fSAndroid Build Coastguard Worker #define BPF_ALIGNMENT sizeof(long)
110*8b26181fSAndroid Build Coastguard Worker #endif
111*8b26181fSAndroid Build Coastguard Worker #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
112*8b26181fSAndroid Build Coastguard Worker 
113*8b26181fSAndroid Build Coastguard Worker /*
114*8b26181fSAndroid Build Coastguard Worker  * Structure for "pcap_compile()", "pcap_setfilter()", etc..
115*8b26181fSAndroid Build Coastguard Worker  */
116*8b26181fSAndroid Build Coastguard Worker struct bpf_program {
117*8b26181fSAndroid Build Coastguard Worker 	u_int bf_len;
118*8b26181fSAndroid Build Coastguard Worker 	struct bpf_insn *bf_insns;
119*8b26181fSAndroid Build Coastguard Worker };
120*8b26181fSAndroid Build Coastguard Worker 
121*8b26181fSAndroid Build Coastguard Worker /*
122*8b26181fSAndroid Build Coastguard Worker  * The instruction encodings.
123*8b26181fSAndroid Build Coastguard Worker  *
124*8b26181fSAndroid Build Coastguard Worker  * Please inform [email protected] if you use any
125*8b26181fSAndroid Build Coastguard Worker  * of the reserved values, so that we can note that they're used
126*8b26181fSAndroid Build Coastguard Worker  * (and perhaps implement it in the reference BPF implementation
127*8b26181fSAndroid Build Coastguard Worker  * and encourage its implementation elsewhere).
128*8b26181fSAndroid Build Coastguard Worker  */
129*8b26181fSAndroid Build Coastguard Worker 
130*8b26181fSAndroid Build Coastguard Worker /*
131*8b26181fSAndroid Build Coastguard Worker  * The upper 8 bits of the opcode aren't used. BSD/OS used 0x8000.
132*8b26181fSAndroid Build Coastguard Worker  */
133*8b26181fSAndroid Build Coastguard Worker 
134*8b26181fSAndroid Build Coastguard Worker /* instruction classes */
135*8b26181fSAndroid Build Coastguard Worker #define BPF_CLASS(code) ((code) & 0x07)
136*8b26181fSAndroid Build Coastguard Worker #define		BPF_LD		0x00
137*8b26181fSAndroid Build Coastguard Worker #define		BPF_LDX		0x01
138*8b26181fSAndroid Build Coastguard Worker #define		BPF_ST		0x02
139*8b26181fSAndroid Build Coastguard Worker #define		BPF_STX		0x03
140*8b26181fSAndroid Build Coastguard Worker #define		BPF_ALU		0x04
141*8b26181fSAndroid Build Coastguard Worker #define		BPF_JMP		0x05
142*8b26181fSAndroid Build Coastguard Worker #define		BPF_RET		0x06
143*8b26181fSAndroid Build Coastguard Worker #define		BPF_MISC	0x07
144*8b26181fSAndroid Build Coastguard Worker 
145*8b26181fSAndroid Build Coastguard Worker /* ld/ldx fields */
146*8b26181fSAndroid Build Coastguard Worker #define BPF_SIZE(code)	((code) & 0x18)
147*8b26181fSAndroid Build Coastguard Worker #define		BPF_W		0x00
148*8b26181fSAndroid Build Coastguard Worker #define		BPF_H		0x08
149*8b26181fSAndroid Build Coastguard Worker #define		BPF_B		0x10
150*8b26181fSAndroid Build Coastguard Worker /*				0x18	reserved; used by BSD/OS */
151*8b26181fSAndroid Build Coastguard Worker #define BPF_MODE(code)	((code) & 0xe0)
152*8b26181fSAndroid Build Coastguard Worker #define		BPF_IMM	0x00
153*8b26181fSAndroid Build Coastguard Worker #define		BPF_ABS		0x20
154*8b26181fSAndroid Build Coastguard Worker #define		BPF_IND		0x40
155*8b26181fSAndroid Build Coastguard Worker #define		BPF_MEM		0x60
156*8b26181fSAndroid Build Coastguard Worker #define		BPF_LEN		0x80
157*8b26181fSAndroid Build Coastguard Worker #define		BPF_MSH		0xa0
158*8b26181fSAndroid Build Coastguard Worker /*				0xc0	reserved; used by BSD/OS */
159*8b26181fSAndroid Build Coastguard Worker /*				0xe0	reserved; used by BSD/OS */
160*8b26181fSAndroid Build Coastguard Worker 
161*8b26181fSAndroid Build Coastguard Worker /* alu/jmp fields */
162*8b26181fSAndroid Build Coastguard Worker #define BPF_OP(code)	((code) & 0xf0)
163*8b26181fSAndroid Build Coastguard Worker #define		BPF_ADD		0x00
164*8b26181fSAndroid Build Coastguard Worker #define		BPF_SUB		0x10
165*8b26181fSAndroid Build Coastguard Worker #define		BPF_MUL		0x20
166*8b26181fSAndroid Build Coastguard Worker #define		BPF_DIV		0x30
167*8b26181fSAndroid Build Coastguard Worker #define		BPF_OR		0x40
168*8b26181fSAndroid Build Coastguard Worker #define		BPF_AND		0x50
169*8b26181fSAndroid Build Coastguard Worker #define		BPF_LSH		0x60
170*8b26181fSAndroid Build Coastguard Worker #define		BPF_RSH		0x70
171*8b26181fSAndroid Build Coastguard Worker #define		BPF_NEG		0x80
172*8b26181fSAndroid Build Coastguard Worker #define		BPF_MOD		0x90
173*8b26181fSAndroid Build Coastguard Worker #define		BPF_XOR		0xa0
174*8b26181fSAndroid Build Coastguard Worker /*				0xb0	reserved */
175*8b26181fSAndroid Build Coastguard Worker /*				0xc0	reserved */
176*8b26181fSAndroid Build Coastguard Worker /*				0xd0	reserved */
177*8b26181fSAndroid Build Coastguard Worker /*				0xe0	reserved */
178*8b26181fSAndroid Build Coastguard Worker /*				0xf0	reserved */
179*8b26181fSAndroid Build Coastguard Worker 
180*8b26181fSAndroid Build Coastguard Worker #define		BPF_JA		0x00
181*8b26181fSAndroid Build Coastguard Worker #define		BPF_JEQ		0x10
182*8b26181fSAndroid Build Coastguard Worker #define		BPF_JGT		0x20
183*8b26181fSAndroid Build Coastguard Worker #define		BPF_JGE		0x30
184*8b26181fSAndroid Build Coastguard Worker #define		BPF_JSET	0x40
185*8b26181fSAndroid Build Coastguard Worker /*				0x50	reserved; used on BSD/OS */
186*8b26181fSAndroid Build Coastguard Worker /*				0x60	reserved */
187*8b26181fSAndroid Build Coastguard Worker /*				0x70	reserved */
188*8b26181fSAndroid Build Coastguard Worker /*				0x80	reserved */
189*8b26181fSAndroid Build Coastguard Worker /*				0x90	reserved */
190*8b26181fSAndroid Build Coastguard Worker /*				0xa0	reserved */
191*8b26181fSAndroid Build Coastguard Worker /*				0xb0	reserved */
192*8b26181fSAndroid Build Coastguard Worker /*				0xc0	reserved */
193*8b26181fSAndroid Build Coastguard Worker /*				0xd0	reserved */
194*8b26181fSAndroid Build Coastguard Worker /*				0xe0	reserved */
195*8b26181fSAndroid Build Coastguard Worker /*				0xf0	reserved */
196*8b26181fSAndroid Build Coastguard Worker #define BPF_SRC(code)	((code) & 0x08)
197*8b26181fSAndroid Build Coastguard Worker #define		BPF_K		0x00
198*8b26181fSAndroid Build Coastguard Worker #define		BPF_X		0x08
199*8b26181fSAndroid Build Coastguard Worker 
200*8b26181fSAndroid Build Coastguard Worker /* ret - BPF_K and BPF_X also apply */
201*8b26181fSAndroid Build Coastguard Worker #define BPF_RVAL(code)	((code) & 0x18)
202*8b26181fSAndroid Build Coastguard Worker #define		BPF_A		0x10
203*8b26181fSAndroid Build Coastguard Worker /*				0x18	reserved */
204*8b26181fSAndroid Build Coastguard Worker 
205*8b26181fSAndroid Build Coastguard Worker /* misc */
206*8b26181fSAndroid Build Coastguard Worker #define BPF_MISCOP(code) ((code) & 0xf8)
207*8b26181fSAndroid Build Coastguard Worker #define		BPF_TAX		0x00
208*8b26181fSAndroid Build Coastguard Worker /*				0x08	reserved */
209*8b26181fSAndroid Build Coastguard Worker /*				0x10	reserved */
210*8b26181fSAndroid Build Coastguard Worker /*				0x18	reserved */
211*8b26181fSAndroid Build Coastguard Worker /* #define	BPF_COP		0x20	NetBSD "coprocessor" extensions */
212*8b26181fSAndroid Build Coastguard Worker /*				0x28	reserved */
213*8b26181fSAndroid Build Coastguard Worker /*				0x30	reserved */
214*8b26181fSAndroid Build Coastguard Worker /*				0x38	reserved */
215*8b26181fSAndroid Build Coastguard Worker /* #define	BPF_COPX	0x40	NetBSD "coprocessor" extensions */
216*8b26181fSAndroid Build Coastguard Worker /*					also used on BSD/OS */
217*8b26181fSAndroid Build Coastguard Worker /*				0x48	reserved */
218*8b26181fSAndroid Build Coastguard Worker /*				0x50	reserved */
219*8b26181fSAndroid Build Coastguard Worker /*				0x58	reserved */
220*8b26181fSAndroid Build Coastguard Worker /*				0x60	reserved */
221*8b26181fSAndroid Build Coastguard Worker /*				0x68	reserved */
222*8b26181fSAndroid Build Coastguard Worker /*				0x70	reserved */
223*8b26181fSAndroid Build Coastguard Worker /*				0x78	reserved */
224*8b26181fSAndroid Build Coastguard Worker #define		BPF_TXA		0x80
225*8b26181fSAndroid Build Coastguard Worker /*				0x88	reserved */
226*8b26181fSAndroid Build Coastguard Worker /*				0x90	reserved */
227*8b26181fSAndroid Build Coastguard Worker /*				0x98	reserved */
228*8b26181fSAndroid Build Coastguard Worker /*				0xa0	reserved */
229*8b26181fSAndroid Build Coastguard Worker /*				0xa8	reserved */
230*8b26181fSAndroid Build Coastguard Worker /*				0xb0	reserved */
231*8b26181fSAndroid Build Coastguard Worker /*				0xb8	reserved */
232*8b26181fSAndroid Build Coastguard Worker /*				0xc0	reserved; used on BSD/OS */
233*8b26181fSAndroid Build Coastguard Worker /*				0xc8	reserved */
234*8b26181fSAndroid Build Coastguard Worker /*				0xd0	reserved */
235*8b26181fSAndroid Build Coastguard Worker /*				0xd8	reserved */
236*8b26181fSAndroid Build Coastguard Worker /*				0xe0	reserved */
237*8b26181fSAndroid Build Coastguard Worker /*				0xe8	reserved */
238*8b26181fSAndroid Build Coastguard Worker /*				0xf0	reserved */
239*8b26181fSAndroid Build Coastguard Worker /*				0xf8	reserved */
240*8b26181fSAndroid Build Coastguard Worker 
241*8b26181fSAndroid Build Coastguard Worker /*
242*8b26181fSAndroid Build Coastguard Worker  * The instruction data structure.
243*8b26181fSAndroid Build Coastguard Worker  */
244*8b26181fSAndroid Build Coastguard Worker struct bpf_insn {
245*8b26181fSAndroid Build Coastguard Worker 	u_short	code;
246*8b26181fSAndroid Build Coastguard Worker 	u_char	jt;
247*8b26181fSAndroid Build Coastguard Worker 	u_char	jf;
248*8b26181fSAndroid Build Coastguard Worker 	bpf_u_int32 k;
249*8b26181fSAndroid Build Coastguard Worker };
250*8b26181fSAndroid Build Coastguard Worker 
251*8b26181fSAndroid Build Coastguard Worker /*
252*8b26181fSAndroid Build Coastguard Worker  * Macros for insn array initializers.
253*8b26181fSAndroid Build Coastguard Worker  *
254*8b26181fSAndroid Build Coastguard Worker  * In case somebody's included <linux/filter.h>, or something else that
255*8b26181fSAndroid Build Coastguard Worker  * gives the kernel's definitions of BPF statements, get rid of its
256*8b26181fSAndroid Build Coastguard Worker  * definitions, so we can supply ours instead.  If some kernel's
257*8b26181fSAndroid Build Coastguard Worker  * definitions aren't *binary-compatible* with what BPF has had
258*8b26181fSAndroid Build Coastguard Worker  * since it first sprung from the brows of Van Jacobson and Steve
259*8b26181fSAndroid Build Coastguard Worker  * McCanne, that kernel should be fixed.
260*8b26181fSAndroid Build Coastguard Worker  */
261*8b26181fSAndroid Build Coastguard Worker #ifdef BPF_STMT
262*8b26181fSAndroid Build Coastguard Worker #undef BPF_STMT
263*8b26181fSAndroid Build Coastguard Worker #endif
264*8b26181fSAndroid Build Coastguard Worker #define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
265*8b26181fSAndroid Build Coastguard Worker #ifdef BPF_JUMP
266*8b26181fSAndroid Build Coastguard Worker #undef BPF_JUMP
267*8b26181fSAndroid Build Coastguard Worker #endif
268*8b26181fSAndroid Build Coastguard Worker #define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
269*8b26181fSAndroid Build Coastguard Worker 
270*8b26181fSAndroid Build Coastguard Worker PCAP_AVAILABLE_0_4
271*8b26181fSAndroid Build Coastguard Worker PCAP_API u_int	bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
272*8b26181fSAndroid Build Coastguard Worker 
273*8b26181fSAndroid Build Coastguard Worker PCAP_AVAILABLE_0_6
274*8b26181fSAndroid Build Coastguard Worker PCAP_API int	bpf_validate(const struct bpf_insn *f, int len);
275*8b26181fSAndroid Build Coastguard Worker 
276*8b26181fSAndroid Build Coastguard Worker PCAP_AVAILABLE_0_4
277*8b26181fSAndroid Build Coastguard Worker PCAP_API char	*bpf_image(const struct bpf_insn *, int);
278*8b26181fSAndroid Build Coastguard Worker 
279*8b26181fSAndroid Build Coastguard Worker PCAP_AVAILABLE_0_6
280*8b26181fSAndroid Build Coastguard Worker PCAP_API void	bpf_dump(const struct bpf_program *, int);
281*8b26181fSAndroid Build Coastguard Worker 
282*8b26181fSAndroid Build Coastguard Worker /*
283*8b26181fSAndroid Build Coastguard Worker  * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
284*8b26181fSAndroid Build Coastguard Worker  */
285*8b26181fSAndroid Build Coastguard Worker #define BPF_MEMWORDS 16
286*8b26181fSAndroid Build Coastguard Worker 
287*8b26181fSAndroid Build Coastguard Worker #ifdef __cplusplus
288*8b26181fSAndroid Build Coastguard Worker }
289*8b26181fSAndroid Build Coastguard Worker #endif
290*8b26181fSAndroid Build Coastguard Worker 
291*8b26181fSAndroid Build Coastguard Worker #endif /* !defined(_NET_BPF_H_) && !defined(_BPF_H_) && !defined(_H_BPF) && !defined(lib_pcap_bpf_h) */
292