On 07/19, Larysa Zaremba wrote: > Verify, whether kfunc in xdp_metadata test correctly returns partial > checksum status and offsets. > > Signed-off-by: Larysa Zaremba <larysa.zaremba@xxxxxxxxx> Acked-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > --- > .../selftests/bpf/prog_tests/xdp_metadata.c | 30 +++++++++++++++++++ > .../selftests/bpf/progs/xdp_metadata.c | 6 ++++ > 2 files changed, 36 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c > index 6665cf0c59cc..c0ce66703696 100644 > --- a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c > +++ b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c > @@ -47,6 +47,7 @@ > > #define XDP_RSS_TYPE_L4 BIT(3) > #define VLAN_VID_MASK 0xfff > +#define XDP_CHECKSUM_PARTIAL BIT(3) > > struct xsk { > void *umem_area; > @@ -168,6 +169,32 @@ static void refill_rx(struct xsk *xsk, __u64 addr) > } > } > > +struct partial_csum_info { > + __u16 csum_start; > + __u16 csum_offset; > +}; > + > +static bool assert_checksum_ok(struct xdp_meta *meta) > +{ > + struct partial_csum_info *info; > + u32 csum_start, csum_offset; > + > + if (!ASSERT_EQ(meta->rx_csum_status, XDP_CHECKSUM_PARTIAL, > + "rx_csum_status")) > + return false; > + > + csum_start = sizeof(struct ethhdr) + sizeof(struct iphdr); > + csum_offset = offsetof(struct udphdr, check); > + info = (void *)&meta->rx_csum_info; > + > + if (!ASSERT_EQ(info->csum_start, csum_start, "rx csum_start")) > + return false; > + if (!ASSERT_EQ(info->csum_offset, csum_offset, "rx csum_offset")) > + return false; > + > + return true; > +} > + > static int verify_xsk_metadata(struct xsk *xsk) > { > const struct xdp_desc *rx_desc; > @@ -229,6 +256,9 @@ static int verify_xsk_metadata(struct xsk *xsk) > if (!ASSERT_EQ(meta->rx_vlan_proto, VLAN_PID, "rx_vlan_proto")) > return -1; > > + if (!assert_checksum_ok(meta)) > + return -1; > + > xsk_ring_cons__release(&xsk->rx, 1); > refill_rx(xsk, comp_addr); > > diff --git a/tools/testing/selftests/bpf/progs/xdp_metadata.c b/tools/testing/selftests/bpf/progs/xdp_metadata.c > index d3111649170e..e79667a0726e 100644 > --- a/tools/testing/selftests/bpf/progs/xdp_metadata.c > +++ b/tools/testing/selftests/bpf/progs/xdp_metadata.c > @@ -26,6 +26,9 @@ extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash, > extern int bpf_xdp_metadata_rx_vlan_tag(const struct xdp_md *ctx, > __u16 *vlan_tci, > __be16 *vlan_proto) __ksym; > +extern int bpf_xdp_metadata_rx_csum(const struct xdp_md *ctx, > + enum xdp_csum_status *csum_status, > + union xdp_csum_info *csum_info) __ksym; > > SEC("xdp") > int rx(struct xdp_md *ctx) > @@ -62,6 +65,9 @@ int rx(struct xdp_md *ctx) > bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash, &meta->rx_hash_type); > bpf_xdp_metadata_rx_vlan_tag(ctx, &meta->rx_vlan_tci, &meta->rx_vlan_proto); > > + bpf_xdp_metadata_rx_csum(ctx, &meta->rx_csum_status, > + (void *)&meta->rx_csum_info); > + > return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS); > } > > -- > 2.41.0 >