xref: /linux/tools/testing/selftests/bpf/progs/test_task_local_data.c (revision 4f38da1f027ea2c9f01bb71daa7a299c191b6940)
1*120f1a95SAmery Hung // SPDX-License-Identifier: GPL-2.0
2*120f1a95SAmery Hung 
3*120f1a95SAmery Hung #include <vmlinux.h>
4*120f1a95SAmery Hung #include <errno.h>
5*120f1a95SAmery Hung #include <bpf/bpf_helpers.h>
6*120f1a95SAmery Hung 
7*120f1a95SAmery Hung #include "task_local_data.bpf.h"
8*120f1a95SAmery Hung 
9*120f1a95SAmery Hung struct tld_keys {
10*120f1a95SAmery Hung 	tld_key_t value0;
11*120f1a95SAmery Hung 	tld_key_t value1;
12*120f1a95SAmery Hung 	tld_key_t value2;
13*120f1a95SAmery Hung 	tld_key_t value_not_exist;
14*120f1a95SAmery Hung };
15*120f1a95SAmery Hung 
16*120f1a95SAmery Hung struct test_tld_struct {
17*120f1a95SAmery Hung 	__u64 a;
18*120f1a95SAmery Hung 	__u64 b;
19*120f1a95SAmery Hung 	__u64 c;
20*120f1a95SAmery Hung 	__u64 d;
21*120f1a95SAmery Hung };
22*120f1a95SAmery Hung 
23*120f1a95SAmery Hung int test_value0;
24*120f1a95SAmery Hung int test_value1;
25*120f1a95SAmery Hung struct test_tld_struct test_value2;
26*120f1a95SAmery Hung 
27*120f1a95SAmery Hung SEC("syscall")
28*120f1a95SAmery Hung int task_main(void *ctx)
29*120f1a95SAmery Hung {
30*120f1a95SAmery Hung 	struct tld_object tld_obj;
31*120f1a95SAmery Hung 	struct test_tld_struct *struct_p;
32*120f1a95SAmery Hung 	struct task_struct *task;
33*120f1a95SAmery Hung 	int err, *int_p;
34*120f1a95SAmery Hung 
35*120f1a95SAmery Hung 	task = bpf_get_current_task_btf();
36*120f1a95SAmery Hung 	err = tld_object_init(task, &tld_obj);
37*120f1a95SAmery Hung 	if (err)
38*120f1a95SAmery Hung 		return 1;
39*120f1a95SAmery Hung 
40*120f1a95SAmery Hung 	int_p = tld_get_data(&tld_obj, value0, "value0", sizeof(int));
41*120f1a95SAmery Hung 	if (int_p)
42*120f1a95SAmery Hung 		test_value0 = *int_p;
43*120f1a95SAmery Hung 	else
44*120f1a95SAmery Hung 		return 2;
45*120f1a95SAmery Hung 
46*120f1a95SAmery Hung 	int_p = tld_get_data(&tld_obj, value1, "value1", sizeof(int));
47*120f1a95SAmery Hung 	if (int_p)
48*120f1a95SAmery Hung 		test_value1 = *int_p;
49*120f1a95SAmery Hung 	else
50*120f1a95SAmery Hung 		return 3;
51*120f1a95SAmery Hung 
52*120f1a95SAmery Hung 	struct_p = tld_get_data(&tld_obj, value2, "value2", sizeof(struct test_tld_struct));
53*120f1a95SAmery Hung 	if (struct_p)
54*120f1a95SAmery Hung 		test_value2 = *struct_p;
55*120f1a95SAmery Hung 	else
56*120f1a95SAmery Hung 		return 4;
57*120f1a95SAmery Hung 
58*120f1a95SAmery Hung 	int_p = tld_get_data(&tld_obj, value_not_exist, "value_not_exist", sizeof(int));
59*120f1a95SAmery Hung 	if (int_p)
60*120f1a95SAmery Hung 		return 5;
61*120f1a95SAmery Hung 
62*120f1a95SAmery Hung 	return 0;
63*120f1a95SAmery Hung }
64*120f1a95SAmery Hung 
65*120f1a95SAmery Hung char _license[] SEC("license") = "GPL";
66