[dpdk-dev] [PATCH v3 1/2] cryptodev: add user defined name initializing parameter to software PMD

Declan Doherty declan.doherty at intel.com
Mon Jan 16 17:01:27 CET 2017


On 16/01/17 14:14, Fan Zhang wrote:
> 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 at intel.com>
> ---
>  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 ++++
>  4 files changed, 68 insertions(+), 4 deletions(-)
>
> diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
> index 127e8d0..d6d7f3d 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.c
> +++ b/lib/librte_cryptodev/rte_cryptodev.c
> @@ -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,25 @@ 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;
> +
> +	if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) {
> +		CDEV_LOG_ERR("Invalid name %s, should be less than "
> +				"%u bytes", value,
> +				RTE_CRYPTODEV_NAME_MAX_LEN - 1);
> +		return -1;
> +	}
> +
> +	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 +200,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 +1232,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;
> +}
> diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
> index 8f63e8f..b5399af 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.h
> +++ b/lib/librte_cryptodev/rte_cryptodev.h
> @@ -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.
> diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h
> index abfe2dc..dc57bfa 100644
> --- a/lib/librte_cryptodev/rte_cryptodev_pmd.h
> +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h
> @@ -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
> diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map
> index 9dde0e7..c581eea 100644
> --- a/lib/librte_cryptodev/rte_cryptodev_version.map
> +++ b/lib/librte_cryptodev/rte_cryptodev_version.map
> @@ -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;
>
Acked-by: Declan Doherty <declan.doherty at intel.com>


More information about the dev mailing list