Skip to content

Commit fd981e3

Browse files
Daniel Borkmanndavem330
authored andcommitted
filter: bpf_dbg: add minimal bpf debugger
This patch adds a minimal BPF debugger that "emulates" the kernel's BPF engine (w/o extensions) and allows for single stepping (forwards and backwards through BPF code) or running with >=1 breakpoints through selected or all packets from a pcap file with a provided user filter in order to facilitate verification of a BPF program. When a breakpoint is being hit, it dumps all register contents, decoded instructions and in case of branches both decoded branch targets as well as other useful information. Having this facility is in particular useful to verify BPF programs against given test traffic *before* attaching to a live system. With the general availability of cls_bpf, xt_bpf, socket filters, team driver and e.g. PTP code, all BPF users, quite often a single more complex BPF program is being used. Reasons for a more complex BPF program are primarily to optimize execution time for making a verdict when multiple simple BPF programs are combined into one in order to prevent parsing same headers multiple times. In particular, for cls_bpf that can have various return paths for encoding flowids, and xt_bpf to come to a fw verdict this can be the case. Therefore, as this can result in more complex and harder to debug code, it would be very useful to have this minimal tool for testing purposes. It can also be of help for BPF JIT developers as filters are "test attached" to the kernel on a temporary socket thus triggering a JIT image dump when enabled. The tool uses an interactive libreadline shell with auto-completion and history support. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 1a3b505 commit fd981e3

File tree

2 files changed

+1411
-2
lines changed

2 files changed

+1411
-2
lines changed

tools/net/Makefile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@ prefix = /usr
22

33
CC = gcc
44

5-
all : bpf_jit_disasm
5+
all : bpf_jit_disasm bpf_dbg
66

77
bpf_jit_disasm : CFLAGS = -Wall -O2
88
bpf_jit_disasm : LDLIBS = -lopcodes -lbfd -ldl
99
bpf_jit_disasm : bpf_jit_disasm.o
1010

11+
bpf_dbg : CFLAGS = -Wall -O2
12+
bpf_dbg : LDLIBS = -lreadline
13+
bpf_dbg : bpf_dbg.o
14+
1115
clean :
12-
rm -rf *.o bpf_jit_disasm
16+
rm -rf *.o bpf_jit_disasm bpf_dbg
1317

1418
install :
1519
install bpf_jit_disasm $(prefix)/bin/bpf_jit_disasm
20+
install bpf_dbg $(prefix)/bin/bpf_dbg

0 commit comments

Comments
 (0)