Upgrade tcpdump to tcpdump-4.99.1

Test: make
Change-Id: I052ed8f5279c806e4d2ff925f581b71db3ac03c0
diff --git a/print-arcnet.c b/print-arcnet.c
index abc19b8..5f6aaf9 100644
--- a/print-arcnet.c
+++ b/print-arcnet.c
@@ -24,10 +24,10 @@
 /* \summary: Attached Resource Computer NETwork (ARCNET) printer */
 
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
 #endif
 
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
 
 #include "netdissect.h"
 #include "extract.h"
@@ -41,22 +41,22 @@
  * as given to interface code.
  */
 struct	arc_header {
-	uint8_t  arc_shost;
-	uint8_t  arc_dhost;
-	uint8_t  arc_type;
+	nd_uint8_t  arc_shost;
+	nd_uint8_t  arc_dhost;
+	nd_uint8_t  arc_type;
 	/*
 	 * only present for newstyle encoding with LL fragmentation.
 	 * Don't use sizeof(anything), use ARC_HDR{,NEW}LEN instead.
 	 */
-	uint8_t  arc_flag;
-	uint16_t arc_seqid;
+	nd_uint8_t  arc_flag;
+	nd_uint16_t arc_seqid;
 
 	/*
 	 * only present in exception packets (arc_flag == 0xff)
 	 */
-	uint8_t  arc_type2;	/* same as arc_type */
-	uint8_t  arc_flag2;	/* real flag value */
-	uint16_t arc_seqid2;	/* real seqid value */
+	nd_uint8_t  arc_type2;	/* same as arc_type */
+	nd_uint8_t  arc_flag2;	/* real flag value */
+	nd_uint16_t arc_seqid2;	/* real seqid value */
 };
 
 #define	ARC_HDRLEN		3
@@ -85,17 +85,17 @@
  * never presents packets that look like exception frames.
  */
 struct	arc_linux_header {
-	uint8_t  arc_shost;
-	uint8_t  arc_dhost;
-	uint16_t arc_offset;
-	uint8_t  arc_type;
+	nd_uint8_t  arc_shost;
+	nd_uint8_t  arc_dhost;
+	nd_uint16_t arc_offset;
+	nd_uint8_t  arc_type;
 	/*
 	 * only present for newstyle encoding with LL fragmentation.
 	 * Don't use sizeof(anything), use ARC_LINUX_HDR{,NEW}LEN
 	 * instead.
 	 */
-	uint8_t  arc_flag;
-	uint16_t arc_seqid;
+	nd_uint8_t  arc_flag;
+	nd_uint16_t arc_seqid;
 };
 
 #define	ARC_LINUX_HDRLEN	5
@@ -115,54 +115,61 @@
 	{ ARCTYPE_IPX,		"ipx" },
 	{ ARCTYPE_INET6,	"ipv6" },
 	{ ARCTYPE_DIAGNOSE,	"diag" },
-	{ 0, 0 }
+	{ 0, NULL }
 };
 
-static inline void
+static void
 arcnet_print(netdissect_options *ndo, const u_char *bp, u_int length, int phds,
-             int flag, u_int seqid)
+             u_int flag, u_int seqid)
 {
 	const struct arc_header *ap;
 	const char *arctypename;
 
-
+	ndo->ndo_protocol = "arcnet";
 	ap = (const struct arc_header *)bp;
 
-
 	if (ndo->ndo_qflag) {
-		ND_PRINT((ndo, "%02x %02x %d: ",
-			     ap->arc_shost,
-			     ap->arc_dhost,
-			     length));
+		ND_PRINT("%02x %02x %u: ",
+			     GET_U_1(ap->arc_shost),
+			     GET_U_1(ap->arc_dhost),
+			     length);
 		return;
 	}
 
-	arctypename = tok2str(arctypemap, "%02x", ap->arc_type);
+	arctypename = tok2str(arctypemap, "%02x", GET_U_1(ap->arc_type));
 
 	if (!phds) {
-		ND_PRINT((ndo, "%02x %02x %s %d: ",
-			     ap->arc_shost, ap->arc_dhost, arctypename,
-			     length));
-			     return;
+		ND_PRINT("%02x %02x %s %u: ",
+			     GET_U_1(ap->arc_shost),
+			     GET_U_1(ap->arc_dhost),
+			     arctypename,
+			     length);
+		return;
 	}
 
 	if (flag == 0) {
-		ND_PRINT((ndo, "%02x %02x %s seqid %04x %d: ",
-			ap->arc_shost, ap->arc_dhost, arctypename, seqid,
-			length));
-			return;
+		ND_PRINT("%02x %02x %s seqid %04x %u: ",
+			GET_U_1(ap->arc_shost),
+			GET_U_1(ap->arc_dhost),
+			arctypename, seqid,
+			length);
+		return;
 	}
 
 	if (flag & 1)
-		ND_PRINT((ndo, "%02x %02x %s seqid %04x "
-			"(first of %d fragments) %d: ",
-			ap->arc_shost, ap->arc_dhost, arctypename, seqid,
-			(flag + 3) / 2, length));
+		ND_PRINT("%02x %02x %s seqid %04x "
+			"(first of %u fragments) %u: ",
+			GET_U_1(ap->arc_shost),
+			GET_U_1(ap->arc_dhost),
+			arctypename, seqid,
+			(flag + 3) / 2, length);
 	else
-		ND_PRINT((ndo, "%02x %02x %s seqid %04x "
-			"(fragment %d) %d: ",
-			ap->arc_shost, ap->arc_dhost, arctypename, seqid,
-			flag/2 + 1, length));
+		ND_PRINT("%02x %02x %s seqid %04x "
+			"(fragment %u) %u: ",
+			GET_U_1(ap->arc_shost),
+			GET_U_1(ap->arc_dhost),
+			arctypename, seqid,
+			flag/2 + 1, length);
 }
 
 /*
@@ -171,24 +178,26 @@
  * 'h->len' is the length of the packet off the wire, and 'h->caplen'
  * is the number of bytes actually captured.
  */
-u_int
+void
 arcnet_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
 {
 	u_int caplen = h->caplen;
 	u_int length = h->len;
 	const struct arc_header *ap;
 
-	int phds, flag = 0, archdrlen = 0;
+	int phds;
+	u_int flag = 0, archdrlen = 0;
 	u_int seqid = 0;
 	u_char arc_type;
 
-	if (caplen < ARC_HDRLEN || length < ARC_HDRLEN) {
-		ND_PRINT((ndo, "[|arcnet]"));
-		return (caplen);
+	ndo->ndo_protocol = "arcnet";
+	if (caplen < ARC_HDRLEN) {
+		ndo->ndo_ll_hdr_len += caplen;
+		nd_trunc_longjmp(ndo);
 	}
 
 	ap = (const struct arc_header *)p;
-	arc_type = ap->arc_type;
+	arc_type = GET_U_1(ap->arc_type);
 
 	switch (arc_type) {
 	default:
@@ -203,24 +212,26 @@
 	}
 
 	if (phds) {
-		if (caplen < ARC_HDRNEWLEN || length < ARC_HDRNEWLEN) {
+		if (caplen < ARC_HDRNEWLEN) {
 			arcnet_print(ndo, p, length, 0, 0, 0);
-			ND_PRINT((ndo, "[|phds]"));
-			return (caplen);
+			ND_PRINT(" phds");
+			ndo->ndo_ll_hdr_len += caplen;
+			nd_trunc_longjmp(ndo);
 		}
 
-		if (ap->arc_flag == 0xff) {
-			if (caplen < ARC_HDRNEWLEN_EXC || length < ARC_HDRNEWLEN_EXC) {
+		flag = GET_U_1(ap->arc_flag);
+		if (flag == 0xff) {
+			if (caplen < ARC_HDRNEWLEN_EXC) {
 				arcnet_print(ndo, p, length, 0, 0, 0);
-				ND_PRINT((ndo, "[|phds extended]"));
-				return (caplen);
+				ND_PRINT(" phds extended");
+				ndo->ndo_ll_hdr_len += caplen;
+				nd_trunc_longjmp(ndo);
 			}
-			flag = ap->arc_flag2;
-			seqid = EXTRACT_16BITS(&ap->arc_seqid2);
+			flag = GET_U_1(ap->arc_flag2);
+			seqid = GET_BE_U_2(ap->arc_seqid2);
 			archdrlen = ARC_HDRNEWLEN_EXC;
 		} else {
-			flag = ap->arc_flag;
-			seqid = EXTRACT_16BITS(&ap->arc_seqid);
+			seqid = GET_BE_U_2(ap->arc_seqid);
 			archdrlen = ARC_HDRNEWLEN;
 		}
 	}
@@ -240,13 +251,14 @@
 		/*
 		 * This is a middle fragment.
 		 */
-		return (archdrlen);
+		ndo->ndo_ll_hdr_len += archdrlen;
+		return;
 	}
 
 	if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
 		ND_DEFAULTPRINT(p, caplen);
 
-	return (archdrlen);
+	ndo->ndo_ll_hdr_len += archdrlen;
 }
 
 /*
@@ -259,7 +271,7 @@
  * reassembled packets rather than raw frames, and headers have an
  * extra "offset" field between the src/dest and packet type.
  */
-u_int
+void
 arcnet_linux_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
 {
 	u_int caplen = h->caplen;
@@ -269,20 +281,21 @@
 	int archdrlen = 0;
 	u_char arc_type;
 
-	if (caplen < ARC_LINUX_HDRLEN || length < ARC_LINUX_HDRLEN) {
-		ND_PRINT((ndo, "[|arcnet]"));
-		return (caplen);
+	ndo->ndo_protocol = "arcnet_linux";
+	if (caplen < ARC_LINUX_HDRLEN) {
+		ndo->ndo_ll_hdr_len += caplen;
+		nd_trunc_longjmp(ndo);
 	}
 
 	ap = (const struct arc_linux_header *)p;
-	arc_type = ap->arc_type;
+	arc_type = GET_U_1(ap->arc_type);
 
 	switch (arc_type) {
 	default:
 		archdrlen = ARC_LINUX_HDRNEWLEN;
-		if (caplen < ARC_LINUX_HDRNEWLEN || length < ARC_LINUX_HDRNEWLEN) {
-			ND_PRINT((ndo, "[|arcnet]"));
-			return (caplen);
+		if (caplen < ARC_LINUX_HDRNEWLEN) {
+			ndo->ndo_ll_hdr_len += caplen;
+			nd_trunc_longjmp(ndo);
 		}
 		break;
 	case ARCTYPE_IP_OLD:
@@ -305,7 +318,7 @@
 	if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
 		ND_DEFAULTPRINT(p, caplen);
 
-	return (archdrlen);
+	ndo->ndo_ll_hdr_len += archdrlen;
 }
 
 /*
@@ -339,7 +352,7 @@
 
 	case ARCTYPE_ATALK:	/* XXX was this ever used? */
 		if (ndo->ndo_vflag)
-			ND_PRINT((ndo, "et1 "));
+			ND_PRINT("et1 ");
 		atalk_print(ndo, p, length);
 		return (1);
 
@@ -351,10 +364,3 @@
 		return (0);
 	}
 }
-
-/*
- * Local Variables:
- * c-style: bsd
- * End:
- */
-