]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Add invalid pkt counter.
authorEric Leblond <eric@regit.org>
Tue, 19 Feb 2013 13:45:05 +0000 (14:45 +0100)
committerEric Leblond <eric@regit.org>
Mon, 2 Dec 2013 10:05:38 +0000 (11:05 +0100)
This patch adds and increments a invalid packet counter. It
does this by introducing PacketDecodeFinalize function

This function is incrementing the invalid counter and is also
signalling the packet to CUDA.

13 files changed:
src/decode.c
src/decode.h
src/source-af-packet.c
src/source-erf-dag.c
src/source-erf-file.c
src/source-ipfw.c
src/source-mpipe.c
src/source-napatech.c
src/source-nfq.c
src/source-pcap-file.c
src/source-pcap.c
src/source-pfring.c
src/tmqh-packetpool.c

index 4a0f80aebc97c92bc8d43cfb00a0656b23291b85..4aef9094b2422afcc51424fd5ed9780390acbe99 100644 (file)
@@ -89,6 +89,27 @@ void PacketFree(Packet *p)
     SCFree(p);
 }
 
+/**
+ * \brief Finalize decoding of a packet
+ *
+ * This function needs to be call at the end of decode
+ * functions when decoding has been succesful.
+ *
+ */
+
+void PacketDecodeFinalize(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p)
+{
+
+    if (p->flags & PKT_IS_INVALID)
+        SCPerfCounterIncr(dtv->counter_invalid, tv->sc_perf_pca);
+
+#ifdef __SC_CUDA_SUPPORT__
+    if (dtv->cuda_vars.mpm_is_cuda)
+        CudaBufferPacket(&dtv->cuda_vars, p);
+#endif
+
+}
+
 /**
  * \brief Get a malloced packet.
  *
@@ -338,6 +359,9 @@ void DecodeRegisterPerfCounters(DecodeThreadVars *dtv, ThreadVars *tv)
 #endif
     dtv->counter_bytes = SCPerfTVRegisterCounter("decoder.bytes", tv,
                                                  SC_PERF_TYPE_UINT64, "NULL");
+
+    dtv->counter_invalid = SCPerfTVRegisterCounter("decoder.invalid", tv,
+                                                 SC_PERF_TYPE_UINT64, "NULL");
 #if 0
     dtv->counter_bytes_per_sec = SCPerfTVRegisterIntervalCounter("decoder.bytes_per_sec",
                                                                 tv, SC_PERF_TYPE_DOUBLE,
index 90846886f5e074a1d850e2fda21e28b14eb58b83..5011697d2913cb79d425abf0eeb67f2d05baadea 100644 (file)
@@ -585,6 +585,7 @@ typedef struct DecodeThreadVars_
     uint16_t counter_pkts;
     uint16_t counter_pkts_per_sec;
     uint16_t counter_bytes;
+    uint16_t counter_invalid;
     uint16_t counter_bytes_per_sec;
     uint16_t counter_mbit_per_sec;
     uint16_t counter_ipv4;
@@ -818,6 +819,7 @@ Packet *PacketDefragPktSetup(Packet *parent, uint8_t *pkt, uint16_t len, uint8_t
 void PacketDefragPktSetupParent(Packet *parent);
 Packet *PacketGetFromQueueOrAlloc(void);
 Packet *PacketGetFromAlloc(void);
+void PacketDecodeFinalize(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p);
 void PacketFree(Packet *p);
 void PacketFreeOrRelease(Packet *p);
 int PacketCopyData(Packet *p, uint8_t *pktdata, int pktlen);
@@ -872,6 +874,13 @@ void AddressDebugPrint(Address *);
     } \
 } while(0)
 
+#define ENGINE_SET_INVALID_EVENT(p, e) do { \
+    p->flags |= PKT_IS_INVALID; \
+    ENGINE_SET_EVENT(p, e); \
+} while(0)
+
+
+
 #define ENGINE_ISSET_EVENT(p, e) ({ \
     int r = 0; \
     uint8_t u; \
@@ -947,6 +956,7 @@ void AddressDebugPrint(Address *);
 #define PKT_HOST_DST_LOOKED_UP          (1<<18)
 
 #define PKT_IS_FRAGMENT                 (1<<19)     /**< Packet is a fragment */
+#define PKT_IS_INVALID                  (1<<20)
 
 /** \brief return 1 if the packet is a pseudo packet */
 #define PKT_IS_PSEUDOPKT(p) ((p)->flags & PKT_PSEUDO_STREAM_END)
index 24837b3f38fc32cdefe5fa77b75bc8eaf71a45c0..befdb0ed33b4c30a7bc11ec8dfd3b93ba71cae9e 100644 (file)
@@ -1688,10 +1688,7 @@ TmEcode DecodeAFP(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packet
             break;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (dtv->cuda_vars.mpm_is_cuda)
-        CudaBufferPacket(&dtv->cuda_vars, p);
-#endif
+    PacketDecodeFinalize(tv, dtv, p);
 
     SCReturnInt(TM_ECODE_OK);
 }
index 97e2d4c6d5672e17252e9b8a19067591e50560d1..fa020ff89c9c62f1eee06eb0b0a4860d2ade6691 100644 (file)
@@ -617,6 +617,8 @@ TmEcode DecodeErfDag(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
             break;
     }
 
+    PacketDecodeFinalize(tv, dtv, p);
+
     SCReturnInt(TM_ECODE_OK);
 }
 
index 72c69e4e70f1aa67c8fa2fea075f305202b5c3c0..066ffe92981b0d133ea883508ddf1b31620a258a 100644 (file)
@@ -292,6 +292,8 @@ DecodeErfFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueu
 
     DecodeEthernet(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
+    PacketDecodeFinalize(tv, dtv, p);
+
     SCReturnInt(TM_ECODE_OK);
 }
 
index 4df4c4ed43de1f58ba91df8033fdefaf7e984f8a..b6d2278e9434372e9f6b66f232c94b8277d678f1 100644 (file)
@@ -461,6 +461,8 @@ TmEcode DecodeIPFW(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packe
        SCReturnInt(TM_ECODE_FAILED);
     }
 
+    PacketDecodeFinalize(tv, dtv, p);
+
     SCReturnInt(TM_ECODE_OK);
 }
 
index 26244f3a860e71ab5cf0a06a2e34c08286436cb6..b8f835ec8d7124f24e70744039452b2176bb4a9a 100644 (file)
@@ -992,7 +992,9 @@ TmEcode DecodeMpipe(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
 
     /* call the decoder */
     DecodeEthernet(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
+
+    PacketDecodeFinalize(tv, dtv, p);
+
     SCReturnInt(TM_ECODE_OK);
 }
 
index 593a4d5f32f0dcb2974a2647f96257252290255a..172e7f95e571cbcfebadcc5d87281f8adeb058a1 100644 (file)
@@ -372,6 +372,9 @@ TmEcode NapatechDecode(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
                     p->datalink);
             break;
     }
+
+    PacketDecodeFinalize(tv, dtv, p);
+
     SCReturnInt(TM_ECODE_OK);
 }
 
index 44fd8d9f63e4be86fc568582d07e2f38ea106acc..b1deefc3c8377b1c1994b30011d09254a9d06ce0 100644 (file)
@@ -1220,6 +1220,8 @@ TmEcode DecodeNFQ(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packet
         SCLogDebug("packet unsupported by NFQ, first byte: %02x", *GET_PKT_DATA(p));
     }
 
+    PacketDecodeFinalize(tv, dtv, p);
+
     return TM_ECODE_OK;
 }
 
index 823be20c776a4d7f463ed35f3539301834f697a0..6c951a9a267e6b4ef7e41756d15cb041fe90939c 100644 (file)
@@ -369,10 +369,7 @@ TmEcode DecodePcapFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, P
     BUG_ON(p->pkt_src != PKT_SRC_WIRE && p->pkt_src != PKT_SRC_FFR_V2);
 #endif
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (dtv->cuda_vars.mpm_is_cuda)
-        CudaBufferPacket(&dtv->cuda_vars, p);
-#endif
+    PacketDecodeFinalize(tv, dtv, p);
 
     SCReturnInt(TM_ECODE_OK);
 }
index 2d2f03657357c7c8ed3522840238af32c4830290..27a4c2dfab85a46af048d99782e0716fb6696fd1 100644 (file)
@@ -739,10 +739,7 @@ TmEcode DecodePcap(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packe
             break;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (dtv->cuda_vars.mpm_is_cuda)
-        CudaBufferPacket(&dtv->cuda_vars, p);
-#endif
+    PacketDecodeFinalize(tv, dtv, p);
 
     SCReturnInt(TM_ECODE_OK);
 }
index addeb50abe8e5a6bd077e5930350aacf9124c6a6..f095603116e7f4bb05ff1643fbf4de4f89105733 100644 (file)
@@ -563,10 +563,7 @@ TmEcode DecodePfring(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Pac
 
     DecodeEthernet(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (dtv->cuda_vars.mpm_is_cuda)
-        CudaBufferPacket(&dtv->cuda_vars, p);
-#endif
+    PacketDecodeFinalize(tv, dtv, p);
 
     return TM_ECODE_OK;
 }
index 0b2b862940ec18befdde82ac139ebf7860ee4406..1053d6be381954c067ddf3e2831d30e6a2d9d871 100644 (file)
@@ -52,6 +52,7 @@
 #include "util-debug.h"
 #include "util-error.h"
 #include "util-profiling.h"
+#include "util-device.h"
 
 static RingBuffer16 *ringbuffer = NULL;
 /**