diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-02-04 15:44:10 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-02-04 15:44:10 +0000 |
commit | dbed7b8aa002bc1a6835472f6b35a4cf1a9ed42e (patch) | |
tree | bc005bfe97082d790a0ac103c574f6ed93c0e465 /epan/dissectors/packet-gsmtap.c | |
parent | 84f869cb2e89fa72b1e6a095446f9d34eae7e959 (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.c | 10 |
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; |