suricata
util-storage.c File Reference
#include "suricata-common.h"
#include "util-unittest.h"
#include "util-storage.h"
#include "util-debug.h"
Include dependency graph for util-storage.c:

Go to the source code of this file.

Data Structures

struct  StorageMapping_
 
struct  StorageList_
 list of StorageMapping used at registration time More...
 

Typedefs

typedef struct StorageMapping_ StorageMapping
 
typedef struct StorageList_ StorageList
 list of StorageMapping used at registration time
 

Functions

void StorageInit (void)
 
void StorageCleanup (void)
 
int StorageRegister (const StorageEnum type, const char *name, const unsigned int size, void *(*Alloc)(unsigned int), void(*Free)(void *))
 Register new storage.
 
int StorageFinalize (void)
 
unsigned int StorageGetCnt (StorageEnum type)
 
unsigned int StorageGetSize (StorageEnum type)
 get the size of the void array used to store the pointers
 
void * StorageGetById (const Storage *storage, const StorageEnum type, const int id)
 get storage for id
 
int StorageSetById (Storage *storage, const StorageEnum type, const int id, void *ptr)
 set storage for id
 
void * StorageAllocByIdPrealloc (Storage *storage, StorageEnum type, int id)
 AllocById func for prealloc'd base storage (storage ptrs are part of another memory block)
 
void StorageFreeById (Storage *storage, StorageEnum type, int id)
 
void StorageFreeAll (Storage *storage, StorageEnum type)
 

Detailed Description

Typedef Documentation

◆ StorageList

typedef struct StorageList_ StorageList

list of StorageMapping used at registration time

◆ StorageMapping

Function Documentation

◆ StorageAllocByIdPrealloc()

void * StorageAllocByIdPrealloc ( Storage storage,
StorageEnum  type,
int  id 
)

AllocById func for prealloc'd base storage (storage ptrs are part of another memory block)

Definition at line 238 of file util-storage.c.

References StorageMapping_::Alloc, BUG_ON, id, StorageList_::map, Storage::ptr, SCLogDebug, StorageMapping_::size, and type.

Referenced by FlowAllocStorageById(), HostAllocStorageById(), IPPairAllocStorageById(), and ThreadAllocStorageById().

Here is the caller graph for this function:

◆ StorageCleanup()

void StorageCleanup ( void  )

Definition at line 78 of file util-storage.c.

References next, StorageList_::next, SCFree, and STORAGE_MAX.

◆ StorageFinalize()

int StorageFinalize ( void  )

◆ StorageFreeAll()

void StorageFreeAll ( Storage storage,
StorageEnum  type 
)

Definition at line 278 of file util-storage.c.

References BUG_ON, StorageMapping_::Free, StorageList_::map, Storage::ptr, and type.

Referenced by FlowFreeStorage(), HostFreeStorage(), IPPairFreeStorage(), LiveDevFreeStorage(), and ThreadFreeStorage().

Here is the caller graph for this function:

◆ StorageFreeById()

void StorageFreeById ( Storage storage,
StorageEnum  type,
int  id 
)

Definition at line 256 of file util-storage.c.

References BUG_ON, StorageMapping_::Free, id, StorageList_::map, Storage::ptr, SCLogDebug, and type.

Referenced by FlowFreeStorageById(), and ThreadFreeStorageById().

Here is the caller graph for this function:

◆ StorageGetById()

void * StorageGetById ( const Storage storage,
const StorageEnum  type,
const int  id 
)

get storage for id

Definition at line 215 of file util-storage.c.

References BUG_ON, id, Storage::ptr, and SCLogDebug.

Referenced by FlowGetStorageById(), HostGetStorageById(), IPPairGetStorageById(), LiveDevGetStorageById(), and ThreadGetStorageById().

Here is the caller graph for this function:

◆ StorageGetCnt()

unsigned int StorageGetCnt ( StorageEnum  type)

Definition at line 199 of file util-storage.c.

References type.

◆ StorageGetSize()

unsigned int StorageGetSize ( StorageEnum  type)

get the size of the void array used to store the pointers

Return values
sizesize in bytes, can return 0 if not storage is needed
Todo:
we could return -1 when registration isn't closed yet, however this will break lots of tests currently, so not doing it now

Definition at line 210 of file util-storage.c.

References type.

Referenced by FlowStorageSize(), HostStorageSize(), IPPairStorageSize(), LiveDevStorageSize(), and ThreadStorageSize().

Here is the caller graph for this function:

◆ StorageInit()

void StorageInit ( void  )

Definition at line 70 of file util-storage.c.

Referenced by PostConfLoadedSetup(), and RunUnittests().

Here is the caller graph for this function:

◆ StorageRegister()

int StorageRegister ( const StorageEnum  type,
const char *  name,
const unsigned int  size,
void *(*)(unsigned int)  Alloc,
void(*)(void *)  Free 
)

Register new storage.

Parameters
typetype from StorageEnum
namename
sizesize of the per instance storage
Allocalloc function for per instance storage
Freefree function for per instance storage
Note
if size == ptr size (so sizeof(void *)) and Alloc == NULL the API just gives the caller a ptr to store something it alloc'ed itself.

Definition at line 102 of file util-storage.c.

References StorageMapping_::Alloc, StorageMapping_::Free, StorageList_::id, StorageList_::map, name, StorageMapping_::name, StorageList_::next, SCCalloc, SCLogError, StorageMapping_::size, STORAGE_MAX, type, StorageMapping_::type, and unlikely.

Referenced by FlowStorageRegister(), HostStorageRegister(), IPPairStorageRegister(), LiveDevStorageRegister(), and ThreadStorageRegister().

Here is the caller graph for this function:

◆ StorageSetById()

int StorageSetById ( Storage storage,
const StorageEnum  type,
const int  id,
void *  ptr 
)

set storage for id

Definition at line 226 of file util-storage.c.

References BUG_ON, id, Storage::ptr, and SCLogDebug.

Referenced by FlowSetStorageById(), HostSetStorageById(), IPPairSetStorageById(), LiveDevSetStorageById(), and ThreadSetStorageById().

Here is the caller graph for this function: