netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports
@ 2025-03-12 15:35 Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags Jason Xing
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Jason Xing @ 2025-03-12 15:35 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell
  Cc: bpf, netdev, Jason Xing

Introduce bpf_sol_tcp_getsockopt() helper.

Add bpf_getsockopt for RTO MIN and DELACK MAX.

Add corresponding selftests for bpf.

---
v3
Link: https://lore.kernel.org/all/20250311085437.14703-1-kerneljasonxing@gmail.com/
1. Remove 2 bpf unrelated patches which will be separately submitted
after the netdev conference. So this series is consist of pure BPF
modification.
2. Fix selftests by adjusting the test/expected value because some arch
configs use HZ=100. Now those two selftests can be used from HZ=100 to
HZ=1000.

v2
Link: https://lore.kernel.org/all/20250309123004.85612-1-kerneljasonxing@gmail.com/
1. add bpf getsockopt common helper
2. target bpf-next net branch

Jason Xing (4):
  tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags
  tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN
  tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX
  selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and
    TCP_BPF_RTO_MIN

 net/core/filter.c                             | 45 ++++++++++++++-----
 .../selftests/bpf/progs/setget_sockopt.c      |  2 +
 2 files changed, 35 insertions(+), 12 deletions(-)

-- 
2.43.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH bpf-next v3 1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags
  2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
@ 2025-03-12 15:35 ` Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 2/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN Jason Xing
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jason Xing @ 2025-03-12 15:35 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell
  Cc: bpf, netdev, Jason Xing

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 <kerneljasonxing@gmail.com>
---
 net/core/filter.c | 33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/net/core/filter.c b/net/core/filter.c
index a0867c5b32b3..2932de5cc57c 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5282,6 +5282,26 @@ 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;
+	}
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int bpf_sol_tcp_setsockopt(struct sock *sk, int optname,
 				  char *optval, int optlen)
 {
@@ -5415,20 +5435,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);
 	}
 
-- 
2.43.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next v3 2/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN
  2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags Jason Xing
@ 2025-03-12 15:35 ` Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 3/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX Jason Xing
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jason Xing @ 2025-03-12 15:35 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell
  Cc: bpf, netdev, Jason Xing

Support bpf_getsockopt if application tries to know what the RTO MIN
of this socket is.

Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
 net/core/filter.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/core/filter.c b/net/core/filter.c
index 2932de5cc57c..4d34d35af5c7 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5295,6 +5295,12 @@ static int bpf_sol_tcp_getsockopt(struct sock *sk, int optname,
 		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;
+	}
 	default:
 		return -EINVAL;
 	}
-- 
2.43.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next v3 3/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX
  2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 2/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN Jason Xing
@ 2025-03-12 15:35 ` Jason Xing
  2025-03-12 15:35 ` [PATCH bpf-next v3 4/4] selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN Jason Xing
  2025-03-13 22:10 ` [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Jason Xing @ 2025-03-12 15:35 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell
  Cc: bpf, netdev, Jason Xing

Support bpf_getsockopt if application tries to know what the delayed ack
max time is.

Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
 net/core/filter.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/core/filter.c b/net/core/filter.c
index 4d34d35af5c7..46ae8eb7a03c 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5301,6 +5301,12 @@ static int bpf_sol_tcp_getsockopt(struct sock *sk, int optname,
 		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;
 	}
-- 
2.43.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next v3 4/4] selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN
  2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
                   ` (2 preceding siblings ...)
  2025-03-12 15:35 ` [PATCH bpf-next v3 3/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX Jason Xing
@ 2025-03-12 15:35 ` Jason Xing
  2025-03-13 22:10 ` [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Jason Xing @ 2025-03-12 15:35 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell
  Cc: bpf, netdev, Jason Xing

Add selftests for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN BPF socket
cases.

Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
 tools/testing/selftests/bpf/progs/setget_sockopt.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/selftests/bpf/progs/setget_sockopt.c b/tools/testing/selftests/bpf/progs/setget_sockopt.c
index 106fe430f41b..0107a24b7522 100644
--- a/tools/testing/selftests/bpf/progs/setget_sockopt.c
+++ b/tools/testing/selftests/bpf/progs/setget_sockopt.c
@@ -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, },
 };
-- 
2.43.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports
  2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
                   ` (3 preceding siblings ...)
  2025-03-12 15:35 ` [PATCH bpf-next v3 4/4] selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN Jason Xing
@ 2025-03-13 22:10 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-13 22:10 UTC (permalink / raw)
  To: Jason Xing
  Cc: davem, edumazet, kuba, pabeni, dsahern, ast, daniel, andrii,
	martin.lau, eddyz87, song, yonghong.song, john.fastabend, kpsingh,
	sdf, haoluo, jolsa, horms, kuniyu, ncardwell, bpf, netdev

Hello:

This series was applied to bpf/bpf-next.git (net)
by Martin KaFai Lau <martin.lau@kernel.org>:

On Wed, 12 Mar 2025 16:35:19 +0100 you wrote:
> Introduce bpf_sol_tcp_getsockopt() helper.
> 
> Add bpf_getsockopt for RTO MIN and DELACK MAX.
> 
> Add corresponding selftests for bpf.
> 
> 
> [...]

Here is the summary with links:
  - [bpf-next,v3,1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags
    https://git.kernel.org/bpf/bpf-next/c/49f6713cb691
  - [bpf-next,v3,2/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN
    https://git.kernel.org/bpf/bpf-next/c/5584cd7e0ddd
  - [bpf-next,v3,3/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX
    https://git.kernel.org/bpf/bpf-next/c/d22b8b04b88e
  - [bpf-next,v3,4/4] selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN
    https://git.kernel.org/bpf/bpf-next/c/a1e0783e1036

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-03-13 22:10 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-12 15:35 [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports Jason Xing
2025-03-12 15:35 ` [PATCH bpf-next v3 1/4] tcp: bpf: introduce bpf_sol_tcp_getsockopt to support TCP_BPF flags Jason Xing
2025-03-12 15:35 ` [PATCH bpf-next v3 2/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_RTO_MIN Jason Xing
2025-03-12 15:35 ` [PATCH bpf-next v3 3/4] tcp: bpf: support bpf_getsockopt for TCP_BPF_DELACK_MAX Jason Xing
2025-03-12 15:35 ` [PATCH bpf-next v3 4/4] selftests: add bpf_set/getsockopt() for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN Jason Xing
2025-03-13 22:10 ` [PATCH bpf-next v3 0/4] tcp: add some RTO MIN and DELACK MAX {bpf_}set/getsockopt supports patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).