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