Looks like Suricata's binary part will have the same issue as Snort. It is missing a match for the LINKTYPE_PPP_ETHER link type as well --
The relevant code is within src/decode.h starting at line 1122,
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;
case LINKTYPE_CISCO_HDLC:
DecodeCHDLC(tv, dtv, p, data, len);
break;
default:
SCLogError("datalink type "
"%" PRId32 " not yet supported",
datalink);
break;
}
}
An edit like the one below will probably work (again, as with Snort, if the raw PPP data is the same in the two link types) --
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:
case LINKTYPE_PPP_ETHER:
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;
case LINKTYPE_CISCO_HDLC:
DecodeCHDLC(tv, dtv, p, data, len);
break;
default:
SCLogError("datalink type "
"%" PRId32 " not yet supported",
datalink);
break;
}
}