Re: [PATCH bpf-next v5 17/17] selftests/bpf: Simple program to dump XDP RX metadata

Stanislav Fomichev
2022-12-23T04:07:42Z

On Thu, Dec 22, 2022 at 4:53 PM Martin KaFai Lau <martin.lau@linux.dev> wrote:
>
> On 12/20/22 2:20 PM, Stanislav Fomichev wrote:
> > To be used for verification of driver implementations. Note that
> > the skb path is gone from the series, but I'm still keeping the
> > implementation for any possible future work.
> >
> > $ xdp_hw_metadata <ifname>
> >
> > On the other machine:
> >
> > $ echo -n xdp | nc -u -q1 <target> 9091 # for AF_XDP
> > $ echo -n skb | nc -u -q1 <target> 9092 # for skb
> >
> > Sample output:
> >
> > # xdp
> > xsk_ring_cons__peek: 1
> > 0x19f9090: rx_desc[0]->addr=100000000008000 addr=8100 comp_addr=8000
> > rx_timestamp_supported: 1
> > rx_timestamp: 1667850075063948829
> > 0x19f9090: complete idx=8 addr=8000
> >
> > # skb
> > found skb hwtstamp = 1668314052.854274681
> >
> > Decoding:
> > # xdp
> > rx_timestamp=1667850075.063948829
> >
> > $ date -d @1667850075
> > Mon Nov 7 11:41:15 AM PST 2022
> > $ date
> > Mon Nov 7 11:42:05 AM PST 2022
> >
> > # skb
> > $ date -d @1668314052
> > Sat Nov 12 08:34:12 PM PST 2022
> > $ date
> > Sat Nov 12 08:37:06 PM PST 2022
> >
> > Cc: John Fastabend <john.fastabend@gmail.com>
> > Cc: David Ahern <dsahern@gmail.com>
> > Cc: Martin KaFai Lau <martin.lau@linux.dev>
> > Cc: Jakub Kicinski <kuba@kernel.org>
> > Cc: Willem de Bruijn <willemb@google.com>
> > Cc: Jesper Dangaard Brouer <brouer@redhat.com>
> > Cc: Anatoly Burakov <anatoly.burakov@intel.com>
> > Cc: Alexander Lobakin <alexandr.lobakin@intel.com>
> > Cc: Magnus Karlsson <magnus.karlsson@gmail.com>
> > Cc: Maryam Tahhan <mtahhan@redhat.com>
> > Cc: xdp-hints@xdp-project.net
> > Cc: netdev@vger.kernel.org
> > Signed-off-by: Stanislav Fomichev <sdf@google.com>
> > ---
> > tools/testing/selftests/bpf/.gitignore | 1 +
> > tools/testing/selftests/bpf/Makefile | 6 +-
> > .../selftests/bpf/progs/xdp_hw_metadata.c | 81 ++++
> > tools/testing/selftests/bpf/xdp_hw_metadata.c | 405 ++++++++++++++++++
> > 4 files changed, 492 insertions(+), 1 deletion(-)
> > create mode 100644 tools/testing/selftests/bpf/progs/xdp_hw_metadata.c
> > create mode 100644 tools/testing/selftests/bpf/xdp_hw_metadata.c
> >
> > diff --git a/tools/testing/selftests/bpf/.gitignore b/tools/testing/selftests/bpf/.gitignore
> > index 07d2d0a8c5cb..01e3baeefd4f 100644
> > --- a/tools/testing/selftests/bpf/.gitignore
> > +++ b/tools/testing/selftests/bpf/.gitignore
> > @@ -46,3 +46,4 @@ test_cpp
> > xskxceiver
> > xdp_redirect_multi
> > xdp_synproxy
> > +xdp_hw_metadata
> > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> > index e6cbc04a7920..b7d5d3aa554e 100644
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -83,7 +83,7 @@ TEST_PROGS_EXTENDED := with_addr.sh \
> > TEST_GEN_PROGS_EXTENDED = test_sock_addr test_skb_cgroup_id_user \
> > flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \
> > test_lirc_mode2_user xdping test_cpp runqslower bench bpf_testmod.ko \
> > - xskxceiver xdp_redirect_multi xdp_synproxy veristat
> > + xskxceiver xdp_redirect_multi xdp_synproxy veristat xdp_hw_metadata
> >
> > TEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read $(OUTPUT)/sign-file
> > TEST_GEN_FILES += liburandom_read.so
> > @@ -241,6 +241,9 @@ $(OUTPUT)/test_maps: $(TESTING_HELPERS)
> > $(OUTPUT)/test_verifier: $(TESTING_HELPERS) $(CAP_HELPERS)
> > $(OUTPUT)/xsk.o: $(BPFOBJ)
> > $(OUTPUT)/xskxceiver: $(OUTPUT)/xsk.o
> > +$(OUTPUT)/xdp_hw_metadata: $(OUTPUT)/xsk.o $(OUTPUT)/xdp_hw_metadata.skel.h
> > +$(OUTPUT)/xdp_hw_metadata: $(OUTPUT)/network_helpers.o
> > +$(OUTPUT)/xdp_hw_metadata: LDFLAGS += -static
>
>
> This test binary fails to build for llvm. gcc looks fine though. The CI tests
> cannot be run on this set because of this. Please take a look:
>
> https://github.com/kernel-patches/bpf/actions/runs/3745257032/jobs/6359527599#step:11:2202

Ugh, again, I was hoping I fixed it :-(

clang: error: cannot specify -o when generating multiple output files

Will give it another try; for some reason can't reproduce locally
(LLVM version 16.0.0git)

> I only have minor comments on the set. Looking forward to v6.

Thank you for another round of reviews! I'll probably keep quiet next
week to give us some family time during holidays and will publish v6
early January. Happy holidays!