|
|
|
@ -23,18 +23,30 @@ void DecodeEthernet(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *p
|
|
|
|
|
|
|
|
|
|
SCLogDebug("p %p pkt %p ether type %04x", p, pkt, ntohs(ethh->eth_type));
|
|
|
|
|
|
|
|
|
|
if (ntohs(ethh->eth_type) == ETHERNET_TYPE_IP) {
|
|
|
|
|
switch (ntohs(ethh->eth_type)) {
|
|
|
|
|
case ETHERNET_TYPE_IP:
|
|
|
|
|
//printf("DecodeEthernet ip4\n");
|
|
|
|
|
DecodeIPV4(tv, dtv, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
} else if(ntohs(ethh->eth_type) == ETHERNET_TYPE_IPV6) {
|
|
|
|
|
DecodeIPV4(tv, dtv, p, pkt + ETHERNET_HEADER_LEN,
|
|
|
|
|
len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
break;
|
|
|
|
|
case ETHERNET_TYPE_IPV6:
|
|
|
|
|
//printf("DecodeEthernet ip6\n");
|
|
|
|
|
DecodeIPV6(tv, dtv, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
} else if(ntohs(ethh->eth_type) == ETHERNET_TYPE_PPPOE_SESS) {
|
|
|
|
|
DecodeIPV6(tv, dtv, p, pkt + ETHERNET_HEADER_LEN,
|
|
|
|
|
len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
break;
|
|
|
|
|
case ETHERNET_TYPE_PPPOE_SESS:
|
|
|
|
|
//printf("DecodeEthernet PPPOE Session\n");
|
|
|
|
|
DecodePPPOESession(tv, dtv, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
} else if(ntohs(ethh->eth_type) == ETHERNET_TYPE_PPPOE_DISC) {
|
|
|
|
|
DecodePPPOESession(tv, dtv, p, pkt + ETHERNET_HEADER_LEN,
|
|
|
|
|
len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
break;
|
|
|
|
|
case ETHERNET_TYPE_PPPOE_DISC:
|
|
|
|
|
//printf("DecodeEthernet PPPOE Discovery\n");
|
|
|
|
|
DecodePPPOEDiscovery(tv, dtv, p, pkt + ETHERNET_HEADER_LEN, len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
DecodePPPOEDiscovery(tv, dtv, p, pkt + ETHERNET_HEADER_LEN,
|
|
|
|
|
len - ETHERNET_HEADER_LEN, pq);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
SCLogDebug("p %p pkt %p ether type %04x not supported", p,
|
|
|
|
|
pkt, ntohs(ethh->eth_type));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|