From: Jason Xing <kerneljasonxing@gmail.com>
To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, dsahern@kernel.org, ast@kernel.org,
daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev,
eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me,
haoluo@google.com, jolsa@kernel.org, horms@kernel.org,
ncardwell@google.com, kuniyu@amazon.com
Cc: bpf@vger.kernel.org, netdev@vger.kernel.org,
Jason Xing <kerneljasonxing@gmail.com>
Subject: [PATCH net-next 3/3] selftests/bpf: add rto max for bpf_setsockopt test
Date: Thu, 13 Feb 2025 08:43:54 +0800 [thread overview]
Message-ID: <20250213004355.38918-4-kerneljasonxing@gmail.com> (raw)
In-Reply-To: <20250213004355.38918-1-kerneljasonxing@gmail.com>
Add TCP_BPF_RTO_MAX selftests for active and passive flows
in the BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB and
BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB bpf callbacks.
Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
.../bpf/prog_tests/tcp_hdr_options.c | 28 +++++++++++++------
.../bpf/progs/test_tcp_hdr_options.c | 26 +++++++++++++++++
.../selftests/bpf/test_tcp_hdr_options.h | 3 ++
3 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/tcp_hdr_options.c b/tools/testing/selftests/bpf/prog_tests/tcp_hdr_options.c
index 56685fc03c7e..714d48df6b3a 100644
--- a/tools/testing/selftests/bpf/prog_tests/tcp_hdr_options.c
+++ b/tools/testing/selftests/bpf/prog_tests/tcp_hdr_options.c
@@ -60,8 +60,9 @@ static void print_hdr_stg(const struct hdr_stg *hdr_stg, const char *prefix)
static void print_option(const struct bpf_test_option *opt, const char *prefix)
{
- fprintf(stderr, "%s{flags:0x%x, max_delack_ms:%u, rand:0x%x}\n",
- prefix ? : "", opt->flags, opt->max_delack_ms, opt->rand);
+ fprintf(stderr, "%s{flags:0x%x, max_delack_ms:%u, rand:0x%x}, max_rto_sec:%u\n",
+ prefix ? : "", opt->flags, opt->max_delack_ms, opt->rand,
+ opt->max_rto_sec);
}
static void sk_fds_close(struct sk_fds *sk_fds)
@@ -300,13 +301,17 @@ static void fastopen_estab(void)
hdr_stg_map_fd = bpf_map__fd(skel->maps.hdr_stg_map);
lport_linum_map_fd = bpf_map__fd(skel->maps.lport_linum_map);
- exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS;
+ exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
+ OPTION_F_MAX_RTO_SEC;
exp_passive_estab_in.rand = 0xfa;
exp_passive_estab_in.max_delack_ms = 11;
+ exp_passive_estab_in.max_rto_sec = 1;
- exp_active_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS;
+ exp_active_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
+ OPTION_F_MAX_RTO_SEC;
exp_active_estab_in.rand = 0xce;
exp_active_estab_in.max_delack_ms = 22;
+ exp_active_estab_in.max_rto_sec = 2;
exp_passive_hdr_stg.fastopen = true;
@@ -337,14 +342,17 @@ static void syncookie_estab(void)
hdr_stg_map_fd = bpf_map__fd(skel->maps.hdr_stg_map);
lport_linum_map_fd = bpf_map__fd(skel->maps.lport_linum_map);
- exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS;
+ exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
+ OPTION_F_MAX_RTO_SEC;
exp_passive_estab_in.rand = 0xfa;
exp_passive_estab_in.max_delack_ms = 11;
+ exp_passive_estab_in.max_rto_sec = 1;
exp_active_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
- OPTION_F_RESEND;
+ OPTION_F_RESEND | OPTION_F_MAX_RTO_SEC;
exp_active_estab_in.rand = 0xce;
exp_active_estab_in.max_delack_ms = 22;
+ exp_active_estab_in.max_rto_sec = 2;
exp_passive_hdr_stg.syncookie = true;
exp_active_hdr_stg.resend_syn = true;
@@ -413,13 +421,17 @@ static void __simple_estab(bool exprm)
hdr_stg_map_fd = bpf_map__fd(skel->maps.hdr_stg_map);
lport_linum_map_fd = bpf_map__fd(skel->maps.lport_linum_map);
- exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS;
+ exp_passive_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
+ OPTION_F_MAX_RTO_SEC;
exp_passive_estab_in.rand = 0xfa;
exp_passive_estab_in.max_delack_ms = 11;
+ exp_passive_estab_in.max_rto_sec = 1;
- exp_active_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS;
+ exp_active_estab_in.flags = OPTION_F_RAND | OPTION_F_MAX_DELACK_MS |
+ OPTION_F_MAX_RTO_SEC;
exp_active_estab_in.rand = 0xce;
exp_active_estab_in.max_delack_ms = 22;
+ exp_active_estab_in.max_rto_sec = 2;
prepare_out();
diff --git a/tools/testing/selftests/bpf/progs/test_tcp_hdr_options.c b/tools/testing/selftests/bpf/progs/test_tcp_hdr_options.c
index 5f4e87ee949a..92da239adb49 100644
--- a/tools/testing/selftests/bpf/progs/test_tcp_hdr_options.c
+++ b/tools/testing/selftests/bpf/progs/test_tcp_hdr_options.c
@@ -80,6 +80,9 @@ static void write_test_option(const struct bpf_test_option *test_opt,
if (TEST_OPTION_FLAGS(test_opt->flags, OPTION_RAND))
data[offset++] = test_opt->rand;
+
+ if (TEST_OPTION_FLAGS(test_opt->flags, OPTION_MAX_RTO_SEC))
+ data[offset++] = test_opt->max_rto_sec;
}
static int store_option(struct bpf_sock_ops *skops,
@@ -124,6 +127,9 @@ static int parse_test_option(struct bpf_test_option *opt, const __u8 *start)
if (TEST_OPTION_FLAGS(opt->flags, OPTION_RAND))
opt->rand = *start++;
+ if (TEST_OPTION_FLAGS(opt->flags, OPTION_MAX_RTO_SEC))
+ opt->max_rto_sec = *start++;
+
return 0;
}
@@ -411,6 +417,14 @@ static int set_rto_min(struct bpf_sock_ops *skops, __u8 peer_max_delack_ms)
sizeof(min_rto_us));
}
+static int set_rto_max(struct bpf_sock_ops *skops, __u8 max_rto_sec)
+{
+ __u32 max_rto_ms = max_rto_sec * 1000;
+
+ return bpf_setsockopt(skops, SOL_TCP, TCP_BPF_RTO_MAX, &max_rto_ms,
+ sizeof(max_rto_ms));
+}
+
static int handle_active_estab(struct bpf_sock_ops *skops)
{
struct hdr_stg init_stg = {
@@ -459,6 +473,12 @@ static int handle_active_estab(struct bpf_sock_ops *skops)
RET_CG_ERR(err);
}
+ if (active_estab_in.max_rto_sec) {
+ err = set_rto_max(skops, active_estab_in.max_rto_sec);
+ if (err)
+ RET_CG_ERR(err);
+ }
+
return CG_OK;
}
@@ -525,6 +545,12 @@ static int handle_passive_estab(struct bpf_sock_ops *skops)
RET_CG_ERR(err);
}
+ if (passive_estab_in.max_rto_sec) {
+ err = set_rto_max(skops, passive_estab_in.max_rto_sec);
+ if (err)
+ RET_CG_ERR(err);
+ }
+
return CG_OK;
}
diff --git a/tools/testing/selftests/bpf/test_tcp_hdr_options.h b/tools/testing/selftests/bpf/test_tcp_hdr_options.h
index 56c9f8a3ad3d..c91fad861f84 100644
--- a/tools/testing/selftests/bpf/test_tcp_hdr_options.h
+++ b/tools/testing/selftests/bpf/test_tcp_hdr_options.h
@@ -8,18 +8,21 @@ struct bpf_test_option {
__u8 flags;
__u8 max_delack_ms;
__u8 rand;
+ __u8 max_rto_sec;
} __attribute__((packed));
enum {
OPTION_RESEND,
OPTION_MAX_DELACK_MS,
OPTION_RAND,
+ OPTION_MAX_RTO_SEC,
__NR_OPTION_FLAGS,
};
#define OPTION_F_RESEND (1 << OPTION_RESEND)
#define OPTION_F_MAX_DELACK_MS (1 << OPTION_MAX_DELACK_MS)
#define OPTION_F_RAND (1 << OPTION_RAND)
+#define OPTION_F_MAX_RTO_SEC (1 << OPTION_MAX_RTO_SEC)
#define OPTION_MASK ((1 << __NR_OPTION_FLAGS) - 1)
#define TEST_OPTION_FLAGS(flags, option) (1 & ((flags) >> (option)))
--
2.43.5
next prev parent reply other threads:[~2025-02-13 0:44 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-13 0:43 [PATCH net-next 0/3] bpf: support setting max RTO for bpf_setsockopt Jason Xing
2025-02-13 0:43 ` [PATCH net-next 1/3] tcp: add TCP_RTO_MAX_MIN_SEC definition Jason Xing
2025-02-13 2:19 ` Kuniyuki Iwashima
2025-02-13 0:43 ` [PATCH net-next 2/3] bpf: add TCP_BPF_RTO_MAX for bpf_setsockopt Jason Xing
2025-02-13 2:25 ` Kuniyuki Iwashima
2025-02-13 2:32 ` Kuniyuki Iwashima
2025-02-13 3:14 ` Jason Xing
2025-02-13 23:41 ` Stanislav Fomichev
2025-02-13 23:57 ` Jason Xing
2025-02-14 2:14 ` Martin KaFai Lau
2025-02-14 3:09 ` Jason Xing
2025-02-14 5:41 ` Martin KaFai Lau
2025-02-14 6:12 ` Jason Xing
2025-02-14 6:40 ` Martin KaFai Lau
2025-02-14 6:56 ` Jason Xing
2025-02-14 23:44 ` Martin KaFai Lau
2025-02-14 23:53 ` Jason Xing
2025-02-15 2:39 ` Martin KaFai Lau
2025-02-15 2:52 ` Jason Xing
2025-02-14 15:48 ` Stanislav Fomichev
2025-02-14 23:21 ` Jason Xing
2025-02-13 0:43 ` Jason Xing [this message]
2025-02-13 2:30 ` [PATCH net-next 3/3] selftests/bpf: add rto max for bpf_setsockopt test Kuniyuki Iwashima
2025-02-13 3:13 ` Jason Xing
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=20250213004355.38918-4-kerneljasonxing@gmail.com \
--to=kerneljasonxing@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=martin.lau@linux.dev \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.