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
33struct 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 */
59typedef 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 *);
66 char name[16];
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;
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;
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_ *);
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 */
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. */
114
115 /** Stream packet queue for flow time out injection. Either a pointer to the
116 * workers input queue or to stream_pq_local */
119
120 /* counters */
121
122 /** private counter store: counter updates modify this */
124
125 /** pointer to the next thread */
126 struct ThreadVars_ *next;
127
128 /** public counter store: counter syncs update this */
130
131 /* mutex and condition used by management threads */
137 bool break_loop;
138
139 /** Interface-specific thread affinity */
140 char *iface_name;
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 */
uint8_t flags
Definition decode-gre.h:0
simple fifo queue for packets
simple fifo queue for packets with mutex and cond Calling the mutex or triggering the cond is respons...
used to hold the private version of the counters registered
Definition counters.h:99
Stats Context for a ThreadVars instance.
Definition counters.h:64
Per thread variable structure.
Definition threadvars.h:58
char * thread_group_name
Definition threadvars.h:67
bool break_loop
Definition threadvars.h:136
struct PacketQueue_ * stream_pq_local
Definition threadvars.h:117
uint8_t cap_flags
Definition threadvars.h:81
struct TmSlot_ * tm_slots
Definition threadvars.h:96
uint8_t type
Definition threadvars.h:72
void(* tmqh_out)(struct ThreadVars_ *, struct Packet_ *)
Definition threadvars.h:106
char name[16]
Definition threadvars.h:65
uint8_t outq_id
Definition threadvars.h:84
PacketQueueNoLock decode_pq
Definition threadvars.h:112
SCCtrlMutex * ctrl_mutex
Definition threadvars.h:132
uint8_t tmm_flags
Definition threadvars.h:79
pthread_t t
Definition threadvars.h:59
void * outctx
Definition threadvars.h:105
struct ThreadVars_ * next
Definition threadvars.h:125
struct TmSlot_ * tm_flowworker
Definition threadvars.h:101
StatsPublicThreadContext perf_public_ctx
Definition threadvars.h:128
StatsPrivateThreadContext perf_private_ctx
Definition threadvars.h:122
uint8_t inq_id
Definition threadvars.h:83
struct PacketQueue_ * stream_pq
Definition threadvars.h:116
char * printable_name
Definition threadvars.h:66
Storage storage[]
Definition threadvars.h:141
int thread_priority
Definition threadvars.h:75
char * iface_name
Definition threadvars.h:139
uint8_t thread_setup_flags
Definition threadvars.h:69
struct FlowQueue_ * flow_queue
Definition threadvars.h:135
uint16_t cpu_affinity
Definition threadvars.h:74
SCCtrlCondT * ctrl_cond
Definition threadvars.h:133
#define SCCtrlCondT
#define SCCtrlMutex
struct ThreadVars_ ThreadVars
Per thread variable structure.
#define SC_ATOMIC_DECLARE(type, name)
wrapper for declaring atomic variables.