DPDK  2.0.0
Data Structures | Macros | Typedefs | Functions
rte_fbk_hash.h File Reference
#include <stdint.h>
#include <errno.h>
#include <sys/queue.h>
#include <string.h>
#include <rte_jhash.h>

Data Structures

struct  rte_fbk_hash_params
union  rte_fbk_hash_entry
struct  rte_fbk_hash_table

Macros

#define RTE_FBK_HASH_INIT_VAL_DEFAULT   0xFFFFFFFF
#define RTE_FBK_HASH_ENTRIES_MAX   (1 << 20)
#define RTE_FBK_HASH_ENTRIES_PER_BUCKET_MAX   256
#define RTE_FBK_HASH_NAMESIZE   32

Typedefs

typedef uint32_t(* rte_fbk_hash_fn )(uint32_t key, uint32_t init_val)

Functions

static uint32_t rte_fbk_hash_get_bucket (const struct rte_fbk_hash_table *ht, uint32_t key)
static int rte_fbk_hash_add_key_with_bucket (struct rte_fbk_hash_table *ht, uint32_t key, uint16_t value, uint32_t bucket)
static int rte_fbk_hash_add_key (struct rte_fbk_hash_table *ht, uint32_t key, uint16_t value)
static int rte_fbk_hash_delete_key_with_bucket (struct rte_fbk_hash_table *ht, uint32_t key, uint32_t bucket)
static int rte_fbk_hash_delete_key (struct rte_fbk_hash_table *ht, uint32_t key)
static int rte_fbk_hash_lookup_with_bucket (const struct rte_fbk_hash_table *ht, uint32_t key, uint32_t bucket)
static int rte_fbk_hash_lookup (const struct rte_fbk_hash_table *ht, uint32_t key)
static void rte_fbk_hash_clear_all (struct rte_fbk_hash_table *ht)
static double rte_fbk_hash_get_load_factor (struct rte_fbk_hash_table *ht)
struct rte_fbk_hash_tablerte_fbk_hash_find_existing (const char *name)
struct rte_fbk_hash_tablerte_fbk_hash_create (const struct rte_fbk_hash_params *params)
void rte_fbk_hash_free (struct rte_fbk_hash_table *ht)

Detailed Description

This is a hash table implementation for four byte keys (fbk).

Note that the return value of the add function should always be checked as, if a bucket is full, the key is not added even if there is space in other buckets. This keeps the lookup function very simple and therefore fast.

Macro Definition Documentation

#define RTE_FBK_HASH_ENTRIES_MAX   (1 << 20)

The maximum number of entries in the hash table that is supported.

#define RTE_FBK_HASH_ENTRIES_PER_BUCKET_MAX   256

The maximum number of entries in each bucket that is supported.

#define RTE_FBK_HASH_INIT_VAL_DEFAULT   0xFFFFFFFF

Initialising value used when calculating hash.

#define RTE_FBK_HASH_NAMESIZE   32

Maximum size of string for naming the hash.

Typedef Documentation

typedef uint32_t(* rte_fbk_hash_fn)(uint32_t key, uint32_t init_val)

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

Function Documentation

static int rte_fbk_hash_add_key ( struct rte_fbk_hash_table ht,
uint32_t  key,
uint16_t  value 
)
inlinestatic

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

Parameters
htHash table to add the key to.
keyKey to add to the hash table.
valueValue to associate with key.
Returns
0 if ok, or negative value on error.
static int rte_fbk_hash_add_key_with_bucket ( struct rte_fbk_hash_table ht,
uint32_t  key,
uint16_t  value,
uint32_t  bucket 
)
inlinestatic

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

Parameters
htHash table to add the key to.
keyKey to add to the hash table.
valueValue to associate with key.
bucketBucket to associate with key.
Returns
0 if ok, or negative value on error.
static void rte_fbk_hash_clear_all ( struct rte_fbk_hash_table ht)
inlinestatic

Delete all entries in a hash table. This operation is not multi-thread safe and should only be called from one thread.

Parameters
htHash table to delete entries in.
struct rte_fbk_hash_table* rte_fbk_hash_create ( const struct rte_fbk_hash_params params)
read

Create a new hash table for use with four byte keys.

Parameters
paramsParameters used in creation of hash table.
Returns
Pointer to hash table structure that is used in future hash table operations, or NULL on error with rte_errno set appropriately. Possible rte_errno error values 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
  • EINVAL - invalid parameter value 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
static int rte_fbk_hash_delete_key ( struct rte_fbk_hash_table ht,
uint32_t  key 
)
inlinestatic

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

Parameters
htHash table to remove the key from.
keyKey to remove from the hash table.
Returns
0 if ok, or negative value on error.
static int rte_fbk_hash_delete_key_with_bucket ( struct rte_fbk_hash_table ht,
uint32_t  key,
uint32_t  bucket 
)
inlinestatic

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

Parameters
htHash table to remove the key from.
keyKey to remove from the hash table.
bucketBucket id associate with key.
Returns
0 if ok, or negative value on error.
struct rte_fbk_hash_table* rte_fbk_hash_find_existing ( const char *  name)
read

Performs a lookup for an existing hash table, and returns a pointer to the table if found.

Parameters
nameName of the hash table to find
Returns
pointer to hash table structure or NULL on error with rte_errno set appropriately. Possible rte_errno values include:
  • ENOENT - required entry not available to return.
void rte_fbk_hash_free ( struct rte_fbk_hash_table ht)

Free all memory used by a hash table. Has no effect on hash tables allocated in memory zones

Parameters
htHash table to deallocate.
static uint32_t rte_fbk_hash_get_bucket ( const struct rte_fbk_hash_table ht,
uint32_t  key 
)
inlinestatic

Find the offset into hash table of the bucket containing a particular key.

Parameters
htPointer to hash table.
keyKey to calculate bucket for.
Returns
Offset into hash table.
static double rte_fbk_hash_get_load_factor ( struct rte_fbk_hash_table ht)
inlinestatic

Find what fraction of entries are being used.

Parameters
htHash table to find how many entries are being used in.
Returns
Load factor of the hash table, or negative value on error.
static int rte_fbk_hash_lookup ( const struct rte_fbk_hash_table ht,
uint32_t  key 
)
inlinestatic

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

Parameters
htHash table to look in.
keyKey to find.
Returns
The value that was associated with the key, or negative value on error.
static int rte_fbk_hash_lookup_with_bucket ( const struct rte_fbk_hash_table ht,
uint32_t  key,
uint32_t  bucket 
)
inlinestatic

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

Parameters
htHash table to look in.
keyKey to find.
bucketBucket associate to the key.
Returns
The value that was associated with the key, or negative value on error.