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