suricata
threadvars.h
Go to the documentation of this file.
1
/* Copyright (C) 2007-2013 Open Information Security Foundation
2
*
3
* You can copy, redistribute or modify this Program under the terms of
4
* the GNU General Public License version 2 as published by the Free
5
* Software Foundation.
6
*
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
11
*
12
* You should have received a copy of the GNU General Public License
13
* version 2 along with this program; if not, write to the Free Software
14
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
* 02110-1301, USA.
16
*/
17
18
/**
19
* \file
20
*
21
* \author Victor Julien <victor@inliniac.net>
22
*/
23
24
#ifndef SURICATA_THREADVARS_H
25
#define SURICATA_THREADVARS_H
26
27
#include "
tm-queues.h
"
28
#include "
counters.h
"
29
#include "
packet-queue.h
"
30
#include "
util-atomic.h
"
31
#include "
util-storage.h
"
32
33
struct
TmSlot_
;
34
35
/** Thread flags set and read by threads to control the threads */
36
// bit 0 vacant
37
#define THV_INIT_DONE BIT_U32(1)
/** thread initialization done */
38
#define THV_PAUSE BIT_U32(2)
/** signal thread to pause itself */
39
#define THV_PAUSED BIT_U32(3)
/** the thread is paused atm */
40
#define THV_KILL BIT_U32(4)
/** thread has been asked to cleanup and exit */
41
#define THV_FAILED BIT_U32(5)
/** thread has encountered an error and failed */
42
#define THV_CLOSED BIT_U32(6)
/** thread done, should be joinable */
43
/* used to indicate the thread is going through de-init. Introduced as more
44
* of a hack for solving stream-timeout-shutdown. Is set by the main thread. */
45
#define THV_DEINIT BIT_U32(7)
46
#define THV_RUNNING_DONE BIT_U32(8)
/** thread has completed running and is entering
47
* the de-init phase */
48
#define THV_REQ_FLOW_LOOP BIT_U32(9)
/**< request thread to enter flow timeout loop */
49
#define THV_FLOW_LOOP BIT_U32(10)
/**< thread is in flow shutdown loop */
50
51
/** signal thread's capture method to create a fake packet to force through
52
* the engine. This is to force timely handling of maintenance tasks like
53
* rule reloads even if no packets are read by the capture method. */
54
#define THV_CAPTURE_INJECT_PKT BIT_U32(11)
55
#define THV_DEAD BIT_U32(12)
/**< thread has been joined with pthread_join() */
56
#define THV_RUNNING BIT_U32(13)
/**< thread is running */
57
58
/** \brief Per thread variable structure */
59
typedef
struct
ThreadVars_
{
60
pthread_t
t
;
61
/** function pointer to the function that runs the packet pipeline for
62
* this thread. It is passed directly to pthread_create(), hence the
63
* void pointers in and out. */
64
void
*(*tm_func)(
void
*);
65
66
char
name
[16];
67
char
*
printable_name
;
68
char
*
thread_group_name
;
69
70
uint8_t
thread_setup_flags
;
71
72
/** the type of thread as defined in tm-threads.h (TVT_PPT, TVT_MGMT) */
73
uint8_t
type
;
74
75
uint16_t
cpu_affinity
;
/** cpu or core number to set affinity to */
76
int
thread_priority
;
/** priority (real time) for this thread. Look at threads.h */
77
78
79
/** TmModule::flags for each module part of this thread */
80
uint8_t
tmm_flags
;
81
82
uint8_t
cap_flags
;
/**< Flags to indicate the capabilities of all the
83
TmModules registered under this thread */
84
uint8_t
inq_id
;
85
uint8_t
outq_id
;
86
87
/** local id */
88
int
id
;
89
90
/** incoming queue and handler */
91
Tmq
*
inq
;
92
struct
Packet_
* (*tmqh_in)(
struct
ThreadVars_
*);
93
94
SC_ATOMIC_DECLARE
(uint32_t,
flags
);
95
96
/** list of of TmSlot objects together forming the packet pipeline. */
97
struct
TmSlot_
*
tm_slots
;
98
99
/** pointer to the flowworker in the pipeline. Used as starting point
100
* for injected packets. Can be NULL if the flowworker is not part
101
* of this thread. */
102
struct
TmSlot_
*
tm_flowworker
;
103
104
/** outgoing queue and handler */
105
Tmq
*
outq
;
106
void
*
outctx
;
107
void (*
tmqh_out
)(
struct
ThreadVars_
*,
struct
Packet_
*);
108
109
/** Queue for decoders to temporarily store extra packets they
110
* generate. These packets are generated as part of the tunnel
111
* handling, and are processed directly after the "real" packet
112
* from the current position in the pipeline. */
113
PacketQueueNoLock
decode_pq
;
114
115
/** Stream packet queue for flow time out injection. Either a pointer to the
116
* workers input queue or to stream_pq_local */
117
struct
PacketQueue_
*
stream_pq
;
118
struct
PacketQueue_
*
stream_pq_local
;
119
120
/* counters */
121
122
/** private counter store: counter updates modify this */
123
StatsPrivateThreadContext
perf_private_ctx
;
124
125
/** pointer to the next thread */
126
struct
ThreadVars_
*
next
;
127
128
/** public counter store: counter syncs update this */
129
StatsPublicThreadContext
perf_public_ctx
;
130
131
/* mutex and condition used by management threads */
132
133
SCCtrlMutex
*
ctrl_mutex
;
134
SCCtrlCondT
*
ctrl_cond
;
135
136
struct
FlowQueue_
*
flow_queue
;
137
bool
break_loop
;
138
139
/** Interface-specific thread affinity */
140
char
*
iface_name
;
141
142
Storage
storage
[];
143
}
ThreadVars
;
144
145
/** Thread setup flags: */
146
#define THREAD_SET_AFFINITY 0x01
/** CPU/Core affinity */
147
#define THREAD_SET_PRIORITY 0x02
/** Real time priority */
148
#define THREAD_SET_AFFTYPE 0x04
/** Priority and affinity */
149
150
#endif
/* SURICATA_THREADVARS_H */
counters.h
flags
uint8_t flags
Definition
decode-gre.h:0
packet-queue.h
FlowQueue_
Definition
flow-queue.h:48
PacketQueueNoLock_
simple fifo queue for packets
Definition
packet-queue.h:34
PacketQueue_
simple fifo queue for packets with mutex and cond Calling the mutex or triggering the cond is respons...
Definition
packet-queue.h:49
Packet_
Definition
decode.h:501
StatsPrivateThreadContext_
used to hold the private version of the counters registered
Definition
counters.h:99
StatsPublicThreadContext_
Stats Context for a ThreadVars instance.
Definition
counters.h:64
Storage
Definition
util-storage.h:40
ThreadVars_
Per thread variable structure.
Definition
threadvars.h:58
ThreadVars_::thread_group_name
char * thread_group_name
Definition
threadvars.h:67
ThreadVars_::break_loop
bool break_loop
Definition
threadvars.h:136
ThreadVars_::stream_pq_local
struct PacketQueue_ * stream_pq_local
Definition
threadvars.h:117
ThreadVars_::cap_flags
uint8_t cap_flags
Definition
threadvars.h:81
ThreadVars_::outq
Tmq * outq
Definition
threadvars.h:104
ThreadVars_::tm_slots
struct TmSlot_ * tm_slots
Definition
threadvars.h:96
ThreadVars_::type
uint8_t type
Definition
threadvars.h:72
ThreadVars_::tmqh_out
void(* tmqh_out)(struct ThreadVars_ *, struct Packet_ *)
Definition
threadvars.h:106
ThreadVars_::name
char name[16]
Definition
threadvars.h:65
ThreadVars_::outq_id
uint8_t outq_id
Definition
threadvars.h:84
ThreadVars_::decode_pq
PacketQueueNoLock decode_pq
Definition
threadvars.h:112
ThreadVars_::ctrl_mutex
SCCtrlMutex * ctrl_mutex
Definition
threadvars.h:132
ThreadVars_::inq
Tmq * inq
Definition
threadvars.h:90
ThreadVars_::tmm_flags
uint8_t tmm_flags
Definition
threadvars.h:79
ThreadVars_::t
pthread_t t
Definition
threadvars.h:59
ThreadVars_::id
int id
Definition
threadvars.h:87
ThreadVars_::outctx
void * outctx
Definition
threadvars.h:105
ThreadVars_::next
struct ThreadVars_ * next
Definition
threadvars.h:125
ThreadVars_::tm_flowworker
struct TmSlot_ * tm_flowworker
Definition
threadvars.h:101
ThreadVars_::perf_public_ctx
StatsPublicThreadContext perf_public_ctx
Definition
threadvars.h:128
ThreadVars_::perf_private_ctx
StatsPrivateThreadContext perf_private_ctx
Definition
threadvars.h:122
ThreadVars_::inq_id
uint8_t inq_id
Definition
threadvars.h:83
ThreadVars_::stream_pq
struct PacketQueue_ * stream_pq
Definition
threadvars.h:116
ThreadVars_::printable_name
char * printable_name
Definition
threadvars.h:66
ThreadVars_::storage
Storage storage[]
Definition
threadvars.h:141
ThreadVars_::thread_priority
int thread_priority
Definition
threadvars.h:75
ThreadVars_::iface_name
char * iface_name
Definition
threadvars.h:139
ThreadVars_::thread_setup_flags
uint8_t thread_setup_flags
Definition
threadvars.h:69
ThreadVars_::flow_queue
struct FlowQueue_ * flow_queue
Definition
threadvars.h:135
ThreadVars_::cpu_affinity
uint16_t cpu_affinity
Definition
threadvars.h:74
ThreadVars_::ctrl_cond
SCCtrlCondT * ctrl_cond
Definition
threadvars.h:133
TmSlot_
Definition
tm-threads.h:53
Tmq_
Definition
tm-queues.h:29
SCCtrlCondT
#define SCCtrlCondT
Definition
threads-debug.h:382
SCCtrlMutex
#define SCCtrlMutex
Definition
threads-debug.h:373
ThreadVars
struct ThreadVars_ ThreadVars
Per thread variable structure.
tm-queues.h
util-atomic.h
SC_ATOMIC_DECLARE
#define SC_ATOMIC_DECLARE(type, name)
wrapper for declaring atomic variables.
Definition
util-atomic.h:280
util-storage.h
src
threadvars.h
Generated on Wed Jul 23 2025 10:11:00 for suricata by
1.9.8