Blame examples/bpf/bpf_map_in_map.c

Packit Service 3880ab
#include "../../include/bpf_api.h"
Packit Service 3880ab
Packit Service 3880ab
#define MAP_INNER_ID	42
Packit Service 3880ab
Packit Service 3880ab
struct bpf_elf_map __section_maps map_inner = {
Packit Service 3880ab
	.type		= BPF_MAP_TYPE_ARRAY,
Packit Service 3880ab
	.size_key	= sizeof(uint32_t),
Packit Service 3880ab
	.size_value	= sizeof(uint32_t),
Packit Service 3880ab
	.id		= MAP_INNER_ID,
Packit Service 3880ab
	.inner_idx	= 0,
Packit Service 3880ab
	.pinning	= PIN_GLOBAL_NS,
Packit Service 3880ab
	.max_elem	= 1,
Packit Service 3880ab
};
Packit Service 3880ab
Packit Service 3880ab
struct bpf_elf_map __section_maps map_outer = {
Packit Service 3880ab
	.type		= BPF_MAP_TYPE_ARRAY_OF_MAPS,
Packit Service 3880ab
	.size_key	= sizeof(uint32_t),
Packit Service 3880ab
	.size_value	= sizeof(uint32_t),
Packit Service 3880ab
	.inner_id	= MAP_INNER_ID,
Packit Service 3880ab
	.pinning	= PIN_GLOBAL_NS,
Packit Service 3880ab
	.max_elem	= 1,
Packit Service 3880ab
};
Packit Service 3880ab
Packit Service 3880ab
__section("egress")
Packit Service 3880ab
int emain(struct __sk_buff *skb)
Packit Service 3880ab
{
Packit Service 3880ab
	struct bpf_elf_map *map_inner;
Packit Service 3880ab
	int key = 0, *val;
Packit Service 3880ab
Packit Service 3880ab
	map_inner = map_lookup_elem(&map_outer, &key);
Packit Service 3880ab
	if (map_inner) {
Packit Service 3880ab
		val = map_lookup_elem(map_inner, &key);
Packit Service 3880ab
		if (val)
Packit Service 3880ab
			lock_xadd(val, 1);
Packit Service 3880ab
	}
Packit Service 3880ab
Packit Service 3880ab
	return BPF_H_DEFAULT;
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
__section("ingress")
Packit Service 3880ab
int imain(struct __sk_buff *skb)
Packit Service 3880ab
{
Packit Service 3880ab
	struct bpf_elf_map *map_inner;
Packit Service 3880ab
	int key = 0, *val;
Packit Service 3880ab
Packit Service 3880ab
	map_inner = map_lookup_elem(&map_outer, &key);
Packit Service 3880ab
	if (map_inner) {
Packit Service 3880ab
		val = map_lookup_elem(map_inner, &key);
Packit Service 3880ab
		if (val)
Packit Service 3880ab
			printt("map val: %d\n", *val);
Packit Service 3880ab
	}
Packit Service 3880ab
Packit Service 3880ab
	return BPF_H_DEFAULT;
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
BPF_LICENSE("GPL");