X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c1c3c77463d592cc576eaa491e604752044ca55a..9f957a5883cb4c5c99cefa71b42fc9d2d27d73e1:/print-pktap.c diff --git a/print-pktap.c b/print-pktap.c index 90d50619..1d5c7647 100644 --- a/print-pktap.c +++ b/print-pktap.c @@ -19,11 +19,13 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +/* \summary: Apple's DLT_PKTAP printer */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include +#include #include "netdissect.h" #include "extract.h" @@ -70,16 +72,18 @@ pktap_header_print(netdissect_options *ndo, const u_char *bp, u_int length) { const pktap_header_t *hdr; uint32_t dlt, hdrlen; + const char *dltname; hdr = (const pktap_header_t *)bp; - dlt = EXTRACT_LE_32BITS(&hdr->pkt_dlt); - hdrlen = EXTRACT_LE_32BITS(&hdr->pkt_len); + dlt = EXTRACT_LE_U_4(&hdr->pkt_dlt); + hdrlen = EXTRACT_LE_U_4(&hdr->pkt_len); + dltname = pcap_datalink_val_to_name(dlt); if (!ndo->ndo_qflag) { - ND_PRINT((ndo,", DLT %s (%d) len %d", - pcap_datalink_val_to_name(dlt), dlt, hdrlen)); + ND_PRINT((ndo,"DLT %s (%d) len %d", + (dltname != NULL ? dltname : "UNKNOWN"), dlt, hdrlen)); } else { - ND_PRINT((ndo,", %s", pcap_datalink_val_to_name(dlt))); + ND_PRINT((ndo,"%s", (dltname != NULL ? dltname : "UNKNOWN"))); } ND_PRINT((ndo, ", length %u: ", length)); @@ -100,14 +104,15 @@ pktap_if_print(netdissect_options *ndo, u_int length = h->len; if_printer printer; const pktap_header_t *hdr; + struct pcap_pkthdr nhdr; if (caplen < sizeof(pktap_header_t) || length < sizeof(pktap_header_t)) { ND_PRINT((ndo, "[|pktap]")); return (0); } hdr = (const pktap_header_t *)p; - dlt = EXTRACT_LE_32BITS(&hdr->pkt_dlt); - hdrlen = EXTRACT_LE_32BITS(&hdr->pkt_len); + dlt = EXTRACT_LE_U_4(&hdr->pkt_dlt); + hdrlen = EXTRACT_LE_U_4(&hdr->pkt_len); if (hdrlen < sizeof(pktap_header_t)) { /* * Claimed header length < structure length. @@ -131,7 +136,7 @@ pktap_if_print(netdissect_options *ndo, caplen -= hdrlen; p += hdrlen; - rectype = EXTRACT_LE_32BITS(&hdr->pkt_rectype); + rectype = EXTRACT_LE_U_4(&hdr->pkt_rectype); switch (rectype) { case PKT_REC_NONE: @@ -140,7 +145,10 @@ pktap_if_print(netdissect_options *ndo, case PKT_REC_PACKET: if ((printer = lookup_printer(dlt)) != NULL) { - hdrlen += printer(ndo, h, p); + nhdr = *h; + nhdr.caplen = caplen; + nhdr.len = length; + hdrlen += printer(ndo, &nhdr, p); } else { if (!ndo->ndo_eflag) pktap_header_print(ndo, (const u_char *)hdr,