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