mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
tcp: Add new args for cong_control in tcp_congestion_ops
This patch adds two new arguments for cong_control of struct tcp_congestion_ops: - ack - flag These two arguments are inherited from the caller tcp_cong_control in tcp_intput.c. One use case of them is to update cwnd and pacing rate inside cong_control based on the info they provide. For example, the flag can be used to decide if it is the right time to raise or reduce a sender's cwnd. Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Miao Xu <miaxu@meta.com> Link: https://lore.kernel.org/r/20240502042318.801932-2-miaxu@meta.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
This commit is contained in:
parent
f8c423d1ca
commit
57bfc7605c
@ -1172,7 +1172,7 @@ struct tcp_congestion_ops {
|
||||
/* call when packets are delivered to update cwnd and pacing rate,
|
||||
* after all the ca_state processing. (optional)
|
||||
*/
|
||||
void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
|
||||
void (*cong_control)(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs);
|
||||
|
||||
|
||||
/* new value of cwnd after loss (required) */
|
||||
|
@ -307,7 +307,8 @@ static u32 bpf_tcp_ca_min_tso_segs(struct sock *sk)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void bpf_tcp_ca_cong_control(struct sock *sk, const struct rate_sample *rs)
|
||||
static void bpf_tcp_ca_cong_control(struct sock *sk, u32 ack, int flag,
|
||||
const struct rate_sample *rs)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1024,7 +1024,7 @@ static void bbr_update_model(struct sock *sk, const struct rate_sample *rs)
|
||||
bbr_update_gains(sk);
|
||||
}
|
||||
|
||||
__bpf_kfunc static void bbr_main(struct sock *sk, const struct rate_sample *rs)
|
||||
__bpf_kfunc static void bbr_main(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs)
|
||||
{
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
u32 bw;
|
||||
|
@ -3541,7 +3541,7 @@ static void tcp_cong_control(struct sock *sk, u32 ack, u32 acked_sacked,
|
||||
const struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
|
||||
if (icsk->icsk_ca_ops->cong_control) {
|
||||
icsk->icsk_ca_ops->cong_control(sk, rs);
|
||||
icsk->icsk_ca_ops->cong_control(sk, ack, flag, rs);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <bpf/bpf_tracing.h>
|
||||
|
||||
extern void bbr_init(struct sock *sk) __ksym;
|
||||
extern void bbr_main(struct sock *sk, const struct rate_sample *rs) __ksym;
|
||||
extern void bbr_main(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs) __ksym;
|
||||
extern u32 bbr_sndbuf_expand(struct sock *sk) __ksym;
|
||||
extern u32 bbr_undo_cwnd(struct sock *sk) __ksym;
|
||||
extern void bbr_cwnd_event(struct sock *sk, enum tcp_ca_event event) __ksym;
|
||||
@ -42,9 +42,9 @@ void BPF_PROG(in_ack_event, struct sock *sk, u32 flags)
|
||||
}
|
||||
|
||||
SEC("struct_ops/cong_control")
|
||||
void BPF_PROG(cong_control, struct sock *sk, const struct rate_sample *rs)
|
||||
void BPF_PROG(cong_control, struct sock *sk, u32 ack, int flag, const struct rate_sample *rs)
|
||||
{
|
||||
bbr_main(sk, rs);
|
||||
bbr_main(sk, ack, flag, rs);
|
||||
}
|
||||
|
||||
SEC("struct_ops/cong_avoid")
|
||||
|
Loading…
Reference in New Issue
Block a user