aboutsummaryrefslogtreecommitdiffstats
path: root/packet-eth.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-01-24 18:46:45 +0000
committerGuy Harris <guy@alum.mit.edu>2000-01-24 18:46:45 +0000
commitc38ed66e9cb374a4784e96977fb1e4c660ec029f (patch)
tree22f799aae007bc52da41671f594cbe97c00ef0d2 /packet-eth.c
parent2727167b2da0c361f9fdc4347a6e3037a551aa1a (diff)
Add support for Cisco ISL.
svn path=/trunk/; revision=1537
Diffstat (limited to 'packet-eth.c')
-rw-r--r--packet-eth.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/packet-eth.c b/packet-eth.c
index a4a6f64f5f..3784d2c5ec 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.27 2000/01/24 01:15:37 guy Exp $
+ * $Id: packet-eth.c,v 1.28 2000/01/24 18:46:44 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -94,6 +94,16 @@ capture_eth(const u_char *pd, int offset, packet_counts *ld)
ethhdr_type = ETHERNET_802_2;
}
+ /* Oh, yuck. Cisco ISL frames require special interpretation of the
+ destination address field; fortunately, they can be recognized by
+ checking the first 5 octets of the destination address, which are
+ 01-00-0C-00-00 for ISL frames. */
+ if (pd[offset] == 0x01 && pd[offset+1] == 0x00 && pd[offset+2] == 0x0C
+ && pd[offset+3] == 0x00 && pd[offset+4] == 0x00) {
+ capture_isl(pd, offset, ld);
+ return;
+ }
+
/* Convert the LLC length from the 802.3 header to a total
frame length, by adding in the size of any data that preceded
the Ethernet header, and adding in the Ethernet header size,
@@ -162,6 +172,16 @@ dissect_eth(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
ethhdr_type = ETHERNET_802_2;
}
+ /* Oh, yuck. Cisco ISL frames require special interpretation of the
+ destination address field; fortunately, they can be recognized by
+ checking the first 5 octets of the destination address, which are
+ 01-00-0C-00-00 for ISL frames. */
+ if (pd[offset] == 0x01 && pd[offset+1] == 0x00 && pd[offset+2] == 0x0C
+ && pd[offset+3] == 0x00 && pd[offset+4] == 0x00) {
+ dissect_isl(pd, offset, fd, tree);
+ return;
+ }
+
if (check_col(fd, COL_INFO)) {
col_add_fstr(fd, COL_INFO, "IEEE 802.3 %s",
(ethhdr_type == ETHERNET_802_3 ? "Raw " : ""));