Commit fc747810 authored by Lawrence Brakmo's avatar Lawrence Brakmo Committed by David S. Miller

bpf: Adds support for setting initial cwnd

Adds a new bpf_setsockopt for TCP sockets, TCP_BPF_IW, which sets the
initial congestion window. This can be used when the hosts are far
apart (large RTTs) and it is safe to start with a large inital cwnd.
Signed-off-by: default avatarLawrence Brakmo <brakmo@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bb56d444
...@@ -783,4 +783,6 @@ enum { ...@@ -783,4 +783,6 @@ enum {
*/ */
}; };
#define TCP_BPF_IW 1001 /* Set TCP initial congestion window */
#endif /* _UAPI__LINUX_BPF_H__ */ #endif /* _UAPI__LINUX_BPF_H__ */
...@@ -2732,7 +2732,23 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, ...@@ -2732,7 +2732,23 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock,
tcp_reinit_congestion_control(sk, tcp_reinit_congestion_control(sk,
inet_csk(sk)->icsk_ca_ops); inet_csk(sk)->icsk_ca_ops);
} else { } else {
ret = -EINVAL; struct tcp_sock *tp = tcp_sk(sk);
if (optlen != sizeof(int))
return -EINVAL;
val = *((int *)optval);
/* Only some options are supported */
switch (optname) {
case TCP_BPF_IW:
if (val <= 0 || tp->data_segs_out > 0)
ret = -EINVAL;
else
tp->snd_cwnd = val;
break;
default:
ret = -EINVAL;
}
} }
#else #else
ret = -EINVAL; ret = -EINVAL;
......
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