On Wed, 28 Aug 2019 14:51:49 +0800
Bing Zhao <bi...@mellanox.com> wrote:

> +
> +/** Node element structure on the LIST of the link */
> +struct rte_hlist_node_entry {
> +     LIST_ENTRY(rte_hlist_node_entry) next;  /**< Next element pointer. */
> +     /**< Data element inside this noed. */
> +     struct rte_hlist_data_element d;
> +     char key[];                             /**< Copied and stored key. */
> +};
> +
> +/** Head of all the nodes with the same hash value */
> +struct rte_hlist_head_entry {
> +     LIST_HEAD(, rte_hlist_node_entry) head; /**< Head for each hash list. */
> +     /**< Current items in the list. */
> +     uint16_t entries_in_bucket;
> +     /**< Shift number for extension */
> +     uint16_t bucket_shift;
> +};
> +
> +/** The hlist table structure. */
> +struct rte_hlist_table {
> +     char name[RTE_HLIST_NAMESIZE];  /**< Name of the hash. */
> +     uint32_t entries;               /**< Total number of entries. */
> +     uint32_t entries_per_bucket;    /**< Number of entries in a list. */
> +     /**< Number of entries with data from customer. */
> +     uint32_t custom_entries;
> +     uint16_t key_len;               /**< Length of the key. */
> +     /**< Shift number of the whole table. */
> +     uint16_t bucket_shift;
> +     /**< To find which list the key is in. */
> +     uint32_t bucket_mask;
> +     rte_hlist_calc_fn hash_func;    /**< The hash function to calcuate. */
> +     /**< The function to free the custom data. */
> +     rte_hlist_free_fn free_func;
> +     uint32_t init_val;              /**< For initializing hash function. */
> +     /**< Reserved for fast shrinking of the table. */
> +     char *map;

You probably should use void * for that.

> +     /**< A flat and extendible table of all lists. */
> +     struct rte_hlist_head_entry *t;
> +};
> +

Since API/ABI considerations are important.
You will save yourself a lot of pain if these structures can be made
private and only part of rte_hlist.c.

Reply via email to