diff options
Diffstat (limited to 'tools/net/bpf_asm.c')
-rw-r--r-- | tools/net/bpf_asm.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tools/net/bpf_asm.c b/tools/net/bpf_asm.c new file mode 100644 index 000000000000..c15aef097b04 --- /dev/null +++ b/tools/net/bpf_asm.c | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Minimal BPF assembler | ||
3 | * | ||
4 | * Instead of libpcap high-level filter expressions, it can be quite | ||
5 | * useful to define filters in low-level BPF assembler (that is kept | ||
6 | * close to Steven McCanne and Van Jacobson's original BPF paper). | ||
7 | * In particular for BPF JIT implementors, JIT security auditors, or | ||
8 | * just for defining BPF expressions that contain extensions which are | ||
9 | * not supported by compilers. | ||
10 | * | ||
11 | * How to get into it: | ||
12 | * | ||
13 | * 1) read Documentation/networking/filter.txt | ||
14 | * 2) Run `bpf_asm [-c] <filter-prog file>` to translate into binary | ||
15 | * blob that is loadable with xt_bpf, cls_bpf et al. Note: -c will | ||
16 | * pretty print a C-like construct. | ||
17 | * | ||
18 | * Copyright 2013 Daniel Borkmann <borkmann@redhat.com> | ||
19 | * Licensed under the GNU General Public License, version 2.0 (GPLv2) | ||
20 | */ | ||
21 | |||
22 | #include <stdbool.h> | ||
23 | #include <stdio.h> | ||
24 | #include <string.h> | ||
25 | |||
26 | extern void bpf_asm_compile(FILE *fp, bool cstyle); | ||
27 | |||
28 | int main(int argc, char **argv) | ||
29 | { | ||
30 | FILE *fp = stdin; | ||
31 | bool cstyle = false; | ||
32 | int i; | ||
33 | |||
34 | for (i = 1; i < argc; i++) { | ||
35 | if (!strncmp("-c", argv[i], 2)) { | ||
36 | cstyle = true; | ||
37 | continue; | ||
38 | } | ||
39 | |||
40 | fp = fopen(argv[i], "r"); | ||
41 | if (!fp) { | ||
42 | fp = stdin; | ||
43 | continue; | ||
44 | } | ||
45 | |||
46 | break; | ||
47 | } | ||
48 | |||
49 | bpf_asm_compile(fp, cstyle); | ||
50 | |||
51 | return 0; | ||
52 | } | ||