1612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann#include "../../include/bpf_api.h" 2612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 3612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann#define MAP_INNER_ID 42 4612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 5612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmannstruct bpf_elf_map __section_maps map_inner = { 6612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .type = BPF_MAP_TYPE_ARRAY, 7612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .size_key = sizeof(uint32_t), 8612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .size_value = sizeof(uint32_t), 9612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .id = MAP_INNER_ID, 10612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .inner_idx = 0, 11612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .pinning = PIN_GLOBAL_NS, 12612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .max_elem = 1, 13612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann}; 14612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 15612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmannstruct bpf_elf_map __section_maps map_outer = { 16612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .type = BPF_MAP_TYPE_ARRAY_OF_MAPS, 17612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .size_key = sizeof(uint32_t), 18612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .size_value = sizeof(uint32_t), 19612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .inner_id = MAP_INNER_ID, 20612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .pinning = PIN_GLOBAL_NS, 21612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann .max_elem = 1, 22612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann}; 23612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 24612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann__section("egress") 25612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmannint emain(struct __sk_buff *skb) 26612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann{ 27612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann struct bpf_elf_map *map_inner; 28612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann int key = 0, *val; 29612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 30612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann map_inner = map_lookup_elem(&map_outer, &key); 31612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann if (map_inner) { 32612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann val = map_lookup_elem(map_inner, &key); 33612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann if (val) 34612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann lock_xadd(val, 1); 35612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann } 36612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 37612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann return BPF_H_DEFAULT; 38612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann} 39612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 40612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann__section("ingress") 41612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmannint imain(struct __sk_buff *skb) 42612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann{ 43612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann struct bpf_elf_map *map_inner; 44612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann int key = 0, *val; 45612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 46612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann map_inner = map_lookup_elem(&map_outer, &key); 47612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann if (map_inner) { 48612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann val = map_lookup_elem(map_inner, &key); 49612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann if (val) 50612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann printt("map val: %d\n", *val); 51612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann } 52612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 53612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann return BPF_H_DEFAULT; 54612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann} 55612ff099a11092a6ed4084b84a8810155884bacaDaniel Borkmann 56612ff099a11092a6ed4084b84a8810155884bacaDaniel BorkmannBPF_LICENSE("GPL"); 57