diff options
author | sswsdev <sswsdev@gmail.com> | 2017-04-14 13:41:37 +0300 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2017-04-20 20:19:46 +0000 |
commit | 2e6cb9dbab154531b306e472642ff6033f0e341c (patch) | |
tree | 9c78185dc665b9682d1c97895008f1ee60d13d9e /epan/dissectors/packet-umts_fp.c | |
parent | 09e787a8fb4a1a04366e57c059c4997abcd9183e (diff) |
UMTS Iub: Added U-RNTI resolving logic for UEs on DCH
The goal is to figure out the U-RNTI for UEs in DCH to
preserve a single continous RLC session when the UE moves to FACH
(Since the UE ID in FACH is derived from the identity found in the
MAC layer, which is sometimes the U-RNTI)
UMTS RRC dissector now defines a single 'umts rrc private data'
structure as the way to access the actx->private_data field
Change-Id: Id0ffcbcdf0a8babe533915855909e250852e46cf
Reviewed-on: https://code.wireshark.org/review/21087
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-umts_fp.c')
-rw-r--r-- | epan/dissectors/packet-umts_fp.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/epan/dissectors/packet-umts_fp.c b/epan/dissectors/packet-umts_fp.c index b659b54cb0..bac91ad879 100644 --- a/epan/dissectors/packet-umts_fp.c +++ b/epan/dissectors/packet-umts_fp.c @@ -4838,6 +4838,7 @@ 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; fpi = wmem_new0(wmem_file_scope(), fp_info); p_add_proto_data(wmem_file_scope(), pinfo, proto_fp, 0, fpi); @@ -5060,7 +5061,16 @@ fp_set_per_packet_inf_from_conv(conversation_t *p_conv, } /*** Set rlc info ***/ - rlcinf->urnti[j+chan] = p_conv_data->com_context_id; + /* Trying to resolve the U-RNTI of the user to be used as RLC 'UE-ID' */ + /* Fallback - The RNC's 'Communication Context' for the user as seen in NBAP messages */ + user_identity = p_conv_data->com_context_id; + if (p_conv_data->scrambling_code != 0) { + guint32 * mapped_urnti = (guint32 *)g_tree_lookup(rrc_scrambling_code_urnti, GUINT_TO_POINTER(p_conv_data->scrambling_code)); + if (mapped_urnti != 0) { + user_identity = GPOINTER_TO_UINT(mapped_urnti); + } + } + rlcinf->urnti[j + chan] = user_identity; rlcinf->li_size[j+chan] = RLC_LI_7BITS; #if 0 /*If this entry exists, SECRUITY_MODE is completed (signled by RRC)*/ |