|
@@ -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;
|