DPDK  1.7.1
Data Structures | Macros | Typedefs | Functions
rte_hash.h File Reference
#include <stdint.h>
#include <sys/queue.h>

Data Structures

struct  rte_hash_parameters
struct  rte_hash

Macros

#define RTE_HASH_ENTRIES_MAX   (1 << 26)
#define RTE_HASH_BUCKET_ENTRIES_MAX   16
#define RTE_HASH_KEY_LENGTH_MAX   64
#define RTE_HASH_LOOKUP_BULK_MAX   16
#define RTE_HASH_NAMESIZE   32

Typedefs

typedef uint32_t hash_sig_t
typedef uint32_t(* rte_hash_function )(const void *key, uint32_t key_len, uint32_t init_val)

Functions

struct rte_hashrte_hash_create (const struct rte_hash_parameters *params)
struct rte_hashrte_hash_find_existing (const char *name)
void rte_hash_free (struct rte_hash *h)
int32_t rte_hash_add_key (const struct rte_hash *h, const void *key)
int32_t rte_hash_add_key_with_hash (const struct rte_hash *h, const void *key, hash_sig_t sig)
int32_t rte_hash_del_key (const struct rte_hash *h, const void *key)
int32_t rte_hash_del_key_with_hash (const struct rte_hash *h, const void *key, hash_sig_t sig)
int32_t rte_hash_lookup (const struct rte_hash *h, const void *key)
int32_t rte_hash_lookup_with_hash (const struct rte_hash *h, const void *key, hash_sig_t sig)
static hash_sig_t rte_hash_hash (const struct rte_hash *h, const void *key)
int rte_hash_lookup_bulk (const struct rte_hash *h, const void **keys, uint32_t num_keys, int32_t *positions)

Detailed Description

RTE Hash Table

Macro Definition Documentation

#define RTE_HASH_BUCKET_ENTRIES_MAX   16

Maximum bucket size that can be created.

#define RTE_HASH_ENTRIES_MAX   (1 << 26)

Maximum size of hash table that can be created.

#define RTE_HASH_KEY_LENGTH_MAX   64

Maximum length of key that can be used.

#define RTE_HASH_LOOKUP_BULK_MAX   16

Max number of keys that can be searched for using rte_hash_lookup_multi.

#define RTE_HASH_NAMESIZE   32

Max number of characters in hash name.

Typedef Documentation

typedef uint32_t hash_sig_t

Signature of key that is stored internally.

typedef uint32_t(* rte_hash_function)(const void *key, uint32_t key_len, uint32_t init_val)

Type of function that can be used for calculating the hash value.

Function Documentation

int32_t rte_hash_add_key ( const struct rte_hash h,
const void *  key 
)

Add a key to an existing hash table. This operation is not multi-thread safe and should only be called from one thread.

Parameters
hHash table to add the key to.
keyKey to add to the hash table.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOSPC if there is no space in the hash for this key.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key.
int32_t rte_hash_add_key_with_hash ( const struct rte_hash h,
const void *  key,
hash_sig_t  sig 
)

Add a key to an existing hash table. This operation is not multi-thread safe and should only be called from one thread.

Parameters
hHash table to add the key to.
keyKey to add to the hash table.
sigHash value to add to the hash table.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOSPC if there is no space in the hash for this key.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key.
struct rte_hash* rte_hash_create ( const struct rte_hash_parameters params)
read

Create a new hash table.

Parameters
paramsParameters used to create and initialise the hash table.
Returns
Pointer to hash table structure that is used in future hash table operations, or NULL on error, with error code set in rte_errno. Possible rte_errno errors include:
  • E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
  • E_RTE_SECONDARY - function was called from a secondary process instance
  • E_RTE_NO_TAILQ - no tailq list could be got for the hash table list
  • ENOENT - missing entry
  • EINVAL - invalid parameter passed to function
  • ENOSPC - the maximum number of memzones has already been allocated
  • EEXIST - a memzone with the same name already exists
  • ENOMEM - no appropriate memory area found in which to create memzone
int32_t rte_hash_del_key ( const struct rte_hash h,
const void *  key 
)

Remove a key from an existing hash table. This operation is not multi-thread safe and should only be called from one thread.

Parameters
hHash table to remove the key from.
keyKey to remove from the hash table.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOENT if the key is not found.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key, and is the same value that was returned when the key was added.
int32_t rte_hash_del_key_with_hash ( const struct rte_hash h,
const void *  key,
hash_sig_t  sig 
)

Remove a key from an existing hash table. This operation is not multi-thread safe and should only be called from one thread.

Parameters
hHash table to remove the key from.
keyKey to remove from the hash table.
sigHash value to remove from the hash table.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOENT if the key is not found.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key, and is the same value that was returned when the key was added.
struct rte_hash* rte_hash_find_existing ( const char *  name)
read

Find an existing hash table object and return a pointer to it.

Parameters
nameName of the hash table as passed to rte_hash_create()
Returns
Pointer to hash table or NULL if object not found with rte_errno set appropriately. Possible rte_errno values include:
  • ENOENT - value not available for return
void rte_hash_free ( struct rte_hash h)

De-allocate all memory used by hash table.

Parameters
hHash table to free
static hash_sig_t rte_hash_hash ( const struct rte_hash h,
const void *  key 
)
inlinestatic

Calc a hash value by key. This operation is not multi-process safe.

Parameters
hHash table to look in.
keyKey to find.
Returns
  • hash value
int32_t rte_hash_lookup ( const struct rte_hash h,
const void *  key 
)

Find a key in the hash table. This operation is multi-thread safe.

Parameters
hHash table to look in.
keyKey to find.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOENT if the key is not found.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key, and is the same value that was returned when the key was added.
int rte_hash_lookup_bulk ( const struct rte_hash h,
const void **  keys,
uint32_t  num_keys,
int32_t *  positions 
)

Find multiple keys in the hash table. This operation is multi-thread safe.

Parameters
hHash table to look in.
keysA pointer to a list of keys to look for.
num_keysHow many keys are in the keys list (less than RTE_HASH_LOOKUP_BULK_MAX).
positionsOutput containing a list of values, corresponding to the list of keys that can be used by the caller as an offset into an array of user data. These values are unique for each key, and are the same values that were returned when each key was added. If a key in the list was not found, then -ENOENT will be the value.
Returns
-EINVAL if there's an error, otherwise 0.
int32_t rte_hash_lookup_with_hash ( const struct rte_hash h,
const void *  key,
hash_sig_t  sig 
)

Find a key in the hash table. This operation is multi-thread safe.

Parameters
hHash table to look in.
keyKey to find.
sigHash value to find.
Returns
  • -EINVAL if the parameters are invalid.
  • -ENOENT if the key is not found.
  • A positive value that can be used by the caller as an offset into an array of user data. This value is unique for this key, and is the same value that was returned when the key was added.