diff options
author | Guy Harris <guy@alum.mit.edu> | 2002-04-30 08:48:27 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2002-04-30 08:48:27 +0000 |
commit | ecb2a3939e04415ce80090a8e0431a57621a1e9c (patch) | |
tree | 04505b1415d7970b203d0b221bd3418d0495343c /wiretap/netmon.c | |
parent | d4154681533af39707692aa01179798e7529139d (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.c | 39 |
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)) |