Download zip Select Archive Format
Name Last Update history
File empty ..
File txt .gitignore Loading commit data...
File txt Makefile Loading commit data...
File txt README.rst Loading commit data...
File txt bpf_insn.h Loading commit data...
File txt bpf_load.c Loading commit data...
File txt bpf_load.h Loading commit data...
File txt cookie_uid_helper_example.c Loading commit data...
File txt cpustat_kern.c Loading commit data...
File txt cpustat_user.c Loading commit data...
File txt fds_example.c Loading commit data...
File txt hash_func01.h Loading commit data...
File txt lathist_kern.c Loading commit data...
File txt lathist_user.c Loading commit data...
File txt load_sock_ops.c Loading commit data...
File txt lwt_len_hist.sh Loading commit data...
File txt lwt_len_hist_kern.c Loading commit data...
File txt lwt_len_hist_user.c Loading commit data...
File txt map_perf_test_kern.c Loading commit data...
File txt map_perf_test_user.c Loading commit data...
File txt offwaketime_kern.c Loading commit data...
File txt offwaketime_user.c Loading commit data...
File txt parse_ldabs.c Loading commit data...
File txt parse_simple.c Loading commit data...
File txt parse_varlen.c Loading commit data...
File txt run_cookie_uid_helper_example.sh Loading commit data...
File txt sampleip_kern.c Loading commit data...
File txt sampleip_user.c Loading commit data...
File txt sock_example.c Loading commit data...
File txt sock_example.h Loading commit data...
File txt sock_flags_kern.c Loading commit data...
File txt sockex1_kern.c Loading commit data...
File txt sockex1_user.c Loading commit data...
File txt sockex2_kern.c Loading commit data...
File txt sockex2_user.c Loading commit data...
File txt sockex3_kern.c Loading commit data...
File txt sockex3_user.c Loading commit data...
File txt spintest_kern.c Loading commit data...
File txt spintest_user.c Loading commit data...
File txt syscall_nrs.c Loading commit data...
File txt syscall_tp_kern.c Loading commit data...
File txt syscall_tp_user.c Loading commit data...
File txt task_fd_query_kern.c Loading commit data...
File txt task_fd_query_user.c Loading commit data...
File txt tc_l2_redirect.sh Loading commit data...
File txt tc_l2_redirect_kern.c Loading commit data...
File txt tc_l2_redirect_user.c Loading commit data...
File txt tcbpf1_kern.c Loading commit data...
File txt tcp_basertt_kern.c Loading commit data...
File txt tcp_bpf.readme Loading commit data...
File txt tcp_bufs_kern.c Loading commit data...
File txt tcp_clamp_kern.c Loading commit data...
File txt tcp_cong_kern.c Loading commit data...
File txt tcp_iw_kern.c Loading commit data...
File txt tcp_rwnd_kern.c Loading commit data...
File txt tcp_synrto_kern.c Loading commit data...
File txt test_cgrp2_array_pin.c Loading commit data...
File txt test_cgrp2_attach.c Loading commit data...
File txt test_cgrp2_attach2.c Loading commit data...
File txt test_cgrp2_sock.c Loading commit data...
File txt test_cgrp2_sock.sh Loading commit data...
File txt test_cgrp2_sock2.c Loading commit data...
File txt test_cgrp2_sock2.sh Loading commit data...
File txt test_cgrp2_tc.sh Loading commit data...
File txt test_cgrp2_tc_kern.c Loading commit data...
File txt test_cls_bpf.sh Loading commit data...
File txt test_current_task_under_cgroup_kern.c Loading commit data...
File txt test_current_task_under_cgroup_user.c Loading commit data...
File txt test_ipip.sh Loading commit data...
File txt test_lru_dist.c Loading commit data...
File txt test_lwt_bpf.c Loading commit data...
File txt test_lwt_bpf.sh Loading commit data...
File txt test_map_in_map_kern.c Loading commit data...
File txt test_map_in_map_user.c Loading commit data...
File txt test_overhead_kprobe_kern.c Loading commit data...
File txt test_overhead_raw_tp_kern.c Loading commit data...
File txt test_overhead_tp_kern.c Loading commit data...
File txt test_overhead_user.c Loading commit data...
File txt test_override_return.sh Loading commit data...
File txt test_probe_write_user_kern.c Loading commit data...
File txt test_probe_write_user_user.c Loading commit data...
File txt trace_event_kern.c Loading commit data...
File txt trace_event_user.c Loading commit data...
File txt trace_output_kern.c Loading commit data...
File txt trace_output_user.c Loading commit data...
File txt tracex1_kern.c Loading commit data...
File txt tracex1_user.c Loading commit data...
File txt tracex2_kern.c Loading commit data...
File txt tracex2_user.c Loading commit data...
File txt tracex3_kern.c Loading commit data...
File txt tracex3_user.c Loading commit data...
File txt tracex4_kern.c Loading commit data...
File txt tracex4_user.c Loading commit data...
File txt tracex5_kern.c Loading commit data...
File txt tracex5_user.c Loading commit data...
File txt tracex6_kern.c Loading commit data...
File txt tracex6_user.c Loading commit data...
File txt tracex7_kern.c Loading commit data...
File txt tracex7_user.c Loading commit data...
File txt xdp1_kern.c Loading commit data...
File txt xdp1_user.c Loading commit data...
File txt xdp2_kern.c Loading commit data...
File txt xdp2skb_meta.sh Loading commit data...
File txt xdp2skb_meta_kern.c Loading commit data...
File txt xdp_adjust_tail_kern.c Loading commit data...
File txt xdp_adjust_tail_user.c Loading commit data...
File txt xdp_fwd_kern.c Loading commit data...
File txt xdp_fwd_user.c Loading commit data...
File txt xdp_monitor_kern.c Loading commit data...
File txt xdp_monitor_user.c Loading commit data...
File txt xdp_redirect_cpu_kern.c Loading commit data...
File txt xdp_redirect_cpu_user.c Loading commit data...
File txt xdp_redirect_kern.c Loading commit data...
File txt xdp_redirect_map_kern.c Loading commit data...
File txt xdp_redirect_map_user.c Loading commit data...
File txt xdp_redirect_user.c Loading commit data...
File txt xdp_router_ipv4_kern.c Loading commit data...
File txt xdp_router_ipv4_user.c Loading commit data...
File txt xdp_rxq_info_kern.c Loading commit data...
File txt xdp_rxq_info_user.c Loading commit data...
File txt xdp_sample_pkts_kern.c Loading commit data...
File txt xdp_sample_pkts_user.c Loading commit data...
File txt xdp_tx_iptunnel_common.h Loading commit data...
File txt xdp_tx_iptunnel_kern.c Loading commit data...
File txt xdp_tx_iptunnel_user.c Loading commit data...
File txt xdpsock.h Loading commit data...
File txt xdpsock_kern.c Loading commit data...
File txt xdpsock_user.c Loading commit data...

README.rst

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