Skip to content

Commit 49f6713

Browse files
JasonXingMartin KaFai Lau
authored andcommitted
tcp: bpf: Introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags
The patch refactors a bit on supporting getsockopt for TCP BPF flags. For now, only TCP_BPF_SOCK_OPS_CB_FLAGS. Later, more flags will be added into this function. No functional changes here. Signed-off-by: Jason Xing <[email protected]> Signed-off-by: Martin KaFai Lau <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent 6d99faf commit 49f6713

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

net/core/filter.c

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5282,6 +5282,26 @@ 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+
default:
5299+
return -EINVAL;
5300+
}
5301+
5302+
return 0;
5303+
}
5304+
52855305
static int bpf_sol_tcp_setsockopt(struct sock *sk, int optname,
52865306
char *optval, int optlen)
52875307
{
@@ -5415,20 +5435,9 @@ static int sol_tcp_sockopt(struct sock *sk, int optname,
54155435
if (*optlen < 1)
54165436
return -EINVAL;
54175437
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);
54295438
default:
54305439
if (getopt)
5431-
return -EINVAL;
5440+
return bpf_sol_tcp_getsockopt(sk, optname, optval, *optlen);
54325441
return bpf_sol_tcp_setsockopt(sk, optname, optval, *optlen);
54335442
}
54345443

0 commit comments

Comments
 (0)