Commit 5e903c65 authored by Stanislav Fomichev's avatar Stanislav Fomichev Committed by Daniel Borkmann

libbpf: add support for ctx_{size, }_{in, out} in BPF_PROG_TEST_RUN

Support recently introduced input/output context for test runs.
We extend only bpf_prog_test_run_xattr. bpf_prog_test_run is
unextendable and left as is.
Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent b0b9395d
...@@ -412,6 +412,13 @@ union bpf_attr { ...@@ -412,6 +412,13 @@ union bpf_attr {
__aligned_u64 data_out; __aligned_u64 data_out;
__u32 repeat; __u32 repeat;
__u32 duration; __u32 duration;
__u32 ctx_size_in; /* input: len of ctx_in */
__u32 ctx_size_out; /* input/output: len of ctx_out
* returns ENOSPC if ctx_out
* is too small.
*/
__aligned_u64 ctx_in;
__aligned_u64 ctx_out;
} test; } test;
struct { /* anonymous struct used by BPF_*_GET_*_ID */ struct { /* anonymous struct used by BPF_*_GET_*_ID */
......
...@@ -554,10 +554,15 @@ int bpf_prog_test_run_xattr(struct bpf_prog_test_run_attr *test_attr) ...@@ -554,10 +554,15 @@ int bpf_prog_test_run_xattr(struct bpf_prog_test_run_attr *test_attr)
attr.test.data_out = ptr_to_u64(test_attr->data_out); attr.test.data_out = ptr_to_u64(test_attr->data_out);
attr.test.data_size_in = test_attr->data_size_in; attr.test.data_size_in = test_attr->data_size_in;
attr.test.data_size_out = test_attr->data_size_out; attr.test.data_size_out = test_attr->data_size_out;
attr.test.ctx_in = ptr_to_u64(test_attr->ctx_in);
attr.test.ctx_out = ptr_to_u64(test_attr->ctx_out);
attr.test.ctx_size_in = test_attr->ctx_size_in;
attr.test.ctx_size_out = test_attr->ctx_size_out;
attr.test.repeat = test_attr->repeat; attr.test.repeat = test_attr->repeat;
ret = sys_bpf(BPF_PROG_TEST_RUN, &attr, sizeof(attr)); ret = sys_bpf(BPF_PROG_TEST_RUN, &attr, sizeof(attr));
test_attr->data_size_out = attr.test.data_size_out; test_attr->data_size_out = attr.test.data_size_out;
test_attr->ctx_size_out = attr.test.ctx_size_out;
test_attr->retval = attr.test.retval; test_attr->retval = attr.test.retval;
test_attr->duration = attr.test.duration; test_attr->duration = attr.test.duration;
return ret; return ret;
......
...@@ -136,6 +136,11 @@ struct bpf_prog_test_run_attr { ...@@ -136,6 +136,11 @@ struct bpf_prog_test_run_attr {
* out: length of data_out */ * out: length of data_out */
__u32 retval; /* out: return code of the BPF program */ __u32 retval; /* out: return code of the BPF program */
__u32 duration; /* out: average per repetition in ns */ __u32 duration; /* out: average per repetition in ns */
const void *ctx_in; /* optional */
__u32 ctx_size_in;
void *ctx_out; /* optional */
__u32 ctx_size_out; /* in: max length of ctx_out
* out: length of cxt_out */
}; };
LIBBPF_API int bpf_prog_test_run_xattr(struct bpf_prog_test_run_attr *test_attr); LIBBPF_API int bpf_prog_test_run_xattr(struct bpf_prog_test_run_attr *test_attr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment