Add explanation for more common EtherTypes

This commit is contained in:
Juhani Krekelä 2019-07-03 22:43:55 +03:00
parent cf6137c734
commit 17b8c26404
1 changed files with 22 additions and 3 deletions

View File

@ -54,11 +54,30 @@ int main(void) {
if (frame_length < 14) {
errx(1, "Very weird frame of only %zdB???", frame_length);
}
uint16_t ethertype_length = (frame[12] << 8) | frame[13];
uint16_t ethertype = (frame[12] << 8) | frame[13];
const char *ethertype_meaning = NULL;
if (ethertype <= 1500) {
ethertype_meaning = "packet length";
} else if (ethertype < 0x0600) {
ethertype_meaning = "undefined";
} else if (ethertype == 0x0800) {
ethertype_meaning = "IPv4";
} else if (ethertype == 0x0806) {
ethertype_meaning = "ARP";
} else if (ethertype == 0x86dd) {
ethertype_meaning = "IPv6";
}
errno = 0;
if(printf("ethertype: %02x%02x, length: %zd\n", ethertype_length >> 8, ethertype_length & 0xff, frame_length) == -1) {
err(1, "printf");
if (ethertype_meaning == NULL) {
if (printf("ethertype: %02x%02x, length: %zd\n", ethertype >> 8, ethertype & 0xff, frame_length) == -1) {
err(1, "printf");
}
} else {
if (printf("ethertype: %02x%02x (%s), length: %zd\n", ethertype >> 8, ethertype & 0xff, ethertype_meaning, frame_length) == -1) {
err(1, "printf");
}
}
}