- int i, nb_devs, valid_dev_id = 0;
- uint16_t qp_id;
- struct rte_cryptodev_info info;
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- init_task_esp_common();
- tbase->flags |= FLAG_NEVER_FLUSH;
-
- ts_params->mbuf_ol_pool_enc = rte_crypto_op_pool_create("crypto_op_pool_enc",
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, (2*1024*1024), 128, 0,
- rte_socket_id());
- PROX_PANIC(ts_params->mbuf_ol_pool_enc == NULL, "Can't create ENC CRYPTO_OP_POOL\n");
-
- struct task_esp_enc *task = (struct task_esp_enc *)tbase;
- task->crypto_dev_id = 0;
-
- /*
- * Since we can't free and re-allocate queue memory always set the queues
- * on this device up to max size first so enough memory is allocated for
- * any later re-configures needed by other tests
- */
-
- rte_cryptodev_queue_pair_setup(task->crypto_dev_id, 0,
- &ts_params->qp_conf, rte_cryptodev_socket_id(task->crypto_dev_id));
-
- struct rte_cryptodev *dev;
- dev = rte_cryptodev_pmd_get_dev(task->crypto_dev_id);
- PROX_PANIC(dev->attached != RTE_CRYPTODEV_ATTACHED, "No ENC cryptodev attached\n");
-
- /* Setup Cipher Parameters */
- task->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- task->cipher_xform.next = &(task->auth_xform);
-
- task->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
- task->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
- task->cipher_xform.cipher.key.data = aes_cbc_key;
- task->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
-
- /* Setup HMAC Parameters */
- task->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- task->auth_xform.next = NULL;
- task->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- task->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
- task->auth_xform.auth.key.length = DIGEST_BYTE_LENGTH_SHA1;
- task->auth_xform.auth.key.data = hmac_sha1_key;
- task->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
-
- task->sess = rte_cryptodev_sym_session_create(task->crypto_dev_id, &task->cipher_xform);
- PROX_PANIC(task->sess == NULL, "Failed to create ENC session\n");
-
- //TODO: doublecheck task->ops_burst lifecycle!
- if (rte_crypto_op_bulk_alloc(ts_params->mbuf_ol_pool_enc,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC,
- task->ops_burst, MAX_PKT_BURST) != MAX_PKT_BURST) {
- PROX_PANIC(1, "Failed to allocate ENC crypto operations\n");
- }
- //to clean up after rte_crypto_op_bulk_alloc:
- //for (j = 0; j < MAX_PKT_BURST; j++) {
- // rte_crypto_op_free(task->ops_burst[j]);
- //}
-
- // Read config file with SAs
- task->local_ipv4 = rte_cpu_to_be_32(targ->local_ipv4);
- task->remote_ipv4 = rte_cpu_to_be_32(targ->remote_ipv4);
- //memcpy(&task->src_mac, &prox_port_cfg[task->base.tx_params_hw.tx_port_queue->port].eth_addr, sizeof(struct ether_addr));
- struct prox_port_cfg *port = find_reachable_port(targ);
- memcpy(&task->local_mac, &port->eth_addr, sizeof(struct ether_addr));
-
- for (i = 0; i < 16; i++) task->key[i] = i+2;
- for (i = 0; i < 16; i++) task->iv[i] = i;
+ struct task_esp_enc *task = (struct task_esp_enc *)tbase;
+
+ tbase->flags |= FLAG_NEVER_FLUSH;
+
+ uint8_t lcore_id = targ->lconf->id;
+ char name[64];
+ sprintf(name, "core_%03u_crypto_pool", lcore_id);
+ task->crypto_op_pool = rte_crypto_op_pool_create(name, RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+ 8192, 128, MAXIMUM_IV_LENGTH, rte_socket_id());
+ PROX_PANIC(task->crypto_op_pool == NULL, "Can't create ENC CRYPTO_OP_POOL\n");
+
+ task->cdev_id = get_cdev_id();
+
+ struct rte_cryptodev_config cdev_conf;
+ cdev_conf.nb_queue_pairs = 2;
+ //cdev_conf.socket_id = SOCKET_ID_ANY;
+ cdev_conf.socket_id = rte_socket_id();
+ rte_cryptodev_configure(task->cdev_id, &cdev_conf);
+
+ unsigned int session_size = rte_cryptodev_sym_get_private_session_size(task->cdev_id);
+ plog_info("rte_cryptodev_sym_get_private_session_size=%d\n", session_size);
+ sprintf(name, "core_%03u_session_pool", lcore_id);
+ task->session_pool = rte_mempool_create(name,
+ MAX_SESSIONS,
+ session_size,
+ POOL_CACHE_SIZE,
+ 0, NULL, NULL, NULL,
+ NULL, rte_socket_id(),
+ 0);
+ PROX_PANIC(task->session_pool == NULL, "Failed rte_mempool_create\n");
+
+ task->qp_id=0;
+ plog_info("enc: task->qp_id=%u\n", task->qp_id);
+ struct prox_rte_cryptodev_qp_conf qp_conf;
+ qp_conf.nb_descriptors = 128;
+ qp_conf.mp_session = task->session_pool;
+ prox_rte_cryptodev_queue_pair_setup(task->cdev_id, task->qp_id, &qp_conf, rte_cryptodev_socket_id(task->cdev_id));
+
+ int ret = rte_cryptodev_start(task->cdev_id);
+ PROX_PANIC(ret < 0, "Failed to start device\n");
+
+ struct rte_cryptodev *dev;
+ dev = rte_cryptodev_pmd_get_dev(task->cdev_id);
+ PROX_PANIC(dev->attached != RTE_CRYPTODEV_ATTACHED, "No ENC cryptodev attached\n");
+
+ //Setup Cipher Parameters
+ struct rte_crypto_sym_xform cipher_xform = {0};
+ struct rte_crypto_sym_xform auth_xform = {0};
+
+ cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ cipher_xform.next = &auth_xform;
+
+ cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+ cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+ cipher_xform.cipher.key.data = aes_cbc_key;
+ cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+ cipher_xform.cipher.iv.offset = IV_OFFSET;
+ cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+ //Setup HMAC Parameters
+ auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ auth_xform.next = NULL;
+ auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+ auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
+ auth_xform.auth.key.length = DIGEST_BYTE_LENGTH_SHA1;
+ auth_xform.auth.key.data = hmac_sha1_key;
+ auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
+
+ auth_xform.auth.iv.offset = 0;
+ auth_xform.auth.iv.length = 0;
+
+ task->sess = rte_cryptodev_sym_session_create(task->session_pool);
+ PROX_PANIC(task->sess == NULL, "Failed to create ENC session\n");
+
+ ret = rte_cryptodev_sym_session_init(task->cdev_id, task->sess, &cipher_xform, task->session_pool);
+ PROX_PANIC(ret < 0, "Failed sym_session_init\n");
+
+ //TODO: doublecheck task->ops_burst lifecycle!
+ if (rte_crypto_op_bulk_alloc(task->crypto_op_pool,
+ RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+ task->ops_burst, NUM_OPS) != NUM_OPS) {
+ PROX_PANIC(1, "Failed to allocate ENC crypto operations\n");
+ }
+
+ task->local_ipv4 = rte_cpu_to_be_32(targ->local_ipv4);
+ task->remote_ipv4 = rte_cpu_to_be_32(targ->remote_ipv4);
+ //memcpy(&task->src_mac, &prox_port_cfg[task->base.tx_params_hw.tx_port_queue->port].eth_addr, sizeof(prox_rte_ether_addr));
+ struct prox_port_cfg *port = find_reachable_port(targ);
+ memcpy(&task->local_mac, &port->eth_addr, sizeof(prox_rte_ether_addr));
+
+ if (targ->flags & TASK_ARG_DST_MAC_SET){
+ memcpy(&task->dst_mac, &targ->edaddr, sizeof(task->dst_mac));
+ plog_info("TASK_ARG_DST_MAC_SET ("MAC_BYTES_FMT")\n", MAC_BYTES(task->dst_mac.addr_bytes));
+ //prox_rte_ether_addr_copy(&ptask->dst_mac, &peth->d_addr);
+ //rte_memcpy(hdr, task->src_dst_mac, sizeof(task->src_dst_mac));
+ }