aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/atm.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-04-30 18:58:16 +0000
committerGuy Harris <guy@alum.mit.edu>2002-04-30 18:58:16 +0000
commit105efda4044b2f031b1c36d666f7cb6b0221694f (patch)
tree33a4c7bd7deb9227ad48f5b8187c5f05419aa1e3 /wiretap/atm.c
parentda74615c7998037094df81255d4dd3d55e36ab47 (diff)
Move the code to guess the traffic type based on the packet contents
into Wiretap, so that if you read a frame from Wiretap you have what traffic type information could be gleaned from the information in the capture file, and can write the frame out to a capture file where the file contains some or all of that information without having to determine it outside of Wiretap. svn path=/trunk/; revision=5314
Diffstat (limited to 'wiretap/atm.c')
-rw-r--r--wiretap/atm.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/wiretap/atm.c b/wiretap/atm.c
new file mode 100644
index 0000000000..d4bace9a1a
--- /dev/null
+++ b/wiretap/atm.c
@@ -0,0 +1,116 @@
+/* atm.c
+ *
+ * $Id: atm.c,v 1.1 2002/04/30 18:58:15 guy Exp $
+ *
+ * Wiretap Library
+ * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "wtap-int.h"
+#include "atm.h"
+
+/*
+ * Routines to use with ATM capture file types that don't include information
+ * about the *type* of ATM traffic (or, at least, where we haven't found
+ * that information).
+ *
+ * We assume the traffic is AAL5, unless it's VPI 0/VCI 5, in which case
+ * we assume it's the signalling AAL.
+ */
+
+void
+atm_guess_traffic_type(const guint8 *pd, guint32 len,
+ guint16 vpi, guint16 vci, union wtap_pseudo_header *pseudo_header)
+{
+ /*
+ * Start out assuming nothing other than that it's AAL5.
+ */
+ pseudo_header->atm.aal = AAL_5;
+ pseudo_header->atm.type = TRAF_UNKNOWN;
+ pseudo_header->atm.subtype = TRAF_ST_UNKNOWN;
+
+ if (vpi == 0) {
+ /*
+ * Traffic on some PVCs with a VPI of 0 and certain
+ * VCIs is of particular types.
+ */
+ switch (vci) {
+
+ case 5:
+ /*
+ * Signalling AAL.
+ */
+ pseudo_header->atm.aal = AAL_SIGNALLING;
+ return;
+
+ case 16:
+ /*
+ * ILMI.
+ */
+ pseudo_header->atm.type = TRAF_ILMI;
+ return;
+ }
+ }
+
+ /*
+ * OK, we can't tell what it is based on the VPI/VCI; try
+ * guessing based on the contents, if we have enough data
+ * to guess.
+ */
+ if (len >= 3) {
+ if (pd[0] == 0xaa && pd[1] == 0xaa && pd[2] == 0x03) {
+ /*
+ * Looks like a SNAP header; assume it's LLC
+ * multiplexed RFC 1483 traffic.
+ */
+ pseudo_header->atm.type = TRAF_LLCMX;
+ } else {
+ /*
+ * Assume it's LANE.
+ */
+ pseudo_header->atm.type = TRAF_LANE;
+ atm_guess_lane_type(pd, len, pseudo_header);
+ }
+ }
+}
+
+void
+atm_guess_lane_type(const guint8 *pd, guint32 len,
+ union wtap_pseudo_header *pseudo_header)
+{
+ if (len >= 2) {
+ if (pd[0] == 0xff && pd[1] == 0x00) {
+ /*
+ * Looks like LE Control traffic.
+ */
+ pseudo_header->atm.subtype = TRAF_ST_LANE_LE_CTRL;
+ } else {
+ /*
+ * XXX - Ethernet, or Token Ring?
+ * Assume Ethernet for now; if we see earlier
+ * LANE traffic, we may be able to figure out
+ * the traffic type from that, but there may
+ * still be situations where the user has to
+ * tell us.
+ */
+ pseudo_header->atm.subtype = TRAF_ST_LANE_802_3;
+ }
+ }
+}