Huge thanks to our Platinum Members Endace and LiveAction,
and our Silver Member Veeam, for supporting the Wireshark Foundation and project.

Ethereal-dev: [Ethereal-dev] Bugfix of BSSGP

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Rene Pilz <rene.pilz@xxxxxx>
Date: Thu, 06 Oct 2005 16:07:02 +0200
Hi

In the bssgp an IE was decoded as mobile identity and should be decoded as (p)tmsi only.

The patch is attached to this email. It also consists the new atm patch which was send yesterday.

bg

rene
-- 
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/dissectors/packet-bssgp.c
===================================================================
--- epan/dissectors/packet-bssgp.c	(revision 16141)
+++ epan/dissectors/packet-bssgp.c	(working copy)
@@ -123,6 +123,7 @@
 static gint ett_bssgp_feature_bitmap = -1;
 static gint ett_bssgp_positioning_data = -1;
 static gint ett_bssgp_tlli = -1;
+static gint ett_bssgp_tmsi_ptmsi = -1;
 
 /* PDU type coding, v6.5.0, table 11.3.26, p 80 */
 #define BSSGP_PDU_DL_UNITDATA                  0x00
@@ -2815,6 +2816,33 @@
 }
 
 static void 
+decode_iei_tmsi(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offset) {
+  proto_item *ti;
+  proto_tree *tf;
+  guint32 tmsi;
+
+  tmsi = tvb_get_ntohl(bi->tvb, bi->offset);
+
+  if (bi->bssgp_tree) {
+    ti = bssgp_proto_tree_add_ie(ie, bi, ie_start_offset);
+    proto_item_append_text(ti, ": %#04x", tmsi);
+    
+    ti = bssgp_proto_tree_add_ie(ie, bi, bi->offset);
+    tf = proto_item_add_subtree(ti, ett_bssgp_tmsi_ptmsi);
+        
+    proto_tree_add_item(tf, hf_bssgp_tmsi_ptmsi, 
+			       bi->tvb, bi->offset, 4, BSSGP_LITTLE_ENDIAN);
+  }
+  bi->offset += 4;
+
+  if (check_col(bi->pinfo->cinfo, COL_INFO)) {
+    col_append_sep_fstr(bi->pinfo->cinfo, COL_INFO, BSSGP_SEP, 
+			"(P)TMSI %#4x", tmsi);
+  }
+  decode_nri(bi->bssgp_tree, bi, tmsi);
+}
+
+static void 
 decode_iei_trigger_id(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offset) {
   /* XXX: value is 20 octets long! How add/show? */
   proto_item *ti;
@@ -4227,7 +4255,7 @@
     decode_iei_tlli(ie, bi, org_offset);
     break; 
   case BSSGP_IEI_TMSI:
-    decode_mobile_identity(ie, bi, org_offset);
+    decode_iei_tmsi(ie, bi, org_offset);
     break;
   case BSSGP_IEI_TRACE_REFERENCE:
     decode_simple_ie(ie, bi, org_offset, "", "", TRUE);
@@ -5792,6 +5820,7 @@
     &ett_bssgp_msrac_a5_bits,
     &ett_bssgp_msrac_multislot_capability,
     &ett_bssgp_tlli,
+    &ett_bssgp_tmsi_ptmsi,
   };
 
   /* Register the protocol name and description */
Index: wiretap/atm.c
===================================================================
--- wiretap/atm.c	(revision 16141)
+++ wiretap/atm.c	(working copy)
@@ -81,6 +81,21 @@
 			 * multiplexed RFC 1483 traffic.
 			 */
 			pseudo_header->atm.type = TRAF_LLCMX;
+		} else if (pseudo_header->atm.aal5t_len < 14) {
+			/*
+			 * As this cannot be an ethernet frame
+			 * (less than 14 bytes) we can try it
+			 * as a SSCOP frame
+			 */
+			pseudo_header->atm.aal = AAL_SIGNALLING;
+		} else if (pd[0] == 0x83 || pd[0] == 0x81) {
+			/*
+			 * MTP3b headers often encapsulate
+			 * a SCCP or MTN in the 3G network.
+			 * This should cause 0x83 or 0x81
+			 * in the first byte.
+			 */
+			pseudo_header->atm.aal = AAL_SIGNALLING;
 		} else {
 			/*
 			 * Assume it's LANE.