suricata
detect-engine-loader.h
Go to the documentation of this file.
1 /* Copyright (C) 2015 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  * Detect loader API, for using multiple 'loader' threads
24  * that can load multiple detection engines in parallel.
25  */
26 
27 #ifndef SURICATA_DETECT_ENGINE_LOADER_H
28 #define SURICATA_DETECT_ENGINE_LOADER_H
29 
30 /**
31  * \param ctx function specific data
32  * \param loader_id id of the loader that executed the task
33  */
34 typedef int (*LoaderFunc)(void *ctx, int loader_id);
35 typedef void (*LoaderFreeFunc)(void *ctx);
36 
37 typedef struct DetectLoaderTask_ {
39  void *ctx;
43 
44 typedef struct DetectLoaderControl_ {
45  int id;
46  ThreadVars *tv; /**< loader threads threadvars - for waking them up */
47 
48  /** struct to group members and mutex */
49  struct {
50  SCMutex m; /**< mutex protects result and task_list */
51  int result; /**< 0 for ok, error otherwise */
52  TAILQ_HEAD(, DetectLoaderTask_) task_list;
53  };
55 
56 int DetectLoaderQueueTask(int loader_id, LoaderFunc Func, void *func_ctx, LoaderFreeFunc FreeFunc);
57 int DetectLoadersSync(void);
58 void DetectLoadersInit(void);
59 
61 void DetectLoaderThreadSpawn(void);
63 
64 #endif /* SURICATA_DETECT_ENGINE_LOADER_H */
DetectLoaderTask_::FreeFunc
LoaderFreeFunc FreeFunc
Definition: detect-engine-loader.h:40
DetectLoaderControl_
Definition: detect-engine-loader.h:44
DetectLoadersSync
int DetectLoadersSync(void)
wait for loader tasks to complete
Definition: detect-engine-loader.c:457
DetectLoaderTask_::ctx
void * ctx
Definition: detect-engine-loader.h:39
next
struct HtpBodyChunk_ * next
Definition: app-layer-htp.h:0
DetectLoaderTask
struct DetectLoaderTask_ DetectLoaderTask
DetectLoaderControl_::id
int id
Definition: detect-engine-loader.h:45
DetectLoaderQueueTask
int DetectLoaderQueueTask(int loader_id, LoaderFunc Func, void *func_ctx, LoaderFreeFunc FreeFunc)
Definition: detect-engine-loader.c:423
LoaderFreeFunc
void(* LoaderFreeFunc)(void *ctx)
Definition: detect-engine-loader.h:35
LoaderFunc
int(* LoaderFunc)(void *ctx, int loader_id)
Definition: detect-engine-loader.h:34
DetectLoaderControl_::result
int result
Definition: detect-engine-loader.h:51
ThreadVars_
Per thread variable structure.
Definition: threadvars.h:57
DetectLoaderThreadSpawn
void DetectLoaderThreadSpawn(void)
spawn the detect loader manager thread
Definition: detect-engine-loader.c:642
DetectLoaderControl
struct DetectLoaderControl_ DetectLoaderControl
TmThreadContinueDetectLoaderThreads
void TmThreadContinueDetectLoaderThreads(void)
Unpauses all threads present in tv_root.
Definition: detect-engine-loader.c:545
DetectLoaderTask_
Definition: detect-engine-loader.h:37
DetectLoadersInit
void DetectLoadersInit(void)
Definition: detect-engine-loader.c:500
DetectLoaderTask_::TAILQ_ENTRY
TAILQ_ENTRY(DetectLoaderTask_) next
DetectLoaderControl_::m
SCMutex m
Definition: detect-engine-loader.h:50
TmModuleDetectLoaderRegister
void TmModuleDetectLoaderRegister(void)
Definition: detect-engine-loader.c:658
TAILQ_HEAD
#define TAILQ_HEAD(name, type)
Definition: queue.h:230
DetectLoaderTask_::Func
LoaderFunc Func
Definition: detect-engine-loader.h:38
SCMutex
#define SCMutex
Definition: threads-debug.h:114
DetectLoaderControl_::tv
ThreadVars * tv
Definition: detect-engine-loader.h:46