diff --git a/src/decode-ethernet.c b/src/decode-ethernet.c index 7e3390e5a5..e213903103 100644 --- a/src/decode-ethernet.c +++ b/src/decode-ethernet.c @@ -6,6 +6,8 @@ void DecodeEthernet(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, PacketQueue *pq) { + PerfCounterIncr(COUNTER_DECODER_ETH, t->pca); + if (len < ETHERNET_HEADER_LEN) { DECODER_SET_EVENT(p,ETHERNET_PKT_TOO_SMALL); return; @@ -21,11 +23,9 @@ void DecodeEthernet(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, Pack if (ntohs(ethh->eth_type) == ETHERNET_TYPE_IP) { //printf("DecodeEthernet ip4\n"); - PerfCounterIncr(COUNTER_DECODER_IPV4, t->pca); DecodeIPV4(t, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq); } else if(ntohs(ethh->eth_type) == ETHERNET_TYPE_IPV6) { //printf("DecodeEthernet ip6\n"); - PerfCounterIncr(COUNTER_DECODER_IPV6, t->pca); DecodeIPV6(t, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN); } diff --git a/src/decode-icmpv4.c b/src/decode-icmpv4.c index 9cc6107a42..5e53fdec30 100644 --- a/src/decode-icmpv4.c +++ b/src/decode-icmpv4.c @@ -7,6 +7,8 @@ void DecodeICMPV4(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len ) { p->icmpv4h = (ICMPV4Hdr *)pkt; + PerfCounterIncr(COUNTER_DECODER_ICMPV4, t->pca); + if (len < ICMPV4_HEADER_LEN) { return; } diff --git a/src/decode-icmpv6.c b/src/decode-icmpv6.c index 0734545820..6e84ddd2ed 100644 --- a/src/decode-icmpv6.c +++ b/src/decode-icmpv6.c @@ -7,6 +7,8 @@ void DecodeICMPV6(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len) { p->icmpv6h = (ICMPV6Hdr *)pkt; + PerfCounterIncr(COUNTER_DECODER_ICMPV6, t->pca); + if (len < ICMPV6_HEADER_LEN) { return; } diff --git a/src/decode-ipv4.c b/src/decode-ipv4.c index dc5aca5b34..a1b2e0edce 100644 --- a/src/decode-ipv4.c +++ b/src/decode-ipv4.c @@ -53,6 +53,8 @@ void DecodeIPV4(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, PacketQu { int ret; + PerfCounterIncr(COUNTER_DECODER_IPV4, t->pca); + /* reset the decoder cache flags */ IPV4_CACHE_INIT(p); @@ -86,27 +88,22 @@ void DecodeIPV4(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, PacketQu case IPPROTO_IP: /* check PPP VJ uncompressed packets and decode tcp dummy */ if(p->ppph != NULL && ntohs(p->ppph->protocol) == PPP_VJ_UCOMP) { - return(DecodeTCP(t, p, pkt + IPV4_GET_HLEN(p), IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p))); } break; case IPPROTO_TCP: - PerfCounterIncr(COUNTER_DECODER_TCP, t->pca); return(DecodeTCP(t, p, pkt + IPV4_GET_HLEN(p), IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p))); break; case IPPROTO_UDP: //printf("DecodeIPV4: next layer is UDP\n"); - PerfCounterIncr(COUNTER_DECODER_UDP, t->pca); return(DecodeUDP(t, p, pkt + IPV4_GET_HLEN(p), IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p))); break; case IPPROTO_ICMP: //printf("DecodeIPV4: next layer is ICMP\n"); - PerfCounterIncr(COUNTER_DECODER_ICMPV4, t->pca); return(DecodeICMPV4(t, p, pkt + IPV4_GET_HLEN(p), IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p))); break; case IPPROTO_IPV6: { - PerfCounterIncr(COUNTER_DECODER_ICMPV6, t->pca); if (pq != NULL) { //printf("DecodeIPV4: next layer is IPV6\n"); //printf("DecodeIPV4: we are p %p\n", p); diff --git a/src/decode-ipv6.c b/src/decode-ipv6.c index f8b150882c..a3f95b99ae 100644 --- a/src/decode-ipv6.c +++ b/src/decode-ipv6.c @@ -362,6 +362,8 @@ void DecodeIPV6(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len) { int ret; + PerfCounterIncr(COUNTER_DECODER_IPV6, t->pca); + IPV6_CACHE_INIT(p); /* do the actual decoding */ diff --git a/src/decode-ppp.c b/src/decode-ppp.c index c4ce70da42..3395196558 100644 --- a/src/decode-ppp.c +++ b/src/decode-ppp.c @@ -13,6 +13,8 @@ void DecodePPP(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, PacketQueue *pq) { + PerfCounterIncr(COUNTER_DECODER_PPP, t->pca); + if(len < PPP_HEADER_LEN) { DECODER_SET_EVENT(p,PPP_PKT_TOO_SMALL); return; diff --git a/src/decode-sll.c b/src/decode-sll.c index b92c4e2c3d..4c42dbc5e4 100644 --- a/src/decode-sll.c +++ b/src/decode-sll.c @@ -6,6 +6,8 @@ void DecodeSll(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len, PacketQueue *pq) { + PerfCounterIncr(COUNTER_DECODER_SLL, t->pca); + if (len < SLL_HEADER_LEN) { DECODER_SET_EVENT(p,SLL_PKT_TOO_SMALL); return; diff --git a/src/decode-tcp.c b/src/decode-tcp.c index 23ec5ace59..9ba320b42e 100644 --- a/src/decode-tcp.c +++ b/src/decode-tcp.c @@ -136,6 +136,8 @@ static int DecodeTCPPacket(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t le void DecodeTCP(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len) { + PerfCounterIncr(COUNTER_DECODER_TCP, t->pca); + if (DecodeTCPPacket(t, p,pkt,len) < 0) return; diff --git a/src/decode-udp.c b/src/decode-udp.c index 812583361b..7267b865fd 100644 --- a/src/decode-udp.c +++ b/src/decode-udp.c @@ -38,6 +38,8 @@ static int DecodeUDPPacket(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t le void DecodeUDP(ThreadVars *t, Packet *p, u_int8_t *pkt, u_int16_t len) { + PerfCounterIncr(COUNTER_DECODER_UDP, t->pca); + if (DecodeUDPPacket(t, p,pkt,len) < 0) return; diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c index f12648003b..c9d1e16c3f 100644 --- a/src/source-pcap-file.c +++ b/src/source-pcap-file.c @@ -50,6 +50,7 @@ void ReceivePcapFileThreadExitStats(ThreadVars *, void *); int ReceivePcapFileThreadDeinit(ThreadVars *, void *); int DecodePcapFile(ThreadVars *, Packet *, void *, PacketQueue *); +int DecodePcapFileThreadInit(ThreadVars *, void *, void **); void TmModuleReceivePcapFileRegister (void) { tmm_modules[TMM_RECEIVEPCAPFILE].name = "ReceivePcapFile"; @@ -62,7 +63,7 @@ void TmModuleReceivePcapFileRegister (void) { void TmModuleDecodePcapFileRegister (void) { tmm_modules[TMM_DECODEPCAPFILE].name = "DecodePcapFile"; - tmm_modules[TMM_DECODEPCAPFILE].Init = NULL; + tmm_modules[TMM_DECODEPCAPFILE].Init = DecodePcapFileThreadInit; tmm_modules[TMM_DECODEPCAPFILE].Func = DecodePcapFile; tmm_modules[TMM_DECODEPCAPFILE].ExitPrintStats = NULL; tmm_modules[TMM_DECODEPCAPFILE].Deinit = NULL; @@ -162,11 +163,47 @@ int ReceivePcapFileThreadDeinit(ThreadVars *tv, void *data) { return 0; } -int DecodePcapFile(ThreadVars *t, Packet *p, void *data, PacketQueue *pq) { +int DecodePcapFile(ThreadVars *t, Packet *p, void *data, PacketQueue *pq) +{ + PerfCounterIncr(COUNTER_DECODER_PKTS, t->pca); + PerfCounterAdd(COUNTER_DECODER_BYTES, t->pca, p->pktlen); + /* call the decoder */ pcap_g.Decoder(t,p,p->pkt,p->pktlen,pq); return 0; } +int DecodePcapFileThreadInit(ThreadVars *tv, void *initdata, void **data) +{ + PerfRegisterCounter("decoder.pkts", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.bytes", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.ipv4", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.ipv6", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.ethernet", "DecodePcapFile", TYPE_UINT64, + "NULL", &tv->pctx); + PerfRegisterCounter("decoder.sll", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.tcp", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.udp", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.icmpv4", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.icmpv6", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + PerfRegisterCounter("decoder.ppp", "DecodePcapFile", TYPE_UINT64, "NULL", + &tv->pctx); + + tv->pca = PerfGetAllCountersArray(&tv->pctx); + + PerfAddToClubbedTMTable("DecodePcapFile", &tv->pctx); + + return 0; +} + /* eof */ diff --git a/src/source-pcap.c b/src/source-pcap.c index 2dba31c2b5..75eb0f61ab 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -283,23 +283,20 @@ int ReceivePcapThreadDeinit(ThreadVars *tv, void *data) { * \param data pointer that gets cast into PcapThreadVars for ptv * \param pq pointer to the current PacketQueue */ -int DecodePcap(ThreadVars *t, Packet *p, void *data, PacketQueue *pq) { - +int DecodePcap(ThreadVars *t, Packet *p, void *data, PacketQueue *pq) +{ PerfCounterIncr(COUNTER_DECODER_PKTS, t->pca); PerfCounterAdd(COUNTER_DECODER_BYTES, t->pca, p->pktlen); /* call the decoder */ switch(p->pcap_v.datalink) { case LINKTYPE_LINUX_SLL: - PerfCounterIncr(COUNTER_DECODER_SLL, t->pca); DecodeSll(t,p,p->pkt,p->pktlen,pq); break; case LINKTYPE_ETHERNET: - PerfCounterIncr(COUNTER_DECODER_ETH, t->pca); DecodeEthernet(t,p,p->pkt,p->pktlen,pq); break; case LINKTYPE_PPP: - PerfCounterIncr(COUNTER_DECODER_PPP, t->pca); DecodePPP(t,p,p->pkt,p->pktlen,pq); break; default: