aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknown <cusneud@mail.com>2017-09-20 08:58:54 +0300
committerAnders Broman <a.broman58@gmail.com>2017-09-20 10:38:14 +0000
commit6db17741e49b6b7d519f50449710658c54a58dbc (patch)
tree149c68049b452b992799fe3dbd16ccab92c35686
parenteefec698611d7a982ce55eb7343df5e8eb0343c9 (diff)
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 <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-umts_fp.c23
1 files 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) */