diff options
Diffstat (limited to 'framework/src/suricata/src/tm-modules.c')
-rw-r--r-- | framework/src/suricata/src/tm-modules.c | 282 |
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>"; +} |