1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #ifndef _NET_BPF_H_
41 #define _NET_BPF_H_
42
43
44 #define BPF_RELEASE 199606
45
46 typedef int32_t bpf_int32;
47 typedef u_int32_t bpf_u_int32;
48
49
50
51
52 #define BPF_ALIGNMENT sizeof(long)
53 #define BPF_WORDALIGN(x) (((x) + (BPF_ALIGNMENT - 1)) & ~(BPF_ALIGNMENT - 1))
54
55 #define BPF_MAXINSNS 512
56 #define BPF_MAXBUFSIZE (2 * 1024 * 1024)
57 #define BPF_MINBUFSIZE 32
58
59
60
61
62 struct bpf_program {
63 u_int bf_len;
64 struct bpf_insn *bf_insns;
65 };
66
67
68
69
70 struct bpf_stat {
71 u_int bs_recv;
72 u_int bs_drop;
73 };
74
75
76
77
78
79
80
81
82
83
84
85
86 struct bpf_version {
87 u_short bv_major;
88 u_short bv_minor;
89 };
90
91 #define BPF_MAJOR_VERSION 1
92 #define BPF_MINOR_VERSION 1
93
94
95
96
97 #define BIOCGBLEN _IOR('B',102, u_int)
98 #define BIOCSBLEN _IOWR('B',102, u_int)
99 #define BIOCSETF _IOW('B',103, struct bpf_program)
100 #define BIOCFLUSH _IO('B',104)
101 #define BIOCPROMISC _IO('B',105)
102 #define BIOCGDLT _IOR('B',106, u_int)
103 #define BIOCGETIF _IOR('B',107, struct ifreq)
104 #define BIOCSETIF _IOW('B',108, struct ifreq)
105 #define BIOCSRTIMEOUT _IOW('B',109, struct timeval)
106 #define BIOCGRTIMEOUT _IOR('B',110, struct timeval)
107 #define BIOCGSTATS _IOR('B',111, struct bpf_stat)
108 #define BIOCIMMEDIATE _IOW('B',112, u_int)
109 #define BIOCVERSION _IOR('B',113, struct bpf_version)
110 #define BIOCSRSIG _IOW('B',114, u_int)
111 #define BIOCGRSIG _IOR('B',115, u_int)
112 #define BIOCGHDRCMPLT _IOR('B',116, u_int)
113 #define BIOCSHDRCMPLT _IOW('B',117, u_int)
114 #define BIOCLOCK _IO('B',118)
115 #define BIOCSETWF _IOW('B',119, struct bpf_program)
116 #define BIOCGFILDROP _IOR('B',120, u_int)
117 #define BIOCSFILDROP _IOW('B',121, u_int)
118 #define BIOCSDLT _IOW('B',122, u_int)
119 #define BIOCGDLTLIST _IOWR('B',123, struct bpf_dltlist)
120 #define BIOCGDIRFILT _IOR('B',124, u_int)
121 #define BIOCSDIRFILT _IOW('B',125, u_int)
122
123
124
125
126 #define BPF_DIRECTION_IN 1
127 #define BPF_DIRECTION_OUT (1<<1)
128
129 struct bpf_timeval {
130 u_int32_t tv_sec;
131 u_int32_t tv_usec;
132 };
133
134
135
136
137 struct bpf_hdr {
138 struct bpf_timeval bh_tstamp;
139 u_int32_t bh_caplen;
140 u_int32_t bh_datalen;
141 u_int16_t bh_hdrlen;
142
143 };
144
145
146
147
148
149
150
151
152 #ifdef _KERNEL
153 #if defined(__arm32__) || defined(__i386__) || defined(__m68k__) || \
154 defined(__mips__) || defined(__ns32k__) || defined(__sparc__) || \
155 defined(__vax__)
156 #define SIZEOF_BPF_HDR 18
157 #else
158 #define SIZEOF_BPF_HDR sizeof(struct bpf_hdr)
159 #endif
160 #endif
161
162
163
164
165 #define DLT_NULL 0
166 #define DLT_EN10MB 1
167 #define DLT_EN3MB 2
168 #define DLT_AX25 3
169 #define DLT_PRONET 4
170 #define DLT_CHAOS 5
171 #define DLT_IEEE802 6
172 #define DLT_ARCNET 7
173 #define DLT_SLIP 8
174 #define DLT_PPP 9
175 #define DLT_FDDI 10
176 #define DLT_ATM_RFC1483 11
177 #define DLT_LOOP 12
178 #define DLT_ENC 13
179 #define DLT_RAW 14
180 #define DLT_SLIP_BSDOS 15
181 #define DLT_PPP_BSDOS 16
182 #define DLT_OLD_PFLOG 17
183 #define DLT_PFSYNC 18
184 #define DLT_PPP_ETHER 51
185 #define DLT_IEEE802_11 105
186 #define DLT_PFLOG 117
187 #define DLT_IEEE802_11_RADIO 127
188
189
190
191
192
193 #define BPF_CLASS(code) ((code) & 0x07)
194 #define BPF_LD 0x00
195 #define BPF_LDX 0x01
196 #define BPF_ST 0x02
197 #define BPF_STX 0x03
198 #define BPF_ALU 0x04
199 #define BPF_JMP 0x05
200 #define BPF_RET 0x06
201 #define BPF_MISC 0x07
202
203
204 #define BPF_SIZE(code) ((code) & 0x18)
205 #define BPF_W 0x00
206 #define BPF_H 0x08
207 #define BPF_B 0x10
208 #define BPF_MODE(code) ((code) & 0xe0)
209 #define BPF_IMM 0x00
210 #define BPF_ABS 0x20
211 #define BPF_IND 0x40
212 #define BPF_MEM 0x60
213 #define BPF_LEN 0x80
214 #define BPF_MSH 0xa0
215
216
217 #define BPF_OP(code) ((code) & 0xf0)
218 #define BPF_ADD 0x00
219 #define BPF_SUB 0x10
220 #define BPF_MUL 0x20
221 #define BPF_DIV 0x30
222 #define BPF_OR 0x40
223 #define BPF_AND 0x50
224 #define BPF_LSH 0x60
225 #define BPF_RSH 0x70
226 #define BPF_NEG 0x80
227 #define BPF_JA 0x00
228 #define BPF_JEQ 0x10
229 #define BPF_JGT 0x20
230 #define BPF_JGE 0x30
231 #define BPF_JSET 0x40
232 #define BPF_SRC(code) ((code) & 0x08)
233 #define BPF_K 0x00
234 #define BPF_X 0x08
235
236
237 #define BPF_RVAL(code) ((code) & 0x18)
238 #define BPF_A 0x10
239
240
241 #define BPF_MISCOP(code) ((code) & 0xf8)
242 #define BPF_TAX 0x00
243 #define BPF_TXA 0x80
244
245
246
247
248 struct bpf_insn {
249 u_int16_t code;
250 u_char jt;
251 u_char jf;
252 u_int32_t k;
253 };
254
255
256
257
258 struct bpf_dltlist {
259 u_int bfl_len;
260 u_int *bfl_list;
261 };
262
263
264
265
266 #define BPF_STMT(code, k) { (u_int16_t)(code), 0, 0, k }
267 #define BPF_JUMP(code, k, jt, jf) { (u_int16_t)(code), jt, jf, k }
268
269 #ifdef _KERNEL
270 int bpf_validate(struct bpf_insn *, int);
271 int bpf_tap(caddr_t, u_char *, u_int, u_int);
272 void bpf_mtap(caddr_t, struct mbuf *, u_int);
273 void bpf_mtap_hdr(caddr_t, caddr_t, u_int, struct mbuf *, u_int);
274 void bpf_mtap_af(caddr_t, u_int32_t, struct mbuf *, u_int);
275 void bpfattach(caddr_t *, struct ifnet *, u_int, u_int);
276 void bpfdetach(struct ifnet *);
277 void bpfilterattach(int);
278 u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
279 #endif
280
281
282
283
284 #define BPF_MEMWORDS 16
285
286 extern int ticks;
287
288
289 #endif