diff options
author | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2013-06-18 21:44:48 +0000 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2013-06-18 21:44:48 +0000 |
commit | 868f74d62898402784819d575639958f47102dcf (patch) | |
tree | e6a52f1d0fa8082635d36ad29ea48b613d32b37c /epan/dissectors/packet-lte-rrc.c | |
parent | 8ec8f94db7b556bacf70b05e71c007c8cc0b3d11 (diff) |
Also signal value of PDCP SN (only used if enabled by RLC preferences).
svn path=/trunk/; revision=50019
Diffstat (limited to 'epan/dissectors/packet-lte-rrc.c')
-rw-r--r-- | epan/dissectors/packet-lte-rrc.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c index 9eb26b241d..e9ee959e0e 100644 --- a/epan/dissectors/packet-lte-rrc.c +++ b/epan/dissectors/packet-lte-rrc.c @@ -12002,6 +12002,11 @@ dissect_lte_rrc_RLC_Config(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ if (actx->private_data != NULL) { ((drb_mapping_t*)actx->private_data)->rlcMode = (value==0) ? RLC_AM_MODE : RLC_UM_MODE; ((drb_mapping_t*)actx->private_data)->rlcMode_present = TRUE; + + if (((drb_mapping_t*)actx->private_data)->rlcMode == RLC_AM_MODE) { + ((drb_mapping_t*)actx->private_data)->pdcp_sn_size = 12; + ((drb_mapping_t*)actx->private_data)->pdcp_sn_size_present = TRUE; + } } @@ -12273,8 +12278,16 @@ static const value_string lte_rrc_T_pdcp_SN_Size_vals[] = { static int dissect_lte_rrc_T_pdcp_SN_Size(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, - 2, NULL, FALSE, 0, NULL); + 2, &value, FALSE, 0, NULL); + + if (actx->private_data != NULL) { + /* TODO: can't this also be 15 bits? */ + ((drb_mapping_t*)actx->private_data)->pdcp_sn_size = (value==0) ? 7 : 12; + ((drb_mapping_t*)actx->private_data)->pdcp_sn_size_present = TRUE; + } + return offset; } @@ -12483,9 +12496,19 @@ dissect_lte_rrc_DRB_ToAddMod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx else { drb_mapping.ueid = p_mac_lte_info->ueid; } + /* Tell MAC about this mapping */ set_mac_lte_channel_mapping(&drb_mapping); /* Clear out struct again, just in case */ + + /* Also tell RLC how many PDCP sequence number bits */ + if (drb_mapping.pdcp_sn_size_present) { + set_rlc_lte_drb_pdcp_seqnum_length(drb_mapping.ueid, + drb_mapping.drbid, + drb_mapping.pdcp_sn_size); + } + + /* Clear out the struct again */ memset(&drb_mapping, 0, sizeof(drb_mapping)); |