OSDN Git Service

selftests: xsk: Add tests for 2K frame size
authorMagnus Karlsson <magnus.karlsson@intel.com>
Tue, 7 Sep 2021 07:19:28 +0000 (09:19 +0200)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 10 Sep 2021 19:15:32 +0000 (21:15 +0200)
Add tests for 2K frame size. Both a standard send and receive test and
one testing for invalid descriptors when the frame size is 2K.

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-21-magnus.karlsson@gmail.com
tools/testing/selftests/bpf/xdpxceiver.c
tools/testing/selftests/bpf/xdpxceiver.h

index 1a03f79..127bcde 100644 (file)
@@ -48,6 +48,7 @@
  *    g. unaligned mode
  *    h. tests for invalid and corner case Tx descriptors so that the correct ones
  *       are discarded and let through, respectively.
+ *    i. 2K frame size tests
  *
  * Total tests: 12
  *
@@ -1205,6 +1206,8 @@ static void testapp_invalid_desc(struct test_spec *test)
                {UMEM_SIZE - PKT_SIZE / 2, PKT_SIZE, 0, false},
                /* Straddle a page boundrary */
                {0x3000 - PKT_SIZE / 2, PKT_SIZE, 0, false},
+               /* Straddle a 2K boundrary */
+               {0x3800 - PKT_SIZE / 2, PKT_SIZE, 0, true},
                /* Valid packet for synch so that something is received */
                {0x4000, PKT_SIZE, 0, true}};
 
@@ -1212,6 +1215,11 @@ static void testapp_invalid_desc(struct test_spec *test)
                /* Crossing a page boundrary allowed */
                pkts[6].valid = true;
        }
+       if (test->ifobj_tx->umem->frame_size == XSK_UMEM__DEFAULT_FRAME_SIZE / 2) {
+               /* Crossing a 2K frame size boundrary not allowed */
+               pkts[7].valid = false;
+       }
+
        pkt_stream_generate_custom(test, pkts, ARRAY_SIZE(pkts));
        testapp_validate_traffic(test);
        pkt_stream_restore_default(test);
@@ -1262,6 +1270,15 @@ static void run_pkt_test(struct test_spec *test, enum test_mode mode, enum test_
                test_spec_set_name(test, "RUN_TO_COMPLETION");
                testapp_validate_traffic(test);
                break;
+       case TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME:
+               test_spec_set_name(test, "RUN_TO_COMPLETION_2K_FRAME_SIZE");
+               test->ifobj_tx->umem->frame_size = 2048;
+               test->ifobj_rx->umem->frame_size = 2048;
+               pkt_stream_replace(test, DEFAULT_PKT_CNT, MIN_PKT_SIZE);
+               testapp_validate_traffic(test);
+
+               pkt_stream_restore_default(test);
+               break;
        case TEST_TYPE_POLL:
                test->ifobj_tx->use_poll = true;
                test->ifobj_rx->use_poll = true;
@@ -1272,6 +1289,12 @@ static void run_pkt_test(struct test_spec *test, enum test_mode mode, enum test_
                test_spec_set_name(test, "ALIGNED_INV_DESC");
                testapp_invalid_desc(test);
                break;
+       case TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME:
+               test_spec_set_name(test, "ALIGNED_INV_DESC_2K_FRAME_SIZE");
+               test->ifobj_tx->umem->frame_size = 2048;
+               test->ifobj_rx->umem->frame_size = 2048;
+               testapp_invalid_desc(test);
+               break;
        case TEST_TYPE_UNALIGNED_INV_DESC:
                test_spec_set_name(test, "UNALIGNED_INV_DESC");
                test->ifobj_tx->umem->unaligned_mode = true;
index 2d9efb8..5ac4a5e 100644 (file)
@@ -54,9 +54,11 @@ enum test_mode {
 
 enum test_type {
        TEST_TYPE_RUN_TO_COMPLETION,
+       TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME,
        TEST_TYPE_POLL,
        TEST_TYPE_UNALIGNED,
        TEST_TYPE_ALIGNED_INV_DESC,
+       TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME,
        TEST_TYPE_UNALIGNED_INV_DESC,
        TEST_TYPE_TEARDOWN,
        TEST_TYPE_BIDI,