[dpdk-dev] [PATCH v6 12/22] kvargs: add generic string matching callback

Shreyansh Jain shreyansh.jain at nxp.com
Fri Apr 13 16:49:16 CEST 2018


On Friday 13 April 2018 06:52 PM, Gaetan Rivet wrote:
> This function can be used as a callback to
> rte_kvargs_process.
> 
> This should reduce code duplication.
> 
> Signed-off-by: Gaetan Rivet <gaetan.rivet at 6wind.com>
> ---
>   lib/Makefile                             |  1 +
>   lib/librte_kvargs/rte_kvargs.c           | 10 ++++++++++
>   lib/librte_kvargs/rte_kvargs.h           | 28 ++++++++++++++++++++++++++++
>   lib/librte_kvargs/rte_kvargs_version.map |  7 +++++++
>   4 files changed, 46 insertions(+)
> 
> diff --git a/lib/Makefile b/lib/Makefile
> index 1b17526f7..4206485d3 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -5,6 +5,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
>   
>   DIRS-y += librte_compat
>   DIRS-$(CONFIG_RTE_LIBRTE_KVARGS) += librte_kvargs
> +DEPDIRS-librte_kvargs := librte_compat
>   DIRS-$(CONFIG_RTE_LIBRTE_EAL) += librte_eal
>   DEPDIRS-librte_eal := librte_kvargs
>   DIRS-$(CONFIG_RTE_LIBRTE_PCI) += librte_pci
> diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
> index 0a1abf579..6ee04cbb9 100644
> --- a/lib/librte_kvargs/rte_kvargs.c
> +++ b/lib/librte_kvargs/rte_kvargs.c
> @@ -180,3 +180,13 @@ rte_kvargs_parse(const char *args, const char * const valid_keys[])
>   
>   	return kvlist;
>   }
> +
> +__rte_experimental
> +int
> +rte_kvargs_strcmp(const char *key __rte_unused,
> +		  const char *value, void *opaque)
> +{
> +	const char *str = opaque;
> +
> +	return -strcmp(str, value);
> +}
> diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h
> index 51b8120b8..c07c6fea5 100644
> --- a/lib/librte_kvargs/rte_kvargs.h
> +++ b/lib/librte_kvargs/rte_kvargs.h
> @@ -25,6 +25,8 @@
>   extern "C" {
>   #endif
>   
> +#include <rte_compat.h>
> +
>   /** Maximum number of key/value associations */
>   #define RTE_KVARGS_MAX 32
>   
> @@ -121,6 +123,32 @@ int rte_kvargs_process(const struct rte_kvargs *kvlist,
>   unsigned rte_kvargs_count(const struct rte_kvargs *kvlist,
>   	const char *key_match);
>   
> +/**
> + * Generic kvarg handler for string comparison.
> + *
> + * This function can be used for a generic string comparison processing
> + * on a list of kvargs.
> + *
> + * @param key
> + *   kvarg pair key.
> + *
> + * @param value
> + *   kvarg pair value.
> + *
> + * @param opaque
> + *   Opaque pointer to a string.
> + *
> + * @return
> + *   0 if the strings match.
> + *   !0 otherwise or on error.
> + *
> + *   Unless strcmp, comparison ordering is not kept.
> + *   In order for rte_kvargs_process to stop processing on match error,
> + *   a negative value is returned even if strcmp had returned a positive one.

Is the above comment valid?

 > +	return -strcmp(str, value);

In case a negative is returned (when key opaque < value), this function 
would return a positive. So, effectively you have only reversed the 
values. Is that the expectation?

In 21/22:

--->8--- rte_kvargs_process ---
     for (i = 0; i < kvlist->count; i++) {
         pair = &kvlist->pairs[i];
         if (key_match == NULL || strcmp(pair->key, key_match) == 0) {
             if ((*handler)(pair->key, pair->value, opaque_arg) < 0)
                 return -1;
         }
     }
--->8---

This would only cause the opaque < value case to continue ahead but not 
the reverse.

> + */
> +__rte_experimental
> +int rte_kvargs_strcmp(const char *key, const char *value, void *opaque);
> +
>   #ifdef __cplusplus
>   }
>   #endif
> diff --git a/lib/librte_kvargs/rte_kvargs_version.map b/lib/librte_kvargs/rte_kvargs_version.map
> index 2030ec46c..e2f663a88 100644
> --- a/lib/librte_kvargs/rte_kvargs_version.map
> +++ b/lib/librte_kvargs/rte_kvargs_version.map
> @@ -8,3 +8,10 @@ DPDK_2.0 {
>   
>   	local: *;
>   };
> +
> +EXPERIMENTAL {
> +	global:
> +
> +	rte_kvargs_strcmp;
> +
> +} DPDK_2.0;
> 



More information about the dev mailing list