Upgrade tcpdump to tcpdump-4.99.1

Test: make
Change-Id: I052ed8f5279c806e4d2ff925f581b71db3ac03c0
diff --git a/cpack.c b/cpack.c
index e37d813..9be7b47 100644
--- a/cpack.c
+++ b/cpack.c
@@ -28,18 +28,20 @@
  */
 
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
 #endif
 
 #include <stdlib.h>
 #include <string.h>
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
 
-#include "cpack.h"
+#include "netdissect.h"
 #include "extract.h"
 
+#include "cpack.h"
+
 const uint8_t *
-cpack_next_boundary(const uint8_t *buf, const uint8_t *p, size_t alignment)
+nd_cpack_next_boundary(const uint8_t *buf, const uint8_t *p, size_t alignment)
 {
 	size_t misalignment = (size_t)(p - buf) % alignment;
 
@@ -54,12 +56,12 @@
  * return a pointer to the boundary.
  */
 const uint8_t *
-cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize)
+nd_cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize)
 {
 	const uint8_t *next;
 
 	/* Ensure alignment. */
-	next = cpack_next_boundary(cs->c_buf, cs->c_next, wordsize);
+	next = nd_cpack_next_boundary(cs->c_buf, cs->c_next, wordsize);
 
 	/* Too little space for wordsize bytes? */
 	if (next - cs->c_buf + wordsize > cs->c_len)
@@ -70,7 +72,7 @@
 
 /* Advance by N bytes without returning them. */
 int
-cpack_advance(struct cpack_state *cs, const size_t toskip)
+nd_cpack_advance(struct cpack_state *cs, const size_t toskip)
 {
 	/* No space left? */
 	if (cs->c_next - cs->c_buf + toskip > cs->c_len)
@@ -80,7 +82,7 @@
 }
 
 int
-cpack_init(struct cpack_state *cs, const uint8_t *buf, size_t buflen)
+nd_cpack_init(struct cpack_state *cs, const uint8_t *buf, size_t buflen)
 {
 	memset(cs, 0, sizeof(*cs));
 
@@ -93,63 +95,126 @@
 
 /* Unpack a 64-bit unsigned integer. */
 int
-cpack_uint64(struct cpack_state *cs, uint64_t *u)
+nd_cpack_uint64(netdissect_options *ndo, struct cpack_state *cs, uint64_t *u)
 {
 	const uint8_t *next;
 
-	if ((next = cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
 		return -1;
 
-	*u = EXTRACT_LE_64BITS(next);
+	*u = GET_LE_U_8(next);
 
 	/* Move pointer past the uint64_t. */
 	cs->c_next = next + sizeof(*u);
 	return 0;
 }
 
-/* Unpack a 32-bit unsigned integer. */
+/* Unpack a 64-bit signed integer. */
 int
-cpack_uint32(struct cpack_state *cs, uint32_t *u)
+nd_cpack_int64(netdissect_options *ndo, struct cpack_state *cs, int64_t *u)
 {
 	const uint8_t *next;
 
-	if ((next = cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
 		return -1;
 
-	*u = EXTRACT_LE_32BITS(next);
+	*u = GET_LE_S_8(next);
+
+	/* Move pointer past the int64_t. */
+	cs->c_next = next + sizeof(*u);
+	return 0;
+}
+
+/* Unpack a 32-bit unsigned integer. */
+int
+nd_cpack_uint32(netdissect_options *ndo, struct cpack_state *cs, uint32_t *u)
+{
+	const uint8_t *next;
+
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+		return -1;
+
+	*u = GET_LE_U_4(next);
 
 	/* Move pointer past the uint32_t. */
 	cs->c_next = next + sizeof(*u);
 	return 0;
 }
 
-/* Unpack a 16-bit unsigned integer. */
+/* Unpack a 32-bit signed integer. */
 int
-cpack_uint16(struct cpack_state *cs, uint16_t *u)
+nd_cpack_int32(netdissect_options *ndo, struct cpack_state *cs, int32_t *u)
 {
 	const uint8_t *next;
 
-	if ((next = cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
 		return -1;
 
-	*u = EXTRACT_LE_16BITS(next);
+	*u = GET_LE_S_4(next);
+
+	/* Move pointer past the int32_t. */
+	cs->c_next = next + sizeof(*u);
+	return 0;
+}
+
+/* Unpack a 16-bit unsigned integer. */
+int
+nd_cpack_uint16(netdissect_options *ndo, struct cpack_state *cs, uint16_t *u)
+{
+	const uint8_t *next;
+
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+		return -1;
+
+	*u = GET_LE_U_2(next);
 
 	/* Move pointer past the uint16_t. */
 	cs->c_next = next + sizeof(*u);
 	return 0;
 }
 
+/* Unpack a 16-bit signed integer. */
+int
+nd_cpack_int16(netdissect_options *ndo, struct cpack_state *cs, int16_t *u)
+{
+	const uint8_t *next;
+
+	if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+		return -1;
+
+	*u = GET_LE_S_2(next);
+
+	/* Move pointer past the int16_t. */
+	cs->c_next = next + sizeof(*u);
+	return 0;
+}
+
 /* Unpack an 8-bit unsigned integer. */
 int
-cpack_uint8(struct cpack_state *cs, uint8_t *u)
+nd_cpack_uint8(netdissect_options *ndo, struct cpack_state *cs, uint8_t *u)
 {
 	/* No space left? */
 	if ((size_t)(cs->c_next - cs->c_buf) >= cs->c_len)
 		return -1;
 
-	*u = *cs->c_next;
+	*u = GET_U_1(cs->c_next);
 
 	/* Move pointer past the uint8_t. */
 	cs->c_next++;
 	return 0;
 }
+
+/* Unpack an 8-bit signed integer. */
+int
+nd_cpack_int8(netdissect_options *ndo, struct cpack_state *cs, int8_t *u)
+{
+	/* No space left? */
+	if ((size_t)(cs->c_next - cs->c_buf) >= cs->c_len)
+		return -1;
+
+	*u = GET_S_1(cs->c_next);
+
+	/* Move pointer past the int8_t. */
+	cs->c_next++;
+	return 0;
+}