]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests: xsk: Allow for invalid packets
authorMagnus Karlsson <magnus.karlsson@intel.com>
Tue, 7 Sep 2021 07:19:23 +0000 (09:19 +0200)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 10 Sep 2021 19:15:31 +0000 (21:15 +0200)
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
tools/testing/selftests/bpf/xdpxceiver.c
tools/testing/selftests/bpf/xdpxceiver.h

index 0fb5cae974deb37bab68b55115a8d746125678a7..09d2854c10e6a09dd54aea8c5a46baad6398ed72 100644 (file)
@@ -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;
@@ -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);
@@ -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;
 }
index 1e9a563380c833ad957b7a57ea8cdcd77fa9e61e..c5baa7c5f5608401a4055c068947e78671b6ff9b 100644 (file)
@@ -96,6 +96,7 @@ struct pkt {
        u64 addr;
        u32 len;
        u32 payload;
+       bool valid;
 };
 
 struct pkt_stream {