All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Florian Kauer <florian.kauer@linutronix.de>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Jesper Dangaard Brouer <hawk@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	Andrii Nakryiko <andrii@kernel.org>,
	Martin KaFai Lau <martin.lau@linux.dev>,
	Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
	Yonghong Song <yonghong.song@linux.dev>,
	KP Singh <kpsingh@kernel.org>,
	Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>, David Ahern <dsahern@kernel.org>,
	Hangbin Liu <liuhangbin@gmail.com>,
	Mykola Lysenko <mykolal@fb.com>, Shuah Khan <shuah@kernel.org>
Cc: netdev@vger.kernel.org, bpf@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Jesper Dangaard Brouer <brouer@redhat.com>,
	linux-kselftest@vger.kernel.org,
	Florian Kauer <florian.kauer@linutronix.de>
Subject: Re: [PATCH net v3 2/2] bpf: selftests: send packet to devmap redirect XDP
Date: Tue, 10 Sep 2024 09:41:59 +0200	[thread overview]
Message-ID: <87seu8dkfs.fsf@toke.dk> (raw)
In-Reply-To: <20240909-devel-koalo-fix-ingress-ifindex-v3-2-66218191ecca@linutronix.de>

Florian Kauer <florian.kauer@linutronix.de> writes:

> The current xdp_devmap_attach test attaches a program
> that redirects to another program via devmap.
>
> It is, however, never executed, so do that to catch
> any bugs that might occur during execution.
>
> Also, execute the same for a veth pair so that we
> also cover the non-generic path.
>
> Warning: Running this without the bugfix in this series
> will likely crash your system.
>
> Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
> ---
>  .../selftests/bpf/prog_tests/xdp_devmap_attach.c   | 114 +++++++++++++++++++--
>  1 file changed, 108 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c b/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
> index ce6812558287..3da45f719736 100644
> --- a/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
> +++ b/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
> @@ -1,6 +1,9 @@
>  // SPDX-License-Identifier: GPL-2.0
> +#include <arpa/inet.h>
>  #include <uapi/linux/bpf.h>
>  #include <linux/if_link.h>
> +#include <network_helpers.h>
> +#include <net/if.h>
>  #include <test_progs.h>
>  
>  #include "test_xdp_devmap_helpers.skel.h"
> @@ -17,7 +20,7 @@ static void test_xdp_with_devmap_helpers(void)
>  		.ifindex = IFINDEX_LO,
>  	};
>  	__u32 len = sizeof(info);
> -	int err, dm_fd, map_fd;
> +	int err, dm_fd, dm_fd_redir, map_fd;
>  	__u32 idx = 0;
>  
>  
> @@ -25,14 +28,11 @@ static void test_xdp_with_devmap_helpers(void)
>  	if (!ASSERT_OK_PTR(skel, "test_xdp_with_devmap_helpers__open_and_load"))
>  		return;
>  
> -	dm_fd = bpf_program__fd(skel->progs.xdp_redir_prog);
> -	err = bpf_xdp_attach(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE, NULL);
> +	dm_fd_redir = bpf_program__fd(skel->progs.xdp_redir_prog);
> +	err = bpf_xdp_attach(IFINDEX_LO, dm_fd_redir, XDP_FLAGS_SKB_MODE, NULL);
>  	if (!ASSERT_OK(err, "Generic attach of program with 8-byte devmap"))
>  		goto out_close;
>  
> -	err = bpf_xdp_detach(IFINDEX_LO, XDP_FLAGS_SKB_MODE, NULL);
> -	ASSERT_OK(err, "XDP program detach");
> -
>  	dm_fd = bpf_program__fd(skel->progs.xdp_dummy_dm);
>  	map_fd = bpf_map__fd(skel->maps.dm_ports);
>  	err = bpf_prog_get_info_by_fd(dm_fd, &info, &len);
> @@ -47,6 +47,23 @@ static void test_xdp_with_devmap_helpers(void)
>  	ASSERT_OK(err, "Read devmap entry");
>  	ASSERT_EQ(info.id, val.bpf_prog.id, "Match program id to devmap entry prog_id");
>  
> +	/* send a packet to trigger any potential bugs in there */
> +	char data[10] = {};
> +	DECLARE_LIBBPF_OPTS(bpf_test_run_opts, opts,
> +			    .data_in = &data,
> +			    .data_size_in = 10,
> +			    .flags = BPF_F_TEST_XDP_LIVE_FRAMES,
> +			    .repeat = 1,
> +		);
> +	err = bpf_prog_test_run_opts(dm_fd_redir, &opts);
> +	ASSERT_OK(err, "XDP test run");
> +
> +	/* wait for the packets to be flushed */
> +	kern_sync_rcu();
> +
> +	err = bpf_xdp_detach(IFINDEX_LO, XDP_FLAGS_SKB_MODE, NULL);
> +	ASSERT_OK(err, "XDP program detach");
> +
>  	/* can not attach BPF_XDP_DEVMAP program to a device */
>  	err = bpf_xdp_attach(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE, NULL);
>  	if (!ASSERT_NEQ(err, 0, "Attach of BPF_XDP_DEVMAP program"))
> @@ -124,6 +141,88 @@ static void test_xdp_with_devmap_frags_helpers(void)
>  	test_xdp_with_devmap_frags_helpers__destroy(skel);
>  }
>  
> +static void test_xdp_with_devmap_helpers_veth(void)
> +{
> +	struct test_xdp_with_devmap_helpers *skel = NULL;
> +	struct bpf_prog_info info = {};
> +	struct bpf_devmap_val val = {};
> +	struct nstoken *nstoken = NULL;
> +	__u32 len = sizeof(info);
> +	int err, dm_fd, dm_fd_redir, map_fd, ifindex_dst;
> +	__u32 idx = 0;
> +
> +	SYS(out_close, "ip netns add testns");
> +	nstoken = open_netns("testns");
> +	if (!ASSERT_OK_PTR(nstoken, "setns"))
> +		goto out_close;
> +
> +	SYS(out_close, "ip link add veth_src type veth peer name veth_dst");
> +	SYS(out_close, "ip link set dev veth_src up");
> +	SYS(out_close, "ip link set dev veth_dst up");
> +
> +	val.ifindex = if_nametoindex("veth_src");
> +	ifindex_dst = if_nametoindex("veth_dst");
> +	if (!ASSERT_NEQ(val.ifindex, 0, "val.ifindex") ||
> +	    !ASSERT_NEQ(ifindex_dst, 0, "ifindex_dst"))
> +		goto out_close;
> +
> +	skel = test_xdp_with_devmap_helpers__open_and_load();
> +	if (!ASSERT_OK_PTR(skel, "test_xdp_with_devmap_helpers__open_and_load"))
> +		return;

This should be 'goto out_close'.

-Toke


      reply	other threads:[~2024-09-10  7:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-09 19:38 [PATCH net v3 0/2] bpf: devmap: provide rxq after redirect Florian Kauer
2024-09-09 19:38 ` [PATCH net v3 1/2] " Florian Kauer
2024-09-09 19:38 ` [PATCH net v3 2/2] bpf: selftests: send packet to devmap redirect XDP Florian Kauer
2024-09-10  7:41   ` Toke Høiland-Jørgensen [this message]

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=87seu8dkfs.fsf@toke.dk \
    --to=toke@redhat.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=brouer@redhat.com \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=eddyz87@gmail.com \
    --cc=florian.kauer@linutronix.de \
    --cc=haoluo@google.com \
    --cc=hawk@kernel.org \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=liuhangbin@gmail.com \
    --cc=martin.lau@linux.dev \
    --cc=mykolal@fb.com \
    --cc=netdev@vger.kernel.org \
    --cc=sdf@fomichev.me \
    --cc=shuah@kernel.org \
    --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.