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) */
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;
{
fragment_data *fd_m = NULL;
tvbuff_t *reassembled = NULL;
+ guint32 fragment_id;
gboolean save_fragmented = pinfo->fragmented;
pinfo->fragmented = m;
+
+ /* Rely on caller to provide a way to group fragments */
+ fragment_id = (pinfo->circuit_id << 4) | (sapi << 1) | pinfo->p2p_dir;
+
/* This doesn't seem the best way of doing it as doesn't
take N(S) into account, but N(S) isn't always 0 for
the first fragment!
*/
fd_m = fragment_add_seq_next (payload, 0, pinfo,
- 0, /* guint32 ID for fragments belonging together */
+ fragment_id, /* guint32 ID for fragments belonging together */
lapdm_fragment_table, /* list of message fragments */
lapdm_reassembled_table, /* list of reassembled messages */
/*n_s guint32 fragment sequence number */