Skip to content

Commit c468c8d

Browse files
author
Martin KaFai Lau
committed
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/[email protected] Signed-off-by: Martin KaFai Lau <[email protected]>
2 parents 6d99faf + a1e0783 commit c468c8d

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)