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 | |
8 | char _license[] SEC("license" ) = "GPL" ; |
9 | |
10 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
11 | { |
12 | return (struct tcp_sock *)sk; |
13 | } |
14 | |
15 | SEC("struct_ops/incompl_cong_ops_ssthresh" ) |
16 | __u32 BPF_PROG(incompl_cong_ops_ssthresh, struct sock *sk) |
17 | { |
18 | return tcp_sk(sk)->snd_ssthresh; |
19 | } |
20 | |
21 | SEC("struct_ops/incompl_cong_ops_undo_cwnd" ) |
22 | __u32 BPF_PROG(incompl_cong_ops_undo_cwnd, struct sock *sk) |
23 | { |
24 | return tcp_sk(sk)->snd_cwnd; |
25 | } |
26 | |
27 | SEC(".struct_ops" ) |
28 | struct tcp_congestion_ops incompl_cong_ops = { |
29 | /* Intentionally leaving out any of the required cong_avoid() and |
30 | * cong_control() here. |
31 | */ |
32 | .ssthresh = (void *)incompl_cong_ops_ssthresh, |
33 | .undo_cwnd = (void *)incompl_cong_ops_undo_cwnd, |
34 | .name = "bpf_incompl_ops" , |
35 | }; |
36 | |