]>
The Tcpdump Group git mirrors - libpcap/blob - bpf_image.c
2 * Copyright (c) 1990, 1991, 1992, 1994, 1995, 1996
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that: (1) source code distributions
7 * retain the above copyright notice and this paragraph in its entirety, (2)
8 * distributions including binary code include the above copyright notice and
9 * this paragraph in its entirety in the documentation or other materials
10 * provided with the distribution, and (3) all advertising materials mentioning
11 * features or use of this software display the following acknowledgement:
12 * ``This product includes software developed by the University of California,
13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14 * the University nor the names of its contributors may be used to endorse
15 * or promote products derived from this software without specific prior
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
23 static const char rcsid
[] =
24 "@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.24 2000-07-11 00:37:04 assar Exp $ (LBL)";
31 #include <sys/types.h>
39 #ifdef HAVE_OS_PROTO_H
50 static char image
[256];
72 case BPF_LD
|BPF_W
|BPF_ABS
:
77 case BPF_LD
|BPF_H
|BPF_ABS
:
82 case BPF_LD
|BPF_B
|BPF_ABS
:
87 case BPF_LD
|BPF_W
|BPF_LEN
:
92 case BPF_LD
|BPF_W
|BPF_IND
:
97 case BPF_LD
|BPF_H
|BPF_IND
:
102 case BPF_LD
|BPF_B
|BPF_IND
:
112 case BPF_LDX
|BPF_IMM
:
117 case BPF_LDX
|BPF_MSH
|BPF_B
:
119 fmt
= "4*([%d]&0xf)";
127 case BPF_LDX
|BPF_MEM
:
148 case BPF_JMP
|BPF_JGT
|BPF_K
:
153 case BPF_JMP
|BPF_JGE
|BPF_K
:
158 case BPF_JMP
|BPF_JEQ
|BPF_K
:
163 case BPF_JMP
|BPF_JSET
|BPF_K
:
168 case BPF_JMP
|BPF_JGT
|BPF_X
:
173 case BPF_JMP
|BPF_JGE
|BPF_X
:
178 case BPF_JMP
|BPF_JEQ
|BPF_X
:
183 case BPF_JMP
|BPF_JSET
|BPF_X
:
188 case BPF_ALU
|BPF_ADD
|BPF_X
:
193 case BPF_ALU
|BPF_SUB
|BPF_X
:
198 case BPF_ALU
|BPF_MUL
|BPF_X
:
203 case BPF_ALU
|BPF_DIV
|BPF_X
:
208 case BPF_ALU
|BPF_AND
|BPF_X
:
213 case BPF_ALU
|BPF_OR
|BPF_X
:
218 case BPF_ALU
|BPF_LSH
|BPF_X
:
223 case BPF_ALU
|BPF_RSH
|BPF_X
:
228 case BPF_ALU
|BPF_ADD
|BPF_K
:
233 case BPF_ALU
|BPF_SUB
|BPF_K
:
238 case BPF_ALU
|BPF_MUL
|BPF_K
:
243 case BPF_ALU
|BPF_DIV
|BPF_K
:
248 case BPF_ALU
|BPF_AND
|BPF_K
:
253 case BPF_ALU
|BPF_OR
|BPF_K
:
258 case BPF_ALU
|BPF_LSH
|BPF_K
:
263 case BPF_ALU
|BPF_RSH
|BPF_K
:
268 case BPF_ALU
|BPF_NEG
:
273 case BPF_MISC
|BPF_TAX
:
278 case BPF_MISC
|BPF_TXA
:
283 (void)snprintf(operand
, sizeof operand
, fmt
, v
);
284 (void)snprintf(image
, sizeof image
,
285 (BPF_CLASS(p
->code
) == BPF_JMP
&&
286 BPF_OP(p
->code
) != BPF_JA
) ?
287 "(%03d) %-8s %-16s jt %d\tjf %d"
289 n
, op
, operand
, n
+ 1 + p
->jt
, n
+ 1 + p
->jf
);