aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/netmon.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-04-30 08:48:27 +0000
committerGuy Harris <guy@alum.mit.edu>2002-04-30 08:48:27 +0000
commitecb2a3939e04415ce80090a8e0431a57621a1e9c (patch)
tree04505b1415d7970b203d0b221bd3418d0495343c /wiretap/netmon.c
parentd4154681533af39707692aa01179798e7529139d (diff)
Replace the "ngsniffer_atm" with an "atm" pseudo-header, which isn't
just an image of the ATM Sniffer data. This means that Ethereal doesn't have to know any ATM Sniffer-specific details (that's all hidden in Wiretap), and allows us to add to that pseudo-header fields, traffic types, etc. unknown to ATM Sniffers. Have Wiretap map VPI 0/VCI 5 to the signalling AAL - for some capture files, this might not be necessary, as they may mark all signalling traffic as such, but, on other platforms, we don't know the AAL, so we assume AAL5 except for 0/5 traffic. Doing it in Wiretap lets us hide those details from Ethereal (and lets Ethereal interpret 0/5 traffic as non-signalling traffic, in case that happens to be what it is). We may know that traffic is LANE, but not whether it's LE Control or emulated 802.3/802.5; handle that case. svn path=/trunk/; revision=5302
Diffstat (limited to 'wiretap/netmon.c')
-rw-r--r--wiretap/netmon.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index 7a93df39a5..e76ffa93fc 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -1,6 +1,6 @@
/* netmon.c
*
- * $Id: netmon.c,v 1.51 2002/03/05 08:39:29 guy Exp $
+ * $Id: netmon.c,v 1.52 2002/04/30 08:48:27 guy Exp $
*
* Wiretap Library
* Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -475,6 +475,7 @@ netmon_read_atm_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
{
struct netmon_atm_hdr atm_phdr;
int bytes_read;
+ guint16 vpi, vci;
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(&atm_phdr, 1, sizeof (struct netmon_atm_hdr), fh);
@@ -485,21 +486,29 @@ netmon_read_atm_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
return FALSE;
}
- pseudo_header->ngsniffer_atm.Vpi = ntohs(atm_phdr.vpi);
- pseudo_header->ngsniffer_atm.Vci = ntohs(atm_phdr.vci);
-
- /* We don't have this information */
- pseudo_header->ngsniffer_atm.channel = 0;
- pseudo_header->ngsniffer_atm.cells = 0;
- pseudo_header->ngsniffer_atm.aal5t_u2u = 0;
- pseudo_header->ngsniffer_atm.aal5t_len = 0;
- pseudo_header->ngsniffer_atm.aal5t_chksum = 0;
+ vpi = ntohs(atm_phdr.vpi);
+ vci = ntohs(atm_phdr.vci);
/*
- * Assume it's AAL5; we know nothing more about it.
+ * Assume it's AAL5, unless it's VPI 0 and VCI 5, in which case
+ * assume it's AAL_SIGNALLING; we know nothing more about it.
*/
- pseudo_header->ngsniffer_atm.AppTrafType = ATT_AAL5|ATT_HL_UNKNOWN;
- pseudo_header->ngsniffer_atm.AppHLType = AHLT_UNKNOWN;
+ if (vpi == 0 && vci == 5)
+ pseudo_header->atm.aal = AAL_SIGNALLING;
+ else
+ pseudo_header->atm.aal = AAL_5;
+ pseudo_header->atm.type = TRAF_UNKNOWN;
+ pseudo_header->atm.subtype = TRAF_ST_UNKNOWN;
+
+ pseudo_header->atm.vpi = vpi;
+ pseudo_header->atm.vci = vci;
+
+ /* We don't have this information */
+ pseudo_header->atm.channel = 0;
+ pseudo_header->atm.cells = 0;
+ pseudo_header->atm.aal5t_u2u = 0;
+ pseudo_header->atm.aal5t_len = 0;
+ pseudo_header->atm.aal5t_chksum = 0;
return TRUE;
}
@@ -671,8 +680,8 @@ static gboolean netmon_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
*/
memset(&atm_hdr.dest, 0, sizeof atm_hdr.dest);
memset(&atm_hdr.src, 0, sizeof atm_hdr.src);
- atm_hdr.vpi = htons(pseudo_header->ngsniffer_atm.Vpi);
- atm_hdr.vci = htons(pseudo_header->ngsniffer_atm.Vci);
+ atm_hdr.vpi = htons(pseudo_header->atm.vpi);
+ atm_hdr.vci = htons(pseudo_header->atm.vci);
nwritten = fwrite(&atm_hdr, 1, sizeof atm_hdr, wdh->fh);
if (nwritten != sizeof atm_hdr) {
if (nwritten == 0 && ferror(wdh->fh))