81 lines
1.8 KiB
C
81 lines
1.8 KiB
C
|
// SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
#include "vmlinux.h"
|
||
|
|
||
|
#include <bpf/bpf_helpers.h>
|
||
|
#include <bpf/bpf_tracing.h>
|
||
|
|
||
|
char _license[] SEC("license") = "GPL";
|
||
|
|
||
|
int ca1_cnt = 0;
|
||
|
int ca2_cnt = 0;
|
||
|
|
||
|
static inline struct tcp_sock *tcp_sk(const struct sock *sk)
|
||
|
{
|
||
|
return (struct tcp_sock *)sk;
|
||
|
}
|
||
|
|
||
|
SEC("struct_ops/ca_update_1_init")
|
||
|
void BPF_PROG(ca_update_1_init, struct sock *sk)
|
||
|
{
|
||
|
ca1_cnt++;
|
||
|
}
|
||
|
|
||
|
SEC("struct_ops/ca_update_2_init")
|
||
|
void BPF_PROG(ca_update_2_init, struct sock *sk)
|
||
|
{
|
||
|
ca2_cnt++;
|
||
|
}
|
||
|
|
||
|
SEC("struct_ops/ca_update_cong_control")
|
||
|
void BPF_PROG(ca_update_cong_control, struct sock *sk,
|
||
|
const struct rate_sample *rs)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
SEC("struct_ops/ca_update_ssthresh")
|
||
|
__u32 BPF_PROG(ca_update_ssthresh, struct sock *sk)
|
||
|
{
|
||
|
return tcp_sk(sk)->snd_ssthresh;
|
||
|
}
|
||
|
|
||
|
SEC("struct_ops/ca_update_undo_cwnd")
|
||
|
__u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk)
|
||
|
{
|
||
|
return tcp_sk(sk)->snd_cwnd;
|
||
|
}
|
||
|
|
||
|
SEC(".struct_ops.link")
|
||
|
struct tcp_congestion_ops ca_update_1 = {
|
||
|
.init = (void *)ca_update_1_init,
|
||
|
.cong_control = (void *)ca_update_cong_control,
|
||
|
.ssthresh = (void *)ca_update_ssthresh,
|
||
|
.undo_cwnd = (void *)ca_update_undo_cwnd,
|
||
|
.name = "tcp_ca_update",
|
||
|
};
|
||
|
|
||
|
SEC(".struct_ops.link")
|
||
|
struct tcp_congestion_ops ca_update_2 = {
|
||
|
.init = (void *)ca_update_2_init,
|
||
|
.cong_control = (void *)ca_update_cong_control,
|
||
|
.ssthresh = (void *)ca_update_ssthresh,
|
||
|
.undo_cwnd = (void *)ca_update_undo_cwnd,
|
||
|
.name = "tcp_ca_update",
|
||
|
};
|
||
|
|
||
|
SEC(".struct_ops.link")
|
||
|
struct tcp_congestion_ops ca_wrong = {
|
||
|
.cong_control = (void *)ca_update_cong_control,
|
||
|
.ssthresh = (void *)ca_update_ssthresh,
|
||
|
.undo_cwnd = (void *)ca_update_undo_cwnd,
|
||
|
.name = "tcp_ca_wrong",
|
||
|
};
|
||
|
|
||
|
SEC(".struct_ops")
|
||
|
struct tcp_congestion_ops ca_no_link = {
|
||
|
.cong_control = (void *)ca_update_cong_control,
|
||
|
.ssthresh = (void *)ca_update_ssthresh,
|
||
|
.undo_cwnd = (void *)ca_update_undo_cwnd,
|
||
|
.name = "tcp_ca_no_link",
|
||
|
};
|