Skip to content

Commit

Permalink
selftests: xsk: Allow for invalid packets
Browse files Browse the repository at this point in the history
Allow for invalid packets to be sent. These are verified by the Rx
thread not to be received. Or put in another way, if they are
received, the test will fail. This feature will be used to eliminate
an if statement for a stats test and will also be used by other tests
in later patches. The previous code could only deal with valid
packets.

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://lore.kernel.org/bpf/20210907071928.9750-16-magnus.karlsson@gmail.com
  • Loading branch information
Magnus Karlsson authored and Daniel Borkmann committed Sep 10, 2021
1 parent 8ce7192 commit 8abf6f7
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
16 changes: 10 additions & 6 deletions tools/testing/selftests/bpf/xdpxceiver.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,11 @@ static struct pkt_stream *pkt_stream_generate(struct xsk_umem_info *umem, u32 nb
pkt_stream->pkts[i].addr = (i % umem->num_frames) * umem->frame_size;
pkt_stream->pkts[i].len = pkt_len;
pkt_stream->pkts[i].payload = i;

if (pkt_len > umem->frame_size)
pkt_stream->pkts[i].valid = false;
else
pkt_stream->pkts[i].valid = true;
}

return pkt_stream;
Expand Down Expand Up @@ -658,7 +663,7 @@ static void receive_pkts(struct pkt_stream *pkt_stream, struct xsk_socket_info *
static u32 __send_pkts(struct ifobject *ifobject, u32 pkt_nb)
{
struct xsk_socket_info *xsk = ifobject->xsk;
u32 i, idx;
u32 i, idx, valid_pkts = 0;

while (xsk_ring_prod__reserve(&xsk->tx, BATCH_SIZE, &idx) < BATCH_SIZE)
complete_pkts(xsk, BATCH_SIZE);
Expand All @@ -673,14 +678,13 @@ static u32 __send_pkts(struct ifobject *ifobject, u32 pkt_nb)
tx_desc->addr = pkt->addr;
tx_desc->len = pkt->len;
pkt_nb++;
if (pkt->valid)
valid_pkts++;
}

xsk_ring_prod__submit(&xsk->tx, i);
if (stat_test_type != STAT_TEST_TX_INVALID)
xsk->outstanding_tx += i;
else if (xsk_ring_prod__needs_wakeup(&xsk->tx))
kick_tx(xsk);
complete_pkts(xsk, i);
xsk->outstanding_tx += valid_pkts;
complete_pkts(xsk, BATCH_SIZE);

return i;
}
Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/bpf/xdpxceiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ struct pkt {
u64 addr;
u32 len;
u32 payload;
bool valid;
};

struct pkt_stream {
Expand Down

0 comments on commit 8abf6f7

Please sign in to comment.