]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
logging: convert pcap log to non-thread module
authorJason Ish <ish@unx.ca>
Tue, 7 Jun 2016 20:56:17 +0000 (14:56 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 19 Sep 2016 11:47:52 +0000 (13:47 +0200)
src/log-pcap.c
src/suricata-common.h
src/tm-modules.c
src/tm-threads-common.h
src/util-profiling.c

index 076c44269e3e55a8611e522bcea4d9d21e6c1c81..4ff1b4d5c94ca6fcf2f3e90318d8474c1b5dffd6 100644 (file)
@@ -143,22 +143,19 @@ typedef struct PcapLogThreadData_ {
 static PcapLogData *g_pcap_data = NULL;
 
 static int PcapLogOpenFileCtx(PcapLogData *);
-static TmEcode PcapLog(ThreadVars *, Packet *, void *, PacketQueue *, PacketQueue *);
+static int PcapLog(ThreadVars *, void *, const Packet *);
 static TmEcode PcapLogDataInit(ThreadVars *, void *, void **);
 static TmEcode PcapLogDataDeinit(ThreadVars *, void *);
 static void PcapLogFileDeInitCtx(OutputCtx *);
 static OutputCtx *PcapLogInitCtx(ConfNode *);
 static void PcapLogProfilingDump(PcapLogData *);
+static int PcapLogCondition(ThreadVars *, const Packet *);
 
 void TmModulePcapLogRegister(void)
 {
-    tmm_modules[TMM_PCAPLOG].name = MODULE_NAME;
-    tmm_modules[TMM_PCAPLOG].ThreadInit = PcapLogDataInit;
-    tmm_modules[TMM_PCAPLOG].Func = PcapLog;
-    tmm_modules[TMM_PCAPLOG].ThreadDeinit = PcapLogDataDeinit;
-    tmm_modules[TMM_PCAPLOG].RegisterTests = NULL;
-
-    OutputRegisterModule(MODULE_NAME, "pcap-log", PcapLogInitCtx);
+    OutputRegisterPacketModule(LOGGER_PCAP, MODULE_NAME, "pcap-log",
+        PcapLogInitCtx, PcapLog, PcapLogCondition, PcapLogDataInit,
+        PcapLogDataDeinit, NULL);
 
     SC_ATOMIC_INIT(thread_cnt);
     return;
@@ -171,6 +168,17 @@ void TmModulePcapLogRegister(void)
     (prof).total += (UtilCpuGetTicks() - pcaplog_profile_ticks); \
     (prof).cnt++
 
+static int PcapLogCondition(ThreadVars *tv, const Packet *p)
+{
+    if (p->flags & PKT_PSEUDO_STREAM_END) {
+        return FALSE;
+    }
+    if (IS_TUNNEL_PKT(p) && !IS_TUNNEL_ROOT_PKT(p)) {
+        return FALSE;
+    }
+    return TRUE;
+}
+
 /**
  * \brief Function to close pcaplog file
  *
@@ -281,7 +289,7 @@ static int PcapLogRotateFile(ThreadVars *t, PcapLogData *pl)
     return 0;
 }
 
-static int PcapLogOpenHandles(PcapLogData *pl, Packet *p)
+static int PcapLogOpenHandles(PcapLogData *pl, const Packet *p)
 {
     PCAPLOG_PROFILE_START;
 
@@ -345,8 +353,7 @@ static void PcapLogUnlock(PcapLogData *pl)
  * \retval TM_ECODE_OK on succes
  * \retval TM_ECODE_FAILED on serious error
  */
-static TmEcode PcapLog (ThreadVars *t, Packet *p, void *thread_data, PacketQueue *pq,
-                 PacketQueue *postpq)
+static int PcapLog (ThreadVars *t, void *thread_data, const Packet *p)
 {
     size_t len;
     int rotate = 0;
@@ -572,6 +579,7 @@ static TmEcode PcapLogDataDeinit(ThreadVars *t, void *thread_data)
             pl->reported = 1;
         }
     }
+    SCFree(td);
     return TM_ECODE_OK;
 }
 
@@ -894,7 +902,7 @@ static void PcapLogFileDeInitCtx(OutputCtx *output_ctx)
     TAILQ_FOREACH(pf, &pl->pcap_file_list, next) {
         SCLogDebug("PCAP files left at exit: %s\n", pf->filename);
     }
-
+    SCFree(output_ctx);
     return;
 }
 
index b837de26addb5c3f8ef1bf9e71b135209acdbc1c..fedccf31ceb0dc8bc6bf116d7314100eb85bee20 100644 (file)
@@ -369,6 +369,7 @@ typedef enum {
     LOGGER_STATS,
     LOGGER_JSON_STATS,
     LOGGER_PRELUDE,
+    LOGGER_PCAP,
     LOGGER_SIZE,
 } LoggerId;
 
index 4a109fd6a2aa7b80758a4084dd045021eec9e032..f0d8b89019f4c12682002090f3c5a84ec58cb70e 100644 (file)
@@ -212,7 +212,6 @@ const char * TmModuleTmmIdToString(TmmId id)
         CASE_CODE (TMM_RECEIVEPFRING);
         CASE_CODE (TMM_DECODEPFRING);
         CASE_CODE (TMM_RESPONDREJECT);
-        CASE_CODE (TMM_PCAPLOG);
         CASE_CODE (TMM_DECODEIPFW);
         CASE_CODE (TMM_VERDICTIPFW);
         CASE_CODE (TMM_RECEIVEIPFW);
index cdb384c55c772b514012a8086aad30ad8aef01a0..a0ca3bcad848dc4e7f77e75596112ab84fe1163c 100644 (file)
@@ -42,7 +42,6 @@ typedef enum {
     TMM_RECEIVEPFRING,
     TMM_DECODEPFRING,
     TMM_RESPONDREJECT,
-    TMM_PCAPLOG,
     TMM_DECODEIPFW,
     TMM_VERDICTIPFW,
     TMM_RECEIVEIPFW,
index cbbef0c20a834f09ebed6fef522b6f2feadd7dc0..5f6aa20660796100d06598458d1d5a6db4154f4b 100644 (file)
@@ -1278,6 +1278,7 @@ const char * PacketProfileLoggertIdToString(LoggerId id)
         CASE_CODE (LOGGER_STATS);
         CASE_CODE (LOGGER_JSON_STATS);
         CASE_CODE (LOGGER_PRELUDE);
+        CASE_CODE (LOGGER_PCAP);
         default:
             return "UNKNOWN";
     }