#include <stdint.h>
Go to the source code of this file.
Functions |
struct rte_hash * | rte_hash_create (const struct rte_hash_parameters *params) |
struct rte_hash * | rte_hash_find_existing (const char *name) |
void | rte_hash_free (struct rte_hash *h) |
void | rte_hash_reset (struct rte_hash *h) |
int | rte_hash_add_key_data (const struct rte_hash *h, const void *key, void *data) |
int32_t | rte_hash_add_key_with_hash_data (const struct rte_hash *h, const void *key, hash_sig_t sig, void *data) |
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) |
int | rte_hash_lookup_data (const struct rte_hash *h, const void *key, void **data) |
int | rte_hash_lookup_with_hash_data (const struct rte_hash *h, const void *key, hash_sig_t sig, void **data) |
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) |
hash_sig_t | rte_hash_hash (const struct rte_hash *h, const void *key) |
int | rte_hash_lookup_bulk_data (const struct rte_hash *h, const void **keys, uint32_t num_keys, uint64_t *hit_mask, void *data[]) |
int | rte_hash_lookup_bulk (const struct rte_hash *h, const void **keys, uint32_t num_keys, int32_t *positions) |
int32_t | rte_hash_iterate (const struct rte_hash *h, const void **key, void **data, uint32_t *next) |
Detailed Description
RTE Hash Table
Definition in file rte_hash.h.
Macro Definition Documentation
#define RTE_HASH_ENTRIES_MAX (1 << 30) |
Maximum size of hash table that can be created.
Definition at line 50 of file rte_hash.h.
#define RTE_HASH_BUCKET_ENTRIES_MAX 4 |
#define RTE_HASH_KEY_LENGTH_MAX 64 |
#define RTE_HASH_NAMESIZE 32 |
Maximum number of characters in hash name.
Definition at line 59 of file rte_hash.h.
#define RTE_HASH_LOOKUP_BULK_MAX 64 |
Maximum number of keys that can be searched for using rte_hash_lookup_bulk.
Definition at line 62 of file rte_hash.h.
Typedef Documentation
Signature of key that is stored internally.
Definition at line 66 of file rte_hash.h.
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.
Definition at line 69 of file rte_hash.h.
Function Documentation
Create a new hash table.
- Parameters
-
params | Parameters 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
- 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
struct rte_hash* rte_hash_find_existing |
( |
const char * |
name | ) |
|
|
read |
Find an existing hash table object and return a pointer to it.
- Parameters
-
- 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
-
void rte_hash_reset |
( |
struct rte_hash * |
h | ) |
|
Reset all hash structure, by zeroing all entries
- Parameters
-
int rte_hash_add_key_data |
( |
const struct rte_hash * |
h, |
|
|
const void * |
key, |
|
|
void * |
data |
|
) |
| |
Add a key-value pair to an existing hash table. This operation is not multi-thread safe and should only be called from one thread.
- Parameters
-
h | Hash table to add the key to. |
key | Key to add to the hash table. |
data | Data to add to the hash table. |
- Returns
- 0 if added successfully
- -EINVAL if the parameters are invalid.
- -ENOSPC if there is no space in the hash for this key.
int32_t rte_hash_add_key_with_hash_data |
( |
const struct rte_hash * |
h, |
|
|
const void * |
key, |
|
|
hash_sig_t |
sig, |
|
|
void * |
data |
|
) |
| |
Add a key-value pair with a pre-computed hash value to an existing hash table. This operation is not multi-thread safe and should only be called from one thread.
- Parameters
-
h | Hash table to add the key to. |
key | Key to add to the hash table. |
sig | Precomputed hash value for 'key' |
data | Data to add to the hash table. |
- Returns
- 0 if added successfully
- -EINVAL if the parameters are invalid.
- -ENOSPC if there is no space in the hash for this key.
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
-
h | Hash table to add the key to. |
key | Key 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
-
h | Hash table to add the key to. |
key | Key to add to the hash table. |
sig | Precomputed hash value for 'key'. |
- 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_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
-
h | Hash table to remove the key from. |
key | Key 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
-
h | Hash table to remove the key from. |
key | Key to remove from the hash table. |
sig | Precomputed hash value for 'key'. |
- 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_data |
( |
const struct rte_hash * |
h, |
|
|
const void * |
key, |
|
|
void ** |
data |
|
) |
| |
Find a key-value pair in the hash table. This operation is multi-thread safe.
- Parameters
-
h | Hash table to look in. |
key | Key to find. |
data | Output with pointer to data returned from the hash table. |
- Returns
- 0 if successful lookup
- EINVAL if the parameters are invalid.
- ENOENT if the key is not found.
int rte_hash_lookup_with_hash_data |
( |
const struct rte_hash * |
h, |
|
|
const void * |
key, |
|
|
hash_sig_t |
sig, |
|
|
void ** |
data |
|
) |
| |
Find a key-value pair with a pre-computed hash value to an existing hash table. This operation is multi-thread safe.
- Parameters
-
h | Hash table to look in. |
key | Key to find. |
sig | Precomputed hash value for 'key' |
data | Output with pointer to data returned from the hash table. |
- Returns
- 0 if successful lookup
- EINVAL if the parameters are invalid.
- ENOENT if the key is not found.
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
-
h | Hash table to look in. |
key | Key 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.
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
-
h | Hash table to look in. |
key | Key to find. |
sig | Hash 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.
hash_sig_t rte_hash_hash |
( |
const struct rte_hash * |
h, |
|
|
const void * |
key |
|
) |
| |
Calc a hash value by key. This operation is not multi-thread safe.
- Parameters
-
h | Hash table to look in. |
key | Key to find. |
- Returns
-
int rte_hash_lookup_bulk_data |
( |
const struct rte_hash * |
h, |
|
|
const void ** |
keys, |
|
|
uint32_t |
num_keys, |
|
|
uint64_t * |
hit_mask, |
|
|
void * |
data[] |
|
) |
| |
Find multiple keys in the hash table. This operation is multi-thread safe.
- Parameters
-
h | Hash table to look in. |
keys | A pointer to a list of keys to look for. |
num_keys | How many keys are in the keys list (less than RTE_HASH_LOOKUP_BULK_MAX). |
hit_mask | Output containing a bitmask with all successful lookups. |
data | Output containing array of data returned from all the successful lookups. |
- Returns
- -EINVAL if there's an error, otherwise number of successful lookups.
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
-
h | Hash table to look in. |
keys | A pointer to a list of keys to look for. |
num_keys | How many keys are in the keys list (less than RTE_HASH_LOOKUP_BULK_MAX). |
positions | Output 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_iterate |
( |
const struct rte_hash * |
h, |
|
|
const void ** |
key, |
|
|
void ** |
data, |
|
|
uint32_t * |
next |
|
) |
| |
Iterate through the hash table, returning key-value pairs.
- Parameters
-
h | Hash table to iterate |
key | Output containing the key where current iterator was pointing at |
data | Output containing the data associated with key. Returns NULL if data was not stored. |
next | Pointer to iterator. Should be 0 to start iterating the hash table. Iterator is incremented after each call of this function. |
- Returns
- Position where key was stored, if successful.
- -EINVAL if the parameters are invalid.
- -ENOENT if end of the hash table.