mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2024-11-15 14:05:22 +08:00
71c7c1fb4f
Users should try use the new BTF defined maps instead of struct bpf_elf_map defined maps. The tail call examples are not added yet as libbpf doesn't currently support declaratively populating tail call maps. Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Hangbin Liu <haliu@redhat.com> Signed-off-by: David Ahern <dsahern@gmail.com>
56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
#include "../../include/bpf_api.h"
|
|
|
|
struct inner_map {
|
|
__uint(type, BPF_MAP_TYPE_ARRAY);
|
|
__uint(key_size, sizeof(uint32_t));
|
|
__uint(value_size, sizeof(uint32_t));
|
|
__uint(max_entries, 1);
|
|
} map_inner __section(".maps");
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS);
|
|
__uint(key_size, sizeof(uint32_t));
|
|
__uint(value_size, sizeof(uint32_t));
|
|
__uint(max_entries, 1);
|
|
__uint(pinning, LIBBPF_PIN_BY_NAME);
|
|
__array(values, struct inner_map);
|
|
} map_outer __section(".maps") = {
|
|
.values = {
|
|
[0] = &map_inner,
|
|
},
|
|
};
|
|
|
|
__section("egress")
|
|
int emain(struct __sk_buff *skb)
|
|
{
|
|
struct bpf_elf_map *map_inner;
|
|
int key = 0, *val;
|
|
|
|
map_inner = map_lookup_elem(&map_outer, &key);
|
|
if (map_inner) {
|
|
val = map_lookup_elem(map_inner, &key);
|
|
if (val)
|
|
lock_xadd(val, 1);
|
|
}
|
|
|
|
return BPF_H_DEFAULT;
|
|
}
|
|
|
|
__section("ingress")
|
|
int imain(struct __sk_buff *skb)
|
|
{
|
|
struct bpf_elf_map *map_inner;
|
|
int key = 0, *val;
|
|
|
|
map_inner = map_lookup_elem(&map_outer, &key);
|
|
if (map_inner) {
|
|
val = map_lookup_elem(map_inner, &key);
|
|
if (val)
|
|
printt("map val: %d\n", *val);
|
|
}
|
|
|
|
return BPF_H_DEFAULT;
|
|
}
|
|
|
|
BPF_LICENSE("GPL");
|