From 6db17741e49b6b7d519f50449710658c54a58dbc Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 20 Sep 2017 08:58:54 +0300 Subject: FP: Properly configure standalone PS RAB DCHs Added a check based on transport format to spot DCHs carrying a single PS RAB and configure them properly. Also renamed "special case dch 24" with it's actual meaning - a muxed CS & PS RABs Change-Id: I730b6d617d9e15bcbb5d7fde09dcd2273d943e18 Reviewed-on: https://code.wireshark.org/review/23632 Petri-Dish: Anders Broman Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- epan/dissectors/packet-umts_fp.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/epan/dissectors/packet-umts_fp.c b/epan/dissectors/packet-umts_fp.c index 0d267233f4..92081d4195 100644 --- a/epan/dissectors/packet-umts_fp.c +++ b/epan/dissectors/packet-umts_fp.c @@ -5092,7 +5092,7 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, guint8 tfi, c_t; int offset = 0, i=0, j=0, num_tbs, chan, tb_size, tb_bit_off; gboolean is_control_frame; - gboolean is_known_dcch_tf,is_special_case_dch_24; + gboolean is_known_dcch_tf,is_stndalone_ps_rab_tf,is_muxed_cs_ps_tf; umts_mac_info *macinf; rlc_info *rlcinf; guint8 fake_lchid=0; @@ -5274,12 +5274,14 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, /* Set transport channel id (useful for debugging) */ macinf->trchid[j+chan] = p_conv_data->dch_ids_in_flow_list[chan]; - /* Checking for the common Transport Format of DCCH over DCH ( See 3GPP TR 25.944 / 4.1.1.3.1.1 ) */ + /* Checking for the common Transport Format of 3.4 kbps SRBs for DCCH ( See 3GPP TR 25.944 / 4.1.1.3.1.1 ) */ is_known_dcch_tf = (tfi == 1 && num_tbs == 1 && tb_size == 148); - /* Checking for DCH ID 24 and tb size of 340 bits */ - is_special_case_dch_24 = (p_conv_data->dch_ids_in_flow_list[chan] == 24 && tb_size == 340); + /* Checking for Transport Format of interactive or background PS RAB ( See 3GPP TS 34.108 / 6.10.2.4.1.23 -> 6.10.2.4.1.35 ) */ + is_stndalone_ps_rab_tf = tb_size == 336; + /* Checking for Transport Format of muxed CS & PS RABs ( See 3GPP TS 34.108 / 6.10.2.4.1.38 -> 6.10.2.4.1.51 ) */ + is_muxed_cs_ps_tf = (p_conv_data->dch_ids_in_flow_list[chan] == 24 && tb_size == 340); - if (is_known_dcch_tf || is_special_case_dch_24) { + if (is_known_dcch_tf || is_muxed_cs_ps_tf) { /* Channel is multiplexed (ie. C/T flag present) */ macinf->ctmux[j+chan] = TRUE; @@ -5290,6 +5292,17 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, macinf->content[j+chan] = lchId_type_table[c_t]; /* Base MAC content on logical channel id (Table is in packet-nbap.h) */ rlcinf->mode[j+chan] = lchId_rlc_map[c_t]; /* Base RLC mode on logical channel id */ } + else if (is_stndalone_ps_rab_tf) { + /* Channel isn't multiplexed (ie. C/T flag not present) */ + macinf->ctmux[j+chan] = FALSE; + + /* Using a fake 'interactive PS' DTCH logical channel id */ + /* TODO: Once proper lchid is always set, this has to be changed */ + macinf->fake_chid[j+chan] = TRUE; + macinf->lchid[j+chan] = 11; + macinf->content[j+chan] = MAC_CONTENT_PS_DTCH; + rlcinf->mode[j+chan] = RLC_AM; + } else { /* Unfamiliar DCH format, faking LCHID */ /* Asuming the channel isn't multiplexed (ie. C/T flag not present) */ -- cgit v1.2.3