From patchwork Thu Jul 19 08:39:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "De Lara Guarch, Pablo" X-Patchwork-Id: 43210 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A6C7F5B16; Thu, 19 Jul 2018 18:47:00 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id A72A85B12; Thu, 19 Jul 2018 18:46:58 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 09:46:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,375,1526367600"; d="scan'208";a="247109921" Received: from silpixa00399466.ir.intel.com (HELO silpixa00399466.ger.corp.intel.com) ([10.237.223.220]) by fmsmga006.fm.intel.com with ESMTP; 19 Jul 2018 09:46:09 -0700 From: Pablo de Lara To: declan.doherty@intel.com, fiona.trahe@intel.com Cc: dev@dpdk.org, Pablo de Lara , stable@dpdk.org Date: Thu, 19 Jul 2018 09:39:55 +0100 Message-Id: <20180719083959.41480-2-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> References: <20180717103815.26841-1-pablo.de.lara.guarch@intel.com> <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> Subject: [dpdk-dev] [PATCH v2 1/5] examples/l2fwd-crypto: check return value on IV size check X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" IV size parameter is checked through a function, but its return value was not checked. Fixes: 0fbd75a99fc9 ("cryptodev: move IV parameters to session") Fixes: acf8616901b5 ("cryptodev: add auth IV") Fixes: 2661f4fbe93d ("examples/l2fwd-crypto: add AEAD parameters") Signed-off-by: Pablo de Lara Cc: stable@dpdk.org --- examples/l2fwd-crypto/main.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index 9ac06a697..dc97a9b40 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -2066,10 +2066,11 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, options->block_size = cap->sym.aead.block_size; - check_iv_param(&cap->sym.aead.iv_size, + if (check_iv_param(&cap->sym.aead.iv_size, options->aead_iv_param, options->aead_iv_random_size, - &options->aead_iv.length); + &options->aead_iv.length) < 0) + return -1; /* * Check if length of provided AEAD key is supported @@ -2174,10 +2175,11 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, options->block_size = cap->sym.cipher.block_size; - check_iv_param(&cap->sym.cipher.iv_size, + if (check_iv_param(&cap->sym.cipher.iv_size, options->cipher_iv_param, options->cipher_iv_random_size, - &options->cipher_iv.length); + &options->cipher_iv.length) < 0) + return -1; /* * Check if length of provided cipher key is supported @@ -2230,10 +2232,11 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, if (cap == NULL) continue; - check_iv_param(&cap->sym.auth.iv_size, + if (check_iv_param(&cap->sym.auth.iv_size, options->auth_iv_param, options->auth_iv_random_size, - &options->auth_iv.length); + &options->auth_iv.length) < 0) + return -1; /* * Check if length of provided auth key is supported * by the algorithm chosen. From patchwork Thu Jul 19 08:39:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "De Lara Guarch, Pablo" X-Patchwork-Id: 43213 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1D2485F16; Thu, 19 Jul 2018 18:47:07 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id E878F5B14; Thu, 19 Jul 2018 18:46:59 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 09:46:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,375,1526367600"; d="scan'208";a="247109923" Received: from silpixa00399466.ir.intel.com (HELO silpixa00399466.ger.corp.intel.com) ([10.237.223.220]) by fmsmga006.fm.intel.com with ESMTP; 19 Jul 2018 09:46:11 -0700 From: Pablo de Lara To: declan.doherty@intel.com, fiona.trahe@intel.com Cc: dev@dpdk.org, Pablo de Lara , stable@dpdk.org Date: Thu, 19 Jul 2018 09:39:56 +0100 Message-Id: <20180719083959.41480-3-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> References: <20180717103815.26841-1-pablo.de.lara.guarch@intel.com> <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> Subject: [dpdk-dev] [PATCH v2 2/5] examples/l2fwd-crypto: skip device not supporting operation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When a crypto device does not support an algorithm, it is skipped and not used. However, when it does support it, but not the rest of the parameters (IV, key, AAD sizes...), application stops. Instead, the device should be skipped and the search of a suitable device should continue. Fixes: a061e50a0d97 ("examples/l2fwd-crypto: fix ambiguous input key size") Cc: stable@dpdk.org Signed-off-by: Pablo de Lara --- examples/l2fwd-crypto/main.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index dc97a9b40..e334b9bd0 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -2070,7 +2070,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, options->aead_iv_param, options->aead_iv_random_size, &options->aead_iv.length) < 0) - return -1; + continue; /* * Check if length of provided AEAD key is supported @@ -2084,7 +2084,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.key_size.increment) != 0) { printf("Unsupported aead key length\n"); - return -1; + continue; } /* * Check if length of the aead key to be randomly generated @@ -2097,7 +2097,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.key_size.increment) != 0) { printf("Unsupported aead key length\n"); - return -1; + continue; } options->aead_xform.aead.key.length = options->aead_key_random_size; @@ -2122,7 +2122,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.aad_size.increment) != 0) { printf("Unsupported AAD length\n"); - return -1; + continue; } /* * Check if length of AAD to be randomly generated @@ -2135,7 +2135,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.aad_size.increment) != 0) { printf("Unsupported AAD length\n"); - return -1; + continue; } options->aad.length = options->aad_random_size; /* No size provided, use minimum size. */ @@ -2153,7 +2153,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.digest_size.increment) != 0) { printf("Unsupported digest length\n"); - return -1; + continue; } options->aead_xform.aead.digest_length = options->digest_size; @@ -2179,7 +2179,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, options->cipher_iv_param, options->cipher_iv_random_size, &options->cipher_iv.length) < 0) - return -1; + continue; /* * Check if length of provided cipher key is supported @@ -2193,7 +2193,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.cipher.key_size.increment) != 0) { printf("Unsupported cipher key length\n"); - return -1; + continue; } /* * Check if length of the cipher key to be randomly generated @@ -2206,7 +2206,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.cipher.key_size.increment) != 0) { printf("Unsupported cipher key length\n"); - return -1; + continue; } options->cipher_xform.cipher.key.length = options->ckey_random_size; @@ -2236,7 +2236,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, options->auth_iv_param, options->auth_iv_random_size, &options->auth_iv.length) < 0) - return -1; + continue; /* * Check if length of provided auth key is supported * by the algorithm chosen. @@ -2249,7 +2249,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.auth.key_size.increment) != 0) { printf("Unsupported auth key length\n"); - return -1; + continue; } /* * Check if length of the auth key to be randomly generated @@ -2262,7 +2262,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.auth.key_size.increment) != 0) { printf("Unsupported auth key length\n"); - return -1; + continue; } options->auth_xform.auth.key.length = options->akey_random_size; @@ -2284,7 +2284,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.auth.digest_size.increment) != 0) { printf("Unsupported digest length\n"); - return -1; + continue; } options->auth_xform.auth.digest_length = options->digest_size; From patchwork Thu Jul 19 08:39:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "De Lara Guarch, Pablo" X-Patchwork-Id: 43214 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1F6FD5F29; Thu, 19 Jul 2018 18:47:09 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 4A7F0160 for ; Thu, 19 Jul 2018 18:47:00 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 09:46:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,375,1526367600"; d="scan'208";a="247109925" Received: from silpixa00399466.ir.intel.com (HELO silpixa00399466.ger.corp.intel.com) ([10.237.223.220]) by fmsmga006.fm.intel.com with ESMTP; 19 Jul 2018 09:46:12 -0700 From: Pablo de Lara To: declan.doherty@intel.com, fiona.trahe@intel.com Cc: dev@dpdk.org, Pablo de Lara Date: Thu, 19 Jul 2018 09:39:57 +0100 Message-Id: <20180719083959.41480-4-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> References: <20180717103815.26841-1-pablo.de.lara.guarch@intel.com> <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> Subject: [dpdk-dev] [PATCH v2 3/5] examples/l2fwd-crypto: separate IV check from xform setting X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" IV_param_check() function was checking if the IV size provided was supported by device and setting the IV size in the xform structure. Instead of this, the function should only do the parameter check and outside the IV size on the xform is set. Signed-off-by: Pablo de Lara --- examples/l2fwd-crypto/main.c | 63 +++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index e334b9bd0..15f6b856f 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -1931,21 +1931,19 @@ check_supported_size(uint16_t length, uint16_t min, uint16_t max, static int check_iv_param(const struct rte_crypto_param_range *iv_range_size, unsigned int iv_param, int iv_random_size, - uint16_t *iv_length) + uint16_t iv_length) { /* * Check if length of provided IV is supported * by the algorithm chosen. */ if (iv_param) { - if (check_supported_size(*iv_length, + if (check_supported_size(iv_length, iv_range_size->min, iv_range_size->max, iv_range_size->increment) - != 0) { - printf("Unsupported IV length\n"); + != 0) return -1; - } /* * Check if length of IV to be randomly generated * is supported by the algorithm chosen. @@ -1955,14 +1953,9 @@ check_iv_param(const struct rte_crypto_param_range *iv_range_size, iv_range_size->min, iv_range_size->max, iv_range_size->increment) - != 0) { - printf("Unsupported IV length\n"); + != 0) return -1; - } - *iv_length = iv_random_size; - /* No size provided, use minimum size. */ - } else - *iv_length = iv_range_size->min; + } return 0; } @@ -2069,8 +2062,21 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, if (check_iv_param(&cap->sym.aead.iv_size, options->aead_iv_param, options->aead_iv_random_size, - &options->aead_iv.length) < 0) + options->aead_iv.length) < 0) { + printf("Unsupported IV length\n"); continue; + } + + /* Set IV if not provided from command line */ + if (options->aead_iv_param == 0) { + if (options->aead_iv_random_size != -1) + options->aead_iv.length = + options->aead_iv_random_size; + /* No size provided, use minimum size. */ + else + options->aead_iv.length = + cap->sym.aead.iv_size.min; + } /* * Check if length of provided AEAD key is supported @@ -2178,8 +2184,21 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, if (check_iv_param(&cap->sym.cipher.iv_size, options->cipher_iv_param, options->cipher_iv_random_size, - &options->cipher_iv.length) < 0) + options->cipher_iv.length) < 0) { + printf("Unsupported IV length\n"); continue; + } + + /* Set IV if not provided from command line */ + if (options->cipher_iv_param == 0) { + if (options->cipher_iv_random_size != -1) + options->cipher_iv.length = + options->cipher_iv_random_size; + /* No size provided, use minimum size. */ + else + options->cipher_iv.length = + cap->sym.cipher.iv_size.min; + } /* * Check if length of provided cipher key is supported @@ -2235,8 +2254,22 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, if (check_iv_param(&cap->sym.auth.iv_size, options->auth_iv_param, options->auth_iv_random_size, - &options->auth_iv.length) < 0) + options->auth_iv.length) < 0) { + printf("Unsupported IV length\n"); continue; + } + + /* Set IV if not provided from command line */ + if (options->auth_iv_param == 0) { + if (options->auth_iv_random_size != -1) + options->auth_iv.length = + options->auth_iv_random_size; + /* No size provided, use minimum size. */ + else + options->auth_iv.length = + cap->sym.auth.iv_size.min; + } + /* * Check if length of provided auth key is supported * by the algorithm chosen. From patchwork Thu Jul 19 08:39:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "De Lara Guarch, Pablo" X-Patchwork-Id: 43211 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DBFF05B34; Thu, 19 Jul 2018 18:47:02 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 755775B12 for ; Thu, 19 Jul 2018 18:46:59 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 09:46:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,375,1526367600"; d="scan'208";a="247109927" Received: from silpixa00399466.ir.intel.com (HELO silpixa00399466.ger.corp.intel.com) ([10.237.223.220]) by fmsmga006.fm.intel.com with ESMTP; 19 Jul 2018 09:46:13 -0700 From: Pablo de Lara To: declan.doherty@intel.com, fiona.trahe@intel.com Cc: dev@dpdk.org, Pablo de Lara Date: Thu, 19 Jul 2018 09:39:58 +0100 Message-Id: <20180719083959.41480-5-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> References: <20180717103815.26841-1-pablo.de.lara.guarch@intel.com> <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> Subject: [dpdk-dev] [PATCH v2 4/5] examples/l2fwd-crypto: fix session mempool size X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The session mempool size for this application depends on the number of crypto devices that are capable of performing the operation given by the parameters on the app. However, previously this calculation was done before all devices were checked, resulting in an incorrect number of sessions required. Now the calculation of the devices to be used is done first (checking the capabilities of the enabled devices), followed by the creation of the session pool, resulting in a correct number of objects needed for the sessions to be created. Fixes: e3bcb99a5e13 ("examples/l2fwd-crypto: limit number of sessions") Signed-off-by: Pablo de Lara Acked-by: Fiona Trahe --- examples/l2fwd-crypto/main.c | 272 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 260 insertions(+), 12 deletions(-) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index 15f6b856f..273c852f1 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -1960,11 +1960,252 @@ check_iv_param(const struct rte_crypto_param_range *iv_range_size, return 0; } +static int +check_capabilities(struct l2fwd_crypto_options *options, uint8_t cdev_id) +{ + struct rte_cryptodev_info dev_info; + const struct rte_cryptodev_capabilities *cap; + + rte_cryptodev_info_get(cdev_id, &dev_info); + + /* Set AEAD parameters */ + if (options->xform_chain == L2FWD_CRYPTO_AEAD) { + /* Check if device supports AEAD algo */ + cap = check_device_support_aead_algo(options, &dev_info, + cdev_id); + if (cap == NULL) + return -1; + + if (check_iv_param(&cap->sym.aead.iv_size, + options->aead_iv_param, + options->aead_iv_random_size, + options->aead_iv.length) != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support IV length\n", + cdev_id); + return -1; + } + + /* + * Check if length of provided AEAD key is supported + * by the algorithm chosen. + */ + if (options->aead_key_param) { + if (check_supported_size( + options->aead_xform.aead.key.length, + cap->sym.aead.key_size.min, + cap->sym.aead.key_size.max, + cap->sym.aead.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "AEAD key length\n", + cdev_id); + return -1; + } + /* + * Check if length of the aead key to be randomly generated + * is supported by the algorithm chosen. + */ + } else if (options->aead_key_random_size != -1) { + if (check_supported_size(options->aead_key_random_size, + cap->sym.aead.key_size.min, + cap->sym.aead.key_size.max, + cap->sym.aead.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "AEAD key length\n", + cdev_id); + return -1; + } + } + + + /* + * Check if length of provided AAD is supported + * by the algorithm chosen. + */ + if (options->aad_param) { + if (check_supported_size(options->aad.length, + cap->sym.aead.aad_size.min, + cap->sym.aead.aad_size.max, + cap->sym.aead.aad_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "AAD length\n", + cdev_id); + return -1; + } + /* + * Check if length of AAD to be randomly generated + * is supported by the algorithm chosen. + */ + } else if (options->aad_random_size != -1) { + if (check_supported_size(options->aad_random_size, + cap->sym.aead.aad_size.min, + cap->sym.aead.aad_size.max, + cap->sym.aead.aad_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "AAD length\n", + cdev_id); + return -1; + } + } + + /* Check if digest size is supported by the algorithm. */ + if (options->digest_size != -1) { + if (check_supported_size(options->digest_size, + cap->sym.aead.digest_size.min, + cap->sym.aead.digest_size.max, + cap->sym.aead.digest_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "digest length\n", + cdev_id); + return -1; + } + } + } + + /* Set cipher parameters */ + if (options->xform_chain == L2FWD_CRYPTO_CIPHER_HASH || + options->xform_chain == L2FWD_CRYPTO_HASH_CIPHER || + options->xform_chain == L2FWD_CRYPTO_CIPHER_ONLY) { + /* Check if device supports cipher algo */ + cap = check_device_support_cipher_algo(options, &dev_info, + cdev_id); + if (cap == NULL) + return -1; + + if (check_iv_param(&cap->sym.cipher.iv_size, + options->cipher_iv_param, + options->cipher_iv_random_size, + options->cipher_iv.length) != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support IV length\n", + cdev_id); + return -1; + } + + /* + * Check if length of provided cipher key is supported + * by the algorithm chosen. + */ + if (options->ckey_param) { + if (check_supported_size( + options->cipher_xform.cipher.key.length, + cap->sym.cipher.key_size.min, + cap->sym.cipher.key_size.max, + cap->sym.cipher.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support cipher " + "key length\n", + cdev_id); + return -1; + } + /* + * Check if length of the cipher key to be randomly generated + * is supported by the algorithm chosen. + */ + } else if (options->ckey_random_size != -1) { + if (check_supported_size(options->ckey_random_size, + cap->sym.cipher.key_size.min, + cap->sym.cipher.key_size.max, + cap->sym.cipher.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support cipher " + "key length\n", + cdev_id); + return -1; + } + } + } + + /* Set auth parameters */ + if (options->xform_chain == L2FWD_CRYPTO_CIPHER_HASH || + options->xform_chain == L2FWD_CRYPTO_HASH_CIPHER || + options->xform_chain == L2FWD_CRYPTO_HASH_ONLY) { + /* Check if device supports auth algo */ + cap = check_device_support_auth_algo(options, &dev_info, + cdev_id); + if (cap == NULL) + return -1; + + if (check_iv_param(&cap->sym.auth.iv_size, + options->auth_iv_param, + options->auth_iv_random_size, + options->auth_iv.length) != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support IV length\n", + cdev_id); + return -1; + } + /* + * Check if length of provided auth key is supported + * by the algorithm chosen. + */ + if (options->akey_param) { + if (check_supported_size( + options->auth_xform.auth.key.length, + cap->sym.auth.key_size.min, + cap->sym.auth.key_size.max, + cap->sym.auth.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support auth " + "key length\n", + cdev_id); + return -1; + } + /* + * Check if length of the auth key to be randomly generated + * is supported by the algorithm chosen. + */ + } else if (options->akey_random_size != -1) { + if (check_supported_size(options->akey_random_size, + cap->sym.auth.key_size.min, + cap->sym.auth.key_size.max, + cap->sym.auth.key_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support auth " + "key length\n", + cdev_id); + return -1; + } + } + + /* Check if digest size is supported by the algorithm. */ + if (options->digest_size != -1) { + if (check_supported_size(options->digest_size, + cap->sym.auth.digest_size.min, + cap->sym.auth.digest_size.max, + cap->sym.auth.digest_size.increment) + != 0) { + RTE_LOG(DEBUG, USER1, + "Device %u does not support " + "digest length\n", + cdev_id); + return -1; + } + } + } + + return 0; +} + static int initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, uint8_t *enabled_cdevs) { - unsigned int cdev_id, cdev_count, enabled_cdev_count = 0; + uint8_t cdev_id, cdev_count, enabled_cdev_count = 0; const struct rte_cryptodev_capabilities *cap; unsigned int sess_sz, max_sess_sz = 0; uint32_t sessions_needed = 0; @@ -1976,16 +2217,31 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, return -1; } - for (cdev_id = 0; cdev_id < cdev_count; cdev_id++) { + for (cdev_id = 0; cdev_id < cdev_count && enabled_cdev_count < nb_ports; + cdev_id++) { sess_sz = rte_cryptodev_sym_get_private_session_size(cdev_id); if (sess_sz > max_sess_sz) max_sess_sz = sess_sz; + + if (check_cryptodev_mask(options, cdev_id) < 0) + continue; + + if (check_capabilities(options, cdev_id) < 0) + continue; + + l2fwd_enabled_crypto_mask |= (((uint64_t)1) << cdev_id); + + enabled_cdevs[cdev_id] = 1; + enabled_cdev_count++; } - for (cdev_id = 0; cdev_id < cdev_count && enabled_cdev_count < nb_ports; - cdev_id++) { + for (cdev_id = 0; cdev_id < cdev_count; cdev_id++) { struct rte_cryptodev_qp_conf qp_conf; struct rte_cryptodev_info dev_info; + + if (enabled_cdevs[cdev_id] == 0) + continue; + retval = rte_cryptodev_socket_id(cdev_id); if (retval < 0) { @@ -2000,9 +2256,6 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, .socket_id = socket_id, }; - if (check_cryptodev_mask(options, (uint8_t)cdev_id)) - continue; - rte_cryptodev_info_get(cdev_id, &dev_info); /* @@ -2349,11 +2602,6 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cdev_id, retval); return -1; } - - l2fwd_enabled_crypto_mask |= (((uint64_t)1) << cdev_id); - - enabled_cdevs[cdev_id] = 1; - enabled_cdev_count++; } return enabled_cdev_count; From patchwork Thu Jul 19 08:39:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "De Lara Guarch, Pablo" X-Patchwork-Id: 43212 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EEDDC5B3A; Thu, 19 Jul 2018 18:47:04 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 657DC160 for ; Thu, 19 Jul 2018 18:46:59 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 09:46:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,375,1526367600"; d="scan'208";a="247109929" Received: from silpixa00399466.ir.intel.com (HELO silpixa00399466.ger.corp.intel.com) ([10.237.223.220]) by fmsmga006.fm.intel.com with ESMTP; 19 Jul 2018 09:46:15 -0700 From: Pablo de Lara To: declan.doherty@intel.com, fiona.trahe@intel.com Cc: dev@dpdk.org, Pablo de Lara Date: Thu, 19 Jul 2018 09:39:59 +0100 Message-Id: <20180719083959.41480-6-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> References: <20180717103815.26841-1-pablo.de.lara.guarch@intel.com> <20180719083959.41480-1-pablo.de.lara.guarch@intel.com> Subject: [dpdk-dev] [PATCH v2 5/5] examples/l2fwd-crypto: remove duplicated capability check X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Now that device capabilities are checked separately, before setting the xform parameters, it is not required to do the check again, leaving only the xform setting with the device configuration. Signed-off-by: Pablo de Lara --- examples/l2fwd-crypto/main.c | 233 +++++++++---------------------------------- 1 file changed, 45 insertions(+), 188 deletions(-) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index 273c852f1..ef3302545 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -2304,22 +2304,11 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, /* Set AEAD parameters */ if (options->xform_chain == L2FWD_CRYPTO_AEAD) { - /* Check if device supports AEAD algo */ cap = check_device_support_aead_algo(options, &dev_info, cdev_id); - if (cap == NULL) - continue; options->block_size = cap->sym.aead.block_size; - if (check_iv_param(&cap->sym.aead.iv_size, - options->aead_iv_param, - options->aead_iv_random_size, - options->aead_iv.length) < 0) { - printf("Unsupported IV length\n"); - continue; - } - /* Set IV if not provided from command line */ if (options->aead_iv_param == 0) { if (options->aead_iv_random_size != -1) @@ -2331,93 +2320,41 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.aead.iv_size.min; } - /* - * Check if length of provided AEAD key is supported - * by the algorithm chosen. - */ - if (options->aead_key_param) { - if (check_supported_size( - options->aead_xform.aead.key.length, - cap->sym.aead.key_size.min, - cap->sym.aead.key_size.max, - cap->sym.aead.key_size.increment) - != 0) { - printf("Unsupported aead key length\n"); - continue; - } - /* - * Check if length of the aead key to be randomly generated - * is supported by the algorithm chosen. - */ - } else if (options->aead_key_random_size != -1) { - if (check_supported_size(options->aead_key_random_size, - cap->sym.aead.key_size.min, - cap->sym.aead.key_size.max, - cap->sym.aead.key_size.increment) - != 0) { - printf("Unsupported aead key length\n"); - continue; - } - options->aead_xform.aead.key.length = - options->aead_key_random_size; - /* No size provided, use minimum size. */ - } else - options->aead_xform.aead.key.length = + /* Set key if not provided from command line */ + if (options->aead_key_param == 0) { + if (options->aead_key_random_size != -1) + options->aead_xform.aead.key.length = + options->aead_key_random_size; + /* No size provided, use minimum size. */ + else + options->aead_xform.aead.key.length = cap->sym.aead.key_size.min; - if (!options->aead_key_param) generate_random_key( options->aead_xform.aead.key.data, options->aead_xform.aead.key.length); + } - /* - * Check if length of provided AAD is supported - * by the algorithm chosen. - */ - if (options->aad_param) { - if (check_supported_size(options->aad.length, - cap->sym.aead.aad_size.min, - cap->sym.aead.aad_size.max, - cap->sym.aead.aad_size.increment) - != 0) { - printf("Unsupported AAD length\n"); - continue; - } - /* - * Check if length of AAD to be randomly generated - * is supported by the algorithm chosen. - */ - } else if (options->aad_random_size != -1) { - if (check_supported_size(options->aad_random_size, - cap->sym.aead.aad_size.min, - cap->sym.aead.aad_size.max, - cap->sym.aead.aad_size.increment) - != 0) { - printf("Unsupported AAD length\n"); - continue; - } - options->aad.length = options->aad_random_size; - /* No size provided, use minimum size. */ - } else - options->aad.length = cap->sym.auth.aad_size.min; + /* Set AAD if not provided from command line */ + if (options->aad_param == 0) { + if (options->aad_random_size != -1) + options->aad.length = + options->aad_random_size; + /* No size provided, use minimum size. */ + else + options->aad.length = + cap->sym.auth.aad_size.min; + } options->aead_xform.aead.aad_length = options->aad.length; - /* Check if digest size is supported by the algorithm. */ - if (options->digest_size != -1) { - if (check_supported_size(options->digest_size, - cap->sym.aead.digest_size.min, - cap->sym.aead.digest_size.max, - cap->sym.aead.digest_size.increment) - != 0) { - printf("Unsupported digest length\n"); - continue; - } + /* Set digest size if not provided from command line */ + if (options->digest_size != -1) options->aead_xform.aead.digest_length = options->digest_size; - /* No size provided, use minimum size. */ - } else + /* No size provided, use minimum size. */ + else options->aead_xform.aead.digest_length = cap->sym.aead.digest_size.min; } @@ -2426,22 +2363,10 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, if (options->xform_chain == L2FWD_CRYPTO_CIPHER_HASH || options->xform_chain == L2FWD_CRYPTO_HASH_CIPHER || options->xform_chain == L2FWD_CRYPTO_CIPHER_ONLY) { - /* Check if device supports cipher algo */ cap = check_device_support_cipher_algo(options, &dev_info, cdev_id); - if (cap == NULL) - continue; - options->block_size = cap->sym.cipher.block_size; - if (check_iv_param(&cap->sym.cipher.iv_size, - options->cipher_iv_param, - options->cipher_iv_random_size, - options->cipher_iv.length) < 0) { - printf("Unsupported IV length\n"); - continue; - } - /* Set IV if not provided from command line */ if (options->cipher_iv_param == 0) { if (options->cipher_iv_random_size != -1) @@ -2453,64 +2378,28 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.cipher.iv_size.min; } - /* - * Check if length of provided cipher key is supported - * by the algorithm chosen. - */ - if (options->ckey_param) { - if (check_supported_size( - options->cipher_xform.cipher.key.length, - cap->sym.cipher.key_size.min, - cap->sym.cipher.key_size.max, - cap->sym.cipher.key_size.increment) - != 0) { - printf("Unsupported cipher key length\n"); - continue; - } - /* - * Check if length of the cipher key to be randomly generated - * is supported by the algorithm chosen. - */ - } else if (options->ckey_random_size != -1) { - if (check_supported_size(options->ckey_random_size, - cap->sym.cipher.key_size.min, - cap->sym.cipher.key_size.max, - cap->sym.cipher.key_size.increment) - != 0) { - printf("Unsupported cipher key length\n"); - continue; - } - options->cipher_xform.cipher.key.length = - options->ckey_random_size; - /* No size provided, use minimum size. */ - } else - options->cipher_xform.cipher.key.length = + /* Set key if not provided from command line */ + if (options->ckey_param == 0) { + if (options->ckey_random_size != -1) + options->cipher_xform.cipher.key.length = + options->ckey_random_size; + /* No size provided, use minimum size. */ + else + options->cipher_xform.cipher.key.length = cap->sym.cipher.key_size.min; - if (!options->ckey_param) generate_random_key( options->cipher_xform.cipher.key.data, options->cipher_xform.cipher.key.length); - + } } /* Set auth parameters */ if (options->xform_chain == L2FWD_CRYPTO_CIPHER_HASH || options->xform_chain == L2FWD_CRYPTO_HASH_CIPHER || options->xform_chain == L2FWD_CRYPTO_HASH_ONLY) { - /* Check if device supports auth algo */ cap = check_device_support_auth_algo(options, &dev_info, cdev_id); - if (cap == NULL) - continue; - - if (check_iv_param(&cap->sym.auth.iv_size, - options->auth_iv_param, - options->auth_iv_random_size, - options->auth_iv.length) < 0) { - printf("Unsupported IV length\n"); - continue; - } /* Set IV if not provided from command line */ if (options->auth_iv_param == 0) { @@ -2523,59 +2412,27 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, cap->sym.auth.iv_size.min; } - /* - * Check if length of provided auth key is supported - * by the algorithm chosen. - */ - if (options->akey_param) { - if (check_supported_size( - options->auth_xform.auth.key.length, - cap->sym.auth.key_size.min, - cap->sym.auth.key_size.max, - cap->sym.auth.key_size.increment) - != 0) { - printf("Unsupported auth key length\n"); - continue; - } - /* - * Check if length of the auth key to be randomly generated - * is supported by the algorithm chosen. - */ - } else if (options->akey_random_size != -1) { - if (check_supported_size(options->akey_random_size, - cap->sym.auth.key_size.min, - cap->sym.auth.key_size.max, - cap->sym.auth.key_size.increment) - != 0) { - printf("Unsupported auth key length\n"); - continue; - } - options->auth_xform.auth.key.length = - options->akey_random_size; - /* No size provided, use minimum size. */ - } else - options->auth_xform.auth.key.length = + /* Set key if not provided from command line */ + if (options->akey_param == 0) { + if (options->akey_random_size != -1) + options->auth_xform.auth.key.length = + options->akey_random_size; + /* No size provided, use minimum size. */ + else + options->auth_xform.auth.key.length = cap->sym.auth.key_size.min; - if (!options->akey_param) generate_random_key( options->auth_xform.auth.key.data, options->auth_xform.auth.key.length); + } - /* Check if digest size is supported by the algorithm. */ - if (options->digest_size != -1) { - if (check_supported_size(options->digest_size, - cap->sym.auth.digest_size.min, - cap->sym.auth.digest_size.max, - cap->sym.auth.digest_size.increment) - != 0) { - printf("Unsupported digest length\n"); - continue; - } + /* Set digest size if not provided from command line */ + if (options->digest_size != -1) options->auth_xform.auth.digest_length = options->digest_size; - /* No size provided, use minimum size. */ - } else + /* No size provided, use minimum size. */ + else options->auth_xform.auth.digest_length = cap->sym.auth.digest_size.min; }