diff --git a/src/decode-ethernet.c b/src/decode-ethernet.c index d10227c3ca..6f34f947c9 100644 --- a/src/decode-ethernet.c +++ b/src/decode-ethernet.c @@ -76,6 +76,7 @@ int DecodeEthernet(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, len - ETHERNET_HEADER_LEN, pq); break; case ETHERNET_TYPE_VLAN: + case ETHERNET_TYPE_8021QINQ: DecodeVLAN(tv, dtv, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq); break; diff --git a/src/decode-ethernet.h b/src/decode-ethernet.h index c63b7fd3c9..829601f9ce 100644 --- a/src/decode-ethernet.h +++ b/src/decode-ethernet.h @@ -36,8 +36,10 @@ #define ETHERNET_TYPE_IPX 0x8137 #define ETHERNET_TYPE_PPPOE_DISC 0x8863 /* discovery stage */ #define ETHERNET_TYPE_PPPOE_SESS 0x8864 /* session stage */ +#define ETHERNET_TYPE_8021AD 0x88a8 #define ETHERNET_TYPE_8021Q 0x8100 #define ETHERNET_TYPE_LOOP 0x9000 +#define ETHERNET_TYPE_8021QINQ 0x9100 typedef struct EthernetHdr_ { uint8_t eth_dst[6]; diff --git a/src/decode-vlan.c b/src/decode-vlan.c index 0756966612..29dc908922 100644 --- a/src/decode-vlan.c +++ b/src/decode-vlan.c @@ -105,6 +105,7 @@ int DecodeVLAN(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u len - VLAN_HEADER_LEN, pq); break; case ETHERNET_TYPE_VLAN: + case ETHERNET_TYPE_8021AD: if (p->vlan_idx >= 2) { ENGINE_SET_EVENT(p,VLAN_HEADER_TOO_MANY_LAYERS); return TM_ECODE_OK;