suricata
runmodes.c
Go to the documentation of this file.
1 /* Copyright (C) 2007-2024 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 /** \file
19  *
20  * \author Victor Julien <victor@inliniac.net>
21  *
22  * Pre-cooked threading runmodes.
23  */
24 
25 #include "suricata-common.h"
26 #include "detect-engine.h"
27 #include "app-layer-parser.h"
28 #include "util-debug.h"
29 #include "util-affinity.h"
30 #include "conf.h"
31 #include "log-flush.h"
32 #include "runmodes.h"
33 #include "runmode-af-packet.h"
34 #include "runmode-af-xdp.h"
35 #include "runmode-dpdk.h"
36 #include "runmode-erf-dag.h"
37 #include "runmode-erf-file.h"
38 #include "runmode-ipfw.h"
39 #include "runmode-lib.h"
40 #include "runmode-netmap.h"
41 #include "runmode-nflog.h"
42 #include "runmode-nfq.h"
43 #include "runmode-pcap.h"
44 #include "runmode-pcap-file.h"
45 #include "runmode-unix-socket.h"
46 #include "runmode-windivert.h"
47 #include "util-unittest.h"
48 #include "util-misc.h"
49 #include "util-plugin.h"
50 
51 #include "output.h"
52 
53 #include "tmqh-flow.h"
54 #include "flow-manager.h"
55 #include "flow-bypass.h"
56 #include "counters.h"
57 
58 #include "suricata-plugin.h"
59 #include "util-device-private.h"
60 
64 
65 /* Runmode Global Thread Names */
66 const char *thread_name_autofp = "RX";
67 const char *thread_name_single = "W";
68 const char *thread_name_workers = "W";
69 const char *thread_name_verdict = "TX";
70 const char *thread_name_flow_mgr = "FM";
71 const char *thread_name_flow_rec = "FR";
72 const char *thread_name_flow_bypass = "FB";
73 const char *thread_name_unix_socket = "US";
74 const char *thread_name_detect_loader = "DL";
75 const char *thread_name_counter_stats = "CS";
76 const char *thread_name_counter_wakeup = "CW";
77 const char *thread_name_heartbeat = "HB";
78 
79 /**
80  * \brief Holds description for a runmode.
81  */
82 typedef struct RunMode_ {
83  /* the runmode type */
84  enum SCRunModes runmode;
85  const char *name;
86  const char *description;
87  /* runmode function */
88  int (*RunModeFunc)(void);
89  int (*RunModeIsIPSEnabled)(void);
91 
92 typedef struct RunModes_ {
93  int cnt;
96 
97 static RunModes runmodes[RUNMODE_USER_MAX];
98 
99 static char *active_runmode;
100 
101 /* free list for our outputs */
102 typedef struct OutputFreeList_ {
105 
106  TAILQ_ENTRY(OutputFreeList_) entries;
108 static TAILQ_HEAD(, OutputFreeList_) output_free_list =
109  TAILQ_HEAD_INITIALIZER(output_free_list);
110 
111 /**
112  * \internal
113  * \brief Translate a runmode mode to a printable string.
114  *
115  * \param runmode Runmode to be converted into a printable string.
116  *
117  * \retval string Printable string.
118  */
119 static const char *RunModeTranslateModeToName(int runmode)
120 {
121  switch (runmode) {
122  case RUNMODE_PCAP_DEV:
123  return "PCAP_DEV";
124  case RUNMODE_PCAP_FILE:
125  return "PCAP_FILE";
126  case RUNMODE_PLUGIN:
127  return "PLUGIN";
128  case RUNMODE_NFQ:
129  return "NFQ";
130  case RUNMODE_NFLOG:
131  return "NFLOG";
132  case RUNMODE_IPFW:
133  return "IPFW";
134  case RUNMODE_ERF_FILE:
135  return "ERF_FILE";
136  case RUNMODE_DAG:
137  return "ERF_DAG";
138  case RUNMODE_UNITTEST:
139  return "UNITTEST";
140  case RUNMODE_AFP_DEV:
141  return "AF_PACKET_DEV";
142  case RUNMODE_AFXDP_DEV:
143  return "AF_XDP_DEV";
144  case RUNMODE_NETMAP:
145 #ifdef HAVE_NETMAP
146  return "NETMAP";
147 #else
148  return "NETMAP(DISABLED)";
149 #endif
150  case RUNMODE_UNIX_SOCKET:
151  return "UNIX_SOCKET";
152  case RUNMODE_WINDIVERT:
153 #ifdef WINDIVERT
154  return "WINDIVERT";
155 #else
156  return "WINDIVERT(DISABLED)";
157 #endif
158  case RUNMODE_DPDK:
159 #ifdef HAVE_DPDK
160  return "DPDK";
161 #else
162  return "DPDK(DISABLED)";
163 #endif
164  case RUNMODE_LIB:
165  return "LIB";
166 
167  default:
168  FatalError("Unknown runtime mode. Aborting");
169  }
170 }
171 
172 /**
173  * \internal
174  * \brief Dispatcher function for runmodes. Calls the required runmode function
175  * based on runmode + runmode_custom_id.
176  *
177  * \param runmode The runmode type.
178  * \param runmode_custom_id The runmode custom id.
179  */
180 static RunMode *RunModeGetCustomMode(enum SCRunModes runmode, const char *custom_mode)
181 {
182  if (runmode < RUNMODE_USER_MAX) {
183  for (int i = 0; i < runmodes[runmode].cnt; i++) {
184  if (strcmp(runmodes[runmode].runmodes[i].name, custom_mode) == 0)
185  return &runmodes[runmode].runmodes[i];
186  }
187  }
188  return NULL;
189 }
190 
191 
192 /**
193  * Return the running mode
194  *
195  * The returned string must not be freed.
196  *
197  * \return a string containing the current running mode
198  */
199 char *RunmodeGetActive(void)
200 {
201  return active_runmode;
202 }
203 
205 {
206  return RunmodeGetActive() && (strcmp(RunmodeGetActive(), "workers") == 0);
207 }
208 
209 bool RunmodeIsAutofp(void)
210 {
211  return RunmodeGetActive() && (strcmp(RunmodeGetActive(), "autofp") == 0);
212 }
213 
214 /**
215  * Return the running mode
216  *
217  * The returned string must not be freed.
218  *
219  * \return a string containing the current running mode
220  */
221 const char *RunModeGetMainMode(void)
222 {
223  int mainmode = SCRunmodeGet();
224 
225  return RunModeTranslateModeToName(mainmode);
226 }
227 
228 /**
229  * \brief Register all runmodes in the engine.
230  */
232 {
233  memset(runmodes, 0, sizeof(runmodes));
234 
248 #ifdef UNITTESTS
250 #endif
251 }
252 
253 /**
254  * \brief Lists all registered runmodes.
255  */
257 {
258  printf("------------------------------------- Runmodes -------------------"
259  "-----------------------\n");
260 
261  printf("| %-17s | %-17s | %-10s \n",
262  "RunMode Type", "Custom Mode ", "Description");
263  printf("|-----------------------------------------------------------------"
264  "-----------------------\n");
265  int i = RUNMODE_UNKNOWN + 1;
266  int j = 0;
267  for ( ; i < RUNMODE_USER_MAX; i++) {
268  int mode_displayed = 0;
269  for (j = 0; j < runmodes[i].cnt; j++) {
270  if (mode_displayed == 1) {
271  printf("| ----------------------------------------------"
272  "-----------------------\n");
273  RunMode *runmode = &runmodes[i].runmodes[j];
274  printf("| %-17s | %-17s | %-27s \n",
275  "",
276  runmode->name,
277  runmode->description);
278  } else {
279  RunMode *runmode = &runmodes[i].runmodes[j];
280  printf("| %-17s | %-17s | %-27s \n",
281  RunModeTranslateModeToName(runmode->runmode),
282  runmode->name,
283  runmode->description);
284  }
285  if (mode_displayed == 0)
286  mode_displayed = 1;
287  }
288  if (mode_displayed == 1) {
289  printf("|-----------------------------------------------------------------"
290  "-----------------------\n");
291  }
292  }
293 }
294 
295 static const char *RunModeGetConfOrDefault(int capture_mode, const char *capture_plugin_name)
296 {
297  const char *custom_mode = NULL;
298  const char *val = NULL;
299  if (SCConfGet("runmode", &val) != 1) {
300  custom_mode = NULL;
301  } else {
302  custom_mode = val;
303  }
304 
305  if ((custom_mode == NULL) || (strcmp(custom_mode, "auto") == 0)) {
306  switch (capture_mode) {
307  case RUNMODE_PCAP_DEV:
308  custom_mode = RunModeIdsGetDefaultMode();
309  break;
310  case RUNMODE_PCAP_FILE:
311  custom_mode = RunModeFilePcapGetDefaultMode();
312  break;
313  case RUNMODE_PLUGIN: {
314 #ifdef HAVE_PLUGINS
315  SCCapturePlugin *plugin = SCPluginFindCaptureByName(capture_plugin_name);
316  if (plugin == NULL) {
317  FatalError("No capture plugin found with name %s", capture_plugin_name);
318  }
319  custom_mode = (const char *)plugin->GetDefaultMode();
320 #endif
321  break;
322  }
323  case RUNMODE_NFQ:
324  custom_mode = RunModeIpsNFQGetDefaultMode();
325  break;
326  case RUNMODE_IPFW:
327  custom_mode = RunModeIpsIPFWGetDefaultMode();
328  break;
329  case RUNMODE_ERF_FILE:
330  custom_mode = RunModeErfFileGetDefaultMode();
331  break;
332  case RUNMODE_DAG:
333  custom_mode = RunModeErfDagGetDefaultMode();
334  break;
335  case RUNMODE_AFP_DEV:
336  custom_mode = RunModeAFPGetDefaultMode();
337  break;
338  case RUNMODE_AFXDP_DEV:
339  custom_mode = RunModeAFXDPGetDefaultMode();
340  break;
341  case RUNMODE_NETMAP:
342  custom_mode = RunModeNetmapGetDefaultMode();
343  break;
344  case RUNMODE_UNIX_SOCKET:
345  custom_mode = RunModeUnixSocketGetDefaultMode();
346  break;
347  case RUNMODE_NFLOG:
348  custom_mode = RunModeIdsNflogGetDefaultMode();
349  break;
350 #ifdef WINDIVERT
351  case RUNMODE_WINDIVERT:
352  custom_mode = RunModeIpsWinDivertGetDefaultMode();
353  break;
354 #endif
355 #ifdef HAVE_DPDK
356  case RUNMODE_DPDK:
357  custom_mode = RunModeDpdkGetDefaultMode();
358  break;
359 #endif
360  default:
361  return NULL;
362  }
363  } else {
364  /* Add compatibility with old 'worker' name */
365  if (!strcmp("worker", custom_mode)) {
366  SCLogWarning("'worker' mode have been renamed "
367  "to 'workers', please modify your setup.");
368  custom_mode = "workers";
369  }
370  }
371 
372  return custom_mode;
373 }
374 
375 int RunModeEngineIsIPS(int capture_mode, const char *runmode, const char *capture_plugin_name)
376 {
377  if (runmode == NULL) {
378  runmode = RunModeGetConfOrDefault(capture_mode, capture_plugin_name);
379  if (runmode == NULL) // non-standard runmode
380  return 0;
381  }
382 
383  RunMode *mode = RunModeGetCustomMode(capture_mode, runmode);
384  if (mode == NULL) {
385  return 0;
386  }
387 
388  int ips_enabled = 0;
389  if (mode->RunModeIsIPSEnabled != NULL) {
390  ips_enabled = mode->RunModeIsIPSEnabled();
391  if (ips_enabled == 1) {
392  extern uint16_t g_livedev_mask;
393  if (g_livedev_mask != 0 && LiveGetDeviceCount() > 0) {
394  SCLogWarning("disabling livedev.use-for-tracking with IPS mode. See ticket #6726.");
395  g_livedev_mask = 0;
396  }
397  }
398  }
399 
400  return ips_enabled;
401 }
402 
403 /**
404  */
405 void RunModeDispatch(int runmode, const char *custom_mode, const char *capture_plugin_name,
406  const char *capture_plugin_args)
407 {
408  char *local_custom_mode = NULL;
409 
410  if (custom_mode == NULL) {
411  custom_mode = RunModeGetConfOrDefault(runmode, capture_plugin_name);
412  if (custom_mode == NULL)
413  FatalError("Unknown runtime mode. Aborting");
414  }
415 
416  RunMode *mode = RunModeGetCustomMode(runmode, custom_mode);
417  if (mode == NULL) {
418  SCLogError("The custom type \"%s\" doesn't exist "
419  "for this runmode type \"%s\". Please use --list-runmodes to "
420  "see available custom types for this runmode",
421  custom_mode, RunModeTranslateModeToName(runmode));
422  exit(EXIT_FAILURE);
423  }
424 
425  /* Export the custom mode */
426  if (active_runmode) {
427  SCFree(active_runmode);
428  }
429  active_runmode = SCStrdup(custom_mode);
430  if (unlikely(active_runmode == NULL)) {
431  FatalError("Unable to dup active mode");
432  }
433 
434  if (strcasecmp(active_runmode, "autofp") == 0) {
436  }
437 
438  mode->RunModeFunc();
439 
440  if (local_custom_mode != NULL)
441  SCFree(local_custom_mode);
442 
443  /* Check if the alloted queues have at least 1 reader and writer */
445 
446  if (runmode != RUNMODE_UNIX_SOCKET) {
447  /* spawn management threads */
452  }
454  LogFlushThreads();
456  }
457 }
458 
459 static int g_runmode_needs_bypass = 0;
460 
462 {
463  g_runmode_needs_bypass = 1;
464 }
465 
467 {
468  return g_runmode_needs_bypass;
469 }
470 
471 
472 
473 /**
474  * \brief Registers a new runmode.
475  *
476  * \param runmode Runmode type.
477  * \param name Custom mode for this specific runmode type. Within each
478  * runmode type, each custom name is a primary key.
479  * \param description Description for this runmode.
480  * \param RunModeFunc The function to be run for this runmode.
481  */
482 void RunModeRegisterNewRunMode(enum SCRunModes runmode, const char *name, const char *description,
483  int (*RunModeFunc)(void), int (*RunModeIsIPSEnabled)(void))
484 {
485  if (RunModeGetCustomMode(runmode, name) != NULL) {
486  FatalError("runmode '%s' has already "
487  "been registered. Please use an unique name.",
488  name);
489  }
490 
491  DEBUG_VALIDATE_BUG_ON(runmode >= RUNMODE_USER_MAX); // help scan-build
492  void *ptmp = SCRealloc(runmodes[runmode].runmodes,
493  (runmodes[runmode].cnt + 1) * sizeof(RunMode));
494  if (ptmp == NULL) {
495  SCFree(runmodes[runmode].runmodes);
496  runmodes[runmode].runmodes = NULL;
497  exit(EXIT_FAILURE);
498  }
499  runmodes[runmode].runmodes = ptmp;
500 
501  RunMode *mode = &runmodes[runmode].runmodes[runmodes[runmode].cnt];
502  runmodes[runmode].cnt++;
503  memset(mode, 0x00, sizeof(*mode));
504 
505  mode->runmode = runmode;
506  mode->name = SCStrdup(name);
507  if (unlikely(mode->name == NULL)) {
508  FatalError("Failed to allocate string");
509  }
510  mode->description = SCStrdup(description);
511  if (unlikely(mode->description == NULL)) {
512  FatalError("Failed to allocate string");
513  }
514  mode->RunModeFunc = RunModeFunc;
515  mode->RunModeIsIPSEnabled = RunModeIsIPSEnabled;
516 }
517 
518 /**
519  * Setup the outputs for this run mode.
520  *
521  * \param tv The ThreadVars for the thread the outputs will be
522  * appended to.
523  */
524 static void RunOutputFreeList(void)
525 {
526  OutputFreeList *output;
527  while ((output = TAILQ_FIRST(&output_free_list))) {
528  TAILQ_REMOVE(&output_free_list, output, entries);
529 
530  SCLogDebug("output %s %p %p", output->output_module->name, output, output->output_ctx);
531  if (output->output_ctx != NULL && output->output_ctx->DeInit != NULL)
532  output->output_ctx->DeInit(output->output_ctx);
533  SCFree(output);
534  }
535 }
536 
537 static int file_logger_count = 0;
538 static int filedata_logger_count = 0;
539 
541 {
542  return filedata_logger_count > 0;
543 }
544 
545 bool IsRunModeSystem(enum SCRunModes run_mode_to_check)
546 {
547  switch (run_mode_to_check) {
548  case RUNMODE_PCAP_FILE:
549  case RUNMODE_ERF_FILE:
551  return false;
552  break;
553  default:
554  return true;
555  }
556 }
557 
558 bool IsRunModeOffline(enum SCRunModes run_mode_to_check)
559 {
560  switch(run_mode_to_check) {
561  case RUNMODE_CONF_TEST:
562  case RUNMODE_PCAP_FILE:
563  case RUNMODE_ERF_FILE:
565  case RUNMODE_UNIX_SOCKET:
566  return true;
567  break;
568  default:
569  return false;
570  }
571 }
572 
573 /**
574  * Cleanup the run mode.
575  */
576 void RunModeShutDown(void)
577 {
578  RunOutputFreeList();
579 
587 
589 
590  /* Reset logger counts. */
591  file_logger_count = 0;
592  filedata_logger_count = 0;
593 }
594 
595 /** \internal
596  * \brief add Sub RunModeOutput to list for Submodule so we can free
597  * the output ctx at shutdown and unix socket reload */
598 static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx)
599 {
600  OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList));
601  if (unlikely(fl_output == NULL))
602  return;
603  fl_output->output_module = module;
604  fl_output->output_ctx = output_ctx;
605  TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries);
606 }
607 
608 /** \brief Turn output into thread module */
609 static void SetupOutput(
610  const char *name, OutputModule *module, OutputCtx *output_ctx, LoggerId *logger_bits)
611 {
612  /* flow logger doesn't run in the packet path */
613  if (module->FlowLogFunc) {
614  SCOutputRegisterFlowLogger(module->name, module->FlowLogFunc, output_ctx,
615  module->ThreadInit, module->ThreadDeinit);
616  return;
617  }
618  /* stats logger doesn't run in the packet path */
619  if (module->StatsLogFunc) {
620  OutputRegisterStatsLogger(module->name, module->StatsLogFunc, output_ctx,
621  module->ThreadInit, module->ThreadDeinit);
622  return;
623  }
624 
625  if (module->logger_id == LOGGER_ALERT_DEBUG) {
626  debuglog_enabled = 1;
627  }
628 
629  if (module->PacketLogFunc) {
630  SCLogDebug("%s is a packet logger", module->name);
631  SCOutputRegisterPacketLogger(module->logger_id, module->name, module->PacketLogFunc,
632  module->PacketConditionFunc, output_ctx, module->ThreadInit, module->ThreadDeinit);
633  } else if (module->TxLogFunc) {
634  SCLogDebug("%s is a tx logger", module->name);
635  SCOutputRegisterTxLogger(module->logger_id, module->name, module->alproto,
636  module->TxLogFunc, output_ctx, module->tc_log_progress, module->ts_log_progress,
637  module->TxLogCondition, module->ThreadInit, module->ThreadDeinit);
638  /* Not used with wild card loggers */
639  if (module->alproto != ALPROTO_UNKNOWN) {
640  logger_bits[module->alproto] |= BIT_U32(module->logger_id);
641  }
642  } else if (module->FiledataLogFunc) {
643  SCLogDebug("%s is a filedata logger", module->name);
645  output_ctx, module->ThreadInit, module->ThreadDeinit);
646  filedata_logger_count++;
647  } else if (module->FileLogFunc) {
648  SCLogDebug("%s is a file logger", module->name);
649  SCOutputRegisterFileLogger(module->logger_id, module->name, module->FileLogFunc, output_ctx,
650  module->ThreadInit, module->ThreadDeinit);
651  file_logger_count++;
652  } else if (module->StreamingLogFunc) {
653  SCLogDebug("%s is a streaming logger", module->name);
655  output_ctx, module->stream_type, module->ThreadInit, module->ThreadDeinit);
656  } else {
657  SCLogError("Unknown logger type: name=%s", module->name);
658  }
659 }
660 
661 static void RunModeInitializeEveOutput(
662  SCConfNode *conf, OutputCtx *parent_ctx, LoggerId *logger_bits)
663 {
664  SCConfNode *types = SCConfNodeLookupChild(conf, "types");
665  SCLogDebug("types %p", types);
666  if (types == NULL) {
667  return;
668  }
669  if (!SCConfNodeIsSequence(types)) {
670  FatalError("output types should be a sequence");
671  }
672 
673  SCConfNode *type = NULL;
674  TAILQ_FOREACH(type, &types->head, next) {
675  int sub_count = 0;
676  char subname[256];
677 
678  if (strcmp(type->val, "ikev2") == 0) {
679  SCLogWarning("eve module 'ikev2' has been replaced by 'ike'");
680  strlcpy(subname, "eve-log.ike", sizeof(subname));
681  } else {
682  snprintf(subname, sizeof(subname), "eve-log.%s", type->val);
683  }
684 
685  SCLogConfig("enabling 'eve-log' module '%s'", type->val);
686 
687  SCConfNode *sub_output_config = SCConfNodeLookupChild(type, type->val);
688  if (sub_output_config != NULL) {
689  const char *enabled = SCConfNodeLookupChildValue(sub_output_config, "enabled");
690  if (enabled != NULL && !SCConfValIsTrue(enabled)) {
691  continue;
692  }
693  }
694 
695  /* Now setup all registers logger of this name. */
696  OutputModule *sub_module;
697  TAILQ_FOREACH(sub_module, &output_modules, entries) {
698  if (strcmp(subname, sub_module->conf_name) == 0) {
699  sub_count++;
700 
701  if (sub_module->parent_name == NULL ||
702  strcmp(sub_module->parent_name, "eve-log") != 0) {
703  FatalError("bad parent for %s", subname);
704  }
705  if (sub_module->InitSubFunc == NULL) {
706  FatalError("bad sub-module for %s", subname);
707  }
708 
709  /* pass on parent output_ctx */
710  OutputInitResult result =
711  sub_module->InitSubFunc(sub_output_config, parent_ctx);
712  if (!result.ok || result.ctx == NULL) {
713  FatalError("unable to initialize sub-module %s", subname);
714  }
715 
716  AddOutputToFreeList(sub_module, result.ctx);
717  SetupOutput(sub_module->name, sub_module, result.ctx, logger_bits);
718  }
719  }
720 
721  /* Error is no registered loggers with this name
722  * were found .*/
723  if (!sub_count) {
724  FatalErrorOnInit("No output module named %s", subname);
725  continue;
726  }
727  }
728 }
729 
730 static void RunModeInitializeLuaOutput(
731  SCConfNode *conf, OutputCtx *parent_ctx, LoggerId *logger_bits)
732 {
733  OutputModule *lua_module = OutputGetModuleByConfName("lua");
734  BUG_ON(lua_module == NULL);
735 
736  SCConfNode *scripts = SCConfNodeLookupChild(conf, "scripts");
737  BUG_ON(scripts == NULL); //TODO
738 
739  OutputModule *m;
740  TAILQ_FOREACH(m, &parent_ctx->submodules, entries) {
741  SCLogDebug("m %p %s:%s", m, m->name, m->conf_name);
742 
743  SCConfNode *script = NULL;
744  TAILQ_FOREACH(script, &scripts->head, next) {
745  SCLogDebug("script %s", script->val);
746  if (strcmp(script->val, m->conf_name) == 0) {
747  break;
748  }
749  }
750  BUG_ON(script == NULL);
751 
752  /* pass on parent output_ctx */
753  OutputInitResult result = m->InitSubFunc(script, parent_ctx);
754  if (!result.ok || result.ctx == NULL) {
755  continue;
756  }
757 
758  AddOutputToFreeList(m, result.ctx);
759  SetupOutput(m->name, m, result.ctx, logger_bits);
760  }
761 }
762 
763 extern bool g_file_logger_enabled;
764 extern bool g_filedata_logger_enabled;
765 
766 /**
767  * Initialize the output modules.
768  */
770 {
771  SCConfNode *outputs = SCConfGetNode("outputs");
772  if (outputs == NULL) {
773  /* No "outputs" section in the configuration. */
774  return;
775  }
776 
777  SCConfNode *output, *output_config;
778  const char *enabled;
779  char tls_log_enabled = 0;
780  char tls_store_present = 0;
781 
782  // g_alproto_max is set to its final value
783  LoggerId logger_bits[g_alproto_max];
784  memset(logger_bits, 0, g_alproto_max * sizeof(LoggerId));
785  TAILQ_FOREACH(output, &outputs->head, next) {
786 
787  output_config = SCConfNodeLookupChild(output, output->val);
788  if (output_config == NULL) {
789  /* Shouldn't happen. */
790  FatalError("Failed to lookup configuration child node: %s", output->val);
791  }
792 
793  if (strcmp(output->val, "tls-store") == 0) {
794  tls_store_present = 1;
795  }
796 
797  enabled = SCConfNodeLookupChildValue(output_config, "enabled");
798  if (enabled == NULL || !SCConfValIsTrue(enabled)) {
799  continue;
800  }
801 
802  if (strcmp(output->val, "file-log") == 0) {
803  SCLogWarning("file-log is no longer supported,"
804  " use eve.files instead "
805  "(see ticket #2376"
806  " for an explanation)");
807  continue;
808  } else if (strncmp(output->val, "unified-", sizeof("unified-") - 1) == 0) {
809  SCLogWarning("Unified1 is no longer supported,"
810  " use Unified2 instead "
811  "(see ticket #353"
812  " for an explanation)");
813  continue;
814  } else if (strncmp(output->val, "unified2-", sizeof("unified2-") - 1) == 0) {
815  SCLogWarning("Unified2 is no longer supported.");
816  continue;
817  } else if (strcmp(output->val, "dns-log") == 0) {
818  SCLogWarning("dns-log is not longer available as of Suricata 5.0");
819  continue;
820  } else if (strcmp(output->val, "tls-log") == 0) {
821  tls_log_enabled = 1;
822  }
823 
824  OutputModule *module;
825  int count = 0;
826  TAILQ_FOREACH(module, &output_modules, entries) {
827  if (strcmp(module->conf_name, output->val) != 0) {
828  continue;
829  }
830 
831  count++;
832 
833  OutputCtx *output_ctx = NULL;
834  if (module->InitFunc != NULL) {
835  OutputInitResult r = module->InitFunc(output_config);
836  if (!r.ok) {
837  FatalErrorOnInit("output module \"%s\": setup failed", output->val);
838  continue;
839  } else if (r.ctx == NULL) {
840  continue;
841  }
842  output_ctx = r.ctx;
843  } else if (module->InitSubFunc != NULL) {
844  SCLogInfo("skipping submodule");
845  continue;
846  }
847 
848  // TODO if module == parent, find it's children
849  if (strcmp(output->val, "eve-log") == 0) {
850  RunModeInitializeEveOutput(output_config, output_ctx, logger_bits);
851 
852  /* add 'eve-log' to free list as it's the owner of the
853  * main output ctx from which the sub-modules share the
854  * LogFileCtx */
855  AddOutputToFreeList(module, output_ctx);
856  } else if (strcmp(output->val, "lua") == 0) {
857  SCLogDebug("handle lua");
858  if (output_ctx == NULL)
859  continue;
860  RunModeInitializeLuaOutput(output_config, output_ctx, logger_bits);
861  AddOutputToFreeList(module, output_ctx);
862  } else {
863  AddOutputToFreeList(module, output_ctx);
864  SetupOutput(module->name, module, output_ctx, logger_bits);
865  }
866  }
867  if (count == 0) {
868  FatalErrorOnInit("No output module named %s", output->val);
869  continue;
870  }
871  }
872 
873  /* Backward compatibility code */
874  if (!tls_store_present && tls_log_enabled) {
875  /* old YAML with no "tls-store" in outputs. "tls-log" value needs
876  * to be started using 'tls-log' config as own config */
877  SCLogWarning("Please use 'tls-store' in YAML to configure TLS storage");
878 
879  TAILQ_FOREACH(output, &outputs->head, next) {
880  output_config = SCConfNodeLookupChild(output, output->val);
881 
882  if (strcmp(output->val, "tls-log") == 0) {
883 
884  OutputModule *module = OutputGetModuleByConfName("tls-store");
885  if (module == NULL) {
886  SCLogWarning("No output module named %s, ignoring", "tls-store");
887  continue;
888  }
889 
890  OutputCtx *output_ctx = NULL;
891  if (module->InitFunc != NULL) {
892  OutputInitResult r = module->InitFunc(output_config);
893  if (!r.ok) {
894  FatalErrorOnInit("output module setup failed");
895  continue;
896  } else if (r.ctx == NULL) {
897  continue;
898  }
899  output_ctx = r.ctx;
900  }
901 
902  AddOutputToFreeList(module, output_ctx);
903  SetupOutput(module->name, module, output_ctx, logger_bits);
904  }
905  }
906  }
907 
908  /* register the logger bits to the app-layer */
909  AppProto a;
910  for (a = 0; a < g_alproto_max; a++) {
911  if (AppLayerParserSupportsFiles(IPPROTO_TCP, a)) {
913  logger_bits[a] |= BIT_U32(LOGGER_FILE);
915  logger_bits[a] |= BIT_U32(LOGGER_FILEDATA);
916  SCLogDebug("IPPROTO_TCP::%s: g_file_logger_enabled %d g_filedata_logger_enabled %d -> "
917  "%08x",
919  logger_bits[a]);
920  }
921  if (AppLayerParserSupportsFiles(IPPROTO_UDP, a)) {
923  logger_bits[a] |= BIT_U32(LOGGER_FILE);
925  logger_bits[a] |= BIT_U32(LOGGER_FILEDATA);
926  }
927 
928  if (logger_bits[a] == 0)
929  continue;
930 
931  const int tcp = AppLayerParserProtocolHasLogger(IPPROTO_TCP, a) | (g_file_logger_enabled) |
933  const int udp = AppLayerParserProtocolHasLogger(IPPROTO_UDP, a) | (g_file_logger_enabled) |
935  SCLogDebug("tcp %d udp %d", tcp, udp);
936 
937  SCLogDebug("logger for %s: %s %s", AppProtoToString(a),
938  tcp ? "true" : "false", udp ? "true" : "false");
939 
940  SCLogDebug("logger bits for %s: %08x", AppProtoToString(a), logger_bits[a]);
941  if (tcp)
942  AppLayerParserRegisterLoggerBits(IPPROTO_TCP, a, logger_bits[a]);
943  if (udp)
944  AppLayerParserRegisterLoggerBits(IPPROTO_UDP, a, logger_bits[a]);
945  }
947 }
948 
950 
951 /**
952  * Initialize multithreading settings.
953  */
955 {
956  int affinity = 0;
957  if ((SCConfGetBool("threading.set-cpu-affinity", &affinity)) == 0) {
959  } else {
960  threading_set_cpu_affinity = affinity == 1;
961  }
962 
963  /* try to get custom cpu mask value if needed */
966  }
967  if ((SCConfGetFloat("threading.detect-thread-ratio", &threading_detect_ratio)) != 1) {
968  if (SCConfGetNode("threading.detect-thread-ratio") != NULL)
969  WarnInvalidConfEntry("threading.detect-thread-ratio", "%s", "1");
971  }
972 
973  SCLogDebug("threading.detect-thread-ratio %f", threading_detect_ratio);
974 
975  /*
976  * Check if there's a configuration setting for the per-thread stack size
977  * in case the default per-thread stack size is to be adjusted
978  */
979  const char *ss = NULL;
980  if ((SCConfGet("threading.stack-size", &ss)) == 1) {
981  if (ss != NULL) {
983  FatalError("Failed to initialize thread_stack_size output, invalid limit: %s", ss);
984  }
985  }
986  } else {
987  pthread_attr_t attr;
988  pthread_attr_init(&attr);
989  size_t size;
990  if (pthread_attr_getstacksize(&attr, &size) == 0 && size < 512 * 1024) {
991  threading_set_stack_size = 512 * 1024;
992  SCLogNotice("thread stack size of %" PRIuMAX " too small: setting to 512k",
993  (uintmax_t)size);
994  }
995  }
996 
997  SCLogDebug("threading.stack-size %" PRIu64, threading_set_stack_size);
998 }
thread_name_workers
const char * thread_name_workers
Definition: runmodes.c:68
RunModeIpsIPFWGetDefaultMode
const char * RunModeIpsIPFWGetDefaultMode(void)
Definition: runmode-ipfw.c:44
FlowManagerThreadSpawn
void FlowManagerThreadSpawn(void)
spawn the flow manager thread
Definition: flow-manager.c:1010
suricata-plugin.h
AffinitySetupLoadFromConfig
void AffinitySetupLoadFromConfig(void)
Extract CPU affinity configuration from current config file.
Definition: util-affinity.c:588
RUNMODE_ENGINE_ANALYSIS
@ RUNMODE_ENGINE_ANALYSIS
Definition: runmodes.h:58
util-device-private.h
OutputModule_::parent_name
const char * parent_name
Definition: output.h:60
TmThreadsSealThreads
void TmThreadsSealThreads(void)
Definition: tm-threads.c:2155
thread_name_counter_wakeup
const char * thread_name_counter_wakeup
Definition: runmodes.c:76
log-flush.h
OutputModule_::FileLogFunc
SCFileLogger FileLogFunc
Definition: output.h:71
flow-bypass.h
RunMode_::description
const char * description
Definition: runmodes.c:86
g_livedev_mask
uint16_t g_livedev_mask
Definition: suricata.c:210
SCConfValIsTrue
int SCConfValIsTrue(const char *val)
Check if a value is true.
Definition: conf.c:552
RUNMODE_AFXDP_DEV
@ RUNMODE_AFXDP_DEV
Definition: runmodes.h:37
detect-engine.h
threading_set_cpu_affinity
bool threading_set_cpu_affinity
Definition: runmodes.c:62
RunModeErfFileRegister
void RunModeErfFileRegister(void)
Definition: runmode-erf-file.c:39
OutputStreamingShutdown
void OutputStreamingShutdown(void)
Definition: output-streaming.c:437
RunMode_::RunModeIsIPSEnabled
int(* RunModeIsIPSEnabled)(void)
Definition: runmodes.c:89
AppLayerParserProtocolHasLogger
int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1565
thread_name_flow_mgr
const char * thread_name_flow_mgr
Definition: runmodes.c:70
RunModeErfFileGetDefaultMode
const char * RunModeErfFileGetDefaultMode(void)
Definition: runmode-erf-file.c:34
IsRunModeOffline
bool IsRunModeOffline(enum SCRunModes run_mode_to_check)
Definition: runmodes.c:558
RUNMODE_NFLOG
@ RUNMODE_NFLOG
Definition: runmodes.h:32
runmode-af-packet.h
unlikely
#define unlikely(expr)
Definition: util-optimize.h:35
RUNMODE_UNKNOWN
@ RUNMODE_UNKNOWN
Definition: runmodes.h:28
LOGGER_FILEDATA
@ LOGGER_FILEDATA
Definition: suricata-common.h:492
OutputTxShutdown
void OutputTxShutdown(void)
Definition: output-tx.c:667
TmqhFlowPrintAutofpHandler
void TmqhFlowPrintAutofpHandler(void)
Definition: tmqh-flow.c:84
RunModeIdsAFPRegister
void RunModeIdsAFPRegister(void)
Definition: runmode-af-packet.c:133
SCLogDebug
#define SCLogDebug(...)
Definition: util-debug.h:282
ParseSizeStringU64
int ParseSizeStringU64(const char *size, uint64_t *res)
Definition: util-misc.c:191
next
struct HtpBodyChunk_ * next
Definition: app-layer-htp.h:0
BypassedFlowManagerThreadSpawn
void BypassedFlowManagerThreadSpawn(void)
spawn the flow bypass manager thread
Definition: flow-bypass.c:189
name
const char * name
Definition: detect-engine-proto.c:48
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:86
RunModeShutDown
void RunModeShutDown(void)
Definition: runmodes.c:576
RunModeDispatch
void RunModeDispatch(int runmode, const char *custom_mode, const char *capture_plugin_name, const char *capture_plugin_args)
Definition: runmodes.c:405
OutputModule_::name
const char * name
Definition: output.h:58
thread_name_counter_stats
const char * thread_name_counter_stats
Definition: runmodes.c:75
RUNMODE_NFQ
@ RUNMODE_NFQ
Definition: runmodes.h:31
SCOutputRegisterStreamingLogger
int SCOutputRegisterStreamingLogger(LoggerId id, const char *name, SCStreamingLogger LogFunc, void *initdata, enum SCOutputStreamingType type, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a streaming logger.
Definition: output-streaming.c:63
OutputModule_::logger_id
LoggerId logger_id
Definition: output.h:57
LoggerId
LoggerId
Definition: suricata-common.h:482
AppProtoToString
const char * AppProtoToString(AppProto alproto)
Maps the ALPROTO_*, to its string equivalent.
Definition: app-layer-protos.c:41
runmode-pcap.h
AppLayerParserSupportsFiles
bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1197
RunModeAFPGetDefaultMode
const char * RunModeAFPGetDefaultMode(void)
Definition: runmode-af-packet.c:64
thread_name_flow_rec
const char * thread_name_flow_rec
Definition: runmodes.c:71
OutputFiledataShutdown
void OutputFiledataShutdown(void)
Definition: output-filedata.c:275
SCConfGet
int SCConfGet(const char *name, const char **vptr)
Retrieve the value of a configuration node.
Definition: conf.c:351
OutputModule_::ts_log_progress
int ts_log_progress
Definition: output.h:79
runmode-erf-file.h
runmode-windivert.h
RunModeFilePcapGetDefaultMode
const char * RunModeFilePcapGetDefaultMode(void)
Definition: runmode-pcap-file.c:35
TAILQ_FOREACH
#define TAILQ_FOREACH(var, head, field)
Definition: queue.h:252
thread_name_autofp
const char * thread_name_autofp
Definition: runmodes.c:66
OutputGetModuleByConfName
OutputModule * OutputGetModuleByConfName(const char *conf_name)
Get an output module by name.
Definition: output.c:637
OutputSetupActiveLoggers
void OutputSetupActiveLoggers(void)
Definition: output.c:884
OutputModule_::StatsLogFunc
StatsLogger StatsLogFunc
Definition: output.h:75
RunModeIdsNflogGetDefaultMode
const char * RunModeIdsNflogGetDefaultMode(void)
Definition: runmode-nflog.c:206
SCConfGetBool
int SCConfGetBool(const char *name, int *val)
Retrieve a configuration value as a boolean.
Definition: conf.c:498
RunMode_::RunModeFunc
int(* RunModeFunc)(void)
Definition: runmodes.c:88
OutputStatsShutdown
void OutputStatsShutdown(void)
Definition: output-stats.c:184
TAILQ_INSERT_TAIL
#define TAILQ_INSERT_TAIL(head, elm, field)
Definition: queue.h:294
RunmodeGetActive
char * RunmodeGetActive(void)
Definition: runmodes.c:199
m
SCMutex m
Definition: flow-hash.h:6
OutputModule_::InitSubFunc
OutputInitSubFunc InitSubFunc
Definition: output.h:62
SCConfNodeLookupChildValue
const char * SCConfNodeLookupChildValue(const SCConfNode *node, const char *name)
Lookup the value of a child configuration node by name.
Definition: conf.c:852
SCOutputRegisterFlowLogger
int SCOutputRegisterFlowLogger(const char *name, FlowLogger LogFunc, void *initdata, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a flow logger.
Definition: output-flow.c:58
RunModes
struct RunModes_ RunModes
SCRunModes
SCRunModes
Definition: runmodes.h:27
OutputModule_::PacketLogFunc
PacketLogger PacketLogFunc
Definition: output.h:67
TmValidateQueueState
void TmValidateQueueState(void)
Checks if all the queues allocated so far have at least one reader and writer.
Definition: tm-queues.c:101
RunModeAFXDPGetDefaultMode
const char * RunModeAFXDPGetDefaultMode(void)
Definition: runmode-af-xdp.c:66
RUNMODE_LIB
@ RUNMODE_LIB
Definition: runmodes.h:40
OutputModule_::FiledataLogFunc
SCFiledataLogger FiledataLogFunc
Definition: output.h:72
RunModeInitializeOutputs
void RunModeInitializeOutputs(void)
Definition: runmodes.c:769
OutputRegisterStatsLogger
int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx *output_ctx, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Definition: output-stats.c:51
debuglog_enabled
int debuglog_enabled
Definition: runmodes.c:61
thread_name_single
const char * thread_name_single
Definition: runmodes.c:67
OutputModule_::alproto
AppProto alproto
Definition: output.h:76
RunModes_
Definition: runmodes.c:92
IsRunModeSystem
bool IsRunModeSystem(enum SCRunModes run_mode_to_check)
Definition: runmodes.c:545
runmode-unix-socket.h
util-unittest.h
SCCapturePlugin_::GetDefaultMode
const char *(* GetDefaultMode)(void)
Definition: suricata-plugin.h:59
OutputClearActiveLoggers
void OutputClearActiveLoggers(void)
Definition: output.c:897
SCConfNodeIsSequence
int SCConfNodeIsSequence(const SCConfNode *node)
Check if a node is a sequence or node.
Definition: conf.c:973
OutputCtx_
Definition: tm-modules.h:88
RUNMODE_UNIX_SOCKET
@ RUNMODE_UNIX_SOCKET
Definition: runmodes.h:42
strlcpy
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: util-strlcpyu.c:43
TAILQ_ENTRY
#define TAILQ_ENTRY(type)
Definition: queue.h:239
RunModeUnixSocketGetDefaultMode
const char * RunModeUnixSocketGetDefaultMode(void)
Definition: runmode-unix-socket.c:87
RunModeIpsNFQRegister
void RunModeIpsNFQRegister(void)
Definition: runmode-nfq.c:47
RUNMODE_NETMAP
@ RUNMODE_NETMAP
Definition: runmodes.h:38
OutputModule_::stream_type
enum SCOutputStreamingType stream_type
Definition: output.h:77
counters.h
RunModeInitializeThreadSettings
void RunModeInitializeThreadSettings(void)
Definition: runmodes.c:954
OutputModule_::ThreadInit
ThreadInitFunc ThreadInit
Definition: output.h:64
RunModeDpdkGetDefaultMode
const char * RunModeDpdkGetDefaultMode(void)
Definition: runmode-dpdk.c:1969
RunmodeIsWorkers
bool RunmodeIsWorkers(void)
Definition: runmodes.c:204
TAILQ_HEAD_INITIALIZER
#define TAILQ_HEAD_INITIALIZER(head)
Definition: queue.h:236
output_modules
OutputModuleList output_modules
TAILQ_REMOVE
#define TAILQ_REMOVE(head, elm, field)
Definition: queue.h:312
SCRunmodeGet
SCRunMode SCRunmodeGet(void)
Get the current run mode.
Definition: suricata.c:301
util-debug.h
RunModes_::runmodes
RunMode * runmodes
Definition: runmodes.c:94
TAILQ_FIRST
#define TAILQ_FIRST(head)
Definition: queue.h:250
thread_name_flow_bypass
const char * thread_name_flow_bypass
Definition: runmodes.c:72
RunmodeIsAutofp
bool RunmodeIsAutofp(void)
Definition: runmodes.c:209
g_alproto_max
AppProto g_alproto_max
Definition: app-layer-protos.c:30
OutputInitResult_::ctx
OutputCtx * ctx
Definition: output.h:47
OutputModule_::ThreadDeinit
ThreadDeinitFunc ThreadDeinit
Definition: output.h:65
RunModeListRunmodes
void RunModeListRunmodes(void)
Lists all registered runmodes.
Definition: runmodes.c:256
g_filedata_logger_enabled
bool g_filedata_logger_enabled
Definition: output-filedata.c:37
BIT_U32
#define BIT_U32(n)
Definition: suricata-common.h:422
threading_set_stack_size
uint64_t threading_set_stack_size
Definition: runmodes.c:63
RUNMODE_UNITTEST
@ RUNMODE_UNITTEST
Definition: runmodes.h:41
RunModeEnablesBypassManager
void RunModeEnablesBypassManager(void)
Definition: runmodes.c:461
OutputPacketShutdown
void OutputPacketShutdown(void)
Definition: output-packet.c:200
RunModeIdsNflogRegister
void RunModeIdsNflogRegister(void)
Definition: runmode-nflog.c:211
RUNMODE_DAG
@ RUNMODE_DAG
Definition: runmodes.h:35
util-affinity.h
RunMode_
Holds description for a runmode.
Definition: runmodes.c:82
SCCapturePlugin_
Definition: suricata-plugin.h:54
AppLayerParserRegisterLoggerBits
void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits)
Definition: app-layer-parser.c:486
RunModeIpsIPFWRegister
void RunModeIpsIPFWRegister(void)
Definition: runmode-ipfw.c:49
OutputModule_::StreamingLogFunc
SCStreamingLogger StreamingLogFunc
Definition: output.h:74
OutputInitResult_::ok
bool ok
Definition: output.h:48
SCLogWarning
#define SCLogWarning(...)
Macro used to log WARNING messages.
Definition: util-debug.h:262
RunModeErfDagGetDefaultMode
const char * RunModeErfDagGetDefaultMode(void)
Definition: runmode-erf-dag.c:43
app-layer-parser.h
SCOutputRegisterTxLogger
int SCOutputRegisterTxLogger(LoggerId id, const char *name, AppProto alproto, TxLogger LogFunc, void *initdata, int tc_log_progress, int ts_log_progress, TxLoggerCondition LogCondition, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a transaction logger.
Definition: output-tx.c:66
BUG_ON
#define BUG_ON(x)
Definition: suricata-common.h:322
runmode-netmap.h
RunMode_::runmode
enum SCRunModes runmode
Definition: runmodes.c:84
runmode-erf-dag.h
thread_name_detect_loader
const char * thread_name_detect_loader
Definition: runmodes.c:74
OutputModule_::conf_name
const char * conf_name
Definition: output.h:59
OutputModule_::FlowLogFunc
FlowLogger FlowLogFunc
Definition: output.h:73
RUNMODE_PLUGIN
@ RUNMODE_PLUGIN
Definition: runmodes.h:44
type
uint16_t type
Definition: decode-vlan.c:106
conf.h
OutputFileShutdown
void OutputFileShutdown(void)
Definition: output-file.c:239
RunModeRegisterNewRunMode
void RunModeRegisterNewRunMode(enum SCRunModes runmode, const char *name, const char *description, int(*RunModeFunc)(void), int(*RunModeIsIPSEnabled)(void))
Registers a new runmode.
Definition: runmodes.c:482
RUNMODE_WINDIVERT
@ RUNMODE_WINDIVERT
Definition: runmodes.h:43
runmode-pcap-file.h
FlowRecyclerThreadSpawn
void FlowRecyclerThreadSpawn(void)
spawn the flow recycler thread
Definition: flow-manager.c:1205
util-plugin.h
RUNMODE_AFP_DEV
@ RUNMODE_AFP_DEV
Definition: runmodes.h:36
RunModeErfDagRegister
void RunModeErfDagRegister(void)
Definition: runmode-erf-dag.c:48
RunMode
struct RunMode_ RunMode
Holds description for a runmode.
SCOutputRegisterPacketLogger
int SCOutputRegisterPacketLogger(LoggerId logger_id, const char *name, PacketLogger LogFunc, PacketLogCondition ConditionFunc, void *initdata, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a packet logger.
Definition: output-packet.c:55
SCOutputRegisterFileLogger
int SCOutputRegisterFileLogger(LoggerId id, const char *name, SCFileLogger LogFunc, void *initdata, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a file logger.
Definition: output-file.c:56
runmodes.h
SCLogInfo
#define SCLogInfo(...)
Macro used to log INFORMATIONAL messages.
Definition: util-debug.h:232
WarnInvalidConfEntry
#define WarnInvalidConfEntry(param_name, format, value)
Generic API that can be used by all to log an invalid conf entry.
Definition: util-misc.h:35
RunModes_::cnt
int cnt
Definition: runmodes.c:93
RunModeIpsWinDivertRegister
void RunModeIpsWinDivertRegister(void)
Definition: runmode-windivert.c:45
SCRealloc
#define SCRealloc(ptr, sz)
Definition: util-mem.h:50
OutputFreeList_::output_ctx
OutputCtx * output_ctx
Definition: runmodes.c:104
SCConfNodeLookupChild
SCConfNode * SCConfNodeLookupChild(const SCConfNode *node, const char *name)
Lookup a child configuration node by name.
Definition: conf.c:824
runmode-nfq.h
RunModeIdsAFXDPRegister
void RunModeIdsAFXDPRegister(void)
Definition: runmode-af-xdp.c:71
cnt
uint32_t cnt
Definition: tmqh-packetpool.h:7
OutputInitResult_
Definition: output.h:46
OutputModule_::TxLogCondition
TxLoggerCondition TxLogCondition
Definition: output.h:70
RunModeUnixSocketRegister
void RunModeUnixSocketRegister(void)
Definition: runmode-unix-socket.c:558
LogFlushThreads
void LogFlushThreads(void)
Definition: log-flush.c:99
flow-manager.h
suricata-common.h
OutputCtx_::DeInit
void(* DeInit)(struct OutputCtx_ *)
Definition: tm-modules.h:94
thread_name_heartbeat
const char * thread_name_heartbeat
Definition: runmodes.c:77
FatalErrorOnInit
#define FatalErrorOnInit(...)
Fatal error IF we're starting up, and configured to consider errors to be fatal errors.
Definition: util-debug.h:526
StatsSpawnThreads
void StatsSpawnThreads(void)
Spawns the wakeup, and the management thread used by the stats api.
Definition: counters.c:990
RunModeNeedsBypassManager
int RunModeNeedsBypassManager(void)
Definition: runmodes.c:466
g_file_logger_enabled
bool g_file_logger_enabled
Definition: output-file.c:39
LOGGER_ALERT_DEBUG
@ LOGGER_ALERT_DEBUG
Definition: suricata-common.h:499
RunModeIdsPcapRegister
void RunModeIdsPcapRegister(void)
Definition: runmode-pcap.c:39
RunModeRegisterRunModes
void RunModeRegisterRunModes(void)
Register all runmodes in the engine.
Definition: runmodes.c:231
SCStrdup
#define SCStrdup(s)
Definition: util-mem.h:56
RunModeFilePcapRegister
void RunModeFilePcapRegister(void)
Definition: runmode-pcap-file.c:40
FatalError
#define FatalError(...)
Definition: util-debug.h:517
OutputModule_::PacketConditionFunc
PacketLogCondition PacketConditionFunc
Definition: output.h:68
LOGGER_FILE
@ LOGGER_FILE
Definition: suricata-common.h:491
SCLogConfig
struct SCLogConfig_ SCLogConfig
Holds the config state used by the logging api.
RunModeNetmapGetDefaultMode
const char * RunModeNetmapGetDefaultMode(void)
Definition: runmode-netmap.c:55
RUNMODE_ERF_FILE
@ RUNMODE_ERF_FILE
Definition: runmodes.h:34
RunModeIpsNFQGetDefaultMode
const char * RunModeIpsNFQGetDefaultMode(void)
Definition: runmode-nfq.c:42
runmode-af-xdp.h
SCConfGetNode
SCConfNode * SCConfGetNode(const char *name)
Get a SCConfNode by name.
Definition: conf.c:182
SCLogError
#define SCLogError(...)
Macro used to log ERROR messages.
Definition: util-debug.h:274
SCFree
#define SCFree(p)
Definition: util-mem.h:61
RunModeIdsNetmapRegister
void RunModeIdsNetmapRegister(void)
Definition: runmode-netmap.c:127
OutputFreeList
struct OutputFreeList_ OutputFreeList
RUNMODE_DPDK
@ RUNMODE_DPDK
Definition: runmodes.h:39
thread_name_verdict
const char * thread_name_verdict
Definition: runmodes.c:69
runmode-lib.h
RUNMODE_PCAP_DEV
@ RUNMODE_PCAP_DEV
Definition: runmodes.h:29
RunModeDpdkRegister
void RunModeDpdkRegister(void)
Definition: runmode-dpdk.c:1974
OutputModule_::TxLogFunc
TxLogger TxLogFunc
Definition: output.h:69
OutputModule_::tc_log_progress
int tc_log_progress
Definition: output.h:78
TAILQ_HEAD
#define TAILQ_HEAD(name, type)
Definition: queue.h:230
OutputFlowShutdown
void OutputFlowShutdown(void)
Definition: output-flow.c:187
ALPROTO_UNKNOWN
@ ALPROTO_UNKNOWN
Definition: app-layer-protos.h:29
RunModeEngineIsIPS
int RunModeEngineIsIPS(int capture_mode, const char *runmode, const char *capture_plugin_name)
Definition: runmodes.c:375
OutputFreeList_
Definition: runmodes.c:102
tmqh-flow.h
runmode-dpdk.h
SCOutputRegisterFiledataLogger
int SCOutputRegisterFiledataLogger(LoggerId id, const char *name, SCFiledataLogger LogFunc, void *initdata, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a file-data logger.
Definition: output-filedata.c:54
runmode-ipfw.h
thread_name_unix_socket
const char * thread_name_unix_socket
Definition: runmodes.c:73
RUNMODE_USER_MAX
@ RUNMODE_USER_MAX
Definition: runmodes.h:45
OutputFreeList_::output_module
OutputModule * output_module
Definition: runmodes.c:103
runmode-nflog.h
RUNMODE_CONF_TEST
@ RUNMODE_CONF_TEST
Definition: runmodes.h:56
RunModeGetMainMode
const char * RunModeGetMainMode(void)
Definition: runmodes.c:221
RunModeOutputFiledataEnabled
int RunModeOutputFiledataEnabled(void)
Definition: runmodes.c:540
LiveGetDeviceCount
int LiveGetDeviceCount(void)
Get the number of registered devices.
Definition: util-device.c:171
util-misc.h
RunMode_::name
const char * name
Definition: runmodes.c:85
OutputModule_
Definition: output.h:56
SCLogNotice
#define SCLogNotice(...)
Macro used to log NOTICE messages.
Definition: util-debug.h:250
UtRunModeRegister
void UtRunModeRegister(void)
Definition: util-unittest.c:283
RUNMODE_PCAP_FILE
@ RUNMODE_PCAP_FILE
Definition: runmodes.h:30
SCCalloc
#define SCCalloc(nm, sz)
Definition: util-mem.h:53
SCConfNode_
Definition: conf.h:37
SCConfNode_::val
char * val
Definition: conf.h:39
RunModeIpsWinDivertGetDefaultMode
const char * RunModeIpsWinDivertGetDefaultMode(void)
Definition: runmode-windivert.c:40
SCConfGetFloat
int SCConfGetFloat(const char *name, float *val)
Retrieve a configuration value as a float.
Definition: conf.c:631
DEBUG_VALIDATE_BUG_ON
#define DEBUG_VALIDATE_BUG_ON(exp)
Definition: util-validate.h:109
SCPluginFindCaptureByName
SCCapturePlugin * SCPluginFindCaptureByName(const char *name)
threading_detect_ratio
float threading_detect_ratio
Definition: runmodes.c:949
output.h
RUNMODE_IPFW
@ RUNMODE_IPFW
Definition: runmodes.h:33
OutputModule_::InitFunc
OutputInitFunc InitFunc
Definition: output.h:61
RunModeIdsGetDefaultMode
const char * RunModeIdsGetDefaultMode(void)
Definition: runmode-pcap.c:32