Skip to content

Commit 6f13bec

Browse files
author
Paolo Abeni
committed
Martin KaFai Lau says: ==================== pull-request: bpf-next 2025-03-13 The following pull-request contains BPF updates for your *net-next* tree. We've added 4 non-merge commits during the last 3 day(s) which contain a total of 2 files changed, 35 insertions(+), 12 deletions(-). The main changes are: 1) bpf_getsockopt support for TCP_BPF_RTO_MIN and TCP_BPF_DELACK_MAX, from Jason Xing bpf-next-for-netdev * tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next: selftests/bpf: Add bpf_getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN tcp: bpf: Support bpf_getsockopt for TCP_BPF_DELACK_MAX tcp: bpf: Support bpf_getsockopt for TCP_BPF_RTO_MIN tcp: bpf: Introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents f491593 + c468c8d commit 6f13bec

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

net/core/filter.c

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5282,6 +5282,38 @@ static int sol_socket_sockopt(struct sock *sk, int optname,
52825282
KERNEL_SOCKPTR(optval), *optlen);
52835283
}
52845284

5285+
static int bpf_sol_tcp_getsockopt(struct sock *sk, int optname,
5286+
char *optval, int optlen)
5287+
{
5288+
if (optlen != sizeof(int))
5289+
return -EINVAL;
5290+
5291+
switch (optname) {
5292+
case TCP_BPF_SOCK_OPS_CB_FLAGS: {
5293+
int cb_flags = tcp_sk(sk)->bpf_sock_ops_cb_flags;
5294+
5295+
memcpy(optval, &cb_flags, optlen);
5296+
break;
5297+
}
5298+
case TCP_BPF_RTO_MIN: {
5299+
int rto_min_us = jiffies_to_usecs(inet_csk(sk)->icsk_rto_min);
5300+
5301+
memcpy(optval, &rto_min_us, optlen);
5302+
break;
5303+
}
5304+
case TCP_BPF_DELACK_MAX: {
5305+
int delack_max_us = jiffies_to_usecs(inet_csk(sk)->icsk_delack_max);
5306+
5307+
memcpy(optval, &delack_max_us, optlen);
5308+
break;
5309+
}
5310+
default:
5311+
return -EINVAL;
5312+
}
5313+
5314+
return 0;
5315+
}
5316+
52855317
static int bpf_sol_tcp_setsockopt(struct sock *sk, int optname,
52865318
char *optval, int optlen)
52875319
{
@@ -5415,20 +5447,9 @@ static int sol_tcp_sockopt(struct sock *sk, int optname,
54155447
if (*optlen < 1)
54165448
return -EINVAL;
54175449
break;
5418-
case TCP_BPF_SOCK_OPS_CB_FLAGS:
5419-
if (*optlen != sizeof(int))
5420-
return -EINVAL;
5421-
if (getopt) {
5422-
struct tcp_sock *tp = tcp_sk(sk);
5423-
int cb_flags = tp->bpf_sock_ops_cb_flags;
5424-
5425-
memcpy(optval, &cb_flags, *optlen);
5426-
return 0;
5427-
}
5428-
return bpf_sol_tcp_setsockopt(sk, optname, optval, *optlen);
54295450
default:
54305451
if (getopt)
5431-
return -EINVAL;
5452+
return bpf_sol_tcp_getsockopt(sk, optname, optval, *optlen);
54325453
return bpf_sol_tcp_setsockopt(sk, optname, optval, *optlen);
54335454
}
54345455

tools/testing/selftests/bpf/progs/setget_sockopt.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ static const struct sockopt_test sol_tcp_tests[] = {
6161
{ .opt = TCP_NOTSENT_LOWAT, .new = 1314, .expected = 1314, },
6262
{ .opt = TCP_BPF_SOCK_OPS_CB_FLAGS, .new = BPF_SOCK_OPS_ALL_CB_FLAGS,
6363
.expected = BPF_SOCK_OPS_ALL_CB_FLAGS, },
64+
{ .opt = TCP_BPF_DELACK_MAX, .new = 30000, .expected = 30000, },
65+
{ .opt = TCP_BPF_RTO_MIN, .new = 30000, .expected = 30000, },
6466
{ .opt = TCP_RTO_MAX_MS, .new = 2000, .expected = 2000, },
6567
{ .opt = 0, },
6668
};

0 commit comments

Comments
 (0)