1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* Copyright (c) 2021 Facebook */ |
3 | |
4 | #include "vmlinux.h" |
5 | #include <bpf/bpf_helpers.h> |
6 | #include <bpf/bpf_tracing.h> |
7 | |
8 | /* modifiers and typedefs are ignored when comparing key/value types */ |
9 | typedef struct my_key { long x; } key_type; |
10 | typedef struct my_value { long x; } value_type; |
11 | |
12 | extern struct { |
13 | __uint(max_entries, 16); |
14 | __type(key, key_type); |
15 | __type(value, value_type); |
16 | __uint(type, BPF_MAP_TYPE_HASH); |
17 | } map1 SEC(".maps" ); |
18 | |
19 | struct { |
20 | __uint(type, BPF_MAP_TYPE_ARRAY); |
21 | __type(key, int); |
22 | __type(value, int); |
23 | __uint(max_entries, 8); |
24 | } map2 SEC(".maps" ); |
25 | |
26 | /* this definition will lose, but it has to exactly match the winner */ |
27 | struct { |
28 | __uint(type, BPF_MAP_TYPE_ARRAY); |
29 | __type(key, int); |
30 | __type(value, int); |
31 | __uint(max_entries, 16); |
32 | } map_weak __weak SEC(".maps" ); |
33 | |
34 | int output_first2; |
35 | int output_second2; |
36 | int output_weak2; |
37 | |
38 | SEC("raw_tp/sys_enter" ) |
39 | int BPF_PROG(handler_enter2) |
40 | { |
41 | /* update values with key = 2 */ |
42 | int key = 2, val = 2; |
43 | key_type key_struct = { .x = 2 }; |
44 | value_type val_struct = { .x = 2000 }; |
45 | |
46 | bpf_map_update_elem(&map1, &key_struct, &val_struct, 0); |
47 | bpf_map_update_elem(&map2, &key, &val, 0); |
48 | bpf_map_update_elem(&map_weak, &key, &val, 0); |
49 | |
50 | return 0; |
51 | } |
52 | |
53 | SEC("raw_tp/sys_exit" ) |
54 | int BPF_PROG(handler_exit2) |
55 | { |
56 | /* lookup values with key = 1, set in another file */ |
57 | int key = 1, *val; |
58 | key_type key_struct = { .x = 1 }; |
59 | value_type *value_struct; |
60 | |
61 | value_struct = bpf_map_lookup_elem(&map1, &key_struct); |
62 | if (value_struct) |
63 | output_first2 = value_struct->x; |
64 | |
65 | val = bpf_map_lookup_elem(&map2, &key); |
66 | if (val) |
67 | output_second2 = *val; |
68 | |
69 | val = bpf_map_lookup_elem(&map_weak, &key); |
70 | if (val) |
71 | output_weak2 = *val; |
72 | |
73 | return 0; |
74 | } |
75 | |
76 | char LICENSE[] SEC("license" ) = "GPL" ; |
77 | |