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 7char _license[] SEC("license") = "GPL"; 8 9int ca1_cnt = 0; 10int ca2_cnt = 0; 11 12SEC("struct_ops") 13void BPF_PROG(ca_update_1_init, struct sock *sk) 14{ 15 ca1_cnt++; 16} 17 18SEC("struct_ops") 19void BPF_PROG(ca_update_2_init, struct sock *sk) 20{ 21 ca2_cnt++; 22} 23 24SEC("struct_ops") 25void BPF_PROG(ca_update_cong_control, struct sock *sk, 26 const struct rate_sample *rs) 27{ 28} 29 30SEC("struct_ops") 31__u32 BPF_PROG(ca_update_ssthresh, struct sock *sk) 32{ 33 return tcp_sk(sk)->snd_ssthresh; 34} 35 36SEC("struct_ops") 37__u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk) 38{ 39 return tcp_sk(sk)->snd_cwnd; 40} 41 42SEC(".struct_ops.link") 43struct 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 51SEC(".struct_ops.link") 52struct 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 60SEC(".struct_ops.link") 61struct 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 68SEC(".struct_ops") 69struct 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