diff options
author | Guy Harris <guy@alum.mit.edu> | 2004-12-26 22:26:02 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2004-12-26 22:26:02 +0000 |
commit | 122051638848c5030b14ba330935b014a7c1d8ae (patch) | |
tree | 0b8405f45e3e1c68b9de09132280bca5f4e363df /epan/dissectors | |
parent | dce666e0d111398ffc9f0adbc62557e43d35b421 (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.c | 31 | ||||
-rw-r--r-- | epan/dissectors/packet-bootp.c | 36 |
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, |