[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1ac9d14e-4250-480c-b863-410be78ac6c6@linux.dev>
Date: Wed, 29 Oct 2025 12:56:28 -0700
From: Martin KaFai Lau <martin.lau@...ux.dev>
To: Alexis Lothoré (eBPF Foundation)
<alexis.lothore@...tlin.com>
Cc: Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>, Andrii Nakryiko <andrii@...nel.org>,
Eduard Zingerman <eddyz87@...il.com>, Song Liu <song@...nel.org>,
Yonghong Song <yonghong.song@...ux.dev>,
John Fastabend <john.fastabend@...il.com>, KP Singh <kpsingh@...nel.org>,
Stanislav Fomichev <sdf@...ichev.me>, Hao Luo <haoluo@...gle.com>,
Jiri Olsa <jolsa@...nel.org>, Shuah Khan <shuah@...nel.org>,
ebpf@...uxfoundation.org, Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Bastien Curutchet <bastien.curutchet@...tlin.com>, bpf@...r.kernel.org,
linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH bpf-next v3 3/4] selftests/bpf: integrate
test_tc_tunnel.sh tests into test_progs
On 10/27/25 7:51 AM, Alexis Lothoré (eBPF Foundation) wrote:
> +static int run_server(struct subtest_cfg *cfg)
> +{
> + struct nstoken *nstoken = open_netns(SERVER_NS);
It is unlikely but still better to check for open_netns failure. Just in
case that the network changes/traffic is accidentally done in the
original netns. There are a few netns switching in the test. Please
followup.
> + int family = cfg->ipproto == 6 ? AF_INET6 : AF_INET;
> +
> + cfg->server_fd = start_reuseport_server(family, SOCK_STREAM,
> + cfg->server_addr, TEST_PORT,
> + TIMEOUT_MS, 1);
Why reuseport is needed? Does it have issue in bind() to the same
ip/port in the later sub-test?
> + close_netns(nstoken);
> + if (!ASSERT_NEQ(cfg->server_fd, NULL, "start server"))
I changed the check to ASSERT_OK_PTR. Also two other similar
ASSERT_[N]EQ(..., NULL, ...) usages.
> + return -1;
> +
> + return 0;
> +}
> +
> +static void stop_server(struct subtest_cfg *cfg)
> +{
> + close(*cfg->server_fd);
NULL check on cfg->server_fd is needed during the error path of
run_test(). cfg->server_fd is leaked also. I changed it to
free_fds(cfg->server_fd, 1) instead.
> + cfg->server_fd = NULL;
I don't think cfg will be reused, so I skip this NULL assignment.
> +}
> +
> +static int check_server_rx_data(struct subtest_cfg *cfg,
> + struct connection *conn, int len)
> +{
> + int err;
> +
> + memset(rx_buffer, 0, BUFFER_LEN);
> + err = recv(conn->server_fd, rx_buffer, len, 0);
> + if (!ASSERT_EQ(err, len, "check rx data len"))
> + return 1;
> + if (!ASSERT_MEMEQ(tx_buffer, rx_buffer, len, "check received data"))
> + return 1;
> + return 0;
> +}
> +
> +static struct connection *connect_client_to_server(struct subtest_cfg *cfg)
> +{
> + struct network_helper_opts opts = {.timeout_ms = 500};
> + int family = cfg->ipproto == 6 ? AF_INET6 : AF_INET;
> + struct connection *conn = NULL;
> + int client_fd, server_fd;
> +
> + conn = malloc(sizeof(struct connection));
> + if (!conn)
> + return conn;
> +
> + client_fd = connect_to_addr_str(family, SOCK_STREAM, cfg->server_addr,
> + TEST_PORT, &opts);
> +
> + if (client_fd < 0) {
> + free(conn);
> + return NULL;
> + }
> +
> + server_fd = accept(*cfg->server_fd, NULL, NULL);
> + if (server_fd < 0) {
Fixed the client_fd leak.
Applied. Thanks.
Powered by blists - more mailing lists