From 20e286881366499bf33b4bf35e740994562f1b4e Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 2 Jul 2019 11:49:15 +0000 Subject: [PATCH] bpf: add support for new fields in BPF_PROG_TEST_RUN * bpf_attr.h (struct BPF_PROG_TEST_RUN_struct): Add ctx_size_in, ctx_size_out, ctx_in, and ctx_out fields. * bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_TEST_RUN)): Decode these fields introduced by Linux kernel commit v5.2-rc1~133^2~193^2~6. * tests/bpf.c (BPF_PROG_TEST_RUN_checks): Check it. --- bpf.c | 10 ++++++++++ bpf_attr.h | 6 +++++- tests/bpf.c | 27 +++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/bpf.c b/bpf.c index 5329fc2f..20ad938f 100644 --- a/bpf.c +++ b/bpf.c @@ -387,6 +387,16 @@ BEGIN_BPF_CMD_DECODER(BPF_PROG_TEST_RUN) PRINT_FIELD_ADDR64(", ", attr, data_out); PRINT_FIELD_U(", ", attr, repeat); PRINT_FIELD_U(", ", attr, duration); + /* + * The following four fields were introduced by Linux commit + * v5.2-rc1~133^2~193^2~6. + */ + if (len > offsetof(struct BPF_PROG_TEST_RUN_struct, ctx_size_in)) { + PRINT_FIELD_U(", ", attr, ctx_size_in); + PRINT_FIELD_U(", ", attr, ctx_size_out); + PRINT_FIELD_ADDR64(", ", attr, ctx_in); + PRINT_FIELD_ADDR64(", ", attr, ctx_out); + } tprints("}"); } END_BPF_CMD_DECODER(RVAL_DECODED) diff --git a/bpf_attr.h b/bpf_attr.h index 21b4cd76..741a4124 100644 --- a/bpf_attr.h +++ b/bpf_attr.h @@ -172,11 +172,15 @@ struct BPF_PROG_TEST_RUN_struct /* test */ { uint64_t ATTRIBUTE_ALIGNED(8) data_out; uint32_t repeat; uint32_t duration; + uint32_t ctx_size_in; + uint32_t ctx_size_out; + uint64_t ATTRIBUTE_ALIGNED(8) ctx_in; + uint64_t ATTRIBUTE_ALIGNED(8) ctx_out; }; # define BPF_PROG_TEST_RUN_struct_size \ sizeof(struct BPF_PROG_TEST_RUN_struct) -# define expected_BPF_PROG_TEST_RUN_struct_size 40 +# define expected_BPF_PROG_TEST_RUN_struct_size 64 struct BPF_PROG_GET_NEXT_ID_struct { uint32_t start_id; diff --git a/tests/bpf.c b/tests/bpf.c index 08f78964..da6da0e8 100644 --- a/tests/bpf.c +++ b/tests/bpf.c @@ -819,6 +819,33 @@ static const struct bpf_attr_check BPF_PROG_TEST_RUN_checks[] = { ", data_in=0xfacef11dbadc2ded" ", data_out=0xfacef33dbadc4ded" ", repeat=4207410904, duration=4207541978}" + }, + { + .data = { .BPF_PROG_TEST_RUN_data = { + .prog_fd = -1, + .retval = 0xfac1fed2, + .data_size_in = 0xfac3fed4, + .data_size_out = 0xfac5fed6, + .data_in = (uint64_t) 0xfacef11dbadc2dedULL, + .data_out = (uint64_t) 0xfacef33dbadc4dedULL, + .repeat = 0xfac7fed8, + .duration = 0xfac9feda, + .ctx_size_in = 0xfacbfedc, + .ctx_size_out = 0xfacdfede, + .ctx_in = (uint64_t) 0xfacef55dbadc6dedULL, + .ctx_out = (uint64_t) 0xfacef77dbadc8dedULL + } }, + .size = offsetofend(struct BPF_PROG_TEST_RUN_struct, ctx_out), + .str = "test={prog_fd=-1, retval=4207017682" + ", data_size_in=4207148756, data_size_out=4207279830" + ", data_in=0xfacef11dbadc2ded" + ", data_out=0xfacef33dbadc4ded" + ", repeat=4207410904" + ", duration=4207541978" + ", ctx_size_in=4207673052" + ", ctx_size_out=4207804126" + ", ctx_in=0xfacef55dbadc6ded" + ", ctx_out=0xfacef77dbadc8ded}" } }; -- 2.40.0