alistair23-linux/samples/bpf
Martin KaFai Lau 88cda1c9da bpf: libbpf: Provide basic API support to specify BPF obj name
This patch extends the libbpf to provide API support to
allow specifying BPF object name.

In tools/lib/bpf/libbpf, the C symbol of the function
and the map is used.  Regarding section name, all maps are
under the same section named "maps".  Hence, section name
is not a good choice for map's name.  To be consistent with
map, bpf_prog also follows and uses its function symbol as
the prog's name.

This patch adds logic to collect function's symbols in libbpf.
There is existing codes to collect the map's symbols and no change
is needed.

The bpf_load_program_name() and bpf_map_create_name() are
added to take the name argument.  For the other bpf_map_create_xxx()
variants, a name argument is directly added to them.

In samples/bpf, bpf_load.c in particular, the symbol is also
used as the map's name and the map symbols has already been
collected in the existing code.  For bpf_prog, bpf_load.c does
not collect the function symbol name.  We can consider to collect
them later if there is a need to continue supporting the bpf_load.c.

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Alexei Starovoitov <ast@fb.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-09-29 06:17:05 +01:00
..
bpf_load.c bpf: libbpf: Provide basic API support to specify BPF obj name 2017-09-29 06:17:05 +01:00
bpf_load.h bpf: Allow numa selection in INNER_LRU_HASH_PREALLOC test of map_perf_test 2017-08-19 21:35:43 -07:00
cgroup_helpers.c
cgroup_helpers.h
cookie_uid_helper_example.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
fds_example.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
lathist_kern.c
lathist_user.c
libbpf.h A Sample of using socket cookie and uid for traffic monitoring 2017-03-23 17:01:57 -07:00
load_sock_ops.c bpf: program to load and attach sock_ops BPF progs 2017-07-01 16:15:13 -07:00
lwt_len_hist.sh
lwt_len_hist_kern.c
lwt_len_hist_user.c
Makefile samples/bpf: Fix pt_regs issues when cross-compiling 2017-09-21 11:59:16 -07:00
map_perf_test_kern.c samples/bpf: Use getppid instead of getpgrp for array map stress 2017-09-21 11:59:16 -07:00
map_perf_test_user.c bpf: libbpf: Provide basic API support to specify BPF obj name 2017-09-29 06:17:05 +01:00
offwaketime_kern.c
offwaketime_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
parse_ldabs.c
parse_simple.c
parse_varlen.c
README.rst samples/bpf: Add documentation on cross compilation 2017-09-21 11:59:16 -07:00
run_cookie_uid_helper_example.sh Sample program using SO_COOKIE 2017-04-08 08:07:01 -07:00
sampleip_kern.c
sampleip_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
sock_example.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
sock_example.h samples/bpf sock_example: Avoid getting ethhdr from two includes 2016-12-27 21:49:17 -03:00
sock_flags_kern.c samples/bpf: Update cgroup socket examples to use uid gid helper 2017-09-01 06:05:15 +01:00
sockex1_kern.c
sockex1_user.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
sockex2_kern.c
sockex2_user.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
sockex3_kern.c
sockex3_user.c bpf: Add test for syscall on fd array/htab lookup 2017-06-29 13:13:26 -04:00
spintest_kern.c
spintest_user.c
syscall_nrs.c samples/bpf: Fix tracex5 to work with MIPS syscalls. 2017-06-14 15:03:23 -04:00
syscall_tp_kern.c bpf: add a test case for syscalls/sys_{enter|exit}_* tracepoints 2017-08-07 14:09:48 -07:00
syscall_tp_user.c bpf: add a test case for syscalls/sys_{enter|exit}_* tracepoints 2017-08-07 14:09:48 -07:00
tc_l2_redirect.sh
tc_l2_redirect_kern.c bpf: fix samples xdp_tx_iptunnel and tc_l2_redirect with fake KBUILD_MODNAME 2017-01-20 12:04:07 -05:00
tc_l2_redirect_user.c
tcbpf1_kern.c
tcbpf2_kern.c samples/bpf: extend test_tunnel_bpf.sh with ERSPAN 2017-08-28 15:04:52 -07:00
tcp_bufs_kern.c bpf: Sample BPF program to set buffer sizes 2017-07-01 16:15:14 -07:00
tcp_clamp_kern.c bpf: Sample bpf program to set sndcwnd clamp 2017-07-01 16:15:14 -07:00
tcp_cong_kern.c bpf: Sample BPF program to set congestion control 2017-07-01 16:15:14 -07:00
tcp_iw_kern.c bpf: Sample BPF program to set initial cwnd 2017-07-01 16:15:14 -07:00
tcp_rwnd_kern.c bpf: Sample bpf program to set initial window 2017-07-01 16:15:13 -07:00
tcp_synrto_kern.c bpf: Sample bpf program to set SYN/SYN-ACK RTOs 2017-07-01 16:15:13 -07:00
test_cgrp2_array_pin.c
test_cgrp2_attach.c bpf: introduce BPF_F_ALLOW_OVERRIDE flag 2017-02-12 21:52:19 -05:00
test_cgrp2_attach2.c bpf: introduce BPF_F_ALLOW_OVERRIDE flag 2017-02-12 21:52:19 -05:00
test_cgrp2_sock.c samples/bpf: Update cgroup socket examples to use uid gid helper 2017-09-01 06:05:15 +01:00
test_cgrp2_sock.sh samples/bpf: Update cgrp2 socket tests 2017-09-01 06:05:15 +01:00
test_cgrp2_sock2.c bpf: introduce BPF_F_ALLOW_OVERRIDE flag 2017-02-12 21:52:19 -05:00
test_cgrp2_sock2.sh
test_cgrp2_tc.sh
test_cgrp2_tc_kern.c
test_cls_bpf.sh
test_current_task_under_cgroup_kern.c
test_current_task_under_cgroup_user.c
test_ipip.sh
test_lru_dist.c samples/bpf: check before defining offsetof 2017-04-24 16:20:19 -04:00
test_lwt_bpf.c
test_lwt_bpf.sh
test_map_in_map_kern.c bpf: Add tests for map-in-map 2017-03-22 15:45:45 -07:00
test_map_in_map_user.c bpf: Add test for syscall on fd array/htab lookup 2017-06-29 13:13:26 -04:00
test_overhead_kprobe_kern.c
test_overhead_tp_kern.c
test_overhead_user.c
test_probe_write_user_kern.c
test_probe_write_user_user.c
test_tunnel_bpf.sh samples/bpf: extend test_tunnel_bpf.sh with ERSPAN 2017-08-28 15:04:52 -07:00
trace_event_kern.c
trace_event_user.c samples/bpf: add tests for more perf event types 2017-06-04 21:58:15 -04:00
trace_output_kern.c
trace_output_user.c samples/bpf trace_output_user: Remove duplicate sys/ioctl.h include 2016-12-28 10:47:13 -03:00
tracex1_kern.c
tracex1_user.c
tracex2_kern.c
tracex2_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
tracex3_kern.c
tracex3_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for traceex2, tracex3 and tracex4 2017-05-03 09:30:23 -04:00
tracex4_kern.c
tracex4_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for traceex2, tracex3 and tracex4 2017-05-03 09:30:23 -04:00
tracex5_kern.c samples/bpf: Fix tracex5 to work with MIPS syscalls. 2017-06-14 15:03:23 -04:00
tracex5_user.c
tracex6_kern.c samples/bpf: add tests for more perf event types 2017-06-04 21:58:15 -04:00
tracex6_user.c samples/bpf: add tests for more perf event types 2017-06-04 21:58:15 -04:00
xdp1_kern.c
xdp1_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
xdp2_kern.c
xdp_monitor_kern.c samples/bpf: xdp_monitor tool based on tracepoints 2017-08-29 10:51:29 -07:00
xdp_monitor_user.c samples/bpf: xdp_monitor tool based on tracepoints 2017-08-29 10:51:29 -07:00
xdp_redirect_kern.c samples/bpf: Fix compilation issue in redirect dummy program 2017-08-31 11:56:57 -07:00
xdp_redirect_map_kern.c samples/bpf: Fix compilation issue in redirect dummy program 2017-08-31 11:56:57 -07:00
xdp_redirect_map_user.c samples/bpf: xdp_redirect load XDP dummy prog on TX device 2017-08-29 10:51:29 -07:00
xdp_redirect_user.c samples/bpf: xdp_redirect load XDP dummy prog on TX device 2017-08-29 10:51:29 -07:00
xdp_tx_iptunnel_common.h
xdp_tx_iptunnel_kern.c bpf: fix samples xdp_tx_iptunnel and tc_l2_redirect with fake KBUILD_MODNAME 2017-01-20 12:04:07 -05:00
xdp_tx_iptunnel_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00

eBPF sample programs
====================

This directory contains a test stubs, verifier test-suite and examples
for using eBPF. The examples use libbpf from tools/lib/bpf.

Build dependencies
==================

Compiling requires having installed:
 * clang >= version 3.4.0
 * llvm >= version 3.7.1

Note that LLVM's tool 'llc' must support target 'bpf', list version
and supported targets with command: ``llc --version``

Kernel headers
--------------

There are usually dependencies to header files of the current kernel.
To avoid installing devel kernel headers system wide, as a normal
user, simply call::

 make headers_install

This will creates a local "usr/include" directory in the git/build top
level directory, that the make system automatically pickup first.

Compiling
=========

For building the BPF samples, issue the below command from the kernel
top level directory::

 make samples/bpf/

Do notice the "/" slash after the directory name.

It is also possible to call make from this directory.  This will just
hide the the invocation of make as above with the appended "/".

Manually compiling LLVM with 'bpf' support
------------------------------------------

Since version 3.7.0, LLVM adds a proper LLVM backend target for the
BPF bytecode architecture.

By default llvm will build all non-experimental backends including bpf.
To generate a smaller llc binary one can use::

 -DLLVM_TARGETS_TO_BUILD="BPF"

Quick sniplet for manually compiling LLVM and clang
(build dependencies are cmake and gcc-c++)::

 $ git clone http://llvm.org/git/llvm.git
 $ cd llvm/tools
 $ git clone --depth 1 http://llvm.org/git/clang.git
 $ cd ..; mkdir build; cd build
 $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86"
 $ make -j $(getconf _NPROCESSORS_ONLN)

It is also possible to point make to the newly compiled 'llc' or
'clang' command via redefining LLC or CLANG on the make command line::

 make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang

Cross compiling samples
-----------------------
In order to cross-compile, say for arm64 targets, export CROSS_COMPILE and ARCH
environment variables before calling make. This will direct make to build
samples for the cross target.

export ARCH=arm64
export CROSS_COMPILE="aarch64-linux-gnu-"
make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang