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
[] _U_
=
24 "@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.27.2.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
36 #ifdef HAVE_OS_PROTO_H
42 const struct bpf_insn
*p
;
47 static char image
[256];
69 case BPF_LD
|BPF_W
|BPF_ABS
:
74 case BPF_LD
|BPF_H
|BPF_ABS
:
79 case BPF_LD
|BPF_B
|BPF_ABS
:
84 case BPF_LD
|BPF_W
|BPF_LEN
:
89 case BPF_LD
|BPF_W
|BPF_IND
:
94 case BPF_LD
|BPF_H
|BPF_IND
:
99 case BPF_LD
|BPF_B
|BPF_IND
:
109 case BPF_LDX
|BPF_IMM
:
114 case BPF_LDX
|BPF_MSH
|BPF_B
:
116 fmt
= "4*([%d]&0xf)";
124 case BPF_LDX
|BPF_MEM
:
145 case BPF_JMP
|BPF_JGT
|BPF_K
:
150 case BPF_JMP
|BPF_JGE
|BPF_K
:
155 case BPF_JMP
|BPF_JEQ
|BPF_K
:
160 case BPF_JMP
|BPF_JSET
|BPF_K
:
165 case BPF_JMP
|BPF_JGT
|BPF_X
:
170 case BPF_JMP
|BPF_JGE
|BPF_X
:
175 case BPF_JMP
|BPF_JEQ
|BPF_X
:
180 case BPF_JMP
|BPF_JSET
|BPF_X
:
185 case BPF_ALU
|BPF_ADD
|BPF_X
:
190 case BPF_ALU
|BPF_SUB
|BPF_X
:
195 case BPF_ALU
|BPF_MUL
|BPF_X
:
200 case BPF_ALU
|BPF_DIV
|BPF_X
:
205 case BPF_ALU
|BPF_AND
|BPF_X
:
210 case BPF_ALU
|BPF_OR
|BPF_X
:
215 case BPF_ALU
|BPF_LSH
|BPF_X
:
220 case BPF_ALU
|BPF_RSH
|BPF_X
:
225 case BPF_ALU
|BPF_ADD
|BPF_K
:
230 case BPF_ALU
|BPF_SUB
|BPF_K
:
235 case BPF_ALU
|BPF_MUL
|BPF_K
:
240 case BPF_ALU
|BPF_DIV
|BPF_K
:
245 case BPF_ALU
|BPF_AND
|BPF_K
:
250 case BPF_ALU
|BPF_OR
|BPF_K
:
255 case BPF_ALU
|BPF_LSH
|BPF_K
:
260 case BPF_ALU
|BPF_RSH
|BPF_K
:
265 case BPF_ALU
|BPF_NEG
:
270 case BPF_MISC
|BPF_TAX
:
275 case BPF_MISC
|BPF_TXA
:
280 (void)snprintf(operand
, sizeof operand
, fmt
, v
);
281 (void)snprintf(image
, sizeof image
,
282 (BPF_CLASS(p
->code
) == BPF_JMP
&&
283 BPF_OP(p
->code
) != BPF_JA
) ?
284 "(%03d) %-8s %-16s jt %d\tjf %d"
286 n
, op
, operand
, n
+ 1 + p
->jt
, n
+ 1 + p
->jf
);