From: Jakub Sitnicki <jakub@cloudflare.com>
To: Lorenz Bauer <lmb@cloudflare.com>
Cc: ast@kernel.org, yhs@fb.com, daniel@iogearbox.net,
john.fastabend@gmail.com, bpf@vger.kernel.org,
kernel-team@cloudflare.com
Subject: Re: [PATCH bpf-next 2/3] selftests: bpf: Add helper to compare socket cookies
Date: Fri, 28 Aug 2020 12:50:54 +0200 [thread overview]
Message-ID: <87h7snrqlt.fsf@cloudflare.com> (raw)
In-Reply-To: <20200828094834.23290-3-lmb@cloudflare.com>
On Fri, Aug 28, 2020 at 11:48 AM CEST, Lorenz Bauer wrote:
> We compare socket cookies to ensure that insertion into a sockmap worked.
> Pull this out into a helper function for use in other tests.
>
> Signed-off-by: Lorenz Bauer <lmb@cloudflare.com>
> ---
> .../selftests/bpf/prog_tests/sockmap_basic.c | 51 ++++++++++++++-----
> 1 file changed, 37 insertions(+), 14 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c b/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c
> index 0b79d78b98db..b989f8760f1a 100644
> --- a/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c
> +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c
> @@ -47,6 +47,38 @@ static int connected_socket_v4(void)
> return -1;
> }
>
> +static void compare_cookies(struct bpf_map *src, struct bpf_map *dst)
> +{
> + __u32 i, max_entries = bpf_map__max_entries(src);
> + int err, duration, src_fd, dst_fd;
> +
> + src_fd = bpf_map__fd(src);
> + dst_fd = bpf_map__fd(src);
^^^
That looks like a typo. We're comparing src map to src map.
> +
> + for (i = 0; i < max_entries; i++) {
> + __u64 src_cookie, dst_cookie;
> +
> + err = bpf_map_lookup_elem(src_fd, &i, &src_cookie);
> + if (err && errno == ENOENT) {
> + err = bpf_map_lookup_elem(dst_fd, &i, &dst_cookie);
> + if (err && errno == ENOENT)
> + continue;
> +
> + CHECK(err, "map_lookup_elem(dst)", "element not deleted\n");
> + continue;
> + }
> + if (CHECK(err, "lookup_elem(src, cookie)", "%s\n", strerror(errno)))
> + continue;
> +
> + err = bpf_map_lookup_elem(dst_fd, &i, &dst_cookie);
> + if (CHECK(err, "lookup_elem(dst, cookie)", "%s\n", strerror(errno)))
> + continue;
> +
> + CHECK(dst_cookie != src_cookie, "cookie mismatch",
> + "%llu != %llu (pos %u)\n", dst_cookie, src_cookie, i);
> + }
> +}
> +
> /* Create a map, populate it with one socket, and free the map. */
> static void test_sockmap_create_update_free(enum bpf_map_type map_type)
> {
> @@ -106,9 +138,9 @@ static void test_skmsg_helpers(enum bpf_map_type map_type)
> static void test_sockmap_update(enum bpf_map_type map_type)
> {
> struct bpf_prog_test_run_attr tattr;
> - int err, prog, src, dst, duration = 0;
> + int err, prog, src, duration = 0;
> struct test_sockmap_update *skel;
> - __u64 src_cookie, dst_cookie;
> + struct bpf_map *dst_map;
> const __u32 zero = 0;
> char dummy[14] = {0};
> __s64 sk;
> @@ -124,18 +156,14 @@ static void test_sockmap_update(enum bpf_map_type map_type)
> prog = bpf_program__fd(skel->progs.copy_sock_map);
> src = bpf_map__fd(skel->maps.src);
> if (map_type == BPF_MAP_TYPE_SOCKMAP)
> - dst = bpf_map__fd(skel->maps.dst_sock_map);
> + dst_map = skel->maps.dst_sock_map;
> else
> - dst = bpf_map__fd(skel->maps.dst_sock_hash);
> + dst_map = skel->maps.dst_sock_hash;
>
> err = bpf_map_update_elem(src, &zero, &sk, BPF_NOEXIST);
> if (CHECK(err, "update_elem(src)", "errno=%u\n", errno))
> goto out;
>
> - err = bpf_map_lookup_elem(src, &zero, &src_cookie);
> - if (CHECK(err, "lookup_elem(src, cookie)", "errno=%u\n", errno))
> - goto out;
> -
> tattr = (struct bpf_prog_test_run_attr){
> .prog_fd = prog,
> .repeat = 1,
> @@ -148,12 +176,7 @@ static void test_sockmap_update(enum bpf_map_type map_type)
> "errno=%u retval=%u\n", errno, tattr.retval))
> goto out;
>
> - err = bpf_map_lookup_elem(dst, &zero, &dst_cookie);
> - if (CHECK(err, "lookup_elem(dst, cookie)", "errno=%u\n", errno))
> - goto out;
> -
> - CHECK(dst_cookie != src_cookie, "cookie mismatch", "%llu != %llu\n",
> - dst_cookie, src_cookie);
> + compare_cookies(skel->maps.src, dst_map);
>
> out:
> test_sockmap_update__destroy(skel);
next prev parent reply other threads:[~2020-08-28 10:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-28 9:48 [PATCH bpf-next 0/3] Sockmap iterator Lorenz Bauer
2020-08-28 9:48 ` [PATCH bpf-next 1/3] net: Allow iterating sockmap and sockhash Lorenz Bauer
2020-08-31 10:03 ` Jakub Sitnicki
2020-09-01 8:59 ` Lorenz Bauer
2020-08-28 9:48 ` [PATCH bpf-next 2/3] selftests: bpf: Add helper to compare socket cookies Lorenz Bauer
2020-08-28 10:50 ` Jakub Sitnicki [this message]
2020-08-28 15:48 ` Lorenz Bauer
2020-08-28 11:28 ` Jakub Sitnicki
2020-08-28 9:48 ` [PATCH bpf-next 3/3] selftests: bpf: Test copying a sockmap via bpf_iter Lorenz Bauer
2020-08-31 10:58 ` Jakub Sitnicki
2020-09-01 9:20 ` Lorenz Bauer
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=87h7snrqlt.fsf@cloudflare.com \
--to=jakub@cloudflare.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=kernel-team@cloudflare.com \
--cc=lmb@cloudflare.com \
--cc=yhs@fb.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 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.