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:
parent
bb56d4449d
commit
fc7478103c
|
@ -783,4 +783,6 @@ enum {
|
|||
*/
|
||||
};
|
||||
|
||||
#define TCP_BPF_IW 1001 /* Set TCP initial congestion window */
|
||||
|
||||
#endif /* _UAPI__LINUX_BPF_H__ */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue