linux/samples/bpf
Daniel Borkmann 0489df9a43 xdp: add flag to enforce driver mode
After commit b5cdae3291 ("net: Generic XDP") we automatically fall
back to a generic XDP variant if the driver does not support native
XDP. Allow for an option where the user can specify that always the
native XDP variant should be selected and in case it's not supported
by a driver, just bail out.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-05-11 21:30:57 -04:00
..
bpf_helpers.h bpf: Add sparc support to tools and samples. 2017-04-22 13:01:52 -07:00
bpf_load.c samples/bpf: load_bpf.c make callback fixup more flexible 2017-05-03 09:30:24 -04:00
bpf_load.h samples/bpf: export map_data[] for more info on maps 2017-05-03 09:30:24 -04:00
cgroup_helpers.c
cgroup_helpers.h
cookie_uid_helper_example.c bpf, samples: fix build warning in cookie_uid_helper_example 2017-05-02 09:29:35 -04:00
fds_example.c
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
lwt_len_hist.sh
lwt_len_hist_kern.c
lwt_len_hist_user.c
Makefile samples/bpf: add -Wno-unknown-warning-option to clang 2017-04-24 16:20:19 -04:00
map_perf_test_kern.c bpf: lru: Add map-in-map LRU example 2017-04-17 13:55:52 -04:00
map_perf_test_user.c samples/bpf: load_bpf.c make callback fixup more flexible 2017-05-03 09:30:24 -04:00
offwaketime_kern.c
offwaketime_user.c
parse_ldabs.c
parse_simple.c
parse_varlen.c
README.rst
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
sock_example.c
sock_example.h
sock_flags_kern.c
sockex1_kern.c
sockex1_user.c
sockex2_kern.c
sockex2_user.c
sockex3_kern.c
sockex3_user.c
spintest_kern.c
spintest_user.c
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
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 bpf: introduce BPF_F_ALLOW_OVERRIDE flag 2017-02-12 21:52:19 -05:00
test_cgrp2_sock.sh
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 tests for map-in-map 2017-03-22 15:45:45 -07: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
trace_event_kern.c
trace_event_user.c
trace_output_kern.c
trace_output_user.c
tracex1_kern.c
tracex1_user.c
tracex2_kern.c
tracex2_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for traceex2, tracex3 and tracex4 2017-05-03 09:30:23 -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: Add missing header 2017-02-13 17:22:35 -03:00
tracex5_user.c
tracex6_kern.c
tracex6_user.c
xdp1_kern.c
xdp1_user.c xdp: add flag to enforce driver mode 2017-05-11 21:30:57 -04:00
xdp2_kern.c
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 xdp: add flag to enforce driver mode 2017-05-11 21:30:57 -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