linux-bl808/tools/testing/selftests/bpf
Martin KaFai Lau ad2f8eb009 bpf: selftests: Tcp header options
This patch adds tests for the new bpf tcp header option feature.

test_tcp_hdr_options.c:
- It tests header option writing and parsing in 3WHS: regular
  connection establishment, fastopen, and syncookie.
- In syncookie, the passive side's bpf prog is asking the active side
  to resend its bpf header option by specifying a RESEND bit in the
  outgoing SYNACK. handle_active_estab() and write_nodata_opt() has
  some details.
- handle_passive_estab() has comments on fastopen.
- It also has test for header writing and parsing in FIN packet.
- Most of the tests is writing an experimental option 254 with magic 0xeB9F.
- The no_exprm_estab() also tests writing a regular TCP option
  without any magic.

test_misc_tcp_options.c:
- It is an one directional test.  Active side writes option and
  passive side parses option.  The focus is to exercise
  the new helpers and API.
- Testing the new helper: bpf_load_hdr_opt() and bpf_store_hdr_opt().
- Testing the bpf_getsockopt(TCP_BPF_SYN).
- Negative tests for the above helpers.
- Testing the sock_ops->skb_data.

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200820190117.2886749-1-kafai@fb.com
2020-08-24 14:35:00 -07:00
..
benchs
gnu
map_tests
prog_tests bpf: selftests: Tcp header options 2020-08-24 14:35:00 -07:00
progs bpf: selftests: Tcp header options 2020-08-24 14:35:00 -07:00
verifier Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-08-02 01:02:12 -07:00
.gitignore
bench.c
bench.h
bpf_legacy.h
bpf_rand.h
bpf_rlimit.h
bpf_tcp_helpers.h
bpf_util.h
cgroup_helpers.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
cgroup_helpers.h bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
config
flow_dissector_load.c
flow_dissector_load.h
get_cgroup_id_user.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
Makefile selftests/bpf: BPF object files should depend only on libbpf headers 2020-08-21 15:40:22 -07:00
netcnt_common.h
network_helpers.c bpf: selftests: Add fastopen_connect to network_helpers 2020-08-24 14:35:00 -07:00
network_helpers.h bpf: selftests: Add fastopen_connect to network_helpers 2020-08-24 14:35:00 -07:00
README.rst selftests/bpf: List newest Clang built-ins needed for some CO-RE selftests 2020-08-20 16:45:09 +02:00
settings selftests: bpf: Switch off timeout 2020-08-06 16:57:05 -07:00
tcp_client.py
tcp_server.py
test_bpftool.py
test_bpftool.sh
test_bpftool_build.sh
test_btf.c selftest/bpf: Fix compilation warnings in 32-bit mode 2020-08-13 16:45:41 -07:00
test_btf.h
test_cgroup_storage.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_cpp.cpp
test_current_pid_tgid_new_ns.c selftests/bpf: Fix two minor compilation warnings reported by GCC 4.9 2020-08-20 16:45:09 +02:00
test_dev_cgroup.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_flow_dissector.c
test_flow_dissector.sh
test_ftrace.sh
test_iptunnel_common.h
test_kmod.sh
test_lirc_mode2.sh
test_lirc_mode2_user.c
test_lpm_map.c
test_lru_map.c
test_lwt_ip_encap.sh
test_lwt_seg6local.sh
test_maps.c
test_maps.h
test_netcnt.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_offload.py
test_progs.c
test_progs.h selftest/bpf: Fix compilation warnings in 32-bit mode 2020-08-13 16:45:41 -07:00
test_select_reuseport_common.h
test_skb_cgroup_id.sh
test_skb_cgroup_id_user.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sock.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sock_addr.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sock_addr.sh
test_sock_fields.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_socket_cookie.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sockmap.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_stub.c
test_sysctl.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_tag.c
test_tc_edt.sh
test_tc_tunnel.sh
test_tcp_check_syncookie.sh
test_tcp_check_syncookie_user.c
test_tcp_hdr_options.h bpf: selftests: Tcp header options 2020-08-24 14:35:00 -07:00
test_tcpbpf.h
test_tcpbpf_user.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_tcpnotify.h
test_tcpnotify_user.c bpf: Fix compilation warning of selftests 2020-08-06 16:58:42 -07:00
test_tunnel.sh
test_verifier.c
test_verifier_log.c
test_xdp_meta.sh
test_xdp_redirect.sh
test_xdp_veth.sh
test_xdp_vlan.sh
test_xdp_vlan_mode_generic.sh
test_xdp_vlan_mode_native.sh
test_xdping.sh
testing_helpers.c selftests/bpf: Add link detach tests for cgroup, netns, and xdp bpf_links 2020-08-01 20:38:28 -07:00
testing_helpers.h selftests/bpf: Add link detach tests for cgroup, netns, and xdp bpf_links 2020-08-01 20:38:28 -07:00
trace_helpers.c
trace_helpers.h
urandom_read.c
with_addr.sh
with_tunnels.sh
xdping.c
xdping.h

==================
BPF Selftest Notes
==================
General instructions on running selftests can be found in
`Documentation/bpf/bpf_devel_QA.rst`_.

Additional information about selftest failures are
documented here.

bpf_iter test failures with clang/llvm 10.0.0
=============================================

With clang/llvm 10.0.0, the following two bpf_iter tests failed:
  * ``bpf_iter/ipv6_route``
  * ``bpf_iter/netlink``

The symptom for ``bpf_iter/ipv6_route`` looks like

.. code-block:: c

  2: (79) r8 = *(u64 *)(r1 +8)
  ...
  14: (bf) r2 = r8
  15: (0f) r2 += r1
  ; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
  16: (7b) *(u64 *)(r8 +64) = r2
  only read is supported

The symptom for ``bpf_iter/netlink`` looks like

.. code-block:: c

  ; struct netlink_sock *nlk = ctx->sk;
  2: (79) r7 = *(u64 *)(r1 +8)
  ...
  15: (bf) r2 = r7
  16: (0f) r2 += r1
  ; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol);
  17: (7b) *(u64 *)(r7 +0) = r2
  only read is supported

This is due to a llvm BPF backend bug. The fix 
  https://reviews.llvm.org/D78466
has been pushed to llvm 10.x release branch and will be
available in 10.0.1. The fix is available in llvm 11.0.0 trunk.

BPF CO-RE-based tests and Clang version
=======================================

A set of selftests use BPF target-specific built-ins, which might require
bleeding-edge Clang versions (Clang 12 nightly at this time).

Few sub-tests of core_reloc test suit (part of test_progs test runner) require
the following built-ins, listed with corresponding Clang diffs introducing
them to Clang/LLVM. These sub-tests are going to be skipped if Clang is too
old to support them, they shouldn't cause build failures or runtime test
failures:

  - __builtin_btf_type_id() ([0], [1], [2]);
  - __builtin_preserve_type_info(), __builtin_preserve_enum_value() ([3], [4]).

  [0] https://reviews.llvm.org/D74572
  [1] https://reviews.llvm.org/D74668
  [2] https://reviews.llvm.org/D85174
  [3] https://reviews.llvm.org/D83878
  [4] https://reviews.llvm.org/D83242