decode: create linklayer entry point

Make AF_PACKET and PCAP mode use it.
pull/4802/head
Victor Julien 6 years ago
parent 685d490d07
commit 88bccfb80e

@ -1149,5 +1149,33 @@ static inline bool VerdictTunnelPacket(Packet *p)
return verdict;
}
static inline void DecodeLinkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
const int datalink, Packet *p, const uint8_t *data, const uint32_t len)
{
/* call the decoder */
switch (datalink) {
case LINKTYPE_ETHERNET:
DecodeEthernet(tv, dtv, p, data, len);
break;
case LINKTYPE_LINUX_SLL:
DecodeSll(tv, dtv, p, data, len);
break;
case LINKTYPE_PPP:
DecodePPP(tv, dtv, p, data, len);
break;
case LINKTYPE_RAW:
case LINKTYPE_GRE_OVER_IP:
DecodeRaw(tv, dtv, p, data, len);
break;
case LINKTYPE_NULL:
DecodeNull(tv, dtv, p, data, len);
break;
default:
SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "datalink type "
"%"PRId32" not yet supported", datalink);
break;
}
}
#endif /* __DECODE_H__ */

@ -2898,27 +2898,7 @@ TmEcode DecodeAFP(ThreadVars *tv, Packet *p, void *data)
}
/* call the decoder */
switch (p->datalink) {
case LINKTYPE_ETHERNET:
DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_LINUX_SLL:
DecodeSll(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_PPP:
DecodePPP(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_RAW:
case LINKTYPE_GRE_OVER_IP:
DecodeRaw(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_NULL:
DecodeNull(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
default:
SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "Error: datalink type %" PRId32 " not yet supported in module DecodeAFP", p->datalink);
break;
}
DecodeLinkLayer(tv, dtv, p->datalink, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
PacketDecodeFinalize(tv, dtv, p);

@ -550,30 +550,7 @@ static TmEcode DecodePcap(ThreadVars *tv, Packet *p, void *data)
/* update counters */
DecodeUpdatePacketCounters(tv, dtv, p);
/* call the decoder */
switch(p->datalink) {
case LINKTYPE_LINUX_SLL:
DecodeSll(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_ETHERNET:
DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_PPP:
DecodePPP(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_RAW:
case LINKTYPE_GRE_OVER_IP:
DecodeRaw(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
case LINKTYPE_NULL:
DecodeNull(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
break;
default:
SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "Error: datalink "
"type %" PRId32 " not yet supported in module "
"DecodePcap", p->datalink);
break;
}
DecodeLinkLayer(tv, dtv, p->datalink, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
PacketDecodeFinalize(tv, dtv, p);

Loading…
Cancel
Save