1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */ |
3 | #include "bpf_experimental.h" |
4 | #include <bpf/bpf_helpers.h> |
5 | #include "bpf_misc.h" |
6 | #include <stdbool.h> |
7 | |
8 | char _license[] SEC("license") = "GPL"; |
9 | |
10 | enum Enum { EA1 = 0, EA2 = 11 }; |
11 | enum Enumu64 {EB1 = 0llu, EB2 = 12llu }; |
12 | enum Enums64 { EC1 = 0ll, EC2 = 13ll }; |
13 | |
14 | const volatile __s64 var_s64 = -1; |
15 | const volatile __u64 var_u64 = 0; |
16 | const volatile __s32 var_s32 = -1; |
17 | const volatile __u32 var_u32 = 0; |
18 | const volatile __s16 var_s16 = -1; |
19 | const volatile __u16 var_u16 = 0; |
20 | const volatile __s8 var_s8 = -1; |
21 | const volatile __u8 var_u8 = 0; |
22 | const volatile enum Enum var_ea = EA1; |
23 | const volatile enum Enumu64 var_eb = EB1; |
24 | const volatile enum Enums64 var_ec = EC1; |
25 | const volatile bool var_b = false; |
26 | |
27 | struct Struct { |
28 | int:16; |
29 | __u16 filler; |
30 | struct { |
31 | const __u16 filler2; |
32 | }; |
33 | struct Struct2 { |
34 | __u16 filler; |
35 | volatile struct { |
36 | const int:1; |
37 | union { |
38 | const volatile __u8 var_u8; |
39 | const volatile __s16 filler3; |
40 | const int:1; |
41 | } u; |
42 | }; |
43 | } struct2; |
44 | }; |
45 | |
46 | const volatile __u32 stru = 0; /* same prefix as below */ |
47 | const volatile struct Struct struct1 = {.struct2 = {.u = {.var_u8 = 1}}}; |
48 | |
49 | union Union { |
50 | __u16 var_u16; |
51 | struct Struct3 { |
52 | struct { |
53 | __u8 var_u8_l; |
54 | }; |
55 | struct { |
56 | struct { |
57 | __u8 var_u8_h; |
58 | }; |
59 | }; |
60 | } struct3; |
61 | }; |
62 | |
63 | const volatile union Union union1 = {.var_u16 = -1}; |
64 | |
65 | char arr[4] = {0}; |
66 | |
67 | SEC("socket") |
68 | int test_set_globals(void *ctx) |
69 | { |
70 | volatile __s8 a; |
71 | |
72 | a = var_s64; |
73 | a = var_u64; |
74 | a = var_s32; |
75 | a = var_u32; |
76 | a = var_s16; |
77 | a = var_u16; |
78 | a = var_s8; |
79 | a = var_u8; |
80 | a = var_ea; |
81 | a = var_eb; |
82 | a = var_ec; |
83 | a = var_b; |
84 | a = struct1.struct2.u.var_u8; |
85 | a = union1.var_u16; |
86 | |
87 | return a; |
88 | } |
89 |