1 // SPDX-License-Identifier: GPL-2.0
5 #include <bpf/bpf_helpers.h>
6 #include <bpf/bpf_tracing.h>
8 char _license[] SEC("license") = "GPL";
13 static inline struct tcp_sock *tcp_sk(const struct sock *sk)
15 return (struct tcp_sock *)sk;
18 SEC("struct_ops/ca_update_1_init")
19 void BPF_PROG(ca_update_1_init, struct sock *sk)
24 SEC("struct_ops/ca_update_2_init")
25 void BPF_PROG(ca_update_2_init, struct sock *sk)
30 SEC("struct_ops/ca_update_cong_control")
31 void BPF_PROG(ca_update_cong_control, struct sock *sk,
32 const struct rate_sample *rs)
36 SEC("struct_ops/ca_update_ssthresh")
37 __u32 BPF_PROG(ca_update_ssthresh, struct sock *sk)
39 return tcp_sk(sk)->snd_ssthresh;
42 SEC("struct_ops/ca_update_undo_cwnd")
43 __u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk)
45 return tcp_sk(sk)->snd_cwnd;
48 SEC(".struct_ops.link")
49 struct tcp_congestion_ops ca_update_1 = {
50 .init = (void *)ca_update_1_init,
51 .cong_control = (void *)ca_update_cong_control,
52 .ssthresh = (void *)ca_update_ssthresh,
53 .undo_cwnd = (void *)ca_update_undo_cwnd,
54 .name = "tcp_ca_update",
57 SEC(".struct_ops.link")
58 struct tcp_congestion_ops ca_update_2 = {
59 .init = (void *)ca_update_2_init,
60 .cong_control = (void *)ca_update_cong_control,
61 .ssthresh = (void *)ca_update_ssthresh,
62 .undo_cwnd = (void *)ca_update_undo_cwnd,
63 .name = "tcp_ca_update",
66 SEC(".struct_ops.link")
67 struct tcp_congestion_ops ca_wrong = {
68 .cong_control = (void *)ca_update_cong_control,
69 .ssthresh = (void *)ca_update_ssthresh,
70 .undo_cwnd = (void *)ca_update_undo_cwnd,
71 .name = "tcp_ca_wrong",
75 struct tcp_congestion_ops ca_no_link = {
76 .cong_control = (void *)ca_update_cong_control,
77 .ssthresh = (void *)ca_update_ssthresh,
78 .undo_cwnd = (void *)ca_update_undo_cwnd,
79 .name = "tcp_ca_no_link",