From 756d609947bcc0a7321f662f8201544f77f7366f Mon Sep 17 00:00:00 2001 From: Darien Spencer Date: Mon, 5 Jun 2017 20:23:43 -0700 Subject: [PATCH] FP - Resolve U-RNTI for HS-DSCH & E-DCH Use U-RNTI resolving logic applied to DCH for HS-DSCH and E-DCH as well. Change-Id: I1b2b6f6d4c7e2a46fb8208b7134aa62e86512938 Reviewed-on: https://code.wireshark.org/review/21977 Petri-Dish: Anders Broman Tested-by: Petri Dish Buildbot Reviewed-by: Pascal Quantin --- epan/dissectors/packet-umts_fp.c | 46 ++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/epan/dissectors/packet-umts_fp.c b/epan/dissectors/packet-umts_fp.c index 9784713f57..4c3ad8692c 100644 --- a/epan/dissectors/packet-umts_fp.c +++ b/epan/dissectors/packet-umts_fp.c @@ -4923,6 +4923,28 @@ make_fake_lchid(packet_info *pinfo _U_, gint trchld) return fake_map[trchld]; } +/* Figures the best UE-ID to use in RLC re-assembly logic */ +static guint32 get_ue_id_from_conv(umts_fp_conversation_info_t *p_conv_data) +{ + guint32 user_identity; + /* Trying to resolve the U-RNTI of the user if missing */ + /* Resolving based on the 'C-RNC Communication Context' field found in NBAP */ + if (!p_conv_data->urnti && p_conv_data->com_context_id != 0) { + guint32 * mapped_urnti = (guint32 *)(wmem_tree_lookup32(nbap_crncc_urnti_map,p_conv_data->com_context_id)); + if (mapped_urnti != 0) { + p_conv_data->urnti = GPOINTER_TO_UINT(mapped_urnti); + } + } + /* Choosing RLC 'UE-ID': */ + /* 1. Preferring the U-RNTI if attached */ + /* 2. Fallback - Using the 'C-RNC Communication Context' used in NBAP for this user */ + user_identity = p_conv_data->com_context_id; + if(p_conv_data->urnti) { + user_identity = p_conv_data->urnti; + } + return user_identity; +} + static fp_info * fp_set_per_packet_inf_from_conv(conversation_t *p_conv, umts_fp_conversation_info_t *p_conv_data, @@ -4938,7 +4960,6 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, rlc_info *rlcinf; guint8 fake_lchid=0; gint *cur_val=NULL; - guint32 user_identity; fp_hsdsch_channel_info_t* fp_hsdsch_channel_info = NULL; fp_edch_channel_info_t* fp_edch_channel_info = NULL; fp_pch_channel_info_t *fp_pch_channel_info = NULL; @@ -5030,7 +5051,7 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, rlcinf->mode[0] = RLC_UNKNOWN_MODE; break; }*/ - rlcinf->urnti[0] = fpi->com_context_id; + rlcinf->urnti[0] = get_ue_id_from_conv(p_conv_data); rlcinf->li_size[0] = RLC_LI_7BITS; rlcinf->ciphered[0] = FALSE; rlcinf->deciphered[0] = FALSE; @@ -5057,7 +5078,7 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, } fpi->edch_type = fp_edch_channel_info->edch_type; - rlcinf->urnti[0] = fpi->com_context_id; + rlcinf->urnti[0] = get_ue_id_from_conv(p_conv_data); rlcinf->li_size[0] = RLC_LI_7BITS; rlcinf->ciphered[0] = FALSE; rlcinf->deciphered[0] = FALSE; @@ -5149,23 +5170,8 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, /************************/ } - /*** Set rlc info ***/ - /* Trying to resolve the U-RNTI of the user if missing */ - /* Resolving based on the 'C-RNC Communication Context' field found in NBAP */ - if (!p_conv_data->urnti && p_conv_data->com_context_id != 0) { - guint32 * mapped_urnti = (guint32 *)(wmem_tree_lookup32(nbap_crncc_urnti_map,p_conv_data->com_context_id)); - if (mapped_urnti != 0) { - p_conv_data->urnti = GPOINTER_TO_UINT(mapped_urnti); - } - } - /* Choosing RLC 'UE-ID': */ - /* 1. Preferring the U-RNTI if attached */ - /* 2. Fallback - Using the 'C-RNC Communication Context' used in NBAP for the user */ - user_identity = p_conv_data->com_context_id; - if(p_conv_data->urnti) { - user_identity = p_conv_data->urnti; - } - rlcinf->urnti[j + chan] = user_identity; + /*** Set RLC info ***/ + rlcinf->urnti[j + chan] = get_ue_id_from_conv(p_conv_data); rlcinf->li_size[j+chan] = RLC_LI_7BITS; #if 0 /*If this entry exists, SECRUITY_MODE is completed (signled by RRC)*/