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