#include "../../include/bpf_api.h"

#define MAP_INNER_ID	42

struct bpf_elf_map __section_maps map_inner = {
	.type		= BPF_MAP_TYPE_ARRAY,
	.size_key	= sizeof(uint32_t),
	.size_value	= sizeof(uint32_t),
	.id		= MAP_INNER_ID,
	.inner_idx	= 0,
	.pinning	= PIN_GLOBAL_NS,
	.max_elem	= 1,
};

struct bpf_elf_map __section_maps map_outer = {
	.type		= BPF_MAP_TYPE_ARRAY_OF_MAPS,
	.size_key	= sizeof(uint32_t),
	.size_value	= sizeof(uint32_t),
	.inner_id	= MAP_INNER_ID,
	.pinning	= PIN_GLOBAL_NS,
	.max_elem	= 1,
};

__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");
