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(¶ms, 0, sizeof(params)); - params.pkt.seg_len = PKT_BUF_SIZE; - params.pkt.len = PKT_BUF_SIZE; + set_pool_len(¶ms); 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, ¶ms); 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(¶ms, 0, sizeof(params)); - params.pkt.seg_len = PKT_BUF_SIZE; - params.pkt.len = PKT_BUF_SIZE; + set_pool_len(¶ms); 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, ¶ms); 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