summaryrefslogtreecommitdiff
path: root/print-ether.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2017-12-12 10:36:21 -0800
committerGuy Harris <guy@alum.mit.edu>2017-12-12 10:36:21 -0800
commit7068209574374db8934ceaaac8f92e5eb5c62880 (patch)
treee967726d8cba09b29b68e09b77a9be62ff92be7a /print-ether.c
parenta95802aa0d8731412a9b5e621692e594046605bd (diff)
downloadtcpdump-7068209574374db8934ceaaac8f92e5eb5c62880.tar.gz
Use nd_ types in 802.x and FDDI headers.
Use EXTRACT_U_1() as required by those changes. Remove no-longer-necessary & operators from other EXTRACT_ calls. While we're at it, add MAC_ADDR_LEN to netdissect.h, and use it instead of ETHER_ADDR_LEN; eliminate ETHER_ADDR_LEN. Move the maximum Ethernet length field value to ethertype.h, under the name MAX_ETHERNET_LENGTH_VAL. Move the Ethernet header structure, and the #define for the Ethernet header length, to print-ether.c; in non-Ethernet dissectors that were using the Ethernet header structure, just declare two nd_mac_addr variables for the source and destination MAC addresses and use them instead of the Ethernet header (we don't need the type field there). These changes leave nothing in ether.h, so eliminate it.
Diffstat (limited to 'print-ether.c')
-rw-r--r--print-ether.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/print-ether.c b/print-ether.c
index 8d8341ba..7e7216c4 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -31,7 +31,22 @@
#include "extract.h"
#include "addrtoname.h"
#include "ethertype.h"
-#include "ether.h"
+
+/*
+ * Structure of an Ethernet header.
+ */
+struct ether_header {
+ nd_mac_addr ether_dhost;
+ nd_mac_addr ether_shost;
+ nd_uint16_t ether_length_type;
+};
+
+/*
+ * Length of an Ethernet header; note that some compilers may pad
+ * "struct ether_header" to a multiple of 4 bytes, for example, so
+ * "sizeof (struct ether_header)" may not give the right answer.
+ */
+#define ETHER_HDRLEN 14
const struct tok ethertype_values[] = {
{ ETHERTYPE_IP, "IPv4" },
@@ -102,9 +117,9 @@ ether_hdr_print(netdissect_options *ndo,
etheraddr_string(ndo, ESRC(ep)),
etheraddr_string(ndo, EDST(ep))));
- length_type = EXTRACT_BE_U_2(&ep->ether_length_type);
+ length_type = EXTRACT_BE_U_2(ep->ether_length_type);
if (!ndo->ndo_qflag) {
- if (length_type <= ETHERMTU) {
+ if (length_type <= MAX_ETHERNET_LENGTH_VAL) {
ND_PRINT((ndo, ", 802.3"));
length = length_type;
} else
@@ -112,7 +127,7 @@ ether_hdr_print(netdissect_options *ndo,
tok2str(ethertype_values,"Unknown", length_type),
length_type));
} else {
- if (length_type <= ETHERMTU) {
+ if (length_type <= MAX_ETHERNET_LENGTH_VAL) {
ND_PRINT((ndo, ", 802.3"));
length = length_type;
} else
@@ -168,13 +183,13 @@ ether_print(netdissect_options *ndo,
src.addr_string = etheraddr_string;
dst.addr = EDST(ep);
dst.addr_string = etheraddr_string;
- length_type = EXTRACT_BE_U_2(&ep->ether_length_type);
+ length_type = EXTRACT_BE_U_2(ep->ether_length_type);
recurse:
/*
* Is it (gag) an 802.3 encapsulation?
*/
- if (length_type <= ETHERMTU) {
+ if (length_type <= MAX_ETHERNET_LENGTH_VAL) {
/* Try to print the LLC-layer header & higher layers */
llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
if (llc_hdrlen < 0) {
@@ -207,7 +222,7 @@ recurse:
}
length_type = EXTRACT_BE_U_2(p + 2);
- if (ndo->ndo_eflag && length_type > ETHERMTU)
+ if (ndo->ndo_eflag && length_type > MAX_ETHERNET_LENGTH_VAL)
ND_PRINT((ndo, "ethertype %s, ", tok2str(ethertype_values,"0x%04x", length_type)));
p += 4;
length -= 4;