1 // SPDX-License-Identifier: GPL-2.0-only
2 
3 /*
4  * Copyright 2021 Google LLC.
5  */
6 
7 #include <errno.h>
8 #include <linux/bpf.h>
9 #include <bpf/bpf_helpers.h>
10 
11 __u32 invocations = 0;
12 __u32 assertion_error = 0;
13 __u32 retval_value = 0;
14 __u32 ctx_retval_value = 0;
15 
16 SEC("cgroup/getsockopt")
17 int get_retval(struct bpf_sockopt *ctx)
18 {
19 	retval_value = bpf_get_retval();
20 	ctx_retval_value = ctx->retval;
21 	__sync_fetch_and_add(&invocations, 1);
22 
23 	return 1;
24 }
25 
26 SEC("cgroup/getsockopt")
27 int set_eisconn(struct bpf_sockopt *ctx)
28 {
29 	__sync_fetch_and_add(&invocations, 1);
30 
31 	if (bpf_set_retval(-EISCONN))
32 		assertion_error = 1;
33 
34 	return 1;
35 }
36 
37 SEC("cgroup/getsockopt")
38 int clear_retval(struct bpf_sockopt *ctx)
39 {
40 	__sync_fetch_and_add(&invocations, 1);
41 
42 	ctx->retval = 0;
43 
44 	return 1;
45 }
46