Hi Morten,

Apologies for delayed response.
> Maybe a combination, returning the lowest end of the two versions of the list,
> would work...
> 
> ----------------------------------
> Common header file (rte_common.h):
> ----------------------------------
> 
> /* Add at end of enum list in the header file. */
> #define RTE_ENUM_LIST_END(name) \
> _ # name # _ENUM_LIST_END /**< @internal */
> 
> /* Add somewhere in header file, preferably after the enum list. */
> #define rte_declare_enum_list_end(name) \
> /** @internal */ \
> int _# name # _enum_list_end(void); \
> \
> static int name # _enum_list_end(void) \
> { \
>       static int cached = 0; \
> \
>       if (likely(cached != 0)) \
>               return cached; \
> \
>       return cached = RTE_MIN( \
>                       RTE_ENUM_LIST_END(name), \
>                       _ # name # _enum_list_end()); \
> } \
> \
> int _# name # _enum_list_end(void)
> 
> /* Add in the library/driver implementation. */
> #define rte_define_enum_list_end(name) \
> int _# name # _enum_list_end(void) \
> { \
>       return RTE_ENUM_LIST_END(name); \
> } \
> \
> int _# name # _enum_list_end(void)
> 
> --------------------
> Library header file:
> --------------------
> 
> enum rte_crypto_asym_op_type {
>       RTE_CRYPTO_ASYM_OP_VERIFY,
>       /**< Signature Verification operation */
>       RTE_ENUM_LIST_END(rte_crypto_asym_op)

Will the ABI check be ok for adding anything in between 
RTE_CRYPTO_ASYM_OP_VERIFY and RTE_ENUM_LIST_END(rte_crypto_asym_op)?
Don’t we need to add exception for that if we somehow make it internal by 
adding a comment only?
Library is actually not restricting the application to not use 
RTE_ENUM_LIST_END(rte_crypto_asym_op) directly.

Also we may need to expose the .c file internal function as experimental in 
version.map

> }
> 
> rte_declare_enum_list_end(rte_crypto_asym_op);
> 
> ---------------
> Library C file:
> ---------------
> 
> rte_define_enum_list_end(rte_crypto_asym_op);

If we want to make it a generic thing in rte_common.h
Will the below change be ok?
----------------------------------
Common header file (rte_common.h):
----------------------------------
#define rte_define_enum_list_end(name, last_value) \
static inline int name ## _enum_list_end(void) \
{ \
       return last_value + 1; \
}

----------------
Lib header file
----------------
//After the enum definition define the list end as below
rte_define_enum_list_end(rte_crypto_asym_op, RTE_CRYPTO_ASYM_OP_VERIFY);


And wherever list end is needed use rte_crypto_asym_op_enum_list_end()?

With this change, abi check will not complain for any new addition at the end 
of enum.
And we do not need to expose any internal API in version.map.




Reply via email to