1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | |
3 | #include <linux/bpf.h> |
4 | #include <bpf/bpf_helpers.h> |
5 | |
6 | struct 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 | |
13 | struct 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 | |
24 | SEC("raw_tp/sys_enter" ) |
25 | int 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 | |
45 | char _license[] SEC("license" ) = "GPL" ; |
46 | |