Signed-off-by: Nicolas Morey-Chaisemartin <nmo...@kalray.eu>
---
 test/validation/pktio/pktio.c | 99 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 89 insertions(+), 10 deletions(-)

diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index 82ced5c..213d365 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -21,6 +21,8 @@
 #define MAX_NUM_IFACES         2
 #define TEST_SEQ_INVALID       ((uint32_t)~0)
 #define TEST_SEQ_MAGIC         0x92749451
+#define MAX_SEGMENT            (ODP_CONFIG_PACKET_BUF_LEN_MAX / \
+                               ODP_CONFIG_PACKET_SEG_LEN_MIN)
 
 /** interface names used for testing */
 static const char *iface_name[MAX_NUM_IFACES];
@@ -47,6 +49,13 @@ typedef struct ODP_PACKED {
        uint32be_t magic;
 } pkt_tail_t;
 
+/** Run mode */
+typedef enum {
+       PKT_POOL_UNSEGMENTED,
+       PKT_POOL_SEGMENTED_NORMAL,
+       PKT_POOL_SEGMENTED_JUMBO,
+} pkt_segmented_e
+;
 /** size of transmitted packets */
 static uint32_t packet_len = PKT_LEN_NORMAL;
 
@@ -56,8 +65,35 @@ odp_pool_t default_pkt_pool = ODP_POOL_INVALID;
 /** sequence number of IP packets */
 odp_atomic_u32_t ip_seq;
 
+/** Type of pool segmentation */
+pkt_segmented_e pool_segmentation = PKT_POOL_UNSEGMENTED;
+
 odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
 
+static void set_pool_len(odp_pool_param_t *params)
+{
+       switch (pool_segmentation) {
+       case PKT_POOL_SEGMENTED_NORMAL:
+               params->pkt.seg_len =
+                       (PKT_LEN_NORMAL + ODPH_ETHHDR_LEN + ODPH_IPV4HDR_LEN +
+                        ODPH_UDPHDR_LEN + MAX_SEGMENT - 1) / MAX_SEGMENT;
+               /* Jumbo frame are not supported in this test */
+               params->pkt.len = PKT_LEN_NORMAL + ODPH_ETHHDR_LEN +
+                       ODPH_IPV4HDR_LEN + ODPH_UDPHDR_LEN;
+               break;
+       case PKT_POOL_SEGMENTED_JUMBO:
+               params->pkt.seg_len =
+                       (PKT_BUF_SIZE + MAX_SEGMENT - 1) / MAX_SEGMENT;
+               params->pkt.len = PKT_BUF_SIZE;
+               break;
+       case PKT_POOL_UNSEGMENTED:
+       default:
+               params->pkt.seg_len = PKT_BUF_SIZE;
+               params->pkt.len = PKT_BUF_SIZE;
+               break;
+       }
+}
+
 static void pktio_pkt_set_macs(odp_packet_t pkt,
                               pktio_info_t *src, pktio_info_t *dst)
 {
@@ -203,17 +239,19 @@ static int pktio_fixup_checksums(odp_packet_t pkt)
 static int default_pool_create(void)
 {
        odp_pool_param_t params;
+       char pool_name[ODP_POOL_NAME_LEN];
 
        if (default_pkt_pool != ODP_POOL_INVALID)
                return -1;
 
        memset(&params, 0, sizeof(params));
-       params.pkt.seg_len = PKT_BUF_SIZE;
-       params.pkt.len     = PKT_BUF_SIZE;
+       set_pool_len(&params);
        params.pkt.num     = PKT_BUF_NUM;
        params.type        = ODP_POOL_PACKET;
 
-       default_pkt_pool = odp_pool_create("pkt_pool_default",
+       snprintf(pool_name, sizeof(pool_name),
+                "pkt_pool_default_%d", pool_segmentation);
+       default_pkt_pool = odp_pool_create(pool_name,
                                           ODP_SHM_NULL, &params);
        if (default_pkt_pool == ODP_POOL_INVALID)
                return -1;
@@ -607,12 +645,13 @@ static int create_pool(const char *iface, int num)
        odp_pool_param_t params;
 
        memset(&params, 0, sizeof(params));
-       params.pkt.seg_len = PKT_BUF_SIZE;
-       params.pkt.len     = PKT_BUF_SIZE;
+       set_pool_len(&params);
        params.pkt.num     = PKT_BUF_NUM;
        params.type        = ODP_POOL_PACKET;
+       params.pkt.seg_len = PKT_BUF_SIZE;
 
-       snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
+       snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s_%d",
+                iface, pool_segmentation);
 
        pool[num] = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
        if (ODP_POOL_INVALID == pool[num]) {
@@ -655,6 +694,24 @@ static int pktio_suite_init(void)
        return 0;
 }
 
+static int pktio_suite_init_unsegmented(void)
+{
+       pool_segmentation = PKT_POOL_UNSEGMENTED;
+       return pktio_suite_init();
+}
+
+static int pktio_suite_init_segmented_normal(void)
+{
+       pool_segmentation = PKT_POOL_SEGMENTED_NORMAL;
+       return pktio_suite_init();
+}
+
+static int pktio_suite_init_segmented_jumbo(void)
+{
+       pool_segmentation = PKT_POOL_SEGMENTED_JUMBO;
+       return pktio_suite_init();
+}
+
 static int pktio_suite_term(void)
 {
        char pool_name[ODP_POOL_NAME_LEN];
@@ -664,7 +721,7 @@ static int pktio_suite_term(void)
 
        for (i = 0; i < num_ifaces; ++i) {
                snprintf(pool_name, sizeof(pool_name),
-                        "pkt_pool_%s", iface_name[i]);
+                        "pkt_pool_%s_%d", iface_name[i], pool_segmentation);
                pool = odp_pool_lookup(pool_name);
                if (pool == ODP_POOL_INVALID)
                        continue;
@@ -680,11 +737,12 @@ static int pktio_suite_term(void)
                fprintf(stderr, "error: failed to destroy default pool\n");
                ret = -1;
        }
+       default_pkt_pool = ODP_POOL_INVALID;
 
        return ret;
 }
 
-static CU_TestInfo pktio_suite[] = {
+static CU_TestInfo pktio_suite_unsegmented[] = {
        {"pktio open",          pktio_test_open},
        {"pktio lookup",        pktio_test_lookup},
        {"pktio inq",           pktio_test_inq},
@@ -700,9 +758,30 @@ static CU_TestInfo pktio_suite[] = {
        CU_TEST_INFO_NULL
 };
 
+static CU_TestInfo pktio_suite_segmented_normal[] = {
+       {"pktio poll queues",   pktio_test_poll_queue},
+       {"pktio poll multi",    pktio_test_poll_multi},
+       {"pktio sched queues",  pktio_test_sched_queue},
+       {"pktio sched multi",   pktio_test_sched_multi},
+       CU_TEST_INFO_NULL
+};
+
+static CU_TestInfo pktio_suite_segmented_jumbo[] = {
+       {"pktio poll queues",   pktio_test_poll_queue},
+       {"pktio poll multi",    pktio_test_poll_multi},
+       {"pktio sched queues",  pktio_test_sched_queue},
+       {"pktio sched multi",   pktio_test_sched_multi},
+       {"pktio jumbo frames",  pktio_test_jumbo},
+       CU_TEST_INFO_NULL
+};
+
 static CU_SuiteInfo pktio_suites[] = {
-       {"Packet I/O",
-               pktio_suite_init, pktio_suite_term, NULL, NULL, pktio_suite},
+       {"Packet I/O", pktio_suite_init_unsegmented, pktio_suite_term,
+        NULL, NULL, pktio_suite_unsegmented},
+       {"Packet I/O Segmented Normal", pktio_suite_init_segmented_normal,
+        pktio_suite_term, NULL, NULL, pktio_suite_segmented_normal},
+       {"Packet I/O Segmented Jumbo", pktio_suite_init_segmented_jumbo,
+        pktio_suite_term, NULL, NULL, pktio_suite_segmented_jumbo},
        CU_SUITE_INFO_NULL
 };
 
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to