aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/progs/test_skb_ctx.c
diff options
context:
space:
mode:
authorStanislav Fomichev <sdf@google.com>2019-04-09 11:49:11 -0700
committerDaniel Borkmann <daniel@iogearbox.net>2019-04-11 10:21:41 +0200
commit3daf8e703ec3dcf73a27a7dcabbac152793eb114 (patch)
treef754d8dd81d388e6a3747e834fcd4163f8494e88 /tools/testing/selftests/bpf/progs/test_skb_ctx.c
parentlibbpf: add support for ctx_{size, }_{in, out} in BPF_PROG_TEST_RUN (diff)
downloadlinux-dev-3daf8e703ec3dcf73a27a7dcabbac152793eb114.tar.xz
linux-dev-3daf8e703ec3dcf73a27a7dcabbac152793eb114.zip
selftests: bpf: add selftest for __sk_buff context in BPF_PROG_TEST_RUN
Simple test that sets cb to {1,2,3,4,5} and priority to 6, runs bpf program that fails if cb is not what we expect and increments cb[i] and priority. When the test finishes, we check that cb is now {2,3,4,5,6} and priority is 7. We also test the sanity checks: * ctx_in is provided, but ctx_size_in is zero (same for ctx_out/ctx_size_out) * unexpected non-zero fields in __sk_buff return EINVAL Signed-off-by: Stanislav Fomichev <sdf@google.com> Acked-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to '')
-rw-r--r--tools/testing/selftests/bpf/progs/test_skb_ctx.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_skb_ctx.c b/tools/testing/selftests/bpf/progs/test_skb_ctx.c
new file mode 100644
index 000000000000..7a80960d7df1
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_skb_ctx.c
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include "bpf_helpers.h"
+
+int _version SEC("version") = 1;
+char _license[] SEC("license") = "GPL";
+
+SEC("skb_ctx")
+int process(struct __sk_buff *skb)
+{
+ #pragma clang loop unroll(full)
+ for (int i = 0; i < 5; i++) {
+ if (skb->cb[i] != i + 1)
+ return 1;
+ skb->cb[i]++;
+ }
+ skb->priority++;
+
+ return 0;
+}