Commit 0f26b74e authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by Alexei Starovoitov

selftests/bpf: Adjust bpf_xdp_metadata_rx_hash for new arg

Update BPF selftests to use the new RSS type argument for kfunc
bpf_xdp_metadata_rx_hash.
Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
Acked-by: default avatarStanislav Fomichev <sdf@google.com>
Link: https://lore.kernel.org/r/168132894068.340624.8914711185697163690.stgit@firesoulSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 9123397a
...@@ -273,6 +273,8 @@ static int verify_xsk_metadata(struct xsk *xsk) ...@@ -273,6 +273,8 @@ static int verify_xsk_metadata(struct xsk *xsk)
if (!ASSERT_NEQ(meta->rx_hash, 0, "rx_hash")) if (!ASSERT_NEQ(meta->rx_hash, 0, "rx_hash"))
return -1; return -1;
ASSERT_EQ(meta->rx_hash_type, 0, "rx_hash_type");
xsk_ring_cons__release(&xsk->rx, 1); xsk_ring_cons__release(&xsk->rx, 1);
refill_rx(xsk, comp_addr); refill_rx(xsk, comp_addr);
......
...@@ -18,8 +18,8 @@ __u64 pkts_redir = 0; ...@@ -18,8 +18,8 @@ __u64 pkts_redir = 0;
extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx, extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx,
__u64 *timestamp) __ksym; __u64 *timestamp) __ksym;
extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
__u32 *hash) __ksym; enum xdp_rss_hash_type *rss_type) __ksym;
SEC("xdp") SEC("xdp")
int rx(struct xdp_md *ctx) int rx(struct xdp_md *ctx)
...@@ -80,9 +80,9 @@ int rx(struct xdp_md *ctx) ...@@ -80,9 +80,9 @@ int rx(struct xdp_md *ctx)
if (err) if (err)
meta->rx_timestamp = 0; /* Used by AF_XDP as not avail signal */ meta->rx_timestamp = 0; /* Used by AF_XDP as not avail signal */
err = bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash); err = bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash, &meta->rx_hash_type);
if (err) if (err < 0)
meta->rx_hash = 0; /* Used by AF_XDP as not avail signal */ meta->rx_hash_err = err; /* Used by AF_XDP as no hash signal */
__sync_add_and_fetch(&pkts_redir, 1); __sync_add_and_fetch(&pkts_redir, 1);
return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS); return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS);
......
...@@ -21,8 +21,8 @@ struct { ...@@ -21,8 +21,8 @@ struct {
extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx, extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx,
__u64 *timestamp) __ksym; __u64 *timestamp) __ksym;
extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
__u32 *hash) __ksym; enum xdp_rss_hash_type *rss_type) __ksym;
SEC("xdp") SEC("xdp")
int rx(struct xdp_md *ctx) int rx(struct xdp_md *ctx)
...@@ -56,7 +56,7 @@ int rx(struct xdp_md *ctx) ...@@ -56,7 +56,7 @@ int rx(struct xdp_md *ctx)
if (timestamp == 0) if (timestamp == 0)
meta->rx_timestamp = 1; meta->rx_timestamp = 1;
bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash); bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash, &meta->rx_hash_type);
return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS); return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS);
} }
......
...@@ -5,17 +5,18 @@ ...@@ -5,17 +5,18 @@
#include <bpf/bpf_helpers.h> #include <bpf/bpf_helpers.h>
#include <bpf/bpf_endian.h> #include <bpf/bpf_endian.h>
extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
__u32 *hash) __ksym; enum xdp_rss_hash_type *rss_type) __ksym;
int called; int called;
SEC("freplace/rx") SEC("freplace/rx")
int freplace_rx(struct xdp_md *ctx) int freplace_rx(struct xdp_md *ctx)
{ {
enum xdp_rss_hash_type type = 0;
u32 hash = 0; u32 hash = 0;
/* Call _any_ metadata function to make sure we don't crash. */ /* Call _any_ metadata function to make sure we don't crash. */
bpf_xdp_metadata_rx_hash(ctx, &hash); bpf_xdp_metadata_rx_hash(ctx, &hash, &type);
called++; called++;
return XDP_PASS; return XDP_PASS;
} }
......
...@@ -141,7 +141,11 @@ static void verify_xdp_metadata(void *data) ...@@ -141,7 +141,11 @@ static void verify_xdp_metadata(void *data)
meta = data - sizeof(*meta); meta = data - sizeof(*meta);
printf("rx_timestamp: %llu\n", meta->rx_timestamp); printf("rx_timestamp: %llu\n", meta->rx_timestamp);
printf("rx_hash: %u\n", meta->rx_hash); if (meta->rx_hash_err < 0)
printf("No rx_hash err=%d\n", meta->rx_hash_err);
else
printf("rx_hash: 0x%X with RSS type:0x%X\n",
meta->rx_hash, meta->rx_hash_type);
} }
static void verify_skb_metadata(int fd) static void verify_skb_metadata(int fd)
......
...@@ -12,4 +12,8 @@ ...@@ -12,4 +12,8 @@
struct xdp_meta { struct xdp_meta {
__u64 rx_timestamp; __u64 rx_timestamp;
__u32 rx_hash; __u32 rx_hash;
union {
__u32 rx_hash_type;
__s32 rx_hash_err;
};
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment