aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-12-26 22:26:02 +0000
committerGuy Harris <guy@alum.mit.edu>2004-12-26 22:26:02 +0000
commit122051638848c5030b14ba330935b014a7c1d8ae (patch)
tree0b8405f45e3e1c68b9de09132280bca5f4e363df
parentdce666e0d111398ffc9f0adbc62557e43d35b421 (diff)
From Yaniv Kaul: add Ethernet address-to-name (or, at least, address-to-
vendor-name-and-next-three-bytes-in-hex) resolution for Ethernet/802.x hardware addresses. Move the ARP hardware types into a header file, for use by dissectors other than the ARP dissector. svn path=/trunk/; revision=12839
-rw-r--r--epan/Makefile.common1
-rw-r--r--epan/arptypes.h64
-rw-r--r--epan/dissectors/packet-arp.c31
-rw-r--r--epan/dissectors/packet-bootp.c36
4 files changed, 94 insertions, 38 deletions
diff --git a/epan/Makefile.common b/epan/Makefile.common
index e71f28b12f..88244e1ad3 100644
--- a/epan/Makefile.common
+++ b/epan/Makefile.common
@@ -76,6 +76,7 @@ LIBETHEREAL_INCLUDES = \
address.h \
adler32.h \
afn.h \
+ arptypes.h \
atalk-utils.h \
base64.h \
bitswap.h \
diff --git a/epan/arptypes.h b/epan/arptypes.h
new file mode 100644
index 0000000000..6f6ba29bb7
--- /dev/null
+++ b/epan/arptypes.h
@@ -0,0 +1,64 @@
+/* arptypes.h
+ * Declarations of ARP address types.
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ARPTYPES_H__
+#define __ARPTYPES_H__
+
+/* Definitions taken from Linux "linux/if_arp.h" header file, and from
+
+ http://www.iana.org/assignments/arp-parameters
+
+ */
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
+#define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
+#define ARPHRD_EETHER 2 /* Experimental Ethernet */
+#define ARPHRD_AX25 3 /* AX.25 Level 2 */
+#define ARPHRD_PRONET 4 /* PROnet token ring */
+#define ARPHRD_CHAOS 5 /* Chaosnet */
+#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
+#define ARPHRD_ARCNET 7 /* ARCnet */
+#define ARPHRD_HYPERCH 8 /* Hyperchannel */
+#define ARPHRD_LANSTAR 9 /* Lanstar */
+#define ARPHRD_AUTONET 10 /* Autonet Short Address */
+#define ARPHRD_LOCALTLK 11 /* Localtalk */
+#define ARPHRD_LOCALNET 12 /* LocalNet (IBM PCNet/Sytek LocalNET) */
+#define ARPHRD_ULTRALNK 13 /* Ultra link */
+#define ARPHRD_SMDS 14 /* SMDS */
+#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
+#define ARPHRD_ATM 16 /* ATM */
+#define ARPHRD_HDLC 17 /* HDLC */
+#define ARPHRD_FIBREC 18 /* Fibre Channel */
+#define ARPHRD_ATM2225 19 /* ATM (RFC 2225) */
+#define ARPHRD_SERIAL 20 /* Serial Line */
+#define ARPHRD_ATM2 21 /* ATM */
+#define ARPHRD_MS188220 22 /* MIL-STD-188-220 */
+#define ARPHRD_METRICOM 23 /* Metricom STRIP */
+#define ARPHRD_IEEE1394 24 /* IEEE 1394.1995 */
+#define ARPHRD_MAPOS 25 /* MAPOS */
+#define ARPHRD_TWINAX 26 /* Twinaxial */
+#define ARPHRD_EUI_64 27 /* EUI-64 */
+
+#endif /* arptypes.h */
diff --git a/epan/dissectors/packet-arp.c b/epan/dissectors/packet-arp.c
index 1af20b4a2f..15d310bea9 100644
--- a/epan/dissectors/packet-arp.c
+++ b/epan/dissectors/packet-arp.c
@@ -30,6 +30,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/strutil.h>
+#include <epan/arptypes.h>
#include <epan/addr_resolv.h>
#include "packet-arp.h"
#include "etypes.h"
@@ -78,36 +79,6 @@ static dissector_handle_t atmarp_handle;
*/
-/* ARP protocol HARDWARE identifiers. */
-#define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
-#define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
-#define ARPHRD_EETHER 2 /* Experimental Ethernet */
-#define ARPHRD_AX25 3 /* AX.25 Level 2 */
-#define ARPHRD_PRONET 4 /* PROnet token ring */
-#define ARPHRD_CHAOS 5 /* Chaosnet */
-#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
-#define ARPHRD_ARCNET 7 /* ARCnet */
-#define ARPHRD_HYPERCH 8 /* Hyperchannel */
-#define ARPHRD_LANSTAR 9 /* Lanstar */
-#define ARPHRD_AUTONET 10 /* Autonet Short Address */
-#define ARPHRD_LOCALTLK 11 /* Localtalk */
-#define ARPHRD_LOCALNET 12 /* LocalNet (IBM PCNet/Sytek LocalNET) */
-#define ARPHRD_ULTRALNK 13 /* Ultra link */
-#define ARPHRD_SMDS 14 /* SMDS */
-#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
-#define ARPHRD_ATM 16 /* ATM */
-#define ARPHRD_HDLC 17 /* HDLC */
-#define ARPHRD_FIBREC 18 /* Fibre Channel */
-#define ARPHRD_ATM2225 19 /* ATM (RFC 2225) */
-#define ARPHRD_SERIAL 20 /* Serial Line */
-#define ARPHRD_ATM2 21 /* ATM */
-#define ARPHRD_MS188220 22 /* MIL-STD-188-220 */
-#define ARPHRD_METRICOM 23 /* Metricom STRIP */
-#define ARPHRD_IEEE1394 24 /* IEEE 1394.1995 */
-#define ARPHRD_MAPOS 25 /* MAPOS */
-#define ARPHRD_TWINAX 26 /* Twinaxial */
-#define ARPHRD_EUI_64 27 /* EUI-64 */
-
/* ARP / RARP structs and definitions */
#ifndef ARPOP_REQUEST
#define ARPOP_REQUEST 1 /* ARP request. */
diff --git a/epan/dissectors/packet-bootp.c b/epan/dissectors/packet-bootp.c
index da086cd19c..58bb88187e 100644
--- a/epan/dissectors/packet-bootp.c
+++ b/epan/dissectors/packet-bootp.c
@@ -70,10 +70,11 @@
#include <epan/packet.h>
#include "packet-arp.h"
#include "packet-dns.h" /* for get_dns_name() */
-
+#include <epan/addr_resolv.h>
#include <epan/prefs.h>
#include <epan/tap.h>
#include <epan/strutil.h>
+#include <epan/arptypes.h>
static int bootp_dhcp_tap = -1;
static int proto_bootp = -1;
@@ -107,6 +108,7 @@ static int hf_bootp_fqdn_name = -1;
static int hf_bootp_fqdn_asciiname = -1;
static int hf_bootp_pkt_mtacap_len = -1;
static int hf_bootp_docsis_cmcap_len = -1;
+static int hf_bootp_hw_ether_addr = -1;
static gint ett_bootp = -1;
static gint ett_bootp_flags = -1;
@@ -859,7 +861,6 @@ bootp_option(tvbuff_t *tvb, proto_tree *bp_tree, int voff, int eoff,
(e.g. a fully qualified domain name). */
if (optlen == 7 && byte > 0 && byte < 48) {
-
vti = proto_tree_add_text(bp_tree, tvb, voff,
consumed, "Option %d: %s", code, text);
v_tree = proto_item_add_subtree(vti, ett_bootp_option);
@@ -867,9 +868,14 @@ bootp_option(tvbuff_t *tvb, proto_tree *bp_tree, int voff, int eoff,
"Hardware type: %s",
arphrdtype_to_str(byte,
"Unknown (0x%02x)"));
- proto_tree_add_text(v_tree, tvb, optoff+1, 6,
- "Client hardware address: %s",
- arphrdaddr_to_str(tvb_get_ptr(tvb, optoff+1, 6),
+ if (byte == ARPHRD_ETHER || byte == ARPHRD_IEEE802)
+ proto_tree_add_item(v_tree,
+ hf_bootp_hw_ether_addr, tvb, optoff+1, 6,
+ FALSE);
+ else
+ proto_tree_add_text(v_tree, tvb, optoff+1, 6,
+ "Client hardware address: %s",
+ arphrdaddr_to_str(tvb_get_ptr(tvb, optoff+1, 6),
6, byte));
} else {
/* otherwise, it's opaque data */
@@ -2725,8 +2731,14 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
switch (op) {
case BOOTREQUEST:
- col_add_fstr(pinfo->cinfo, COL_INFO, "Boot Request from %s",
- arphrdaddr_to_str(tvb_get_ptr(tvb, 28, hlen),
+ if ((htype == ARPHRD_ETHER || htype == ARPHRD_IEEE802) && hlen == 6)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Boot Request from %s (%s)",
+ arphrdaddr_to_str(tvb_get_ptr(tvb, 28, hlen),
+ hlen, htype),
+ get_ether_name(tvb_get_ptr(tvb, 28, hlen)));
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Boot Request from %s",
+ arphrdaddr_to_str(tvb_get_ptr(tvb, 28, hlen),
hlen, htype));
break;
@@ -2781,8 +2793,11 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(bp_tree, hf_bootp_ip_relay, tvb,
24, 4, FALSE);
- if (hlen > 0) {
+ if (hlen > 0 && hlen <= 16) {
haddr = tvb_get_ptr(tvb, 28, hlen);
+ if((htype == 1 || htype == 6) && hlen == 6)
+ proto_tree_add_ether(bp_tree, hf_bootp_hw_ether_addr, tvb, 28, 6, haddr);
+ else
proto_tree_add_bytes_format(bp_tree, hf_bootp_hw_addr, tvb,
/* The chaddr element is 16 bytes in length, although
only the first hlen bytes are used */
@@ -2984,6 +2999,11 @@ proto_register_bootp(void)
BASE_NONE, NULL, 0x0,
"", HFILL }},
+ { &hf_bootp_hw_ether_addr,
+ { "Client MAC address", "bootp.hw.mac_addr", FT_ETHER,
+ BASE_NONE, NULL, 0x0,
+ "", HFILL }},
+
{ &hf_bootp_server,
{ "Server host name", "bootp.server", FT_STRING,
BASE_NONE, NULL, 0x0,