aboutsummaryrefslogtreecommitdiffstats
path: root/packet-eth.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>1999-08-20 06:55:20 +0000
committerGuy Harris <guy@alum.mit.edu>1999-08-20 06:55:20 +0000
commita033390918ea00a11203f5ef869e14d0609e6b6f (patch)
treea3570575a12e5fb9a383c93391a544e5a1101233 /packet-eth.c
parent57198bc28f3fd6e6f885f9fd2f0849ae937497a4 (diff)
Add support for reading Full Frontal ATM from an ATM Sniffer capture
file, instead of throwing out all but LANE or RFC 1483 data frames and pretending that the former are just Ethernet or Token-Ring frames. Add some level of decoding for ATM LANE, but not all of it; the rest, including decoding non-LANE frames, is left as an exercise for somebody who has captures they want to decode, an interest in decoding them, ATM expertise, and time.... svn path=/trunk/; revision=523
Diffstat (limited to 'packet-eth.c')
-rw-r--r--packet-eth.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/packet-eth.c b/packet-eth.c
index 1cde4f4ff4..af8928ee31 100644
--- a/packet-eth.c
+++ b/packet-eth.c
@@ -1,7 +1,7 @@
/* packet-eth.c
* Routines for ethernet packet disassembly
*
- * $Id: packet-eth.c,v 1.15 1999/08/18 00:57:50 guy Exp $
+ * $Id: packet-eth.c,v 1.16 1999/08/20 06:55:06 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -104,27 +104,26 @@ capture_eth(const u_char *pd, guint32 cap_len, packet_counts *ld) {
}
void
-dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
+dissect_eth(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
guint16 etype, length;
- int offset = ETH_HEADER_SIZE;
proto_tree *fh_tree = NULL;
proto_item *ti;
int ethhdr_type; /* the type of ethernet frame */
if (check_col(fd, COL_RES_DL_DST))
- col_add_str(fd, COL_RES_DL_DST, get_ether_name((u_char *)&pd[0]));
+ col_add_str(fd, COL_RES_DL_DST, get_ether_name((u_char *)&pd[offset+0]));
if (check_col(fd, COL_RES_DL_SRC))
- col_add_str(fd, COL_RES_DL_SRC, get_ether_name((u_char *)&pd[6]));
+ col_add_str(fd, COL_RES_DL_SRC, get_ether_name((u_char *)&pd[offset+6]));
if (check_col(fd, COL_UNRES_DL_DST))
- col_add_str(fd, COL_UNRES_DL_DST, ether_to_str((u_char *)&pd[0]));
+ col_add_str(fd, COL_UNRES_DL_DST, ether_to_str((u_char *)&pd[offset+0]));
if (check_col(fd, COL_UNRES_DL_SRC))
- col_add_str(fd, COL_UNRES_DL_SRC, ether_to_str((u_char *)&pd[6]));
+ col_add_str(fd, COL_UNRES_DL_SRC, ether_to_str((u_char *)&pd[offset+6]));
if (check_col(fd, COL_PROTOCOL))
col_add_str(fd, COL_PROTOCOL, "N/A");
if (check_col(fd, COL_INFO))
col_add_str(fd, COL_INFO, "Ethernet II");
- etype = (pd[12] << 8) | pd[13];
+ etype = (pd[offset+12] << 8) | pd[offset+13];
/* either ethernet802.3 or ethernet802.2 */
if (etype <= IEEE_802_3_MAX_LEN) {
@@ -136,7 +135,7 @@ dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
(IPX/SPX is they only thing that can be contained inside a
straight 802.3 packet). A non-0xffff value means that there's an
802.2 layer inside the 802.3 layer */
- if (pd[14] == 0xff && pd[15] == 0xff) {
+ if (pd[offset+14] == 0xff && pd[offset+15] == 0xff) {
ethhdr_type = ETHERNET_802_3;
}
else {
@@ -152,8 +151,8 @@ dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
fh_tree = proto_item_add_subtree(ti, ETT_IEEE8023);
- proto_tree_add_item(fh_tree, hf_eth_dst, 0, 6, &pd[0]);
- proto_tree_add_item(fh_tree, hf_eth_src, 6, 6, &pd[6]);
+ proto_tree_add_item(fh_tree, hf_eth_dst, 0, 6, &pd[offset+0]);
+ proto_tree_add_item(fh_tree, hf_eth_src, 6, 6, &pd[offset+6]);
proto_tree_add_item(fh_tree, hf_eth_len, 12, 2, length);
/* Convert the LLC length from the 802.3 header to a total
@@ -176,15 +175,16 @@ dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
fh_tree = proto_item_add_subtree(ti, ETT_ETHER2);
- proto_tree_add_item_format(fh_tree, hf_eth_dst, 0, 6, &pd[0],
- "Destination: %s (%s)", ether_to_str((guint8 *) &pd[0]),
- get_ether_name((u_char *) &pd[0]));
+ proto_tree_add_item_format(fh_tree, hf_eth_dst, 0, 6, &pd[offset+0],
+ "Destination: %s (%s)", ether_to_str((guint8 *) &pd[offset+0]),
+ get_ether_name((u_char *) &pd[offset+0]));
- proto_tree_add_item_format(fh_tree, hf_eth_src, 6, 6, &pd[6],
- "Source: %s (%s)", ether_to_str((guint8 *) &pd[6]),
- get_ether_name((u_char *) &pd[6]));
+ proto_tree_add_item_format(fh_tree, hf_eth_src, 6, 6, &pd[offset+6],
+ "Source: %s (%s)", ether_to_str((guint8 *) &pd[offset+6]),
+ get_ether_name((u_char *) &pd[offset+6]));
}
}
+ offset += ETH_HEADER_SIZE;
switch (ethhdr_type) {
case ETHERNET_802_3: