diff options
| author | Thomas Zimmermann <tzimmermann@suse.de> | 2023-06-15 10:34:19 +0200 | 
|---|---|---|
| committer | Thomas Zimmermann <tzimmermann@suse.de> | 2023-06-15 10:34:19 +0200 | 
| commit | db6da59cf27b5661ced03754ae0550f8914eda9e (patch) | |
| tree | ccb1851c8a71e776dbccf1ccae132dc9b5f093c6 /tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c | |
| parent | cf03e2956af307dc25e8c41fd4cffe44482a6ec1 (diff) | |
| parent | 901bdf5ea1a836400ee69aa32b04e9c209271ec7 (diff) | |
Merge drm/drm-next into drm-misc-next-fixes
Backmerging to sync drm-misc-next-fixes with drm-misc-next.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c | 93 | 
1 files changed, 93 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c b/tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c new file mode 100644 index 000000000000..daa952711d8f --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <test_progs.h> +#include <network_helpers.h> +#include "test_parse_tcp_hdr_opt.skel.h" +#include "test_parse_tcp_hdr_opt_dynptr.skel.h" +#include "test_tcp_hdr_options.h" + +struct test_pkt { +	struct ipv6_packet pk6_v6; +	u8 options[16]; +} __packed; + +struct test_pkt pkt = { +	.pk6_v6.eth.h_proto = __bpf_constant_htons(ETH_P_IPV6), +	.pk6_v6.iph.nexthdr = IPPROTO_TCP, +	.pk6_v6.iph.payload_len = __bpf_constant_htons(MAGIC_BYTES), +	.pk6_v6.tcp.urg_ptr = 123, +	.pk6_v6.tcp.doff = 9, /* 16 bytes of options */ + +	.options = { +		TCPOPT_MSS, 4, 0x05, 0xB4, TCPOPT_NOP, TCPOPT_NOP, +		0, 6, 0xBB, 0xBB, 0xBB, 0xBB, TCPOPT_EOL +	}, +}; + +static void test_parse_opt(void) +{ +	struct test_parse_tcp_hdr_opt *skel; +	struct bpf_program *prog; +	char buf[128]; +	int err; + +	LIBBPF_OPTS(bpf_test_run_opts, topts, +		    .data_in = &pkt, +		    .data_size_in = sizeof(pkt), +		    .data_out = buf, +		    .data_size_out = sizeof(buf), +		    .repeat = 3, +	); + +	skel = test_parse_tcp_hdr_opt__open_and_load(); +	if (!ASSERT_OK_PTR(skel, "skel_open_and_load")) +		return; + +	pkt.options[6] = skel->rodata->tcp_hdr_opt_kind_tpr; +	prog = skel->progs.xdp_ingress_v6; + +	err = bpf_prog_test_run_opts(bpf_program__fd(prog), &topts); +	ASSERT_OK(err, "ipv6 test_run"); +	ASSERT_EQ(topts.retval, XDP_PASS, "ipv6 test_run retval"); +	ASSERT_EQ(skel->bss->server_id, 0xBBBBBBBB, "server id"); + +	test_parse_tcp_hdr_opt__destroy(skel); +} + +static void test_parse_opt_dynptr(void) +{ +	struct test_parse_tcp_hdr_opt_dynptr *skel; +	struct bpf_program *prog; +	char buf[128]; +	int err; + +	LIBBPF_OPTS(bpf_test_run_opts, topts, +		    .data_in = &pkt, +		    .data_size_in = sizeof(pkt), +		    .data_out = buf, +		    .data_size_out = sizeof(buf), +		    .repeat = 3, +	); + +	skel = test_parse_tcp_hdr_opt_dynptr__open_and_load(); +	if (!ASSERT_OK_PTR(skel, "skel_open_and_load")) +		return; + +	pkt.options[6] = skel->rodata->tcp_hdr_opt_kind_tpr; +	prog = skel->progs.xdp_ingress_v6; + +	err = bpf_prog_test_run_opts(bpf_program__fd(prog), &topts); +	ASSERT_OK(err, "ipv6 test_run"); +	ASSERT_EQ(topts.retval, XDP_PASS, "ipv6 test_run retval"); +	ASSERT_EQ(skel->bss->server_id, 0xBBBBBBBB, "server id"); + +	test_parse_tcp_hdr_opt_dynptr__destroy(skel); +} + +void test_parse_tcp_hdr_opt(void) +{ +	if (test__start_subtest("parse_tcp_hdr_opt")) +		test_parse_opt(); +	if (test__start_subtest("parse_tcp_hdr_opt_dynptr")) +		test_parse_opt_dynptr(); +}  | 
