p->vlan_id[p->vlan_idx++] = (uint16_t)GET_VLAN_ID(vlan_hdr);
- DecodeNetworkLayer(tv, dtv, proto, p, pkt + VLAN_HEADER_LEN, len - VLAN_HEADER_LEN);
-
+ if (DecodeNetworkLayer(tv, dtv, proto, p,
+ pkt + VLAN_HEADER_LEN, len - VLAN_HEADER_LEN) == false) {
+ ENGINE_SET_INVALID_EVENT(p, VLAN_UNKNOWN_TYPE);
+ return TM_ECODE_FAILED;
+ }
return TM_ECODE_OK;
}
}
}
-static inline void DecodeNetworkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
+/** \brief decode network layer
+ * \retval bool true if successful, false if unknown */
+static inline bool DecodeNetworkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
const uint16_t proto, Packet *p, const uint8_t *data, const uint32_t len)
{
switch (proto) {
}
break;
default:
- SCLogDebug("unknown ether type: %" PRIx32 "", proto);
- ENGINE_SET_INVALID_EVENT(p, VLAN_UNKNOWN_TYPE); // TODO
- break;
+ SCLogDebug("unknown ether type: %" PRIx16 "", proto);
+ return false;
}
+ return true;
}
#endif /* __DECODE_H__ */