diff --git a/src/decode-erspan.c b/src/decode-erspan.c index bd710e90b5..dd2515bb00 100644 --- a/src/decode-erspan.c +++ b/src/decode-erspan.c @@ -43,12 +43,26 @@ * \brief Functions to decode ERSPAN Type I and II packets */ +bool g_erspan_typeI_enabled = false; + +void DecodeERSPANConfig(void) +{ + int enabled = 0; + if (ConfGetBool("decoder.erspan.typeI.enabled", &enabled) == 1) { + g_erspan_typeI_enabled = (enabled == 1); + } + SCLogDebug("ERSPAN Type I decode support %s", g_erspan_typeI_enabled ? "enabled" : "disabled"); +} + /** * \brief ERSPAN Type I */ int DecodeERSPANTypeI(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, const uint8_t *pkt, uint32_t len, PacketQueue *pq) { + if (unlikely(!g_erspan_typeI_enabled)) + return TM_ECODE_FAILED; + StatsIncr(tv, dtv->counter_erspan); return DecodeEthernet(tv, dtv, p, pkt, len, pq); diff --git a/src/decode-erspan.h b/src/decode-erspan.h index 2f81d1e4a3..5b4af04ea8 100644 --- a/src/decode-erspan.h +++ b/src/decode-erspan.h @@ -34,4 +34,5 @@ typedef struct ErspanHdr_ { uint32_t padding; } __attribute__((__packed__)) ErspanHdr; +void DecodeERSPANConfig(void); #endif /* __DECODE_ERSPAN_H__ */ diff --git a/src/decode.c b/src/decode.c index 7774a057ad..67c5a49aa3 100644 --- a/src/decode.c +++ b/src/decode.c @@ -732,6 +732,7 @@ void DecodeGlobalConfig(void) { DecodeTeredoConfig(); DecodeVXLANConfig(); + DecodeERSPANConfig(); } /** diff --git a/suricata.yaml.in b/suricata.yaml.in index aacad7411d..96b9b0b0d3 100644 --- a/suricata.yaml.in +++ b/suricata.yaml.in @@ -1338,6 +1338,10 @@ decoder: vxlan: enabled: true ports: $VXLAN_PORTS # syntax: '8472, 4789' + # ERSPAN Type I decode support + erspan: + typeI: + enabled: false ##