X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_event_crypto_adapter.c;h=688520db4ed06854c25ba8455772546220256e60;hb=81c2337e044dc16f1d93745d2a1668cdebc37c81;hp=652e458f0413ed7ffb00d7955520e4700a5890f3;hpb=49e74e0876f94a5287192c4e61e7b3781f2677f4;p=dpdk.git diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c index 652e458f04..688520db4e 100644 --- a/app/test/test_event_crypto_adapter.c +++ b/app/test/test_event_crypto_adapter.c @@ -3,16 +3,27 @@ * All rights reserved. */ +#include "test.h" #include #include #include #include #include + +#ifdef RTE_EXEC_ENV_WINDOWS +static int +test_event_crypto_adapter(void) +{ + printf("event_crypto_adapter not supported on Windows, skipping test\n"); + return TEST_SKIPPED; +} + +#else + #include #include #include #include -#include "test.h" #define PKT_TRACE 0 #define NUM 1 @@ -64,6 +75,7 @@ struct event_crypto_adapter_test_params { struct rte_mempool *session_priv_mpool; struct rte_cryptodev_config *config; uint8_t crypto_event_port_id; + uint8_t internal_port_op_fwd; }; struct rte_event response_info = { @@ -110,9 +122,12 @@ send_recv_ev(struct rte_event *ev) struct rte_event recv_ev; int ret; - ret = rte_event_enqueue_burst(evdev, TEST_APP_PORT_ID, ev, NUM); - TEST_ASSERT_EQUAL(ret, NUM, - "Failed to send event to crypto adapter\n"); + if (params.internal_port_op_fwd) + ret = rte_event_crypto_adapter_enqueue(evdev, TEST_APP_PORT_ID, + ev, NUM); + else + ret = rte_event_enqueue_burst(evdev, TEST_APP_PORT_ID, ev, NUM); + TEST_ASSERT_EQUAL(ret, NUM, "Failed to send event to crypto adapter\n"); while (rte_event_dequeue_burst(evdev, TEST_APP_PORT_ID, &recv_ev, NUM, 0) == 0) @@ -182,8 +197,7 @@ test_op_forward_mode(uint8_t session_less) /* Setup Cipher Parameters */ cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; cipher_xform.next = NULL; - - cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC; + cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; op = rte_crypto_op_alloc(params.op_mpool, @@ -203,16 +217,16 @@ test_op_forward_mode(uint8_t session_less) &cipher_xform, params.session_priv_mpool); TEST_ASSERT_SUCCESS(ret, "Failed to init session\n"); - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, - evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, + &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { /* Fill in private user data information */ - rte_memcpy(&m_data.response_info, &response_info, - sizeof(response_info)); - rte_memcpy(&m_data.request_info, &request_info, - sizeof(request_info)); + m_data.request_info.cdev_id = request_info.cdev_id; + m_data.request_info.queue_pair_id = + request_info.queue_pair_id; + m_data.response_info.event = response_info.event; rte_cryptodev_sym_session_set_user_data(sess, &m_data, sizeof(m_data)); } @@ -225,14 +239,12 @@ test_op_forward_mode(uint8_t session_less) op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; first_xform = &cipher_xform; sym_op->xform = first_xform; - uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH + - (sizeof(struct rte_crypto_sym_xform) * 2); + uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH; op->private_data_offset = len; /* Fill in private data information */ - rte_memcpy(&m_data.response_info, &response_info, - sizeof(response_info)); - rte_memcpy(&m_data.request_info, &request_info, - sizeof(request_info)); + m_data.request_info.cdev_id = request_info.cdev_id; + m_data.request_info.queue_pair_id = request_info.queue_pair_id; + m_data.response_info.event = response_info.event; rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data)); } @@ -290,12 +302,16 @@ test_sessionless_with_op_forward_mode(void) uint32_t cap; int ret; - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) map_adapter_service_core(); + else { + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) + return TEST_SKIPPED; + } TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), "Failed to start event crypto adapter"); @@ -311,12 +327,16 @@ test_session_with_op_forward_mode(void) uint32_t cap; int ret; - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) map_adapter_service_core(); + else { + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) + return TEST_SKIPPED; + } TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID ), "Failed to start event crypto adapter"); @@ -375,8 +395,7 @@ test_op_new_mode(uint8_t session_less) /* Setup Cipher Parameters */ cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; cipher_xform.next = NULL; - - cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC; + cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; op = rte_crypto_op_alloc(params.op_mpool, @@ -390,14 +409,13 @@ test_op_new_mode(uint8_t session_less) params.session_mpool); TEST_ASSERT_NOT_NULL(sess, "Session creation failed\n"); - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, - evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, + &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { /* Fill in private user data information */ - rte_memcpy(&m_data.response_info, &response_info, - sizeof(m_data)); + m_data.response_info.event = response_info.event; rte_cryptodev_sym_session_set_user_data(sess, &m_data, sizeof(m_data)); } @@ -413,12 +431,10 @@ test_op_new_mode(uint8_t session_less) op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; first_xform = &cipher_xform; sym_op->xform = first_xform; - uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH + - (sizeof(struct rte_crypto_sym_xform) * 2); + uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH; op->private_data_offset = len; /* Fill in private data information */ - rte_memcpy(&m_data.response_info, &response_info, - sizeof(m_data)); + m_data.response_info.event = response_info.event; rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data)); } @@ -440,12 +456,16 @@ test_sessionless_with_op_new_mode(void) uint32_t cap; int ret; - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) map_adapter_service_core(); + else { + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) + return TEST_SKIPPED; + } /* start the event crypto adapter */ TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), @@ -462,12 +482,16 @@ test_session_with_op_new_mode(void) uint32_t cap; int ret; - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) map_adapter_service_core(); + else { + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) + return TEST_SKIPPED; + } TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), "Failed to start event crypto adapter"); @@ -502,7 +526,8 @@ configure_cryptodev(void) NUM_MBUFS, MBUF_CACHE_SIZE, DEFAULT_NUM_XFORMS * sizeof(struct rte_crypto_sym_xform) + - MAXIMUM_IV_LENGTH, + MAXIMUM_IV_LENGTH + + sizeof(union rte_event_crypto_metadata), rte_socket_id()); if (params.op_mpool == NULL) { RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n"); @@ -536,7 +561,9 @@ configure_cryptodev(void) params.session_mpool = rte_cryptodev_sym_session_pool_create( "CRYPTO_ADAPTER_SESSION_MP", - MAX_NB_SESSIONS, 0, 0, 0, SOCKET_ID_ANY); + MAX_NB_SESSIONS, 0, 0, + sizeof(union rte_event_crypto_metadata), + SOCKET_ID_ANY); TEST_ASSERT_NOT_NULL(params.session_mpool, "session mempool allocation failed\n"); @@ -678,7 +705,7 @@ test_crypto_adapter_create(void) /* Create adapter with default port creation callback */ ret = rte_event_crypto_adapter_create(TEST_ADAPTER_ID, - TEST_CDEV_ID, + evdev, &conf, 0); TEST_ASSERT_SUCCESS(ret, "Failed to create event crypto adapter\n"); @@ -691,7 +718,7 @@ test_crypto_adapter_qp_add_del(void) uint32_t cap; int ret; - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { @@ -722,15 +749,33 @@ configure_event_crypto_adapter(enum rte_event_crypto_adapter_mode mode) uint32_t cap; int ret; + ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); + TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); + + /* Skip mode and capability mismatch check for SW eventdev */ + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW) && + !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && + !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND)) + goto adapter_create; + + if (mode == RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD) { + if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) + params.internal_port_op_fwd = 1; + else + return -ENOTSUP; + } + + if ((mode == RTE_EVENT_CRYPTO_ADAPTER_OP_NEW) && + !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) + return -ENOTSUP; + +adapter_create: /* Create adapter with default port creation callback */ ret = rte_event_crypto_adapter_create(TEST_ADAPTER_ID, - TEST_CDEV_ID, + evdev, &conf, mode); TEST_ASSERT_SUCCESS(ret, "Failed to create event crypto adapter\n"); - ret = rte_event_crypto_adapter_caps_get(TEST_ADAPTER_ID, evdev, &cap); - TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); - if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { ret = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, TEST_CDEV_ID, TEST_CDEV_QP_ID, &response_info); @@ -740,9 +785,11 @@ configure_event_crypto_adapter(enum rte_event_crypto_adapter_mode mode) TEST_ASSERT_SUCCESS(ret, "Failed to add queue pair\n"); - ret = rte_event_crypto_adapter_event_port_get(TEST_ADAPTER_ID, - ¶ms.crypto_event_port_id); - TEST_ASSERT_SUCCESS(ret, "Failed to get event port\n"); + if (!params.internal_port_op_fwd) { + ret = rte_event_crypto_adapter_event_port_get(TEST_ADAPTER_ID, + ¶ms.crypto_event_port_id); + TEST_ASSERT_SUCCESS(ret, "Failed to get event port\n"); + } return TEST_SUCCESS; } @@ -765,6 +812,10 @@ test_crypto_adapter_stop(void) rte_service_runstate_set(evdev_service_id, 0); rte_service_lcore_stop(slcore_id); rte_service_lcore_del(slcore_id); + rte_cryptodev_stop(TEST_CDEV_ID); + rte_event_dev_stop(evdev); + } else { + rte_cryptodev_stop(TEST_CDEV_ID); rte_event_dev_stop(evdev); } } @@ -778,7 +829,9 @@ test_crypto_adapter_conf(enum rte_event_crypto_adapter_mode mode) if (!crypto_adapter_setup_done) { ret = configure_event_crypto_adapter(mode); - if (!ret) { + if (ret) + return ret; + if (!params.internal_port_op_fwd) { qid = TEST_CRYPTO_EV_QUEUE_ID; ret = rte_event_port_link(evdev, params.crypto_event_port_id, &qid, NULL, 1); @@ -810,6 +863,10 @@ test_crypto_adapter_conf(enum rte_event_crypto_adapter_mode mode) TEST_ASSERT_SUCCESS(rte_event_dev_start(evdev), "Failed to start event device"); + /* start the cryptodev */ + TEST_ASSERT_SUCCESS(rte_cryptodev_start(TEST_CDEV_ID), + "Failed to start crypto device"); + return TEST_SUCCESS; } @@ -819,10 +876,8 @@ test_crypto_adapter_conf_op_forward_mode(void) enum rte_event_crypto_adapter_mode mode; mode = RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD; - TEST_ASSERT_SUCCESS(test_crypto_adapter_conf(mode), - "Failed to config crypto adapter"); - return TEST_SUCCESS; + return test_crypto_adapter_conf(mode); } static int @@ -831,10 +886,8 @@ test_crypto_adapter_conf_op_new_mode(void) enum rte_event_crypto_adapter_mode mode; mode = RTE_EVENT_CRYPTO_ADAPTER_OP_NEW; - TEST_ASSERT_SUCCESS(test_crypto_adapter_conf(mode), - "Failed to config crypto adapter"); - return TEST_SUCCESS; + return test_crypto_adapter_conf(mode); } @@ -858,6 +911,27 @@ testsuite_setup(void) return TEST_SUCCESS; } +static void +crypto_adapter_teardown(void) +{ + int ret; + + ret = rte_event_crypto_adapter_stop(TEST_ADAPTER_ID); + if (ret < 0) + RTE_LOG(ERR, USER1, "Failed to stop adapter!"); + + ret = rte_event_crypto_adapter_queue_pair_del(TEST_ADAPTER_ID, + TEST_CDEV_ID, TEST_CDEV_QP_ID); + if (ret < 0) + RTE_LOG(ERR, USER1, "Failed to delete queue pair!"); + + ret = rte_event_crypto_adapter_free(TEST_ADAPTER_ID); + if (ret < 0) + RTE_LOG(ERR, USER1, "Failed to free adapter!"); + + crypto_adapter_setup_done = 0; +} + static void crypto_teardown(void) { @@ -877,6 +951,7 @@ crypto_teardown(void) params.session_mpool = NULL; } if (params.session_priv_mpool != NULL) { + rte_mempool_avail_count(params.session_priv_mpool); rte_mempool_free(params.session_priv_mpool); params.session_priv_mpool = NULL; } @@ -899,6 +974,7 @@ eventdev_teardown(void) static void testsuite_teardown(void) { + crypto_adapter_teardown(); crypto_teardown(); eventdev_teardown(); } @@ -946,5 +1022,7 @@ test_event_crypto_adapter(void) return unit_test_suite_runner(&functional_testsuite); } +#endif /* !RTE_EXEC_ENV_WINDOWS */ + REGISTER_TEST_COMMAND(event_crypto_adapter_autotest, test_event_crypto_adapter);