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: Lawrence Brakmo <brakmo@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Lawrence Brakmo 2017-06-30 20:02:51 -07:00 committed by David S. Miller
parent bb56d4449d
commit fc7478103c
2 changed files with 19 additions and 1 deletions

View File

@ -783,4 +783,6 @@ enum {
*/
};
#define TCP_BPF_IW 1001 /* Set TCP initial congestion window */
#endif /* _UAPI__LINUX_BPF_H__ */

View File

@ -2732,7 +2732,23 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock,
tcp_reinit_congestion_control(sk,
inet_csk(sk)->icsk_ca_ops);
} 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
ret = -EINVAL;