aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsmtap.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-02-04 15:44:10 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-02-04 15:44:10 +0000
commitdbed7b8aa002bc1a6835472f6b35a4cf1a9ed42e (patch)
treebc005bfe97082d790a0ac103c574f6ed93c0e465 /epan/dissectors/packet-gsmtap.c
parent84f869cb2e89fa72b1e6a095446f9d34eae7e959 (diff)
From Harald Welte:
lapdm dissector tries to defragment segment of different streams. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6659 svn path=/trunk/; revision=40842
Diffstat (limited to 'epan/dissectors/packet-gsmtap.c')
-rw-r--r--epan/dissectors/packet-gsmtap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/epan/dissectors/packet-gsmtap.c b/epan/dissectors/packet-gsmtap.c
index 6cc9ba1d49..a75810d8e7 100644
--- a/epan/dissectors/packet-gsmtap.c
+++ b/epan/dissectors/packet-gsmtap.c
@@ -332,15 +332,17 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_item *ti;
proto_tree *gsmtap_tree = NULL;
tvbuff_t *payload_tvb, *l1h_tvb = NULL;
- guint8 hdr_len, type, sub_type;
+ guint8 hdr_len, type, sub_type, timeslot, subslot;
guint16 arfcn;
len = tvb_length(tvb);
hdr_len = tvb_get_guint8(tvb, offset + 1) <<2;
type = tvb_get_guint8(tvb, offset + 2);
- sub_type = tvb_get_guint8(tvb, offset + 12);
+ timeslot = tvb_get_guint8(tvb, offset + 3);
arfcn = tvb_get_ntohs(tvb, offset + 4);
+ sub_type = tvb_get_guint8(tvb, offset + 12);
+ subslot = tvb_get_guint8(tvb, offset + 14);
/* In case of a SACCH, there is a two-byte L1 header in front
* of the packet (see TS 04.04) */
@@ -384,6 +386,10 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
pinfo->p2p_dir = P2P_DIR_RECV;
}
+ /* Try to build an identifier of different 'streams' */
+ /* (AFCN _cant_ be used because of hopping */
+ pinfo->circuit_id = (timeslot << 3) | subslot;
+
if (tree) {
guint8 channel;
const char *channel_str;