BPF List
 help / color / mirror / Atom feed
From: Martin KaFai Lau <martin.lau@linux.dev>
To: bpf@vger.kernel.org
Cc: Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	kernel-team@meta.com
Subject: [PATCH bpf-next 02/10] selftests/bpf: Add a few tcp helper functions and macros to bpf_tracing_net.h
Date: Thu,  9 May 2024 10:50:18 -0700	[thread overview]
Message-ID: <20240509175026.3423614-3-martin.lau@linux.dev> (raw)
In-Reply-To: <20240509175026.3423614-1-martin.lau@linux.dev>

From: Martin KaFai Lau <martin.lau@kernel.org>

This patch adds a few tcp related helper functions to bpf_tracing_net.h.
They will be useful for both tcp-cc and network tracing related
bpf progs. They have already been in the bpf_tcp_helpers.h. This change
is needed to retire the bpf_tcp_helpers.h and consolidate all tests
to vmlinux.h (i.e. bpf_tracing_net.h).

Some of the helpers (tcp_sk and inet_csk) are also defined in
bpf_cc_cubic.c and they are removed. While at it, remove
the vmlinux.h from bpf_cc_cubic.c. bpf_tracing_net.h (which has
vmlinux.h after this patch) is enough and will be consistent
with the other tcp-cc tests in the later patches.

The other TCP_* macro additions will be needed for the bpf_dctcp
changes in the later patch.

Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
---
 .../selftests/bpf/progs/bpf_cc_cubic.c        | 14 +------
 .../selftests/bpf/progs/bpf_tracing_net.h     | 41 +++++++++++++++++++
 2 files changed, 42 insertions(+), 13 deletions(-)

diff --git a/tools/testing/selftests/bpf/progs/bpf_cc_cubic.c b/tools/testing/selftests/bpf/progs/bpf_cc_cubic.c
index 5c7697c70e2a..2004be380683 100644
--- a/tools/testing/selftests/bpf/progs/bpf_cc_cubic.c
+++ b/tools/testing/selftests/bpf/progs/bpf_cc_cubic.c
@@ -13,11 +13,9 @@
  *    kernel functions.
  */
 
-#include "vmlinux.h"
-
+#include "bpf_tracing_net.h"
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_tracing.h>
-#include "bpf_tracing_net.h"
 
 #define BPF_STRUCT_OPS(name, args...) \
 SEC("struct_ops/"#name) \
@@ -40,16 +38,6 @@ extern __u32 tcp_reno_undo_cwnd(struct sock *sk) __ksym;
 extern void cubictcp_acked(struct sock *sk, const struct ack_sample *sample) __ksym;
 extern void cubictcp_cong_avoid(struct sock *sk, __u32 ack, __u32 acked) __ksym;
 
-static struct inet_connection_sock *inet_csk(const struct sock *sk)
-{
-	return (struct inet_connection_sock *)sk;
-}
-
-static struct tcp_sock *tcp_sk(const struct sock *sk)
-{
-	return (struct tcp_sock *)sk;
-}
-
 static bool before(__u32 seq1, __u32 seq2)
 {
 	return (__s32)(seq1-seq2) < 0;
diff --git a/tools/testing/selftests/bpf/progs/bpf_tracing_net.h b/tools/testing/selftests/bpf/progs/bpf_tracing_net.h
index f9ec630dfcd5..ba4ca0334586 100644
--- a/tools/testing/selftests/bpf/progs/bpf_tracing_net.h
+++ b/tools/testing/selftests/bpf/progs/bpf_tracing_net.h
@@ -2,6 +2,9 @@
 #ifndef __BPF_TRACING_NET_H__
 #define __BPF_TRACING_NET_H__
 
+#include <vmlinux.h>
+#include <bpf/bpf_core_read.h>
+
 #define AF_INET			2
 #define AF_INET6		10
 
@@ -46,6 +49,13 @@
 #define TCP_CA_NAME_MAX		16
 #define TCP_NAGLE_OFF		1
 
+#define TCP_ECN_OK              1
+#define TCP_ECN_QUEUE_CWR       2
+#define TCP_ECN_DEMAND_CWR      4
+#define TCP_ECN_SEEN            8
+
+#define TCP_CONG_NEEDS_ECN     0x2
+
 #define ICSK_TIME_RETRANS	1
 #define ICSK_TIME_PROBE0	3
 #define ICSK_TIME_LOSS_PROBE	5
@@ -129,4 +139,35 @@
 
 #define tcp_jiffies32 ((__u32)bpf_jiffies64())
 
+static inline struct inet_connection_sock *inet_csk(const struct sock *sk)
+{
+	return (struct inet_connection_sock *)sk;
+}
+
+static inline void *inet_csk_ca(const struct sock *sk)
+{
+	return (void *)inet_csk(sk)->icsk_ca_priv;
+}
+
+static inline struct tcp_sock *tcp_sk(const struct sock *sk)
+{
+	return (struct tcp_sock *)sk;
+}
+
+static inline bool tcp_in_slow_start(const struct tcp_sock *tp)
+{
+	return tp->snd_cwnd < tp->snd_ssthresh;
+}
+
+static inline bool tcp_is_cwnd_limited(const struct sock *sk)
+{
+	const struct tcp_sock *tp = tcp_sk(sk);
+
+	/* If in slow start, ensure cwnd grows to twice what was ACKed. */
+	if (tcp_in_slow_start(tp))
+		return tp->snd_cwnd < 2 * tp->max_packets_out;
+
+	return !!BPF_CORE_READ_BITFIELD(tp, is_cwnd_limited);
+}
+
 #endif
-- 
2.43.0


  parent reply	other threads:[~2024-05-09 17:50 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-09 17:50 [PATCH bpf-next 00/10] selftests/bpf: Retire bpf_tcp_helpers.h Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 01/10] selftests/bpf: Remove bpf_tracing_net.h usages from two networking tests Martin KaFai Lau
2024-05-09 17:50 ` Martin KaFai Lau [this message]
2024-05-09 17:50 ` [PATCH bpf-next 03/10] selftests/bpf: Reuse the tcp_sk() from the bpf_tracing_net.h Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 04/10] selftests/bpf: Sanitize the SEC and inline usages in the bpf-tcp-cc tests Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 05/10] selftests/bpf: Rename tcp-cc private struct in bpf_cubic and bpf_dctcp Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 06/10] selftests/bpf: Use bpf_tracing_net.h in bpf_cubic Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 07/10] selftests/bpf: Use bpf_tracing_net.h in bpf_dctcp Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 08/10] selftests/bpf: Remove bpf_tcp_helpers.h usages from other misc bpf tcp-cc tests Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 09/10] selftests/bpf: Remove the bpf_tcp_helpers.h usages from other non " Martin KaFai Lau
2024-05-09 17:50 ` [PATCH bpf-next 10/10] selftests/bpf: Retire bpf_tcp_helpers.h Martin KaFai Lau
2024-05-09 18:24 ` [PATCH bpf-next 00/10] " Alexei Starovoitov
2024-05-09 18:30 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240509175026.3423614-3-martin.lau@linux.dev \
    --to=martin.lau@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@meta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox