]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Add MPLS counter.
authorJason Ish <jason.ish@emulex.com>
Thu, 17 Jul 2014 16:21:32 +0000 (10:21 -0600)
committerJason Ish <jason.ish@emulex.com>
Mon, 20 Oct 2014 21:15:05 +0000 (15:15 -0600)
Check length before decoding each label.

src/decode-mpls.c
src/decode.c
src/decode.h

index f8f6993d7c3d34a42303e402957ff5d51ae12026..6e1da668f7a33d6da8b6db64506b22729fe9734c 100644 (file)
 int DecodeMPLS(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
     uint16_t len, PacketQueue *pq)
 {
-    if (len < MPLS_HEADER_LEN) {
-        return TM_ECODE_FAILED;
-    }
-
     uint32_t shim;
+    uint8_t ip_ver;
+
+    SCPerfCounterIncr(dtv->counter_mpls, tv->sc_perf_pca);
+
     do {
+        if (len < MPLS_HEADER_LEN) {
+            return TM_ECODE_FAILED;
+        }
         shim = *(uint32_t *)pkt;
         pkt += MPLS_HEADER_LEN;
         len -= MPLS_HEADER_LEN;
     } while (MPLS_BOTTOM(shim) == 0);
 
     /* Best guess at inner packet. */
-    uint8_t ip_ver = pkt[0] >> 4;
+    ip_ver = pkt[0] >> 4;
 
     switch (ip_ver) {
     case MPLS_PROTO_IPV4:
index ae2041bc71bd304b6d4b139177bfd8c1f5310725..8ad78bcf32125222c5376379c4210757600d27e8 100644 (file)
@@ -400,6 +400,8 @@ void DecodeRegisterPerfCounters(DecodeThreadVars *dtv, ThreadVars *tv)
                                                SC_PERF_TYPE_UINT64, "NULL");
     dtv->counter_ipv6inipv6 = SCPerfTVRegisterCounter("decoder.ipv6_in_ipv6", tv,
                                                SC_PERF_TYPE_UINT64, "NULL");
+    dtv->counter_mpls = SCPerfTVRegisterCounter("decoder.mpls", tv,
+                                                SC_PERF_TYPE_UINT64, "NULL");
     dtv->counter_avg_pkt_size = SCPerfTVRegisterAvgCounter("decoder.avg_pkt_size", tv,
                                                            SC_PERF_TYPE_UINT64, "NULL");
     dtv->counter_max_pkt_size = SCPerfTVRegisterMaxCounter("decoder.max_pkt_size", tv,
index ce2f42d3149ed93a3b5cb4591349419810b1a8d6..98839be6bcdb67ac3338426e1ed1fcdf548259cb 100644 (file)
@@ -597,6 +597,7 @@ typedef struct DecodeThreadVars_
     uint16_t counter_vlan_qinq;
     uint16_t counter_pppoe;
     uint16_t counter_teredo;
+    uint16_t counter_mpls;
     uint16_t counter_ipv4inipv6;
     uint16_t counter_ipv6inipv6;
     uint16_t counter_avg_pkt_size;