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 Makefile.target Loading commit data...
File txt README.rst Loading commit data...
File txt asm_goto_workaround.h 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 do_hbm_test.sh Loading commit data...
File txt fds_example.c Loading commit data...
File txt hash_func01.h Loading commit data...
File txt hbm.c Loading commit data...
File txt hbm.h Loading commit data...
File txt hbm_edt_kern.c Loading commit data...
File txt hbm_kern.h Loading commit data...
File txt hbm_out_kern.c Loading commit data...
File txt ibumad_kern.c Loading commit data...
File txt ibumad_user.c Loading commit data...
File txt lathist_kern.c Loading commit data...
File txt lathist_user.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_dumpstats_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 tcp_tos_reflect_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_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_common.h 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...
File txt xsk_fwd.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

Clean and configuration

It can be needed to clean tools, samples or kernel before trying new arch or after some changes (on demand):

make -C tools clean
make -C samples/bpf clean
make clean

Configure kernel, defconfig for instance:

make defconfig

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 M=samples/bpf

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

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 M=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. But do this before clean, cofiguration and header install steps described above. This will direct make to build samples for the cross target:

export ARCH=arm64
export CROSS_COMPILE="aarch64-linux-gnu-"

Headers can be also installed on RFS of target board if need to keep them in sync (not necessarily and it creates a local "usr/include" directory also):

make INSTALL_HDR_PATH=~/some_sysroot/usr headers_install

Pointing LLC and CLANG is not necessarily if it's installed on HOST and have in its targets appropriate arm64 arch (usually it has several arches). Build samples:

make M=samples/bpf

Or build samples with SYSROOT if some header or library is absent in toolchain, say libelf, providing address to file system containing headers and libs, can be RFS of target board:

make M=samples/bpf SYSROOT=~/some_sysroot