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__ */
|
#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,
|
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;
|
||||||
|
|
Loading…
Reference in New Issue