Commit 57bfc760 authored by Miao Xu's avatar Miao Xu Committed by Martin KaFai Lau

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: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarMiao Xu <miaxu@meta.com>
Link: https://lore.kernel.org/r/20240502042318.801932-2-miaxu@meta.comSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
parent f8c423d1
...@@ -1172,7 +1172,7 @@ struct tcp_congestion_ops { ...@@ -1172,7 +1172,7 @@ struct tcp_congestion_ops {
/* call when packets are delivered to update cwnd and pacing rate, /* call when packets are delivered to update cwnd and pacing rate,
* after all the ca_state processing. (optional) * 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) */ /* new value of cwnd after loss (required) */
......
...@@ -307,7 +307,8 @@ static u32 bpf_tcp_ca_min_tso_segs(struct sock *sk) ...@@ -307,7 +307,8 @@ static u32 bpf_tcp_ca_min_tso_segs(struct sock *sk)
return 0; 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) ...@@ -1024,7 +1024,7 @@ static void bbr_update_model(struct sock *sk, const struct rate_sample *rs)
bbr_update_gains(sk); 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); struct bbr *bbr = inet_csk_ca(sk);
u32 bw; u32 bw;
......
...@@ -3541,7 +3541,7 @@ static void tcp_cong_control(struct sock *sk, u32 ack, u32 acked_sacked, ...@@ -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); const struct inet_connection_sock *icsk = inet_csk(sk);
if (icsk->icsk_ca_ops->cong_control) { 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; return;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <bpf/bpf_tracing.h> #include <bpf/bpf_tracing.h>
extern void bbr_init(struct sock *sk) __ksym; 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_sndbuf_expand(struct sock *sk) __ksym;
extern u32 bbr_undo_cwnd(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; 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) ...@@ -42,9 +42,9 @@ void BPF_PROG(in_ack_event, struct sock *sk, u32 flags)
} }
SEC("struct_ops/cong_control") 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") SEC("struct_ops/cong_avoid")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment