Merge branch 'tcp-add-some-rto-min-and-delack-max-bpf_getsockopt-supports'

Jason Xing says:

====================
Introduce bpf_sol_tcp_getsockopt() helper.

Add bpf_getsockopt for RTO MIN and DELACK MAX.

Add corresponding selftests for bpf.
====================

Link: https://patch.msgid.link/20250312153523.9860-1-kerneljasonxing@gmail.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
This commit is contained in:
Martin KaFai Lau 2025-03-13 14:30:39 -07:00
commit c468c8d299
2 changed files with 35 additions and 12 deletions

View File

@ -5282,6 +5282,38 @@ static int sol_socket_sockopt(struct sock *sk, int optname,
KERNEL_SOCKPTR(optval), *optlen);
}
static int bpf_sol_tcp_getsockopt(struct sock *sk, int optname,
char *optval, int optlen)
{
if (optlen != sizeof(int))
return -EINVAL;
switch (optname) {
case TCP_BPF_SOCK_OPS_CB_FLAGS: {
int cb_flags = tcp_sk(sk)->bpf_sock_ops_cb_flags;
memcpy(optval, &cb_flags, optlen);
break;
}
case TCP_BPF_RTO_MIN: {
int rto_min_us = jiffies_to_usecs(inet_csk(sk)->icsk_rto_min);
memcpy(optval, &rto_min_us, optlen);
break;
}
case TCP_BPF_DELACK_MAX: {
int delack_max_us = jiffies_to_usecs(inet_csk(sk)->icsk_delack_max);
memcpy(optval, &delack_max_us, optlen);
break;
}
default:
return -EINVAL;
}
return 0;
}
static int bpf_sol_tcp_setsockopt(struct sock *sk, int optname,
char *optval, int optlen)
{
@ -5415,20 +5447,9 @@ static int sol_tcp_sockopt(struct sock *sk, int optname,
if (*optlen < 1)
return -EINVAL;
break;
case TCP_BPF_SOCK_OPS_CB_FLAGS:
if (*optlen != sizeof(int))
return -EINVAL;
if (getopt) {
struct tcp_sock *tp = tcp_sk(sk);
int cb_flags = tp->bpf_sock_ops_cb_flags;
memcpy(optval, &cb_flags, *optlen);
return 0;
}
return bpf_sol_tcp_setsockopt(sk, optname, optval, *optlen);
default:
if (getopt)
return -EINVAL;
return bpf_sol_tcp_getsockopt(sk, optname, optval, *optlen);
return bpf_sol_tcp_setsockopt(sk, optname, optval, *optlen);
}

View File

@ -61,6 +61,8 @@ static const struct sockopt_test sol_tcp_tests[] = {
{ .opt = TCP_NOTSENT_LOWAT, .new = 1314, .expected = 1314, },
{ .opt = TCP_BPF_SOCK_OPS_CB_FLAGS, .new = BPF_SOCK_OPS_ALL_CB_FLAGS,
.expected = BPF_SOCK_OPS_ALL_CB_FLAGS, },
{ .opt = TCP_BPF_DELACK_MAX, .new = 30000, .expected = 30000, },
{ .opt = TCP_BPF_RTO_MIN, .new = 30000, .expected = 30000, },
{ .opt = TCP_RTO_MAX_MS, .new = 2000, .expected = 2000, },
{ .opt = 0, },
};