From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Yonghong Song <yhs@fb.com>
Cc: Andrii Nakryiko <andriin@fb.com>, bpf <bpf@vger.kernel.org>,
Martin KaFai Lau <kafai@fb.com>,
Networking <netdev@vger.kernel.org>,
Alexei Starovoitov <ast@fb.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Kernel Team <kernel-team@fb.com>
Subject: Re: [PATCH bpf-next v1 17/19] tools/bpf: selftests: add iterator programs for ipv6_route and netlink
Date: Wed, 29 Apr 2020 19:12:28 -0700 [thread overview]
Message-ID: <CAEf4BzYv5eA-sgoUZdM7DP=TUHZB++qpcPNJ1egCr0d7peEXNg@mail.gmail.com> (raw)
In-Reply-To: <20200427201255.2996209-1-yhs@fb.com>
On Mon, Apr 27, 2020 at 1:18 PM Yonghong Song <yhs@fb.com> wrote:
>
> Two bpf programs are added in this patch for netlink and ipv6_route
> target. On my VM, I am able to achieve identical
> results compared to /proc/net/netlink and /proc/net/ipv6_route.
>
> $ cat /proc/net/netlink
> sk Eth Pid Groups Rmem Wmem Dump Locks Drops Inode
> 000000002c42d58b 0 0 00000000 0 0 0 2 0 7
> 00000000a4e8b5e1 0 1 00000551 0 0 0 2 0 18719
> 00000000e1b1c195 4 0 00000000 0 0 0 2 0 16422
> 000000007e6b29f9 6 0 00000000 0 0 0 2 0 16424
> ....
> 00000000159a170d 15 1862 00000002 0 0 0 2 0 1886
> 000000009aca4bc9 15 3918224839 00000002 0 0 0 2 0 19076
> 00000000d0ab31d2 15 1 00000002 0 0 0 2 0 18683
> 000000008398fb08 16 0 00000000 0 0 0 2 0 27
> $ cat /sys/fs/bpf/my_netlink
> sk Eth Pid Groups Rmem Wmem Dump Locks Drops Inode
> 000000002c42d58b 0 0 00000000 0 0 0 2 0 7
> 00000000a4e8b5e1 0 1 00000551 0 0 0 2 0 18719
> 00000000e1b1c195 4 0 00000000 0 0 0 2 0 16422
> 000000007e6b29f9 6 0 00000000 0 0 0 2 0 16424
> ....
> 00000000159a170d 15 1862 00000002 0 0 0 2 0 1886
> 000000009aca4bc9 15 3918224839 00000002 0 0 0 2 0 19076
> 00000000d0ab31d2 15 1 00000002 0 0 0 2 0 18683
> 000000008398fb08 16 0 00000000 0 0 0 2 0 27
>
> $ cat /proc/net/ipv6_route
> fe800000000000000000000000000000 40 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000001 00000000 00000001 eth0
> 00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo
> 00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000003 00000000 80200001 lo
> fe80000000000000c04b03fffe7827ce 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 eth0
> ff000000000000000000000000000000 08 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000003 00000000 00000001 eth0
> 00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo
> $ cat /sys/fs/bpf/my_ipv6_route
> fe800000000000000000000000000000 40 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000001 00000000 00000001 eth0
> 00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo
> 00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000003 00000000 80200001 lo
> fe80000000000000c04b03fffe7827ce 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000002 00000000 80200001 eth0
> ff000000000000000000000000000000 08 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000003 00000000 00000001 eth0
> 00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 00000000 00200200 lo
>
> Signed-off-by: Yonghong Song <yhs@fb.com>
> ---
> .../selftests/bpf/progs/bpf_iter_ipv6_route.c | 69 +++++++++++++++++
> .../selftests/bpf/progs/bpf_iter_netlink.c | 77 +++++++++++++++++++
> 2 files changed, 146 insertions(+)
> create mode 100644 tools/testing/selftests/bpf/progs/bpf_iter_ipv6_route.c
> create mode 100644 tools/testing/selftests/bpf/progs/bpf_iter_netlink.c
>
> diff --git a/tools/testing/selftests/bpf/progs/bpf_iter_ipv6_route.c b/tools/testing/selftests/bpf/progs/bpf_iter_ipv6_route.c
> new file mode 100644
> index 000000000000..bed34521f997
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/bpf_iter_ipv6_route.c
> @@ -0,0 +1,69 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Copyright (c) 2020 Facebook */
> +#include "vmlinux.h"
> +#include <bpf/bpf_helpers.h>
> +#include <bpf/bpf_tracing.h>
> +#include <bpf/bpf_endian.h>
> +
> +char _license[] SEC("license") = "GPL";
> +
> +extern bool CONFIG_IPV6_SUBTREES __kconfig __weak;
> +
> +#define RTF_GATEWAY 0x0002
> +#define IFNAMSIZ 16
> +#define fib_nh_gw_family nh_common.nhc_gw_family
> +#define fib_nh_gw6 nh_common.nhc_gw.ipv6
> +#define fib_nh_dev nh_common.nhc_dev
> +
> +SEC("iter/ipv6_route")
> +int dump_ipv6_route(struct bpf_iter__ipv6_route *ctx)
> +{
> + static const char fmt1[] = "%pi6 %02x ";
> + static const char fmt2[] = "%pi6 ";
> + static const char fmt3[] = "00000000000000000000000000000000 ";
> + static const char fmt4[] = "%08x %08x %08x %08x %8s\n";
> + static const char fmt5[] = "%08x %08x %08x %08x\n";
> + static const char fmt7[] = "00000000000000000000000000000000 00 ";
> + struct seq_file *seq = ctx->meta->seq;
> + struct fib6_info *rt = ctx->rt;
> + const struct net_device *dev;
> + struct fib6_nh *fib6_nh;
> + unsigned int flags;
> + struct nexthop *nh;
> +
> + if (rt == (void *)0)
> + return 0;
> +
> + fib6_nh = &rt->fib6_nh[0];
> + flags = rt->fib6_flags;
> +
> + /* FIXME: nexthop_is_multipath is not handled here. */
> + nh = rt->nh;
> + if (rt->nh)
> + fib6_nh = &nh->nh_info->fib6_nh;
> +
> + BPF_SEQ_PRINTF(seq, fmt1, &rt->fib6_dst.addr, rt->fib6_dst.plen);
> +
> + if (CONFIG_IPV6_SUBTREES)
> + BPF_SEQ_PRINTF(seq, fmt1, &rt->fib6_src.addr,
> + rt->fib6_src.plen);
> + else
> + BPF_SEQ_PRINTF0(seq, fmt7);
Looking at these examples, I think BPF_SEQ_PRINTF should just assume
that fmt argument is string literal and do:
static const char ___tmp_fmt[] = fmt;
inside that macro. So one can just do:
BPF_SEQ_PRINTF(seq, "Hello, world!\n");
or
BPF_SEQ_PRINTF(seq, "My awesome template %d ==> %s\n", id, some_string);
WDYT?
> +
> + if (fib6_nh->fib_nh_gw_family) {
> + flags |= RTF_GATEWAY;
> + BPF_SEQ_PRINTF(seq, fmt2, &fib6_nh->fib_nh_gw6);
> + } else {
> + BPF_SEQ_PRINTF0(seq, fmt3);
> + }
> +
> + dev = fib6_nh->fib_nh_dev;
> + if (dev)
> + BPF_SEQ_PRINTF(seq, fmt4, rt->fib6_metric,
> + rt->fib6_ref.refs.counter, 0, flags, dev->name);
> + else
> + BPF_SEQ_PRINTF(seq, fmt4, rt->fib6_metric,
> + rt->fib6_ref.refs.counter, 0, flags);
> +
> + return 0;
> +}
[...]
next prev parent reply other threads:[~2020-04-30 2:12 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-27 20:12 [PATCH bpf-next v1 00/19] bpf: implement bpf iterator for kernel data Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 01/19] net: refactor net assignment for seq_net_private structure Yonghong Song
2020-04-29 5:38 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 02/19] bpf: implement an interface to register bpf_iter targets Yonghong Song
2020-04-28 16:20 ` Martin KaFai Lau
2020-04-28 16:50 ` Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 03/19] bpf: add bpf_map iterator Yonghong Song
2020-04-29 0:37 ` Martin KaFai Lau
2020-04-29 0:48 ` Alexei Starovoitov
2020-04-29 1:15 ` Yonghong Song
2020-04-29 2:44 ` Alexei Starovoitov
2020-04-29 5:09 ` Yonghong Song
2020-04-29 6:08 ` Andrii Nakryiko
2020-04-29 6:20 ` Yonghong Song
2020-04-29 6:30 ` Alexei Starovoitov
2020-04-29 6:40 ` Andrii Nakryiko
2020-04-29 6:44 ` Yonghong Song
2020-04-29 15:34 ` Alexei Starovoitov
2020-04-29 18:14 ` Yonghong Song
2020-04-29 19:19 ` Andrii Nakryiko
2020-04-29 20:15 ` Yonghong Song
2020-04-30 3:06 ` Alexei Starovoitov
2020-04-30 4:01 ` Yonghong Song
2020-04-29 6:34 ` Martin KaFai Lau
2020-04-29 6:51 ` Yonghong Song
2020-04-29 19:25 ` Andrii Nakryiko
2020-04-29 1:02 ` Yonghong Song
2020-04-29 6:04 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 04/19] bpf: allow loading of a bpf_iter program Yonghong Song
2020-04-29 0:54 ` Martin KaFai Lau
2020-04-29 1:27 ` Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 05/19] bpf: support bpf tracing/iter programs for BPF_LINK_CREATE Yonghong Song
2020-04-29 1:17 ` [Potential Spoof] " Martin KaFai Lau
2020-04-29 6:25 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 06/19] bpf: support bpf tracing/iter programs for BPF_LINK_UPDATE Yonghong Song
2020-04-29 1:32 ` Martin KaFai Lau
2020-04-29 5:04 ` Yonghong Song
2020-04-29 5:58 ` Martin KaFai Lau
2020-04-29 6:32 ` Andrii Nakryiko
2020-04-29 6:41 ` Martin KaFai Lau
2020-04-27 20:12 ` [PATCH bpf-next v1 07/19] bpf: create anonymous bpf iterator Yonghong Song
2020-04-29 5:39 ` Martin KaFai Lau
2020-04-29 6:56 ` Andrii Nakryiko
2020-04-29 7:06 ` Yonghong Song
2020-04-29 18:16 ` Andrii Nakryiko
2020-04-29 18:46 ` Martin KaFai Lau
2020-04-29 19:20 ` Yonghong Song
2020-04-29 20:50 ` Martin KaFai Lau
2020-04-29 20:54 ` Yonghong Song
2020-04-29 19:39 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 08/19] bpf: create file " Yonghong Song
2020-04-29 20:40 ` Andrii Nakryiko
2020-04-30 18:02 ` Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 09/19] bpf: add PTR_TO_BTF_ID_OR_NULL support Yonghong Song
2020-04-29 20:46 ` Andrii Nakryiko
2020-04-29 20:51 ` Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 10/19] bpf: add netlink and ipv6_route targets Yonghong Song
2020-04-28 19:49 ` kbuild test robot
2020-04-28 19:50 ` [RFC PATCH] bpf: __bpf_iter__netlink() can be static kbuild test robot
2020-04-27 20:12 ` [PATCH bpf-next v1 11/19] bpf: add task and task/file targets Yonghong Song
2020-04-30 2:08 ` Andrii Nakryiko
2020-05-01 17:23 ` Yonghong Song
2020-05-01 19:01 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 12/19] bpf: add bpf_seq_printf and bpf_seq_write helpers Yonghong Song
2020-04-28 6:02 ` kbuild test robot
2020-04-28 16:35 ` Yonghong Song
2020-04-30 20:06 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 13/19] bpf: handle spilled PTR_TO_BTF_ID properly when checking stack_boundary Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 14/19] bpf: support variable length array in tracing programs Yonghong Song
2020-04-30 20:04 ` Andrii Nakryiko
2020-04-27 20:12 ` [PATCH bpf-next v1 15/19] tools/libbpf: add bpf_iter support Yonghong Song
2020-04-30 1:41 ` Andrii Nakryiko
2020-05-02 7:17 ` Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 16/19] tools/bpftool: add bpf_iter support for bptool Yonghong Song
2020-04-28 9:27 ` Quentin Monnet
2020-04-28 17:35 ` Yonghong Song
2020-04-29 8:37 ` Quentin Monnet
2020-04-27 20:12 ` [PATCH bpf-next v1 17/19] tools/bpf: selftests: add iterator programs for ipv6_route and netlink Yonghong Song
2020-04-30 2:12 ` Andrii Nakryiko [this message]
2020-04-27 20:12 ` [PATCH bpf-next v1 18/19] tools/bpf: selftests: add iter progs for bpf_map/task/task_file Yonghong Song
2020-04-27 20:12 ` [PATCH bpf-next v1 19/19] tools/bpf: selftests: add bpf_iter selftests Yonghong Song
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='CAEf4BzYv5eA-sgoUZdM7DP=TUHZB++qpcPNJ1egCr0d7peEXNg@mail.gmail.com' \
--to=andrii.nakryiko@gmail.com \
--cc=andriin@fb.com \
--cc=ast@fb.com \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kafai@fb.com \
--cc=kernel-team@fb.com \
--cc=netdev@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).