From e7f8a02484cc6867947fc326320567ca1fa4e193 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Sun, 23 Aug 2009 14:54:59 +0200 Subject: [PATCH] Improve GRE counting. Actually use the GRE decoder. Register the GRE counter. --- src/decode-gre.c | 5 ++--- src/decode-ipv4.c | 4 ++++ src/decode.h | 1 + src/source-nfq.c | 1 + src/source-pcap-file.c | 1 + src/source-pcap.c | 1 + 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/decode-gre.c b/src/decode-gre.c index 9badc59571..09c5c5530b 100644 --- a/src/decode-gre.c +++ b/src/decode-gre.c @@ -20,6 +20,8 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u uint16_t header_len = GRE_HDR_LEN; GRESreHdr *gsre = NULL; + PerfCounterIncr(dtv->counter_gre, tv->pca); + if(len < GRE_HDR_LEN) { DECODER_SET_EVENT(p,GRE_PKT_TOO_SMALL); return; @@ -170,7 +172,6 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u { case ETHERNET_TYPE_IP: { - PerfCounterIncr(dtv->counter_gre, tv->pca); if (pq != NULL) { Packet *tp = TunnelPktSetup(tv, dtv, p, pkt + header_len, len - header_len, GRE_GET_PROTO(p->greh)); @@ -184,7 +185,6 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u case GRE_PROTO_PPP: { - PerfCounterIncr(dtv->counter_gre, tv->pca); if (pq != NULL) { Packet *tp = TunnelPktSetup(tv, dtv, p, pkt + header_len, len - header_len, GRE_GET_PROTO(p->greh)); @@ -198,7 +198,6 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u case ETHERNET_TYPE_IPV6: { - PerfCounterIncr(dtv->counter_gre, tv->pca); if (pq != NULL) { Packet *tp = TunnelPktSetup(tv, dtv, p, pkt + header_len, len - header_len, GRE_GET_PROTO(p->greh)); diff --git a/src/decode-ipv4.c b/src/decode-ipv4.c index c08afa10e3..5bad10fc0d 100644 --- a/src/decode-ipv4.c +++ b/src/decode-ipv4.c @@ -553,6 +553,10 @@ void DecodeIPV4(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, } break; } + case IPPROTO_GRE: + return(DecodeGRE(tv, dtv, p, pkt + IPV4_GET_HLEN(p), + IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p), pq)); + break; } return; diff --git a/src/decode.h b/src/decode.h index 1a32332465..95bafe0e69 100644 --- a/src/decode.h +++ b/src/decode.h @@ -410,6 +410,7 @@ void DecodeICMPV4(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_ void DecodeICMPV6(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_t, PacketQueue *); void DecodeTCP(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_t, PacketQueue *); void DecodeUDP(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_t, PacketQueue *); +void DecodeGRE(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_t, PacketQueue *); Packet *SetupPkt (void); Packet *TunnelPktSetup(ThreadVars *, DecodeThreadVars *, Packet *, uint8_t *, uint16_t, uint8_t); diff --git a/src/source-nfq.c b/src/source-nfq.c index 96d06cdf62..a4dab3db7f 100644 --- a/src/source-nfq.c +++ b/src/source-nfq.c @@ -504,6 +504,7 @@ int DecodeNFQThreadInit(ThreadVars *tv, void *initdata, void **data) dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL"); dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL"); dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL"); + dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL"); dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv, TYPE_DOUBLE, "NULL"); dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv, diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c index 3a9e60abaf..f15e67c18e 100644 --- a/src/source-pcap-file.c +++ b/src/source-pcap-file.c @@ -208,6 +208,7 @@ int DecodePcapFileThreadInit(ThreadVars *tv, void *initdata, void **data) dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL"); dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL"); dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL"); + dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL"); dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv, TYPE_DOUBLE, "NULL"); dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv, diff --git a/src/source-pcap.c b/src/source-pcap.c index 34b5a83c41..c562d0fb35 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -341,6 +341,7 @@ int DecodePcapThreadInit(ThreadVars *tv, void *initdata, void **data) dtv->counter_icmpv6 = PerfTVRegisterCounter("decoder.icmpv6", tv, TYPE_UINT64, "NULL"); dtv->counter_ppp = PerfTVRegisterCounter("decoder.ppp", tv, TYPE_UINT64, "NULL"); dtv->counter_pppoe = PerfTVRegisterCounter("decoder.pppoe", tv, TYPE_UINT64, "NULL"); + dtv->counter_gre = PerfTVRegisterCounter("decoder.gre", tv, TYPE_UINT64, "NULL"); dtv->counter_avg_pkt_size = PerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv, TYPE_DOUBLE, "NULL"); dtv->counter_max_pkt_size = PerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,