]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
selftests/bpf: add test for BTF-defined maps
authorAndrii Nakryiko <andriin@fb.com>
Mon, 17 Jun 2019 19:26:57 +0000 (12:26 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 17 Jun 2019 22:10:42 +0000 (00:10 +0200)
Add file test for BTF-defined map definition.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/progs/test_btf_newkv.c [new file with mode: 0644]
tools/testing/selftests/bpf/test_btf.c

diff --git a/tools/testing/selftests/bpf/progs/test_btf_newkv.c b/tools/testing/selftests/bpf/progs/test_btf_newkv.c
new file mode 100644 (file)
index 0000000..28c16bb
--- /dev/null
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (c) 2018 Facebook */
+#include <linux/bpf.h>
+#include "bpf_helpers.h"
+
+int _version SEC("version") = 1;
+
+struct ipv_counts {
+       unsigned int v4;
+       unsigned int v6;
+};
+
+/* just to validate we can handle maps in multiple sections */
+struct bpf_map_def SEC("maps") btf_map_legacy = {
+       .type = BPF_MAP_TYPE_ARRAY,
+       .key_size = sizeof(int),
+       .value_size = sizeof(long long),
+       .max_entries = 4,
+};
+
+BPF_ANNOTATE_KV_PAIR(btf_map_legacy, int, struct ipv_counts);
+
+struct {
+       int *key;
+       struct ipv_counts *value;
+       unsigned int type;
+       unsigned int max_entries;
+} btf_map SEC(".maps") = {
+       .type = BPF_MAP_TYPE_ARRAY,
+       .max_entries = 4,
+};
+
+struct dummy_tracepoint_args {
+       unsigned long long pad;
+       struct sock *sock;
+};
+
+__attribute__((noinline))
+static int test_long_fname_2(struct dummy_tracepoint_args *arg)
+{
+       struct ipv_counts *counts;
+       int key = 0;
+
+       if (!arg->sock)
+               return 0;
+
+       counts = bpf_map_lookup_elem(&btf_map, &key);
+       if (!counts)
+               return 0;
+
+       counts->v6++;
+
+       /* just verify we can reference both maps */
+       counts = bpf_map_lookup_elem(&btf_map_legacy, &key);
+       if (!counts)
+               return 0;
+
+       return 0;
+}
+
+__attribute__((noinline))
+static int test_long_fname_1(struct dummy_tracepoint_args *arg)
+{
+       return test_long_fname_2(arg);
+}
+
+SEC("dummy_tracepoint")
+int _dummy_tracepoint(struct dummy_tracepoint_args *arg)
+{
+       return test_long_fname_1(arg);
+}
+
+char _license[] SEC("license") = "GPL";
index 289daf54dec4065153f10cdf139c6e981a4470bc..8351cb5f4a2052ec14047db01d04ad15e61723ea 100644 (file)
@@ -4016,13 +4016,9 @@ struct btf_file_test {
 };
 
 static struct btf_file_test file_tests[] = {
-{
-       .file = "test_btf_haskv.o",
-},
-{
-       .file = "test_btf_nokv.o",
-       .btf_kv_notfound = true,
-},
+       { .file = "test_btf_haskv.o", },
+       { .file = "test_btf_newkv.o", },
+       { .file = "test_btf_nokv.o", .btf_kv_notfound = true, },
 };
 
 static int do_test_file(unsigned int test_num)