util-rohash.c File Reference
#include "suricata-common.h"
#include "util-hash.h"
#include "util-unittest.h"
#include "util-memcmp.h"
#include "util-hash-lookup3.h"
#include "queue.h"
#include "util-rohash.h"
Include dependency graph for util-rohash.c:

Go to the source code of this file.

Data Structures

struct  ROHashTableItem_
struct  ROHashTableOffsets_


typedef struct ROHashTableItem_ ROHashTableItem
typedef struct ROHashTableOffsets_ ROHashTableOffsets


ROHashTableROHashInit (uint8_t hash_bits, uint16_t item_size)
 initialize a new rohash More...
void ROHashFree (ROHashTable *table)
uint32_t ROHashMemorySize (ROHashTable *table)
void * ROHashLookup (ROHashTable *table, void *data, uint16_t size)
int ROHashInitQueueValue (ROHashTable *table, void *value, uint16_t size)
 Add a new value to the hash. More...
int ROHashInitFinalize (ROHashTable *table)
 create final hash data structure More...

Detailed Description

Victor Julien

Chained read only hash table implementation, meaning that after the initial fill no changes are allowed.

Loading takes 2 stages.

  • stage1 maps data
  • stage2 fills blob

    a bloomfilter in the ROHashTableOffsets could possibly prevent a lot of cache misses when validating a potential match
    maybe add a user ctx to be returned instead, something like a 4/8 byte ptr or simply a flag

Definition in file util-rohash.c.

Typedef Documentation

◆ ROHashTableItem

item_size data beyond this header

◆ ROHashTableOffsets

offset table

Function Documentation

◆ ROHashFree()

void ROHashFree ( ROHashTable table)

Definition at line 92 of file util-rohash.c.

References ROHashTable_::data, and SCFree.

◆ ROHashInit()

ROHashTable* ROHashInit ( uint8_t  hash_bits,
uint16_t  item_size 

initialize a new rohash

hash_bitshash size as 2^hash_bits, so power of 2, max 31
item_sizesize of the data to store
Return values
tableptr or NULL on error

Definition at line 64 of file util-rohash.c.

References ROHashTable_::hash_bits, hashsize, ROHashTable_::item_size, ROHashTable_::items, SC_ERR_HASH_TABLE_INIT, SCLogError, SCMalloc, TAILQ_INIT, and unlikely.

◆ ROHashInitFinalize()

int ROHashInitFinalize ( ROHashTable table)

create final hash data structure

tablethe hash table
Return values
after this call the nothing can be added to the hash anymore.

Definition at line 183 of file util-rohash.c.

References ROHashTableOffsets_::cnt, ROHashTable_::data, ROHashTable_::hash_bits, hashmask, hashsize, hashword(), ROHashTable_::item_size, ROHashTable_::items, ROHashTable_::locked, next, offset, ROHashTableOffsets_::offset, ROHashTableItem_::pos, SC_ERR_HASH_TABLE_INIT, SCFree, SCLogError, SCMalloc, TAILQ_FIRST, TAILQ_FOREACH, and TAILQ_REMOVE.

Here is the call graph for this function:

◆ ROHashInitQueueValue()

int ROHashInitQueueValue ( ROHashTable table,
void *  value,
uint16_t  size 

Add a new value to the hash.

can only be done when table isn't in a locked state yet
tablethe hash table
valuevalue to add
sizevalue size. MUST match table item_size
Return values

Definition at line 152 of file util-rohash.c.

References ROHashTable_::item_size, ROHashTable_::locked, next, SC_ERR_HASH_TABLE_INIT, SCLogError, SCMalloc, and TAILQ_INSERT_TAIL.

◆ ROHashLookup()

void* ROHashLookup ( ROHashTable table,
void *  data,
uint16_t  size 
Return values
NULLnot found

Definition at line 113 of file util-rohash.c.

References ROHashTableOffsets_::cnt, ROHashTable_::data, ROHashTable_::hash_bits, hashmask, hashword(), ROHashTable_::item_size, offset, ROHashTableOffsets_::offset, SCMemcmp, and SCReturnPtr.

Here is the call graph for this function:

◆ ROHashMemorySize()

uint32_t ROHashMemorySize ( ROHashTable table)