libbpf: add support for ctx_{size, }_{in, out} in BPF_PROG_TEST_RUN
authorStanislav Fomichev <sdf@google.com>
Tue, 9 Apr 2019 18:49:10 +0000 (11:49 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 11 Apr 2019 08:21:41 +0000 (10:21 +0200)
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: Stanislav Fomichev <sdf@google.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/include/uapi/linux/bpf.h
tools/lib/bpf/bpf.c
tools/lib/bpf/bpf.h

index af1cbd9..31a27dd 100644 (file)
@@ -412,6 +412,13 @@ union bpf_attr {
                __aligned_u64   data_out;
                __u32           repeat;
                __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;
 
        struct { /* anonymous struct used by BPF_*_GET_*_ID */
index dababce..955191c 100644 (file)
@@ -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_size_in = test_attr->data_size_in;
        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;
 
        ret = sys_bpf(BPF_PROG_TEST_RUN, &attr, sizeof(attr));
        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->duration = attr.test.duration;
        return ret;
index c9d218d..bc30783 100644 (file)
@@ -136,6 +136,11 @@ struct bpf_prog_test_run_attr {
                              * out: length of data_out */
        __u32 retval;        /* out: return code of the BPF program */
        __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);