46 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 3#include <linux/bpf.h>4#include <bpf/bpf_helpers.h>5 6struct inner_map {7 __uint(type, BPF_MAP_TYPE_ARRAY);8 __uint(max_entries, 5);9 __type(key, int);10 __type(value, int);11} inner_map1 SEC(".maps");12 13struct outer_map {14 __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);15 __uint(max_entries, 3);16 __type(key, int);17 __array(values, struct inner_map);18} outer_map1 SEC(".maps") = {19 .values = {20 [2] = &inner_map1,21 },22};23 24SEC("raw_tp/sys_enter")25int handle__sys_enter(void *ctx)26{27 int outer_key = 2, inner_key = 3;28 int *val;29 void *map;30 31 map = bpf_map_lookup_elem(&outer_map1, &outer_key);32 if (!map)33 return 1;34 35 val = bpf_map_lookup_elem(map, &inner_key);36 if (!val)37 return 1;38 39 if (*val == 1)40 *val = 2;41 42 return 0;43}44 45char _license[] SEC("license") = "GPL";46