Linux Audio

Check our new training course

Loading...
v6.13.7
 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};
v6.8
 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
 8char _license[] SEC("license") = "GPL";
 9
10int ca1_cnt = 0;
11int ca2_cnt = 0;
12
13static inline struct tcp_sock *tcp_sk(const struct sock *sk)
14{
15	return (struct tcp_sock *)sk;
16}
17
18SEC("struct_ops/ca_update_1_init")
19void BPF_PROG(ca_update_1_init, struct sock *sk)
20{
21	ca1_cnt++;
22}
23
24SEC("struct_ops/ca_update_2_init")
25void BPF_PROG(ca_update_2_init, struct sock *sk)
26{
27	ca2_cnt++;
28}
29
30SEC("struct_ops/ca_update_cong_control")
31void BPF_PROG(ca_update_cong_control, struct sock *sk,
32	      const struct rate_sample *rs)
33{
34}
35
36SEC("struct_ops/ca_update_ssthresh")
37__u32 BPF_PROG(ca_update_ssthresh, struct sock *sk)
38{
39	return tcp_sk(sk)->snd_ssthresh;
40}
41
42SEC("struct_ops/ca_update_undo_cwnd")
43__u32 BPF_PROG(ca_update_undo_cwnd, struct sock *sk)
44{
45	return tcp_sk(sk)->snd_cwnd;
46}
47
48SEC(".struct_ops.link")
49struct tcp_congestion_ops ca_update_1 = {
50	.init = (void *)ca_update_1_init,
51	.cong_control = (void *)ca_update_cong_control,
52	.ssthresh = (void *)ca_update_ssthresh,
53	.undo_cwnd = (void *)ca_update_undo_cwnd,
54	.name = "tcp_ca_update",
55};
56
57SEC(".struct_ops.link")
58struct tcp_congestion_ops ca_update_2 = {
59	.init = (void *)ca_update_2_init,
60	.cong_control = (void *)ca_update_cong_control,
61	.ssthresh = (void *)ca_update_ssthresh,
62	.undo_cwnd = (void *)ca_update_undo_cwnd,
63	.name = "tcp_ca_update",
64};
65
66SEC(".struct_ops.link")
67struct tcp_congestion_ops ca_wrong = {
68	.cong_control = (void *)ca_update_cong_control,
69	.ssthresh = (void *)ca_update_ssthresh,
70	.undo_cwnd = (void *)ca_update_undo_cwnd,
71	.name = "tcp_ca_wrong",
72};
73
74SEC(".struct_ops")
75struct tcp_congestion_ops ca_no_link = {
76	.cong_control = (void *)ca_update_cong_control,
77	.ssthresh = (void *)ca_update_ssthresh,
78	.undo_cwnd = (void *)ca_update_undo_cwnd,
79	.name = "tcp_ca_no_link",
80};