1// SPDX-License-Identifier: GPL-2.0
2
3#include "vmlinux.h"
4
5#include <bpf/bpf_helpers.h>
6#include <bpf/bpf_tracing.h>
7
8char _license[] SEC("license") = "GPL";
9
10int ca1_cnt = 0;
11int ca2_cnt = 0;
12
13static inline struct tcp_sock *tcp_sk(const struct sock *sk)
14{
15 return (struct tcp_sock *)sk;
16}
17
18SEC("struct_ops/ca_update_1_init")
19void BPF_PROG(ca_update_1_init, struct sock *sk)
20{
21 ca1_cnt++;
22}
23
24SEC("struct_ops/ca_update_2_init")
25void BPF_PROG(ca_update_2_init, struct sock *sk)
26{
27 ca2_cnt++;
28}
29
30SEC("struct_ops/ca_update_cong_control")
31void BPF_PROG(ca_update_cong_control, struct sock *sk,
32 const struct rate_sample *rs)
33{
34}
35
36SEC("struct_ops/ca_update_ssthresh")
37__u32 BPF_PROG(ca_update_ssthresh, struct sock *sk)
38{
39 return tcp_sk(sk)->snd_ssthresh;
40}
41
42SEC("struct_ops/ca_update_undo_cwnd")
43__u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk)
44{
45 return tcp_sk(sk)->snd_cwnd;
46}
47
48SEC(".struct_ops.link")
49struct 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",
55};
56
57SEC(".struct_ops.link")
58struct 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",
64};
65
66SEC(".struct_ops.link")
67struct 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",
72};
73
74SEC(".struct_ops")
75struct 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",
80};
81

source code of linux/tools/testing/selftests/bpf/progs/tcp_ca_update.c