aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/suricata/src/tm-modules.c
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/suricata/src/tm-modules.c')
-rw-r--r--framework/src/suricata/src/tm-modules.c282
1 files changed, 282 insertions, 0 deletions
diff --git a/framework/src/suricata/src/tm-modules.c b/framework/src/suricata/src/tm-modules.c
new file mode 100644
index 00000000..73e9f235
--- /dev/null
+++ b/framework/src/suricata/src/tm-modules.c
@@ -0,0 +1,282 @@
+/* Copyright (C) 2007-2010 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * \file
+ *
+ * \author Victor Julien <victor@inliniac.net>
+ *
+ * Thread Module functions
+ */
+
+#include "suricata-common.h"
+#include "packet-queue.h"
+#include "tm-threads.h"
+#include "util-debug.h"
+#include "threads.h"
+#include "util-logopenfile.h"
+
+void TmModuleDebugList(void)
+{
+ TmModule *t;
+ uint16_t i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ SCLogDebug("%s:%p", t->name, t->Func);
+ }
+}
+
+/** \brief get a tm module ptr by name
+ * \param name name string
+ * \retval ptr to the module or NULL */
+TmModule *TmModuleGetByName(const char *name)
+{
+ TmModule *t;
+ uint16_t i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ if (strcmp(t->name, name) == 0)
+ return t;
+ }
+
+ return NULL;
+}
+
+/** \brief get the id of a module from it's name
+ * \param name registered name of the module
+ * \retval id the id or -1 in case of error */
+int TmModuleGetIdByName(const char *name)
+{
+ TmModule *tm = TmModuleGetByName(name);
+ if (tm == NULL)
+ return -1;;
+ return TmModuleGetIDForTM(tm);
+}
+
+/**
+ * \brief Returns a TM Module by its id.
+ *
+ * \param id Id of the TM Module to return.
+ *
+ * \retval Pointer of the module to be returned if available;
+ * NULL if unavailable.
+ */
+TmModule *TmModuleGetById(int id)
+{
+
+ if (id < 0 || id >= TMM_SIZE) {
+ SCLogError(SC_ERR_TM_MODULES_ERROR, "Threading module with the id "
+ "\"%d\" doesn't exist", id);
+ return NULL;
+ }
+
+ return &tmm_modules[id];
+}
+
+/**
+ * \brief Given a TM Module, returns its id.
+ *
+ * \param tm Pointer to the TM Module.
+ *
+ * \retval id of the TM Module if available; -1 if unavailable.
+ */
+int TmModuleGetIDForTM(TmModule *tm)
+{
+ TmModule *t;
+ int i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ if (strcmp(t->name, tm->name) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+
+void TmModuleRunInit(void)
+{
+ TmModule *t;
+ uint16_t i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ if (t->Init == NULL)
+ continue;
+
+ t->Init();
+ }
+}
+
+void TmModuleRunDeInit(void)
+{
+ TmModule *t;
+ uint16_t i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ if (t->DeInit == NULL)
+ continue;
+
+ t->DeInit();
+ }
+}
+
+/** \brief register all unittests for the tm modules */
+void TmModuleRegisterTests(void)
+{
+#ifdef UNITTESTS
+ TmModule *t;
+ uint16_t i;
+
+ for (i = 0; i < TMM_SIZE; i++) {
+ t = &tmm_modules[i];
+
+ if (t->name == NULL)
+ continue;
+
+ g_ut_modules++;
+
+
+ if (t->RegisterTests == NULL) {
+ if (coverage_unittests)
+ SCLogWarning(SC_WARN_NO_UNITTESTS, "threading module %s has no unittest "
+ "registration function.", t->name);
+ } else {
+ t->RegisterTests();
+ g_ut_covered++;
+ }
+ }
+#endif /* UNITTESTS */
+}
+
+#define CASE_CODE(E) case E: return #E
+
+/**
+ * \brief Maps the TmmId, to its string equivalent
+ *
+ * \param id tmm id
+ *
+ * \retval string equivalent for the tmm id
+ */
+const char * TmModuleTmmIdToString(TmmId id)
+{
+ switch (id) {
+ CASE_CODE (TMM_RECEIVENFLOG);
+ CASE_CODE (TMM_DECODENFLOG);
+ CASE_CODE (TMM_DECODENFQ);
+ CASE_CODE (TMM_VERDICTNFQ);
+ CASE_CODE (TMM_RECEIVENFQ);
+ CASE_CODE (TMM_RECEIVEPCAP);
+ CASE_CODE (TMM_RECEIVEPCAPFILE);
+ CASE_CODE (TMM_DECODEPCAP);
+ CASE_CODE (TMM_DECODEPCAPFILE);
+ CASE_CODE (TMM_RECEIVEPFRING);
+ CASE_CODE (TMM_DECODEPFRING);
+ CASE_CODE (TMM_DETECT);
+ CASE_CODE (TMM_ALERTFASTLOG);
+ CASE_CODE (TMM_ALERTFASTLOG4);
+ CASE_CODE (TMM_ALERTFASTLOG6);
+ CASE_CODE (TMM_ALERTUNIFIED2ALERT);
+ CASE_CODE (TMM_ALERTPRELUDE);
+ CASE_CODE (TMM_ALERTDEBUGLOG);
+ CASE_CODE (TMM_ALERTSYSLOG);
+ CASE_CODE (TMM_LOGDROPLOG);
+ CASE_CODE (TMM_ALERTSYSLOG4);
+ CASE_CODE (TMM_ALERTSYSLOG6);
+ CASE_CODE (TMM_RESPONDREJECT);
+ CASE_CODE (TMM_LOGDNSLOG);
+ CASE_CODE (TMM_LOGHTTPLOG);
+ CASE_CODE (TMM_LOGHTTPLOG4);
+ CASE_CODE (TMM_LOGHTTPLOG6);
+ CASE_CODE (TMM_LOGTLSLOG);
+ CASE_CODE (TMM_LOGTLSLOG4);
+ CASE_CODE (TMM_LOGTLSLOG6);
+ CASE_CODE (TMM_LOGTCPDATALOG);
+ CASE_CODE (TMM_PCAPLOG);
+ CASE_CODE (TMM_FILELOG);
+ CASE_CODE (TMM_FILESTORE);
+ CASE_CODE (TMM_STREAMTCP);
+ CASE_CODE (TMM_DECODEIPFW);
+ CASE_CODE (TMM_VERDICTIPFW);
+ CASE_CODE (TMM_RECEIVEIPFW);
+ CASE_CODE (TMM_RECEIVEERFFILE);
+ CASE_CODE (TMM_DECODEERFFILE);
+ CASE_CODE (TMM_RECEIVEERFDAG);
+ CASE_CODE (TMM_DECODEERFDAG);
+ CASE_CODE (TMM_RECEIVEMPIPE);
+ CASE_CODE (TMM_DECODEMPIPE);
+ CASE_CODE (TMM_RECEIVENAPATECH);
+ CASE_CODE (TMM_DECODENAPATECH);
+ CASE_CODE (TMM_RECEIVEAFP);
+ CASE_CODE (TMM_ALERTPCAPINFO);
+ CASE_CODE (TMM_DECODEAFP);
+ CASE_CODE (TMM_PACKETLOGGER);
+ CASE_CODE (TMM_TXLOGGER);
+ CASE_CODE (TMM_STATSLOGGER);
+ CASE_CODE (TMM_FILELOGGER);
+ CASE_CODE (TMM_FILEDATALOGGER);
+ CASE_CODE (TMM_STREAMINGLOGGER);
+ CASE_CODE (TMM_JSONALERTLOG);
+ CASE_CODE (TMM_JSONDROPLOG);
+ CASE_CODE (TMM_JSONDNSLOG);
+ CASE_CODE (TMM_JSONHTTPLOG);
+ CASE_CODE (TMM_JSONFILELOG);
+ CASE_CODE (TMM_JSONFLOWLOG);
+ CASE_CODE (TMM_JSONNETFLOWLOG);
+ CASE_CODE (TMM_JSONSMTPLOG);
+ CASE_CODE (TMM_JSONSSHLOG);
+ CASE_CODE (TMM_JSONSTATSLOG);
+ CASE_CODE (TMM_JSONTLSLOG);
+ CASE_CODE (TMM_OUTPUTJSON);
+ CASE_CODE (TMM_FLOWMANAGER);
+ CASE_CODE (TMM_FLOWRECYCLER);
+ CASE_CODE (TMM_UNIXMANAGER);
+ CASE_CODE (TMM_DETECTLOADER);
+ CASE_CODE (TMM_LUALOG);
+ CASE_CODE (TMM_LOGSTATSLOG);
+ CASE_CODE (TMM_RECEIVENETMAP);
+ CASE_CODE (TMM_DECODENETMAP);
+ CASE_CODE (TMM_TLSSTORE);
+
+ CASE_CODE (TMM_SIZE);
+ }
+ return "<unknown>";
+}