aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
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 /epan/dissectors
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
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-arp.c31
-rw-r--r--epan/dissectors/packet-bootp.c36
2 files changed, 29 insertions, 38 deletions
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,