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