forked from osmocom/wireshark
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
This commit is contained in:
parent
dce666e0d1
commit
1220516388
|
@ -76,6 +76,7 @@ LIBETHEREAL_INCLUDES = \
|
||||||
address.h \
|
address.h \
|
||||||
adler32.h \
|
adler32.h \
|
||||||
afn.h \
|
afn.h \
|
||||||
|
arptypes.h \
|
||||||
atalk-utils.h \
|
atalk-utils.h \
|
||||||
base64.h \
|
base64.h \
|
||||||
bitswap.h \
|
bitswap.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 */
|
|
@ -30,6 +30,7 @@
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <epan/packet.h>
|
#include <epan/packet.h>
|
||||||
#include <epan/strutil.h>
|
#include <epan/strutil.h>
|
||||||
|
#include <epan/arptypes.h>
|
||||||
#include <epan/addr_resolv.h>
|
#include <epan/addr_resolv.h>
|
||||||
#include "packet-arp.h"
|
#include "packet-arp.h"
|
||||||
#include "etypes.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 */
|
/* ARP / RARP structs and definitions */
|
||||||
#ifndef ARPOP_REQUEST
|
#ifndef ARPOP_REQUEST
|
||||||
#define ARPOP_REQUEST 1 /* ARP request. */
|
#define ARPOP_REQUEST 1 /* ARP request. */
|
||||||
|
|
|
@ -70,10 +70,11 @@
|
||||||
#include <epan/packet.h>
|
#include <epan/packet.h>
|
||||||
#include "packet-arp.h"
|
#include "packet-arp.h"
|
||||||
#include "packet-dns.h" /* for get_dns_name() */
|
#include "packet-dns.h" /* for get_dns_name() */
|
||||||
|
#include <epan/addr_resolv.h>
|
||||||
#include <epan/prefs.h>
|
#include <epan/prefs.h>
|
||||||
#include <epan/tap.h>
|
#include <epan/tap.h>
|
||||||
#include <epan/strutil.h>
|
#include <epan/strutil.h>
|
||||||
|
#include <epan/arptypes.h>
|
||||||
|
|
||||||
static int bootp_dhcp_tap = -1;
|
static int bootp_dhcp_tap = -1;
|
||||||
static int proto_bootp = -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_fqdn_asciiname = -1;
|
||||||
static int hf_bootp_pkt_mtacap_len = -1;
|
static int hf_bootp_pkt_mtacap_len = -1;
|
||||||
static int hf_bootp_docsis_cmcap_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 = -1;
|
||||||
static gint ett_bootp_flags = -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). */
|
(e.g. a fully qualified domain name). */
|
||||||
|
|
||||||
if (optlen == 7 && byte > 0 && byte < 48) {
|
if (optlen == 7 && byte > 0 && byte < 48) {
|
||||||
|
|
||||||
vti = proto_tree_add_text(bp_tree, tvb, voff,
|
vti = proto_tree_add_text(bp_tree, tvb, voff,
|
||||||
consumed, "Option %d: %s", code, text);
|
consumed, "Option %d: %s", code, text);
|
||||||
v_tree = proto_item_add_subtree(vti, ett_bootp_option);
|
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",
|
"Hardware type: %s",
|
||||||
arphrdtype_to_str(byte,
|
arphrdtype_to_str(byte,
|
||||||
"Unknown (0x%02x)"));
|
"Unknown (0x%02x)"));
|
||||||
proto_tree_add_text(v_tree, tvb, optoff+1, 6,
|
if (byte == ARPHRD_ETHER || byte == ARPHRD_IEEE802)
|
||||||
"Client hardware address: %s",
|
proto_tree_add_item(v_tree,
|
||||||
arphrdaddr_to_str(tvb_get_ptr(tvb, optoff+1, 6),
|
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));
|
6, byte));
|
||||||
} else {
|
} else {
|
||||||
/* otherwise, it's opaque data */
|
/* otherwise, it's opaque data */
|
||||||
|
@ -2725,8 +2731,14 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
|
||||||
case BOOTREQUEST:
|
case BOOTREQUEST:
|
||||||
col_add_fstr(pinfo->cinfo, COL_INFO, "Boot Request from %s",
|
if ((htype == ARPHRD_ETHER || htype == ARPHRD_IEEE802) && hlen == 6)
|
||||||
arphrdaddr_to_str(tvb_get_ptr(tvb, 28, hlen),
|
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));
|
hlen, htype));
|
||||||
break;
|
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,
|
proto_tree_add_item(bp_tree, hf_bootp_ip_relay, tvb,
|
||||||
24, 4, FALSE);
|
24, 4, FALSE);
|
||||||
|
|
||||||
if (hlen > 0) {
|
if (hlen > 0 && hlen <= 16) {
|
||||||
haddr = tvb_get_ptr(tvb, 28, hlen);
|
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,
|
proto_tree_add_bytes_format(bp_tree, hf_bootp_hw_addr, tvb,
|
||||||
/* The chaddr element is 16 bytes in length, although
|
/* The chaddr element is 16 bytes in length, although
|
||||||
only the first hlen bytes are used */
|
only the first hlen bytes are used */
|
||||||
|
@ -2984,6 +2999,11 @@ proto_register_bootp(void)
|
||||||
BASE_NONE, NULL, 0x0,
|
BASE_NONE, NULL, 0x0,
|
||||||
"", HFILL }},
|
"", HFILL }},
|
||||||
|
|
||||||
|
{ &hf_bootp_hw_ether_addr,
|
||||||
|
{ "Client MAC address", "bootp.hw.mac_addr", FT_ETHER,
|
||||||
|
BASE_NONE, NULL, 0x0,
|
||||||
|
"", HFILL }},
|
||||||
|
|
||||||
{ &hf_bootp_server,
|
{ &hf_bootp_server,
|
||||||
{ "Server host name", "bootp.server", FT_STRING,
|
{ "Server host name", "bootp.server", FT_STRING,
|
||||||
BASE_NONE, NULL, 0x0,
|
BASE_NONE, NULL, 0x0,
|
||||||
|
|
Loading…
Reference in New Issue