xref: /linux/tools/testing/selftests/bpf/progs/tcp_ca_update.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include "bpf_tracing_net.h"
4 #include <bpf/bpf_helpers.h>
5 #include <bpf/bpf_tracing.h>
6 
7 char _license[] SEC("license") = "GPL";
8 
9 int ca1_cnt = 0;
10 int ca2_cnt = 0;
11 
12 SEC("struct_ops")
13 void BPF_PROG(ca_update_1_init, struct sock *sk)
14 {
15 	ca1_cnt++;
16 }
17 
18 SEC("struct_ops")
19 void BPF_PROG(ca_update_2_init, struct sock *sk)
20 {
21 	ca2_cnt++;
22 }
23 
24 SEC("struct_ops")
25 void BPF_PROG(ca_update_cong_control, struct sock *sk,
26 	      const struct rate_sample *rs)
27 {
28 }
29 
30 SEC("struct_ops")
31 __u32 BPF_PROG(ca_update_ssthresh, struct sock *sk)
32 {
33 	return tcp_sk(sk)->snd_ssthresh;
34 }
35 
36 SEC("struct_ops")
37 __u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk)
38 {
39 	return tcp_sk(sk)->snd_cwnd;
40 }
41 
42 SEC(".struct_ops.link")
43 struct tcp_congestion_ops ca_update_1 = {
44 	.init = (void *)ca_update_1_init,
45 	.cong_control = (void *)ca_update_cong_control,
46 	.ssthresh = (void *)ca_update_ssthresh,
47 	.undo_cwnd = (void *)ca_update_undo_cwnd,
48 	.name = "tcp_ca_update",
49 };
50 
51 SEC(".struct_ops.link")
52 struct tcp_congestion_ops ca_update_2 = {
53 	.init = (void *)ca_update_2_init,
54 	.cong_control = (void *)ca_update_cong_control,
55 	.ssthresh = (void *)ca_update_ssthresh,
56 	.undo_cwnd = (void *)ca_update_undo_cwnd,
57 	.name = "tcp_ca_update",
58 };
59 
60 SEC(".struct_ops.link")
61 struct tcp_congestion_ops ca_wrong = {
62 	.cong_control = (void *)ca_update_cong_control,
63 	.ssthresh = (void *)ca_update_ssthresh,
64 	.undo_cwnd = (void *)ca_update_undo_cwnd,
65 	.name = "tcp_ca_wrong",
66 };
67 
68 SEC(".struct_ops")
69 struct tcp_congestion_ops ca_no_link = {
70 	.cong_control = (void *)ca_update_cong_control,
71 	.ssthresh = (void *)ca_update_ssthresh,
72 	.undo_cwnd = (void *)ca_update_undo_cwnd,
73 	.name = "tcp_ca_no_link",
74 };
75