mirror of https://gitee.com/openkylin/linux.git
selftests/bpf: add test for BTF-defined maps
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>
This commit is contained in:
parent
abd29c9314
commit
9e3d709c47
|
@ -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";
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue