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 */
34typedef int (*LoaderFunc)(void *ctx, int loader_id);
35typedef void (*LoaderFreeFunc)(void *ctx);
36
43
44typedef 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
56int DetectLoaderQueueTask(int loader_id, LoaderFunc Func, void *func_ctx, LoaderFreeFunc FreeFunc);
57int DetectLoadersSync(void);
58void DetectLoadersInit(void);
59
63
64#endif /* SURICATA_DETECT_ENGINE_LOADER_H */
struct HtpBodyChunk_ * next
int DetectLoadersSync(void)
wait for loader tasks to complete
void TmModuleDetectLoaderRegister(void)
struct DetectLoaderControl_ DetectLoaderControl
void DetectLoaderThreadSpawn(void)
spawn the detect loader manager thread
int(* LoaderFunc)(void *ctx, int loader_id)
void(* LoaderFreeFunc)(void *ctx)
int DetectLoaderQueueTask(int loader_id, LoaderFunc Func, void *func_ctx, LoaderFreeFunc FreeFunc)
struct DetectLoaderTask_ DetectLoaderTask
void DetectLoadersInit(void)
void TmThreadContinueDetectLoaderThreads(void)
Unpauses all threads present in tv_root.
struct Thresholds ctx
#define TAILQ_HEAD(name, type)
Definition queue.h:230
TAILQ_ENTRY(DetectLoaderTask_) next
Per thread variable structure.
Definition threadvars.h:58
#define SCMutex