suricata
flow-manager.c File Reference
#include "suricata-common.h"
#include "suricata.h"
#include "decode.h"
#include "conf.h"
#include "threadvars.h"
#include "tm-threads.h"
#include "runmodes.h"
#include "util-random.h"
#include "util-time.h"
#include "flow.h"
#include "flow-queue.h"
#include "flow-hash.h"
#include "flow-util.h"
#include "flow-var.h"
#include "flow-private.h"
#include "flow-timeout.h"
#include "flow-manager.h"
#include "flow-storage.h"
#include "flow-spare-pool.h"
#include "stream-tcp-private.h"
#include "stream-tcp-reassemble.h"
#include "stream-tcp.h"
#include "util-unittest.h"
#include "util-unittest-helper.h"
#include "util-byte.h"
#include "util-device.h"
#include "util-debug.h"
#include "util-privs.h"
#include "util-signal.h"
#include "threads.h"
#include "detect.h"
#include "detect-engine-state.h"
#include "stream.h"
#include "app-layer-parser.h"
#include "host-timeout.h"
#include "defrag-timeout.h"
#include "ippair-timeout.h"
#include "app-layer-htp-range.h"
#include "output-flow.h"
#include "util-validate.h"
#include "runmode-unix-socket.h"
Include dependency graph for flow-manager.c:

Go to the source code of this file.

Data Structures

struct  FlowTimeoutCounters_
 
struct  FlowManagerTimeoutThread
 
struct  FlowQueueTimeoutCounters
 
struct  FlowCounters_
 
struct  FlowManagerThreadData_
 
struct  FlowRecyclerThreadData_
 

Macros

#define FLOW_NORMAL_MODE_UPDATE_DELAY_SEC   1
 
#define FLOW_NORMAL_MODE_UPDATE_DELAY_NSEC   0
 
#define FLOW_EMERG_MODE_UPDATE_DELAY_SEC   0
 
#define FLOW_EMERG_MODE_UPDATE_DELAY_NSEC   300000
 
#define NEW_FLOW_COUNT_COND   10
 
#define BITS   32
 
#define TYPE   uint32_t
 

Typedefs

typedef struct FlowTimeoutCounters_ FlowTimeoutCounters
 
typedef struct FlowManagerTimeoutThread FlowManagerTimeoutThread
 
typedef struct FlowQueueTimeoutCounters FlowQueueTimeoutCounters
 
typedef struct FlowCounters_ FlowCounters
 
typedef struct FlowManagerThreadData_ FlowManagerThreadData
 
typedef struct FlowRecyclerThreadData_ FlowRecyclerThreadData
 

Functions

 SC_ATOMIC_DECLARE (uint32_t, flowmgr_cnt)
 
 SC_ATOMIC_DECLARE (uint32_t, flowrec_cnt)
 
 SC_ATOMIC_DECLARE (uint32_t, flowrec_busy)
 
 SC_ATOMIC_EXTERN (unsigned int, flow_flags)
 
void FlowTimeoutsInit (void)
 
void FlowTimeoutsEmergency (void)
 
void FlowDisableFlowManagerThread (void)
 Used to disable flow manager thread(s). More...
 
void FlowManagerThreadSpawn (void)
 spawn the flow manager thread More...
 
void FlowRecyclerThreadSpawn (void)
 spawn the flow recycler thread More...
 
void FlowDisableFlowRecyclerThread (void)
 Used to disable flow recycler thread(s). More...
 
void TmModuleFlowManagerRegister (void)
 
void TmModuleFlowRecyclerRegister (void)
 

Variables

int run_mode
 
FlowQueue flow_recycle_q
 
SCCtrlCondT flow_manager_ctrl_cond
 
SCCtrlMutex flow_manager_ctrl_mutex
 
SCCtrlCondT flow_recycler_ctrl_cond
 
SCCtrlMutex flow_recycler_ctrl_mutex
 

Detailed Description

Macro Definition Documentation

◆ BITS

#define BITS   32

◆ FLOW_EMERG_MODE_UPDATE_DELAY_NSEC

#define FLOW_EMERG_MODE_UPDATE_DELAY_NSEC   300000

Definition at line 116 of file flow-manager.c.

◆ FLOW_EMERG_MODE_UPDATE_DELAY_SEC

#define FLOW_EMERG_MODE_UPDATE_DELAY_SEC   0

Definition at line 115 of file flow-manager.c.

◆ FLOW_NORMAL_MODE_UPDATE_DELAY_NSEC

#define FLOW_NORMAL_MODE_UPDATE_DELAY_NSEC   0

Definition at line 113 of file flow-manager.c.

◆ FLOW_NORMAL_MODE_UPDATE_DELAY_SEC

#define FLOW_NORMAL_MODE_UPDATE_DELAY_SEC   1

Definition at line 112 of file flow-manager.c.

◆ NEW_FLOW_COUNT_COND

#define NEW_FLOW_COUNT_COND   10

Definition at line 117 of file flow-manager.c.

◆ TYPE

#define TYPE   uint32_t

Typedef Documentation

◆ FlowCounters

typedef struct FlowCounters_ FlowCounters

◆ FlowManagerThreadData

◆ FlowManagerTimeoutThread

◆ FlowQueueTimeoutCounters

◆ FlowRecyclerThreadData

◆ FlowTimeoutCounters

Function Documentation

◆ FlowDisableFlowManagerThread()

void FlowDisableFlowManagerThread ( void  )

Used to disable flow manager thread(s).

Todo:
Kinda hackish since it uses the tv name to identify flow manager thread. We need an all weather identification scheme.

Definition at line 142 of file flow-manager.c.

References FatalError, ThreadVars_::name, ThreadVars_::next, SC_ATOMIC_SET, SCMutexLock, SCMutexUnlock, SleepMsec, thread_name_flow_mgr, THV_KILL, THV_RUNNING_DONE, TmThreadsCheckFlag(), TmThreadsSetFlag(), tv, tv_root, tv_root_lock, and TVT_MGMT.

Referenced by PostRunDeinit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FlowDisableFlowRecyclerThread()

void FlowDisableFlowRecyclerThread ( void  )

Used to disable flow recycler thread(s).

Note
this should only be called when the flow manager is already gone
Todo:
Kinda hackish since it uses the tv name to identify flow recycler thread. We need an all weather identification scheme.

Definition at line 1175 of file flow-manager.c.

◆ FlowManagerThreadSpawn()

void FlowManagerThreadSpawn ( void  )

spawn the flow manager thread

Definition at line 944 of file flow-manager.c.

References ConfGetInt(), and FatalError.

Here is the call graph for this function:

◆ FlowRecyclerThreadSpawn()

void FlowRecyclerThreadSpawn ( void  )

spawn the flow recycler thread

Definition at line 1135 of file flow-manager.c.

References ConfGetInt(), and FatalError.

Here is the call graph for this function:

◆ FlowTimeoutsEmergency()

void FlowTimeoutsEmergency ( void  )

Definition at line 105 of file flow-manager.c.

References flow_timeouts_emerg, and SC_ATOMIC_SET.

◆ FlowTimeoutsInit()

void FlowTimeoutsInit ( void  )

Definition at line 100 of file flow-manager.c.

References flow_timeouts_normal, and SC_ATOMIC_SET.

Referenced by FlowInitFlowProto().

Here is the caller graph for this function:

◆ SC_ATOMIC_DECLARE() [1/3]

SC_ATOMIC_DECLARE ( uint32_t  ,
flowmgr_cnt   
)

◆ SC_ATOMIC_DECLARE() [2/3]

SC_ATOMIC_DECLARE ( uint32_t  ,
flowrec_busy   
)

◆ SC_ATOMIC_DECLARE() [3/3]

SC_ATOMIC_DECLARE ( uint32_t  ,
flowrec_cnt   
)

◆ SC_ATOMIC_EXTERN()

SC_ATOMIC_EXTERN ( unsigned int  ,
flow_flags   
)

◆ TmModuleFlowManagerRegister()

void TmModuleFlowManagerRegister ( void  )

Definition at line 1234 of file flow-manager.c.

References TmModule_::name, TmModule_::ThreadInit, TMM_FLOWMANAGER, and tmm_modules.

Referenced by RegisterAllModules().

Here is the caller graph for this function:

◆ TmModuleFlowRecyclerRegister()

void TmModuleFlowRecyclerRegister ( void  )

Definition at line 1248 of file flow-manager.c.

References TmModule_::name, TmModule_::ThreadInit, TMM_FLOWRECYCLER, and tmm_modules.

Referenced by RegisterAllModules().

Here is the caller graph for this function:

Variable Documentation

◆ flow_manager_ctrl_cond

SCCtrlCondT flow_manager_ctrl_cond

flow manager scheduling condition

Definition at line 95 of file flow-manager.c.

◆ flow_manager_ctrl_mutex

SCCtrlMutex flow_manager_ctrl_mutex

Definition at line 96 of file flow-manager.c.

◆ flow_recycle_q

FlowQueue flow_recycle_q

queue to pass flows to cleanup/log thread(s)

Definition at line 81 of file flow-manager.c.

Referenced by FlowInitConfig(), and FlowShutdown().

◆ flow_recycler_ctrl_cond

SCCtrlCondT flow_recycler_ctrl_cond

Definition at line 97 of file flow-manager.c.

◆ flow_recycler_ctrl_mutex

SCCtrlMutex flow_recycler_ctrl_mutex

Definition at line 98 of file flow-manager.c.

◆ run_mode

int run_mode

Run mode selected

Definition at line 167 of file suricata.c.