[dpdk-dev,v2,1/2] cryptodev: add user defined name initializing parameter to software PMD
Checks
Commit Message
This patch adds a user defined name initializing parameter to cryptodev
library.
Originally, for software cryptodev PMD, the vdev name parameter is
treated as the driver identifier, and will create an unique name for each
device automatically, which is not necessarily as same as the vdev
parameter.
This patch allows the user to either create a unique name for his software
cryptodev, or by default, let the system creates a unique one. This should
help the user managing the created cryptodevs easily.
Examples:
CLI command fragment 1: --vdev "crypto_aesni_gcm_pmd"
The above command will result in creating a AESNI-GCM PMD with name of
"crypto_aesni_gcm_X", where postfix X is the number assigned by the system,
starting from 0. This fragment can be placed in the same CLI command
multiple times, resulting the postfixs incremented by one for each new
device.
CLI command fragment 2: --vdev "crypto_aesni_gcm_pmd,name=gcm1"
The above command will result in creating a AESNI-GCM PMD with name of
"gcm1". This fragment can be placed in the same CLI command multiple
times, as long as each having a unique name value.
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
lib/librte_cryptodev/rte_cryptodev.c | 44 ++++++++++++++++++++++++++
lib/librte_cryptodev/rte_cryptodev.h | 7 ++--
lib/librte_cryptodev/rte_cryptodev_pmd.h | 7 ++++
lib/librte_cryptodev/rte_cryptodev_version.map | 7 ++++
4 files changed, 61 insertions(+), 4 deletions(-)
Comments
This patchset adds a user defined name initializing parameter to all
software cryptodevs.
v3:
Added name parameter length check
v2:
Fixed a line adds whitespace error
Updated rte_cryptodev_version.map
Fan Zhang (2):
cryptodev: add user defined name initializing parameter to software
PMD
crypto: add user defined name initializing parameter parsing to
software PMDs
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 58 +++++++++---------------
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 +++++++++-----------------
drivers/crypto/kasumi/rte_kasumi_pmd.c | 58 ++++++++++--------------
drivers/crypto/null/null_crypto_pmd.c | 55 +++++++++--------------
drivers/crypto/openssl/rte_openssl_pmd.c | 55 +++++++++--------------
drivers/crypto/snow3g/rte_snow3g_pmd.c | 59 ++++++++++---------------
drivers/crypto/zuc/rte_zuc_pmd.c | 59 ++++++++++---------------
lib/librte_cryptodev/rte_cryptodev.c | 51 +++++++++++++++++++++
lib/librte_cryptodev/rte_cryptodev.h | 7 ++-
lib/librte_cryptodev/rte_cryptodev_pmd.h | 7 +++
lib/librte_cryptodev/rte_cryptodev_version.map | 7 +++
11 files changed, 216 insertions(+), 261 deletions(-)
> -----Original Message-----
> From: Zhang, Roy Fan
> Sent: Monday, January 16, 2017 2:15 PM
> To: dev@dpdk.org
> Cc: De Lara Guarch, Pablo
> Subject: [PATCH v3 0/2] crypto: add user defined name initializing
> parameter
>
> This patchset adds a user defined name initializing parameter to all
> software cryptodevs.
>
> v3:
> Added name parameter length check
>
> v2:
> Fixed a line adds whitespace error
> Updated rte_cryptodev_version.map
>
> Fan Zhang (2):
> cryptodev: add user defined name initializing parameter to software
> PMD
> crypto: add user defined name initializing parameter parsing to
> software PMDs
>
> drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 58 +++++++++-------------
> --
> drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 61 +++++++++-----------
> ------
> drivers/crypto/kasumi/rte_kasumi_pmd.c | 58 ++++++++++--------------
> drivers/crypto/null/null_crypto_pmd.c | 55 +++++++++--------------
> drivers/crypto/openssl/rte_openssl_pmd.c | 55 +++++++++--------------
> drivers/crypto/snow3g/rte_snow3g_pmd.c | 59 ++++++++++------------
> ---
> drivers/crypto/zuc/rte_zuc_pmd.c | 59 ++++++++++---------------
> lib/librte_cryptodev/rte_cryptodev.c | 51 +++++++++++++++++++++
> lib/librte_cryptodev/rte_cryptodev.h | 7 ++-
> lib/librte_cryptodev/rte_cryptodev_pmd.h | 7 +++
> lib/librte_cryptodev/rte_cryptodev_version.map | 7 +++
> 11 files changed, 216 insertions(+), 261 deletions(-)
>
> --
> 2.7.4
Combined both patches to avoid compilation breakage.
Applied to dpdk-next-crypto.
Thanks,
Pablo
@@ -101,11 +101,13 @@ struct rte_cryptodev_callback {
uint32_t active; /**< Callback is executing */
};
+#define RTE_CRYPTODEV_VDEV_NAME ("name")
#define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG ("max_nb_queue_pairs")
#define RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG ("max_nb_sessions")
#define RTE_CRYPTODEV_VDEV_SOCKET_ID ("socket_id")
static const char *cryptodev_vdev_valid_params[] = {
+ RTE_CRYPTODEV_VDEV_NAME,
RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
RTE_CRYPTODEV_VDEV_SOCKET_ID
@@ -143,6 +145,18 @@ parse_integer_arg(const char *key __rte_unused,
return 0;
}
+/** Parse name */
+static int
+parse_name_arg(const char *key __rte_unused,
+ const char *value, void *extra_args)
+{
+ struct rte_crypto_vdev_init_params *params = extra_args;
+
+ strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
+
+ return 0;
+}
+
int
rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
const char *input_args)
@@ -179,6 +193,12 @@ rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
if (ret < 0)
goto free_kvlist;
+ ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
+ &parse_name_arg,
+ params);
+ if (ret < 0)
+ goto free_kvlist;
+
if (params->socket_id >= number_of_sockets()) {
CDEV_LOG_ERR("Invalid socket id specified to create "
"the virtual crypto device on");
@@ -1205,3 +1225,27 @@ rte_crypto_op_pool_create(const char *name, enum rte_crypto_op_type type,
return mp;
}
+
+int
+rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix)
+{
+ struct rte_cryptodev *dev = NULL;
+ uint32_t i = 0;
+
+ if (name == NULL)
+ return -EINVAL;
+
+ for (i = 0; i < RTE_CRYPTO_MAX_DEVS; i++) {
+ int ret = snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN,
+ "%s_%u", dev_name_prefix, i);
+
+ if (ret < 0)
+ return ret;
+
+ dev = rte_cryptodev_pmd_get_named_dev(name);
+ if (!dev)
+ return 0;
+ }
+
+ return -1;
+}
@@ -300,6 +300,8 @@ struct rte_cryptodev_stats {
/**< Total error count on operations dequeued */
};
+#define RTE_CRYPTODEV_NAME_MAX_LEN (64)
+/**< Max length of name of crypto PMD */
#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS 8
#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS 2048
@@ -311,6 +313,7 @@ struct rte_crypto_vdev_init_params {
unsigned max_nb_queue_pairs;
unsigned max_nb_sessions;
uint8_t socket_id;
+ char name[RTE_CRYPTODEV_NAME_MAX_LEN];
};
/**
@@ -635,10 +638,6 @@ struct rte_cryptodev {
/**< Flag indicating the device is attached */
} __rte_cache_aligned;
-
-#define RTE_CRYPTODEV_NAME_MAX_LEN (64)
-/**< Max length of name of crypto PMD */
-
/**
*
* The data part, with no function pointers, associated with each device.
@@ -519,6 +519,13 @@ int rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv,
*/
int rte_cryptodev_pci_remove(struct rte_pci_device *pci_dev);
+/**
+ * @internal
+ * Create unique device name
+ */
+int
+rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix);
+
#ifdef __cplusplus
}
#endif
@@ -46,3 +46,10 @@ DPDK_16.11 {
rte_cryptodev_pci_remove;
} DPDK_16.07;
+
+DPDK_17.02 {
+ global:
+
+ rte_cryptodev_pmd_create_dev_name;
+
+} DPDK_16.11;