From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 6AA82A057B;
	Tue, 14 Apr 2020 12:35:50 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 40AF81C209;
	Tue, 14 Apr 2020 12:35:50 +0200 (CEST)
Received: from mga06.intel.com (mga06.intel.com [134.134.136.31])
 by dpdk.org (Postfix) with ESMTP id 0B2611C209
 for <dev@dpdk.org>; Tue, 14 Apr 2020 12:35:47 +0200 (CEST)
IronPort-SDR: scL7Roie0i/rzUiKC/pBDG+dj58qSeVWAio3jKtGEJNDyT2QN4Yq10cErNnDX+qXvjnqWbi5Jr
 vMjRbedqSgxw==
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from fmsmga004.fm.intel.com ([10.253.24.48])
 by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 14 Apr 2020 03:35:46 -0700
IronPort-SDR: j1z2grLVcCgAbk2hUNTH9hZVCKS/Nii4BwYVKtDGu5Ke8cTMQCZtPC9gWZrewRfgHxRsOx2EbL
 a7notHV8E6pg==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.72,382,1580803200"; d="scan'208";a="277213026"
Received: from silpixa00399593.ir.intel.com (HELO
 silpixa00399593.ger.corp.intel.com) ([10.237.223.21])
 by fmsmga004.fm.intel.com with ESMTP; 14 Apr 2020 03:35:45 -0700
From: Pablo de Lara <pablo.de.lara.guarch@intel.com>
To: declan.doherty@intel.com, akhil.goyal@nxp.com, roy.fan.zhang@intel.com,
 thomas@monjalon.net
Cc: dev@dpdk.org,
	Pablo de Lara <pablo.de.lara.guarch@intel.com>
Date: Tue, 14 Apr 2020 11:35:38 +0100
Message-Id: <1586860539-209075-1-git-send-email-pablo.de.lara.guarch@intel.com>
X-Mailer: git-send-email 2.7.5
In-Reply-To: <1586859760-207446-1-git-send-email-pablo.de.lara.guarch@intel.com>
References: <1586859760-207446-1-git-send-email-pablo.de.lara.guarch@intel.com>
Subject: [dpdk-dev] [PATCH v2 1/2] test/crypto: add capability check
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

Check if test case is supported by the crypto device,
including algorithm and some of its parameter, such as key length,
IV length, etc, using the capabilities API.
If it is not supported, test case is skipped.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
---

v2:
- Fixed checkpatch issues

 app/test/test_cryptodev_blockcipher.c | 49 +++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c
index 2ff7fc9..9c218e5 100644
--- a/app/test/test_cryptodev_blockcipher.c
+++ b/app/test/test_cryptodev_blockcipher.c
@@ -21,6 +21,47 @@
 #include "test_cryptodev_hash_test_vectors.h"
 
 static int
+verify_algo_support(const struct blockcipher_test_case *t,
+		const uint8_t dev_id, const uint32_t digest_len)
+{
+	int ret;
+	const struct blockcipher_test_data *tdata = t->test_data;
+	struct rte_cryptodev_sym_capability_idx cap_idx;
+	const struct rte_cryptodev_symmetric_capability *capability;
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
+		cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+		cap_idx.algo.cipher = tdata->crypto_algo;
+		capability = rte_cryptodev_sym_capability_get(dev_id, &cap_idx);
+		if (capability == NULL)
+			return -1;
+
+		ret = rte_cryptodev_sym_capability_check_cipher(capability,
+							tdata->cipher_key.len,
+							tdata->iv.len);
+		if (ret != 0)
+			return -1;
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH) {
+		cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+		cap_idx.algo.auth = tdata->auth_algo;
+		capability = rte_cryptodev_sym_capability_get(dev_id, &cap_idx);
+		if (capability == NULL)
+			return -1;
+
+		ret = rte_cryptodev_sym_capability_check_auth(capability,
+							tdata->auth_key.len,
+							digest_len,
+							0);
+		if (ret != 0)
+			return -1;
+	}
+
+	return 0;
+}
+
+static int
 test_blockcipher_one_case(const struct blockcipher_test_case *t,
 	struct rte_mempool *mbuf_pool,
 	struct rte_mempool *op_mpool,
@@ -112,6 +153,14 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t,
 		nb_segs = 3;
 	}
 
+	/* Check if PMD is capable of performing that test */
+	if (verify_algo_support(t, dev_id, digest_len) < 0) {
+		RTE_LOG(DEBUG, USER1,
+			"Device is not capable of performing this algorithm."
+			"Test Skipped.\n");
+		return 0;
+	}
+
 	if (tdata->cipher_key.len)
 		memcpy(cipher_key, tdata->cipher_key.data,
 			tdata->cipher_key.len);
-- 
2.7.5