Add MPLS counter.

Check length before decoding each label.
pull/1172/head
Jason Ish 11 years ago
parent 7642489874
commit 3e3ab2dc9f

@ -34,19 +34,22 @@
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:

@ -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,

@ -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;

Loading…
Cancel
Save