suricata
suricata.h
Go to the documentation of this file.
1 /* Copyright (C) 2007-2014 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 /** \mainpage Doxygen documentation
19  *
20  * \section intro_sec Introduction
21  *
22  * The Suricata Engine is an Open Source Next Generation Intrusion Detection
23  * and Prevention Engine. This engine is not intended to just replace or
24  * emulate the existing tools in the industry, but will bring new ideas and
25  * technologies to the field.
26  *
27  * \section dev_doc Developer documentation
28  *
29  * You've reach the automatically generated documentation of Suricata. This
30  * document contains information about architecture and code structure. It
31  * is attended for developers wanting to understand or contribute to Suricata.
32  *
33  * \subsection modules Modules
34  *
35  * Documentation is generate from comments placed in all parts of the code.
36  * But you will also find some groups describing specific functional parts:
37  * - \ref decode
38  * - \ref httplayer
39  * - \ref sigstate
40  * - \ref threshold
41  *
42  * \section archi Architecture
43  *
44  * \subsection datastruct Data structures
45  *
46  * Regarding matching, there is three main data structures which are:
47  * - ::Packet: Data relative to an individual packet with information about
48  * linked structure such as the ::Flow the ::Packet belongs to.
49  * - ::Flow: Information about a flow for example a TCP session
50  *
51  * \subsection runmode Running mode
52  *
53  * Suricata is multithreaded and running modes define how the different
54  * threads are working together. You can see util-runmodes.c for example
55  * of running mode.
56  */
57 
58 /**
59  * \file
60  *
61  * \author Victor Julien <victor@inliniac.net>
62  */
63 
64 #ifndef SURICATA_SURICATA_H
65 #define SURICATA_SURICATA_H
66 
67 #ifdef __cplusplus
68 extern "C"
69 {
70 #endif
71 
72 #include "suricata-common.h"
73 
74 /* the name of our binary */
75 #define PROG_NAME "Suricata"
76 #define PROG_VER PACKAGE_VERSION
77 
78 /* workaround SPlint error (don't know __gnuc_va_list) */
79 #ifdef S_SPLINT_S
80 # include <err.h>
81 # define CONFIG_DIR "/etc/suricata"
82 #endif
83 
84 #define DEFAULT_CONF_FILE CONFIG_DIR "/suricata.yaml"
85 
86 #define DEFAULT_PID_DIR LOCAL_STATE_DIR "/run/"
87 #define DEFAULT_PID_BASENAME "suricata.pid"
88 #define DEFAULT_PID_FILENAME DEFAULT_PID_DIR DEFAULT_PID_BASENAME
89 
90 #define DOC_URL "https://docs.suricata.io/en/"
91 const char *GetDocURL(void);
92 
93 /* runtime engine control flags */
94 #define SURICATA_STOP (1 << 0) /**< gracefully stop the engine: process all
95  outstanding packets first */
96 #define SURICATA_DONE (1 << 2) /**< packets capture ended */
97 
98 /* Engine stage/status*/
99 enum {
103 };
104 
105 /* Engine is acting as */
109  /* order matters, we need to be able to do IPS is true for >= ENGINE_MODE_IPS */
112 };
113 
114 /* Engine is acting as router */
119 };
120 
121 /* superset of IPS mode */
122 void EngineModeSetFirewall(const enum EngineHostMode);
123 void EngineModeSetIPS(const enum EngineHostMode);
124 void EngineModeSetIDS(void);
125 int EngineModeIsUnknown(void);
126 bool EngineModeIsFirewall(void);
127 int EngineModeIsIPS(void);
128 int EngineModeIsIDS(void);
129 bool EngineHostModeIsSniffer(void);
130 bool EngineHostModeIsBridge(void);
131 
132 #include "runmodes.h"
133 
134 typedef struct SCInstance_ {
135  enum SCRunModes run_mode;
137 
138  char pcap_dev[128];
139  char *sig_file;
142  char *regex_arg;
145  /* is firewall mode enabled */
147 
150 #ifndef OS_WIN32
151  const char *user_name;
152  const char *group_name;
153  bool do_setuid;
154  bool do_setgid;
155 #endif /* OS_WIN32 */
156  uint32_t userid;
157  uint32_t groupid;
158 
159  bool system;
163 
164  bool install_signal_handlers; /**< Install default signal handlers */
165 
168  int daemon;
169  int offline;
170  int verbose;
173 
174  struct timeval start_time;
175 
176  const char *log_dir;
177  const char *progname; /**< pointer to argv[0] */
178  const char *conf_filename;
179  const char **additional_configs;
180  const char **additional_plugins;
182 
183  const char *capture_plugin_name;
184  const char *capture_plugin_args;
186 
187 
188 /* memset to zeros, and mutex init! */
189 void GlobalsInitPreConfig(void);
190 
191 extern volatile uint8_t suricata_ctl_flags;
192 extern int g_disable_randomness;
193 extern uint16_t g_vlan_mask;
194 extern uint16_t g_livedev_mask;
195 extern uint8_t g_recurlvl_mask;
196 
197 /* Flag to disable hashing (almost) globally. */
198 extern bool g_disable_hashing;
199 
200 void EngineStop(void);
201 void EngineDone(void);
202 
203 #ifdef UNITTESTS
204 int RunmodeIsUnittests(void);
205 #else
206 #define RunmodeIsUnittests() 0
207 #endif
208 
209 /**
210  * \brief Get the current run mode.
211  */
212 SCRunMode SCRunmodeGet(void);
213 
214 /**
215  * \brief Set the current run mode.
216  *
217  * Mainly exposed outside of suricata.c as a unit-test helper.
218  */
219 void SCRunmodeSet(SCRunMode run_mode);
220 
221 /**
222  * \brief Enable default signal handlers.
223  */
225 
226 int SuriHasSigFile(void);
227 
228 void SuricataPreInit(const char *progname);
229 void SuricataInit(void);
230 void SuricataPostInit(void);
231 void SuricataMainLoop(void);
232 void SuricataShutdown(void);
233 int InitGlobal(void);
234 void GlobalsDestroy(void);
237 int SCFinalizeRunMode(void);
238 TmEcode SCParseCommandLine(int argc, char **argv);
239 int SCStartInternalRunMode(int argc, char **argv);
241 
242 void PreRunInit(const int runmode);
243 void PreRunPostPrivsDropInit(const int runmode);
244 void PostRunDeinit(const int runmode, struct timeval *start_time);
245 void RegisterAllModules(void);
246 
247 #ifdef OS_WIN32
248 int WindowsInitService(int argc, char **argv);
249 #endif
250 
251 const char *GetProgramVersion(void);
252 
253 #ifdef __cplusplus
254 }
255 #endif
256 
257 #endif /* SURICATA_SURICATA_H */
SCRunMode
enum SCRunModes SCRunMode
SCInstance_::is_firewall
bool is_firewall
Definition: suricata.h:146
SCRunmodeSet
void SCRunmodeSet(SCRunMode run_mode)
Set the current run mode.
Definition: suricata.c:306
SCInstance_::run_mode
enum SCRunModes run_mode
Definition: suricata.h:135
SCInstance_::firewall_rule_file
char * firewall_rule_file
Definition: suricata.h:143
g_disable_hashing
bool g_disable_hashing
Definition: suricata.c:218
SCInstance_::groupid
uint32_t groupid
Definition: suricata.h:157
SCInstance_::aux_run_mode
enum SCRunModes aux_run_mode
Definition: suricata.h:136
SCInstance_::daemon
int daemon
Definition: suricata.h:168
SCInstance_::checksum_validation
int checksum_validation
Definition: suricata.h:171
SCInstance_::do_setuid
bool do_setuid
Definition: suricata.h:153
SCInstance_::start_time
struct timeval start_time
Definition: suricata.h:174
g_vlan_mask
uint16_t g_vlan_mask
Definition: suricata.c:206
g_livedev_mask
uint16_t g_livedev_mask
Definition: suricata.c:210
SCInstance_::do_setgid
bool do_setgid
Definition: suricata.h:154
SCInstance
struct SCInstance_ SCInstance
RunmodeIsUnittests
int RunmodeIsUnittests(void)
Definition: suricata.c:292
SCInstance_::group_name
const char * group_name
Definition: suricata.h:152
SCEnableDefaultSignalHandlers
void SCEnableDefaultSignalHandlers(void)
Enable default signal handlers.
Definition: suricata.c:311
ENGINE_MODE_FIREWALL
@ ENGINE_MODE_FIREWALL
Definition: suricata.h:111
SCInstance_::runmode_custom_mode
char * runmode_custom_mode
Definition: suricata.h:149
EngineModeIsFirewall
bool EngineModeIsFirewall(void)
Definition: suricata.c:239
EngineModeSetIPS
void EngineModeSetIPS(const enum EngineHostMode)
Definition: suricata.c:264
SCInstance_::userid
uint32_t userid
Definition: suricata.h:156
InitGlobal
int InitGlobal(void)
Global initialization common to all runmodes.
Definition: suricata.c:3048
ENGINE_MODE_IPS
@ ENGINE_MODE_IPS
Definition: suricata.h:110
EngineStop
void EngineStop(void)
make sure threads can stop the engine by calling this function. Purpose: pcap file mode needs to be a...
Definition: suricata.c:492
SCInstance_::output_flush_interval
int output_flush_interval
Definition: suricata.h:172
PreRunPostPrivsDropInit
void PreRunPostPrivsDropInit(const int runmode)
Definition: suricata.c:2372
SCInstance_::conf_filename
const char * conf_filename
Definition: suricata.h:178
SCLoadYamlConfig
TmEcode SCLoadYamlConfig(void)
Definition: suricata.c:1045
SCRunModes
SCRunModes
Definition: runmodes.h:27
SCInstance_::capture_plugin_name
const char * capture_plugin_name
Definition: suricata.h:183
EngineMode
EngineMode
Definition: suricata.h:106
SCInstance_::set_datadir
bool set_datadir
Definition: suricata.h:161
SuricataShutdown
void SuricataShutdown(void)
Definition: suricata.c:3186
SCInstance_::capture_plugin_args
const char * capture_plugin_args
Definition: suricata.h:184
EngineModeIsIPS
int EngineModeIsIPS(void)
Definition: suricata.c:246
EngineDone
void EngineDone(void)
Used to indicate that the current task is done.
Definition: suricata.c:503
ENGINE_MODE_UNKNOWN
@ ENGINE_MODE_UNKNOWN
Definition: suricata.h:107
PostConfLoadedDetectSetup
void PostConfLoadedDetectSetup(SCInstance *suri)
Definition: suricata.c:2694
GlobalsInitPreConfig
void GlobalsInitPreConfig(void)
Definition: suricata.c:404
SCInstance_::unix_socket_enabled
bool unix_socket_enabled
Definition: suricata.h:162
ENGINE_HOST_IS_ROUTER
@ ENGINE_HOST_IS_ROUTER
Definition: suricata.h:117
SCInstance_::delayed_detect
int delayed_detect
Definition: suricata.h:166
SCInstance_::progname
const char * progname
Definition: suricata.h:177
SCInstance_::pcap_dev
char pcap_dev[128]
Definition: suricata.h:138
GlobalsDestroy
void GlobalsDestroy(void)
Definition: suricata.c:412
SCInstance_::user_name
const char * user_name
Definition: suricata.h:151
SCInstance_::offline
int offline
Definition: suricata.h:169
SuricataMainLoop
void SuricataMainLoop(void)
Definition: suricata.c:3005
SURICATA_DEINIT
@ SURICATA_DEINIT
Definition: suricata.h:102
GetProgramVersion
const char * GetProgramVersion(void)
get string with program version
Definition: suricata.c:1219
EngineModeSetIDS
void EngineModeSetIDS(void)
Definition: suricata.c:276
SCInstance_::verbose
int verbose
Definition: suricata.h:170
SURICATA_INIT
@ SURICATA_INIT
Definition: suricata.h:100
TmEcode
TmEcode
Definition: tm-threads-common.h:80
SCInstance_::additional_configs
const char ** additional_configs
Definition: suricata.h:179
EngineModeSetFirewall
void EngineModeSetFirewall(const enum EngineHostMode)
Definition: suricata.c:258
SCInstance_::set_logdir
bool set_logdir
Definition: suricata.h:160
SCInstance_::log_dir
const char * log_dir
Definition: suricata.h:176
runmodes.h
g_recurlvl_mask
uint8_t g_recurlvl_mask
Definition: suricata.c:214
SuricataInit
void SuricataInit(void)
Definition: suricata.c:3093
SCStartInternalRunMode
int SCStartInternalRunMode(int argc, char **argv)
Definition: suricata.c:2446
SCInstance_::strict_rule_parsing_string
char * strict_rule_parsing_string
Definition: suricata.h:181
suricata-common.h
EngineModeIsUnknown
int EngineModeIsUnknown(void)
Definition: suricata.c:234
SCInstance_::sig_file
char * sig_file
Definition: suricata.h:139
EngineHostModeIsSniffer
bool EngineHostModeIsSniffer(void)
Definition: suricata.c:281
PreRunInit
void PreRunInit(const int runmode)
Definition: suricata.c:2342
SCInstance_::system
bool system
Definition: suricata.h:159
SCInstance_::pid_filename
char * pid_filename
Definition: suricata.h:141
SCInstance_::install_signal_handlers
bool install_signal_handlers
Definition: suricata.h:164
PostRunDeinit
void PostRunDeinit(const int runmode, struct timeval *start_time)
clean up / shutdown code for packet modes
Definition: suricata.c:2388
SCFinalizeRunMode
int SCFinalizeRunMode(void)
Definition: suricata.c:2520
SURICATA_RUNTIME
@ SURICATA_RUNTIME
Definition: suricata.h:101
SuricataPostInit
void SuricataPostInit(void)
Definition: suricata.c:3197
EngineModeIsIDS
int EngineModeIsIDS(void)
Definition: suricata.c:252
SCInstance_::firewall_rule_file_exclusive
bool firewall_rule_file_exclusive
Definition: suricata.h:144
SuricataPreInit
void SuricataPreInit(const char *progname)
Definition: suricata.c:3084
EngineHostModeIsBridge
bool EngineHostModeIsBridge(void)
Definition: suricata.c:286
SCInstance_
Definition: suricata.h:134
SCRunmodeGet
SCRunMode SCRunmodeGet(void)
Get the current run mode.
Definition: suricata.c:301
SCInstance_::disabled_detect
int disabled_detect
Definition: suricata.h:167
EngineHostMode
EngineHostMode
Definition: suricata.h:115
ENGINE_HOST_IS_BRIDGE
@ ENGINE_HOST_IS_BRIDGE
Definition: suricata.h:118
ENGINE_MODE_IDS
@ ENGINE_MODE_IDS
Definition: suricata.h:108
SCInstance_::sig_file_exclusive
bool sig_file_exclusive
Definition: suricata.h:140
RegisterAllModules
void RegisterAllModules(void)
Definition: suricata.c:980
SCInstance_::regex_arg
char * regex_arg
Definition: suricata.h:142
SCParseCommandLine
TmEcode SCParseCommandLine(int argc, char **argv)
Definition: suricata.c:1432
SCInstance_::additional_plugins
const char ** additional_plugins
Definition: suricata.h:180
suricata_ctl_flags
volatile uint8_t suricata_ctl_flags
Definition: suricata.c:176
g_disable_randomness
int g_disable_randomness
Definition: suricata.c:199
SCInstance_::keyword_info
char * keyword_info
Definition: suricata.h:148
ENGINE_HOST_IS_SNIFFER_ONLY
@ ENGINE_HOST_IS_SNIFFER_ONLY
Definition: suricata.h:116
SuriHasSigFile
int SuriHasSigFile(void)
Definition: suricata.c:229
GetDocURL
const char * GetDocURL(void)
Definition: suricata.c:1198
PostConfLoadedSetup
int PostConfLoadedSetup(SCInstance *suri)
Definition: suricata.c:2799