Wireshark-dev: Re: [Wireshark-dev] frame relay bugfix
From: Rene Pilz <pilz@xxxxxx>
Date: Mon, 27 Nov 2006 23:07:31 +0100
Hi This patch consists also the last issues. Additionally it solves: - For the SSCOP frames the AAL5 decoding was not performed due to an earlier patch. This caused that no SSCOP message was properly decoded. - As the detection between a LANE frame and a SSCOP frame is rather hard a switch within the atm dissector is included which enforce SSCOP dissecting over a LANE frame. At the moment I do not see a better solution for that. Rene Pilz On Fri, 2006-11-24 at 15:53 +0100, Rene Pilz wrote: > Hi > > Attached is a patch for following items: > - Frame Relay: Calculate the size of the frame relay header larger than > 2 bytes correctly > - ERF File: In approx 10% of the cases ethereal is not able to recognize > the ERF file correctly. So the file format check of erf is moved more to > the beginning of the function. This is not real a solution, but as erf > files are not that seldom this might be acceptable. > - Added Columns: Add columns for DLCI (Frame Relay) and TLLI (GSM > BSSGP). As these are crucial Identifiers within this protocol this is > rather useful. At least they asked me several times. > > So please take a look at it. Thanks. > > Best Regards > Rene > > _______________________________________________ > Wireshark-dev mailing list > Wireshark-dev@xxxxxxxxxxxxx > http://www.wireshark.org/mailman/listinfo/wireshark-dev -- Dipl-Ing (FH) MSc. C.E René Pilz ftw. Telekommunications Research Center Vienna http://www.ftw.at Tech Gate Vienna, Donaucitystraße 1, A-1220 Wien Mobile: +43 664 8269871 Office: +43 1 5052830-13 Fax: +43 1 5052830-99
Index: epan/column.c =================================================================== --- epan/column.c (revision 20002) +++ epan/column.c (working copy) @@ -93,7 +93,9 @@ "%y", "%z", "%v", - "%E" + "%E", + "%C", + "%l" }; if (fmt < 0 || fmt >= NUM_COL_FMTS) @@ -154,6 +156,8 @@ "DCE/RPC context ID (cn_ctx_id)", /* COL_DCE_CTX */ "802.1Q VLAN id", /* COL_8021Q_VLAN_ID */ "TEI", /* XXX - why is it missing in column_utils.c and elsewhere? */ + "Frame Relay DLCI", /* COL_FR_DLCI */ + "GPRS BSSGP TLLI", /* COL_BSSGP_TLLI */ }; const gchar * @@ -260,6 +264,12 @@ case COL_TEI: fmt_list[COL_TEI] = TRUE; break; + case COL_FR_DLCI: + fmt_list[COL_FR_DLCI] = TRUE; + break; + case COL_BSSGP_TLLI: + fmt_list[COL_BSSGP_TLLI] = TRUE; + break; default: break; } @@ -460,7 +470,7 @@ return "0000000"; break; case COL_VSAN: - return "000000"; + return "000000"; break; case COL_TX_RATE: return "108.0"; @@ -486,6 +496,12 @@ case COL_TEI: return "127"; break; + case COL_FR_DLCI: + return "8388608"; + break; + case COL_BSSGP_TLLI: + return "0xffffffff"; + break; default: /* COL_INFO */ return "Source port: kerberos-master Destination port: kerberos-master"; break; @@ -640,6 +656,10 @@ break; case 'E': return COL_TEI; + case 'C': + return COL_FR_DLCI; + case 'l': + return COL_BSSGP_TLLI; break; } cptr++; Index: epan/column-utils.c =================================================================== --- epan/column-utils.c (revision 20002) +++ epan/column-utils.c (working copy) @@ -1242,6 +1242,10 @@ case COL_8021Q_VLAN_ID: break; + case COL_FR_DLCI: /* done by packet-fr.c */ + case COL_BSSGP_TLLI: /* done by packet-bssgp.c */ + break; + case NUM_COL_FMTS: /* keep compiler happy - shouldn't get here */ g_assert_not_reached(); break; Index: epan/dissectors/packet-fr.c =================================================================== --- epan/dissectors/packet-fr.c (revision 20002) +++ epan/dissectors/packet-fr.c (working copy) @@ -551,6 +551,8 @@ } proto_tree_add_boolean(octet_tree, hf_fr_dc, tvb, offset, 1, fr_octet); proto_tree_add_boolean(octet_tree, hf_fr_ea, tvb, offset, 1, fr_octet); + + offset++; } } if (tree) { @@ -561,6 +563,11 @@ pinfo->ctype = CT_DLCI; pinfo->circuit_id = address; + /* Add DLCI to a collumn */ + if ( check_col(pinfo->cinfo, COL_FR_DLCI)) { + col_add_fstr(pinfo->cinfo, COL_FR_DLCI, "%u", address); + } + if (check_col(pinfo->cinfo, COL_INFO)) col_add_fstr(pinfo->cinfo, COL_INFO, "DLCI %u", address); Index: epan/dissectors/packet-atm.c =================================================================== --- epan/dissectors/packet-atm.c (revision 20002) +++ epan/dissectors/packet-atm.c (working copy) @@ -37,6 +37,7 @@ #include "packet-eth.h" #include "packet-tr.h" #include "packet-llc.h" +#include "prefs.h" static int proto_atm = -1; static int hf_atm_aal = -1; @@ -70,6 +71,8 @@ static dissector_handle_t fp_handle; static dissector_handle_t data_handle; +static gboolean dissect_lanesscop = FALSE; + /* * See * @@ -1017,7 +1020,8 @@ proto_tree_add_text(atm_tree, tvb, 0, 0, "Cells: %u", reported_length/48); } - if (pinfo->pseudo_header->atm.aal == AAL_5 && + if ((pinfo->pseudo_header->atm.aal == AAL_5 || + pinfo->pseudo_header->atm.aal == AAL_SIGNALLING) && length >= reported_length) { /* * XXX - what if the packet is truncated? Can that happen? @@ -1558,6 +1562,12 @@ { proto_tree *atm_tree = NULL; proto_item *atm_ti = NULL; + + if ( pinfo->pseudo_header->atm.aal == AAL_5 && + pinfo->pseudo_header->atm.type == TRAF_LANE && + dissect_lanesscop ) { + pinfo->pseudo_header->atm.aal = AAL_SIGNALLING; + } if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, "ATM"); @@ -1677,6 +1687,9 @@ &ett_atm_lane_lc_flags, &ett_atm_lane_lc_tlv, }; + + module_t *atm_module; + proto_atm = proto_register_protocol("ATM", "ATM", "atm"); proto_aal1 = proto_register_protocol("ATM AAL1", "AAL1", "aal1"); proto_aal3_4 = proto_register_protocol("ATM AAL3/4", "AAL3/4", "aal3_4"); @@ -1693,6 +1706,11 @@ register_dissector("lane", dissect_lane, proto_atm_lane); register_dissector("atm_untruncated", dissect_atm_untruncated, proto_atm); + + atm_module = prefs_register_protocol ( proto_atm, NULL ); + prefs_register_bool_preference ( atm_module, "dissect_lane_as_sscop", "Dissect LANE as SSCOP", + "Autodection between LANE and SSCOP is hard. As default LANE is preferred", + &dissect_lanesscop); } void Index: epan/dissectors/packet-bssgp.c =================================================================== --- epan/dissectors/packet-bssgp.c (revision 20002) +++ epan/dissectors/packet-bssgp.c (working copy) @@ -2892,6 +2892,11 @@ col_append_sep_fstr(bi->pinfo->cinfo, COL_INFO, BSSGP_SEP, "TLLI %#4x", tlli); } + + if (check_col(bi->pinfo->cinfo, COL_BSSGP_TLLI)) { + col_add_fstr(bi->pinfo->cinfo, COL_BSSGP_TLLI, "%#04x", tlli); + } + decode_nri(bi->bssgp_tree, bi, tlli); } Index: epan/column_info.h =================================================================== --- epan/column_info.h (revision 20002) +++ epan/column_info.h (working copy) @@ -101,6 +101,8 @@ COL_DCE_CTX, /* DCE/RPC connection oriented context id */ COL_8021Q_VLAN_ID, /* 802.1Q vlan ID */ COL_TEI, /* q.921 TEI */ + COL_FR_DLCI, /* Frame Relay DLCI */ + COL_BSSGP_TLLI, /* GPRS BSSGP IE TLLI */ NUM_COL_FMTS /* Should always be last */ }; Index: wiretap/file_access.c =================================================================== --- wiretap/file_access.c (revision 20002) +++ wiretap/file_access.c (working copy) @@ -117,6 +117,7 @@ * would be, for example, saved copies of a Telnet session * to some box. */ + erf_open, etherpeek_open, pppdump_open, iseries_open, @@ -127,7 +128,6 @@ csids_open, vms_open, cosine_open, - erf_open, hcidump_open, }; Index: wiretap/erf.c =================================================================== --- wiretap/erf.c (revision 20002) +++ wiretap/erf.c (working copy) @@ -123,7 +123,10 @@ guint32 packet_size; erf_timestamp_t ts; - if (file_read(&header,1,sizeof(header),wth->fh) != sizeof(header)) { + int r = file_read(&header,1,sizeof(header),wth->fh); + + if (r == 0 ) break; + if (r != sizeof(header)) { if ((*err = file_error(wth->fh)) != 0) return -1; else Index: wiretap/atm.c =================================================================== --- wiretap/atm.c (revision 20002) +++ wiretap/atm.c (working copy) @@ -74,6 +74,7 @@ * 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) { /* @@ -81,7 +82,8 @@ * multiplexed RFC 1483 traffic. */ pseudo_header->atm.type = TRAF_LLCMX; - } else if (len < 16) { + } else if ((pseudo_header->atm.aal5t_len && + pseudo_header->atm.aal5t_len < 16) || len<16) { /* * As this cannot be a LANE Ethernet frame (less * than 2 bytes of LANE header + 14 bytes of
- Follow-Ups:
- Re: [Wireshark-dev] frame relay bugfix
- From: Anders Broman
- Re: [Wireshark-dev] frame relay bugfix
- References:
- [Wireshark-dev] frame relay bugfix
- From: Rene Pilz
- [Wireshark-dev] frame relay bugfix
- Prev by Date: Re: [Wireshark-dev] dissector not shown in 'Analyze', 'Enabled Protocols'
- Next by Date: [Wireshark-dev] [PATCH] draft-ietf-behave-rfc3489bis-05
- Previous by thread: [Wireshark-dev] frame relay bugfix
- Next by thread: Re: [Wireshark-dev] frame relay bugfix
- Index(es):