1543 lines
56 KiB
INI
1543 lines
56 KiB
INI
# lte-rrc.cnf
|
|
# lte-rrc conformation file
|
|
# Copyright 2008 Vincent Helfre, 2009-2013 Pascal Quantin
|
|
# $Id$
|
|
|
|
#.OPT
|
|
PER
|
|
UNALIGNED
|
|
#.END
|
|
|
|
#.USE_VALS_EXT
|
|
BandclassCDMA2000
|
|
DRX-Config/setup/drx-InactivityTimer
|
|
Q-OffsetRange
|
|
RRM-Config/ue-InactiveTime
|
|
SupportedBandUTRA-FDD
|
|
T-PollRetransmit
|
|
T-Reordering
|
|
T-StatusProhibit
|
|
|
|
#.EXPORTS
|
|
HandoverCommand
|
|
HandoverCommand_PDU
|
|
HandoverPreparationInformation
|
|
HandoverPreparationInformation_PDU
|
|
UERadioAccessCapabilityInformation
|
|
UERadioAccessCapabilityInformation_PDU
|
|
UE-EUTRA-Capability
|
|
UE-EUTRA-Capability_PDU
|
|
#.END
|
|
|
|
#.PDU_NEW
|
|
HandoverCommand
|
|
HandoverPreparationInformation
|
|
UERadioAccessCapabilityInformation
|
|
BCCH-BCH-Message @bcch.bch
|
|
BCCH-DL-SCH-Message @bcch.dl.sch
|
|
MCCH-Message @mcch
|
|
PCCH-Message @pcch
|
|
DL-CCCH-Message @dl.ccch
|
|
DL-DCCH-Message @dl.dcch
|
|
UL-CCCH-Message @ul.ccch
|
|
UL-DCCH-Message @ul.dcch
|
|
UECapabilityInformation @ue_cap_info
|
|
UE-EUTRA-Capability @ue_eutra_cap
|
|
#.END
|
|
|
|
#.OMIT_ASSIGNMENT
|
|
# Get rid of unused code warnings
|
|
VarShortMAC-Input
|
|
VarMeasConfig
|
|
VarMeasReportList
|
|
VarMeasReport
|
|
CellsTriggeredList
|
|
VarConnEstFailReport-r11
|
|
VarLogMeasConfig-r10
|
|
VarLogMeasReport-r10
|
|
LogMeasInfoList2-r10
|
|
VarRLF-Report-r10
|
|
VarLogMeasConfig-r11
|
|
VarLogMeasReport-r11
|
|
VarRLF-Report-r11
|
|
|
|
#.MAKE_ENUM
|
|
RAT-Type TYPE_PREFIX
|
|
Handover/targetRAT-Type TYPE_PREFIX
|
|
SI-OrPSI-GERAN TYPE_PREFIX
|
|
|
|
#.FN_HDR UL-DCCH-Message
|
|
actx->pinfo->link_dir = P2P_DIR_UL;
|
|
|
|
#.FN_HDR DL-DCCH-Message
|
|
actx->pinfo->link_dir = P2P_DIR_DL;
|
|
|
|
#.FN_BODY DedicatedInfoNAS VAL_PTR = &nas_eps_tvb
|
|
tvbuff_t *nas_eps_tvb=NULL;
|
|
proto_tree *subtree;
|
|
%(DEFAULT_BODY)s
|
|
if ((nas_eps_tvb)&&(nas_eps_handle)) {
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dedicatedInfoNAS);
|
|
call_dissector(nas_eps_handle, nas_eps_tvb, actx->pinfo, subtree);
|
|
}
|
|
|
|
#.FN_BODY UE-CapabilityRAT-Container
|
|
/* Initialise to invalid value */
|
|
private_data_set_rat_type(actx, 0xFF);
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_BODY RAT-Type VAL_PTR = &rat_type
|
|
guint32 rat_type;
|
|
%(DEFAULT_BODY)s
|
|
private_data_set_rat_type(actx, (guint8)rat_type);
|
|
|
|
#RAT-Type ::= ENUMERATED {
|
|
# eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT,
|
|
# spare3, spare2, spare1, ...}
|
|
# ueCapabilityRAT-Container
|
|
# Container for the UE capabilities of the indicated RAT. The encoding is defined in the specification of each RAT:
|
|
# For E-UTRA: the encoding of UE capabilities is defined in IE UE-EUTRA-Capability.
|
|
# For UTRA: the octet string contains the INTER RAT HANDOVER INFO message defined in TS 25.331 [19].
|
|
# For GERAN CS: the octet string contains the concatenated string of the Mobile Station Classmark 2 and Mobile
|
|
# Station Classmark 3. The first 5 octets correspond to Mobile Station Classmark 2 and the following octets correspond
|
|
# to Mobile Station Classmark 3. The Mobile Station Classmark 2 is formatted as 'TLV' and is coded in the same way as
|
|
# the Mobile Station Classmark 2 information element in TS 24.008 [49]. The first octet is the Mobile station classmark 2
|
|
# IEI and its value shall be set to 33H. The second octet is the Length of mobile station classmark 2 and its value shall
|
|
# be set to 3. The octet 3 contains the first octet of the value part of the Mobile Station Classmark 2 information element,
|
|
# the octet 4 contains the second octet of the value part of the Mobile Station Classmark 2 information element and so
|
|
# on. For each of these octets, the first/ leftmost/ most significant bit of the octet contains b8 of the corresponding octet
|
|
# of the Mobile Station Classmark 2. The Mobile Station Classmark 3 is formatted as 'V' and is coded in the same way
|
|
# as the value part in the Mobile station classmark 3 information element in TS 24.008 [49]. The sixth octet of this octet
|
|
# string contains octet 1 of the value part of Mobile station classmark 3, the seventh of octet of this octet string contains
|
|
# octet 2 of the value part of Mobile station classmark 3 and so on. Note.
|
|
# For GERAN PS: the encoding of UE capabilities is formatted as 'V' and is coded in the same way as the value part in
|
|
# the MS Radio Access Capability information element in TS 24.008 [49].
|
|
# For CDMA2000-1XRTT: the octet string contains the A21 Mobile Subscription Information and the encoding of this is
|
|
# defined in A.S0008 [33]. The A21 Mobile Subscription Information contains the supported CDMA2000 1xRTT band
|
|
# class and band sub-class information.
|
|
|
|
#.FN_BODY UE-CapabilityRAT-Container/ueCapabilityRAT-Container VAL_PTR = &ue_cap_tvb
|
|
tvbuff_t *ue_cap_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR UE-CapabilityRAT-Container/ueCapabilityRAT-Container
|
|
if(ue_cap_tvb){
|
|
guint32 length;
|
|
proto_item *item;
|
|
proto_tree *subtree, *subtree2;
|
|
guint8 byte;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_UE_CapabilityRAT_Container);
|
|
switch(private_data_get_rat_type(actx)){
|
|
case RAT_Type_eutra:
|
|
/* eutra */
|
|
dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_cap_tvb, actx->pinfo, subtree, NULL);
|
|
break;
|
|
case RAT_Type_utra:
|
|
/* utra */
|
|
dissect_rrc_InterRATHandoverInfo_PDU(ue_cap_tvb, actx->pinfo, subtree, NULL);
|
|
break;
|
|
case RAT_Type_geran_cs:
|
|
/* geran-cs */
|
|
/* Mobile Station Classmark 2 is formatted as TLV with the two first bytes set to 0x33 0x03 */
|
|
item = proto_tree_add_text(subtree, ue_cap_tvb, 0, 5, "Mobile Station Classmark 2");
|
|
subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
|
|
byte = tvb_get_guint8(ue_cap_tvb, 0);
|
|
if (byte != 0x33) {
|
|
expert_add_info_format(actx->pinfo, item, &ei_lte_rrc_unexpected_type_value,
|
|
"Unexpected type value (found 0x%02X)", byte);
|
|
}
|
|
byte = tvb_get_guint8(ue_cap_tvb, 1);
|
|
if (byte != 0x03) {
|
|
expert_add_info_format(actx->pinfo, item, &ei_lte_rrc_unexpected_length_value,
|
|
"Unexpected length value (found %d)", byte);
|
|
}
|
|
de_ms_cm_2(ue_cap_tvb, subtree2, actx->pinfo, 2, 3, NULL, 0);
|
|
/* Mobile Station Classmark 3 is formatted as V */
|
|
length = tvb_ensure_length_remaining(ue_cap_tvb, 5);
|
|
item = proto_tree_add_text(subtree, ue_cap_tvb, 5, length, "Mobile Station Classmark 3");
|
|
subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
|
|
de_ms_cm_3(ue_cap_tvb, subtree2, actx->pinfo, 5, length, NULL, 0);
|
|
break;
|
|
case RAT_Type_geran_ps:
|
|
/* geran-ps */
|
|
/* MS Radio Access Capability is formatted as V */
|
|
length = tvb_length(ue_cap_tvb);
|
|
item = proto_tree_add_text(subtree, ue_cap_tvb, 0, length, "MS Radio Access Capability");
|
|
subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
|
|
de_gmm_ms_radio_acc_cap(ue_cap_tvb, subtree2, actx->pinfo, 0, length, NULL, 0);
|
|
break;
|
|
case RAT_Type_cdma2000_1XRTT:
|
|
/* cdma2000-1XRTT */
|
|
/* dissection of "A21 Mobile Subscription Information" could be added to packet-ansi_a.c */
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-Capability/featureGroupIndicators VAL_PTR = &featureGroupIndicators_tvb
|
|
tvbuff_t *featureGroupIndicators_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndicators_tvb){
|
|
/* Dissect featureGroupIndicators */
|
|
dissect_lte_rrc_featureGroupIndicators(featureGroupIndicators_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-Capability-v1020-IEs/featureGroupIndRel10-r10 VAL_PTR = &featureGroupIndRel10_tvb
|
|
tvbuff_t *featureGroupIndRel10_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndRel10_tvb){
|
|
/* Dissect featureGroupIndRel10-r10 */
|
|
dissect_lte_rrc_featureGroupIndRel10(featureGroupIndRel10_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-Capability-v9a0-IEs/featureGroupIndRel9Add-r9 VAL_PTR = &featureGroupIndRel9Add_tvb
|
|
tvbuff_t *featureGroupIndRel9Add_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndRel9Add_tvb){
|
|
/* Dissect featureGroupIndRel9Add-r9 */
|
|
dissect_lte_rrc_featureGroupIndRel9Add(featureGroupIndRel9Add_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-r9/featureGroupIndicators-r9 VAL_PTR = &featureGroupIndicators_tvb
|
|
tvbuff_t *featureGroupIndicators_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndicators_tvb){
|
|
/* Dissect featureGroupIndicators-r9 */
|
|
dissect_lte_rrc_featureGroupIndicators(featureGroupIndicators_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-r9/featureGroupIndRel9Add-r9 VAL_PTR = &featureGroupIndRel9Add_tvb
|
|
tvbuff_t *featureGroupIndRel9Add_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndRel9Add_tvb){
|
|
/* Dissect featureGroupIndRel9Add-r9 */
|
|
dissect_lte_rrc_featureGroupIndRel9Add(featureGroupIndRel9Add_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-v1060/featureGroupIndRel10-v1060 VAL_PTR = &featureGroupIndRel10_tvb
|
|
tvbuff_t *featureGroupIndRel10_tvb=NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(featureGroupIndRel10_tvb){
|
|
/* Dissect featureGroupIndRel10-v1060 */
|
|
dissect_lte_rrc_featureGroupIndRel10(featureGroupIndRel10_tvb, actx);
|
|
}
|
|
|
|
#.FN_BODY Handover
|
|
/* Initialise to invalid value */
|
|
private_data_set_rat_target_type(actx, 0xFF);
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_BODY Handover/targetRAT-Type VAL_PTR = &target_rat_type
|
|
guint32 target_rat_type;
|
|
%(DEFAULT_BODY)s
|
|
private_data_set_rat_target_type(actx, (guint8)target_rat_type);
|
|
|
|
#.FN_BODY Handover/targetRAT-MessageContainer VAL_PTR = &target_rat_msg_cont_tvb
|
|
tvbuff_t *target_rat_msg_cont_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if(target_rat_msg_cont_tvb){
|
|
guint8 byte;
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_targetRAT_MessageContainer);
|
|
switch (private_data_get_rat_target_type(actx)){
|
|
case T_targetRAT_Type_utra:
|
|
/* utra */
|
|
if (rrc_irat_ho_to_utran_cmd_handle)
|
|
call_dissector(rrc_irat_ho_to_utran_cmd_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
|
|
break;
|
|
case T_targetRAT_Type_geran:
|
|
/* geran */
|
|
byte = tvb_get_guint8(target_rat_msg_cont_tvb, 0);
|
|
if (byte == 0x06) {
|
|
if (gsm_a_dtap_handle) {
|
|
call_dissector(gsm_a_dtap_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
|
|
}
|
|
} else {
|
|
if (gsm_rlcmac_dl_handle) {
|
|
call_dissector(gsm_rlcmac_dl_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
|
|
}
|
|
}
|
|
break;
|
|
case T_targetRAT_Type_cdma2000_1XRTT:
|
|
/* cdma2000-1XRTT */
|
|
break;
|
|
case T_targetRAT_Type_cdma2000_HRPD:
|
|
/* cdma2000-HRPD */
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
#.FN_BODY Handover/nas-SecurityParamFromEUTRA VAL_PTR = &nas_sec_param_from_eutra_tvb
|
|
tvbuff_t *nas_sec_param_from_eutra_tvb = NULL;
|
|
guint32 length;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
if (nas_sec_param_from_eutra_tvb) {
|
|
length = tvb_length(nas_sec_param_from_eutra_tvb);
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_nas_SecurityParam);
|
|
de_emm_sec_par_from_eutra(nas_sec_param_from_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0);
|
|
}
|
|
|
|
#.FN_BODY SecurityConfigHO/handoverType/interRAT/nas-SecurityParamToEUTRA VAL_PTR = &nas_sec_param_to_eutra_tvb
|
|
tvbuff_t *nas_sec_param_to_eutra_tvb = NULL;
|
|
guint32 length;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
if (nas_sec_param_to_eutra_tvb) {
|
|
length = tvb_length(nas_sec_param_to_eutra_tvb);
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_nas_SecurityParam);
|
|
de_emm_sec_par_to_eutra(nas_sec_param_to_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0);
|
|
}
|
|
|
|
#.FN_BODY SI-OrPSI-GERAN/si
|
|
private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_si); /* SI message */
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_BODY SI-OrPSI-GERAN/psi
|
|
private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_psi); /* PSI message */
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_BODY CellInfoGERAN-r9/systemInformation-r9
|
|
private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_si); /* SI message */
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_BODY SystemInfoListGERAN/_item VAL_PTR = &sys_info_list_tvb
|
|
tvbuff_t *sys_info_list_tvb = NULL;
|
|
proto_tree *subtree;
|
|
%(DEFAULT_BODY)s
|
|
if (sys_info_list_tvb) {
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
|
|
switch (private_data_get_si_or_psi_geran(actx)) {
|
|
case SI_OrPSI_GERAN_si:
|
|
/* SI message */
|
|
if (gsm_a_dtap_handle) {
|
|
call_dissector(gsm_a_dtap_handle, sys_info_list_tvb, actx->pinfo, subtree);
|
|
}
|
|
break;
|
|
case SI_OrPSI_GERAN_psi:
|
|
/* PSI message */
|
|
if (gsm_rlcmac_dl_handle) {
|
|
call_dissector(gsm_rlcmac_dl_handle, sys_info_list_tvb, actx->pinfo, subtree);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
#.FN_BODY SystemTimeInfoCDMA2000/cdma-SystemTime/asynchronousSystemTime VAL_PTR=&async_system_time_tvb
|
|
tvbuff_t *async_system_time_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemTimeInfoCDMA2000/cdma-SystemTime/asynchronousSystemTime
|
|
if (async_system_time_tvb) {
|
|
guint64 bits;
|
|
nstime_t ts;
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
|
|
bits = tvb_get_bits64(async_system_time_tvb, 0, 49, ENC_BIG_ENDIAN);
|
|
ts.secs = (time_t)((bits*8)/1228800) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */
|
|
ts.nsecs = (int)(((bits%153600)*8*1000000000)/1228800);
|
|
proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
|
|
proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
|
|
}
|
|
|
|
#.FN_BODY SystemTimeInfoCDMA2000/cdma-SystemTime/synchronousSystemTime VAL_PTR=&sync_system_time_tvb
|
|
tvbuff_t *sync_system_time_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemTimeInfoCDMA2000/cdma-SystemTime/synchronousSystemTime
|
|
if (sync_system_time_tvb) {
|
|
guint64 bits;
|
|
nstime_t ts;
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
|
|
bits = tvb_get_bits64(sync_system_time_tvb, 0, 39, ENC_BIG_ENDIAN);
|
|
ts.secs = (time_t)(bits/100) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */
|
|
ts.nsecs = (int)(bits%100)*10000000;
|
|
proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
|
|
proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
|
|
}
|
|
|
|
#.FN_BODY CellInfoUTRA-FDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb
|
|
tvbuff_t *utra_bcch_cont_tvb = NULL;
|
|
proto_tree *subtree;
|
|
%(DEFAULT_BODY)s
|
|
if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
|
|
call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
|
|
}
|
|
|
|
#.FN_BODY CellInfoUTRA-TDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb
|
|
tvbuff_t *utra_bcch_cont_tvb = NULL;
|
|
proto_tree *subtree;
|
|
%(DEFAULT_BODY)s
|
|
if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
|
|
call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
|
|
}
|
|
|
|
#.FN_BODY CellInfoUTRA-TDD-r10/utra-BCCH-Container-r10 VAL_PTR = &utra_bcch_cont_tvb
|
|
tvbuff_t *utra_bcch_cont_tvb = NULL;
|
|
proto_tree *subtree;
|
|
%(DEFAULT_BODY)s
|
|
if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
|
|
call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
|
|
}
|
|
|
|
#.TYPE_ATTR
|
|
NeighCellConfig TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_neighCellConfig_vals)
|
|
|
|
#.FN_BODY NeighCellConfig VAL_PTR = &neigh_cell_config_tvb HF_INDEX=-1
|
|
tvbuff_t *neigh_cell_config_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR NeighCellConfig
|
|
if (neigh_cell_config_tvb) {
|
|
actx->created_item = proto_tree_add_uint(tree, hf_index, neigh_cell_config_tvb, 0, 1, tvb_get_bits8(neigh_cell_config_tvb, 0, 2));
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoid-Point-r10 VAL_PTR = &ellipsoid_point_tvb
|
|
tvbuff_t *ellipsoid_point_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_point_tvb) {
|
|
dissect_lpp_Ellipsoid_Point_PDU(ellipsoid_point_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithAltitude-r10 VAL_PTR = &ellipsoid_point_with_alt_tvb
|
|
tvbuff_t *ellipsoid_point_with_alt_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_point_with_alt_tvb) {
|
|
dissect_lpp_EllipsoidPointWithAltitude_PDU(ellipsoid_point_with_alt_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithUncertaintyCircle-r11 VAL_PTR = &ellipsoid_point_with_uncert_circ_tvb
|
|
tvbuff_t *ellipsoid_point_with_uncert_circ_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_point_with_uncert_circ_tvb) {
|
|
dissect_lpp_Ellipsoid_PointWithUncertaintyCircle_PDU(ellipsoid_point_with_uncert_circ_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithUncertaintyEllipse-r11 VAL_PTR = &ellipsoid_point_with_uncert_ellipse_tvb
|
|
tvbuff_t *ellipsoid_point_with_uncert_ellipse_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_point_with_uncert_ellipse_tvb) {
|
|
dissect_lpp_EllipsoidPointWithUncertaintyEllipse_PDU(ellipsoid_point_with_uncert_ellipse_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11 VAL_PTR = &ellipsoid_point_with_alt_uncert_ellipsoid_tvb
|
|
tvbuff_t *ellipsoid_point_with_alt_uncert_ellipsoid_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_point_with_alt_uncert_ellipsoid_tvb) {
|
|
dissect_lpp_EllipsoidPointWithAltitudeAndUncertaintyEllipsoid_PDU(ellipsoid_point_with_alt_uncert_ellipsoid_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidArc-r11 VAL_PTR = &ellipsoid_arc_tvb
|
|
tvbuff_t *ellipsoid_arc_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (ellipsoid_arc_tvb) {
|
|
dissect_lpp_EllipsoidArc_PDU(ellipsoid_arc_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/polygon-r11 VAL_PTR = &polygon_tvb
|
|
tvbuff_t *polygon_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (polygon_tvb) {
|
|
dissect_lpp_Polygon_PDU(polygon_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/horizontalVelocity-r10 VAL_PTR = &horizontal_velocity_tvb
|
|
tvbuff_t *horizontal_velocity_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (horizontal_velocity_tvb) {
|
|
dissect_lpp_HorizontalVelocity_PDU(horizontal_velocity_tvb, actx->pinfo, tree, NULL);
|
|
}
|
|
|
|
#.FN_BODY LocationInfo-r10/gnss-TOD-msec-r10 VAL_PTR = &gnss_tod_msec_tvb
|
|
tvbuff_t *gnss_tod_msec_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
if (gnss_tod_msec_tvb) {
|
|
asn1_ctx_t asn1_ctx;
|
|
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, actx->pinfo);
|
|
dissect_per_constrained_integer(gnss_tod_msec_tvb, 0, &asn1_ctx, tree, hf_index, 0U, 3599999U, NULL, FALSE);
|
|
}
|
|
|
|
#.FN_BODY AbsoluteTimeInfo-r10 VAL_PTR = &abs_time_info_tvb
|
|
tvbuff_t *abs_time_info_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
#.FN_FTR AbsoluteTimeInfo-r10
|
|
if (abs_time_info_tvb) {
|
|
const gchar *str;
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_absTimeInfo);
|
|
str = tvb_bcd_dig_to_wmem_packet_str(abs_time_info_tvb, 0, 6, NULL, FALSE);
|
|
proto_tree_add_text(subtree, abs_time_info_tvb, 0, 6, "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1],
|
|
str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11]);
|
|
}
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType9/hnb-Name TYPE=FT_STRING DISPLAY=STR_UNICODE
|
|
|
|
#.FN_BODY SystemInformationBlockType9/hnb-Name VAL_PTR=&hnb_name_tvb HF_INDEX=-1
|
|
tvbuff_t *hnb_name_tvb = NULL;
|
|
|
|
%(DEFAULT_BODY)s
|
|
actx->created_item = proto_tree_add_item(tree, hf_index, hnb_name_tvb, 0, -1, ENC_UTF_8|ENC_NA);
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType10/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_messageIdentifier_vals_ext
|
|
|
|
#.FN_BODY SystemInformationBlockType10/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
|
|
tvbuff_t *msg_id_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType10/messageIdentifier
|
|
if (msg_id_tvb) {
|
|
actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType10/serialNumber VAL_PTR=&serial_nb_tvb
|
|
tvbuff_t *serial_nb_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType10/serialNumber
|
|
if (serial_nb_tvb) {
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType10/warningType VAL_PTR=&warning_type_tvb
|
|
tvbuff_t *warning_type_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType10/warningType
|
|
if (warning_type_tvb) {
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningType);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_warningType_value, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_warningType_emergency_user_alert, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_warningType_popup, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType11/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_messageIdentifier_vals_ext
|
|
|
|
#.FN_BODY SystemInformationBlockType11/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
|
|
tvbuff_t *msg_id_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType11/messageIdentifier
|
|
if (msg_id_tvb) {
|
|
private_data_set_message_identifier(actx, tvb_get_ntohs(msg_id_tvb, 0) << 16);
|
|
actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType11/serialNumber VAL_PTR=&serial_nb_tvb
|
|
tvbuff_t *serial_nb_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType11/serialNumber
|
|
if (serial_nb_tvb) {
|
|
proto_tree *subtree;
|
|
private_data_set_message_identifier(actx,
|
|
private_data_get_message_identifier(actx) | tvb_get_ntohs(serial_nb_tvb, 0));
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType11/dataCodingScheme VAL_PTR=&data_coding_scheme_tvb
|
|
tvbuff_t *data_coding_scheme_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType11/dataCodingScheme
|
|
if (data_coding_scheme_tvb) {
|
|
proto_tree *subtree;
|
|
guint32 dataCodingScheme;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
|
|
dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
|
|
g_hash_table_insert(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)),
|
|
GUINT_TO_POINTER(dataCodingScheme));
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType11/warningMessageSegment VAL_PTR=&warning_msg_seg_tvb
|
|
tvbuff_t *warning_msg_seg_tvb = NULL;
|
|
gpointer p_dcs;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType11/warningMessageSegment
|
|
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
|
|
if (warning_msg_seg_tvb && p_dcs) {
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
|
|
dissect_lte_rrc_warningMessageSegment(warning_msg_seg_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
|
|
}
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType12-r9/messageIdentifier-r9 TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_messageIdentifier_vals_ext
|
|
|
|
#.FN_BODY SystemInformationBlockType12-r9/messageIdentifier-r9 VAL_PTR=&msg_id_tvb HF_INDEX=-1
|
|
tvbuff_t *msg_id_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType12-r9/messageIdentifier-r9
|
|
if (msg_id_tvb) {
|
|
private_data_set_message_identifier(actx, tvb_get_ntohs(msg_id_tvb, 0) << 16);
|
|
actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType12-r9/serialNumber-r9 VAL_PTR=&serial_nb_tvb
|
|
tvbuff_t *serial_nb_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType12-r9/serialNumber-r9
|
|
if (serial_nb_tvb) {
|
|
proto_tree *subtree;
|
|
private_data_set_message_identifier(actx,
|
|
private_data_get_message_identifier(actx) | tvb_get_ntohs(serial_nb_tvb, 0));
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType12-r9/dataCodingScheme-r9 VAL_PTR=&data_coding_scheme_tvb
|
|
tvbuff_t *data_coding_scheme_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType12-r9/dataCodingScheme-r9
|
|
if (data_coding_scheme_tvb) {
|
|
proto_tree *subtree;
|
|
guint32 dataCodingScheme;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
|
|
dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
|
|
g_hash_table_insert(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)),
|
|
GUINT_TO_POINTER(dataCodingScheme));
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType12-r9/warningMessageSegment-r9 VAL_PTR=&warning_msg_seg_tvb
|
|
tvbuff_t *warning_msg_seg_tvb = NULL;
|
|
gpointer p_dcs;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType12-r9/warningMessageSegment-r9
|
|
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
|
|
if (warning_msg_seg_tvb && p_dcs) {
|
|
proto_tree *subtree;
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
|
|
dissect_lte_rrc_warningMessageSegment(warning_msg_seg_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
|
|
}
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11 TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_daylightSavingTime_vals)
|
|
|
|
#.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11 VAL_PTR=&daylight_saving_time_tvb HF_INDEX=-1
|
|
tvbuff_t *daylight_saving_time_tvb = NULL;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11
|
|
if (daylight_saving_time_tvb) {
|
|
actx->created_item = proto_tree_add_uint(tree, hf_index, daylight_saving_time_tvb, 0, 1, tvb_get_bits8(daylight_saving_time_tvb, 0, 2));
|
|
}
|
|
|
|
#.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/leapSeconds-r11
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType16-r11/timeInfo-r11/localTimeOffset-r11 DISPLAY=BASE_CUSTOM STRINGS=<e_rrc_localTimeOffset_fmt
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11 TYPE = FT_UINT64
|
|
|
|
#.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11 VAL_PTR=&timeInfo FN_VARIANT = _64b
|
|
guint64 timeInfo;
|
|
proto_tree *subtree;
|
|
nstime_t ts;
|
|
guint32 old_offset = offset;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11
|
|
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
|
|
ts.secs = (time_t)(timeInfo/100)-2208988800U; /* epoch is 00:00:00 (midnight) UTC on 1900-01-01 */
|
|
ts.nsecs = (int)(timeInfo%100)*10000000;
|
|
proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5,
|
|
"UTC time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
|
|
proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5,
|
|
"Local time: %s", abs_time_to_ep_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
|
|
|
|
#.FN_BODY RRCConnectionReject-r8-IEs/waitTime
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.FN_BODY RRCConnectionReject-v1020-IEs/extendedWaitTime-r10
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.FN_BODY RRCConnectionRelease-v1020-IEs/extendedWaitTime-r10
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.TYPE_ATTR
|
|
SystemInformationBlockType1/cellSelectionInfo/q-RxLevMinOffset STRINGS=VALS(lte_rrc_q_RxLevMinOffset_vals)
|
|
|
|
#.FN_BODY CellSelectionInfo-v920/q-QualMinOffset-r9
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.TYPE_ATTR
|
|
RLF-Report-r9/eag_1/timeConnFailure-r10 DISPLAY=BASE_CUSTOM STRINGS=<e_rrc_timeConnFailure_r10_fmt
|
|
|
|
#.FN_BODY LogMeasInfo-r10/relativeTimeStamp-r10
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.FN_BODY TimeSinceFailure-r11
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.TYPE_ATTR
|
|
CarrierFreqUTRA-FDD/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_utra_q_RxLevMin_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
CarrierFreqUTRA-TDD/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_utra_q_RxLevMin_vals_ext
|
|
|
|
#.FN_BODY CarrierFreqUTRA-FDD/p-MaxUTRA
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY CarrierFreqUTRA-TDD/p-MaxUTRA
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY CarrierFreqUTRA-FDD/q-QualMin
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.TYPE_ATTR
|
|
CarrierFreqsInfoGERAN/commonInfo/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_geran_q_RxLevMin_vals_ext
|
|
|
|
#.FN_BODY CarrierFreqsInfoGERAN/commonInfo/p-MaxGERAN
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.TYPE_ATTR
|
|
CQI-ReportConfig/nomPDSCH-RS-EPRE-Offset STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
|
|
|
|
#.TYPE_ATTR
|
|
CQI-ReportConfig-r10/nomPDSCH-RS-EPRE-Offset STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
|
|
|
|
#.TYPE_ATTR
|
|
CQI-ReportConfigSCell-r10/nomPDSCH-RS-EPRE-Offset-r10 STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
|
|
|
|
#.FN_BODY MAC-MainConfig
|
|
/* Accumulate values in drx_config while dissecting DRX config.
|
|
Do this here rather than down in DRX-Config so that we will see
|
|
fields overwritten in the R11 extension */
|
|
drx_config_t *drx_config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (drx_config->configured) {
|
|
mac_lte_info* p_mac_lte_info;
|
|
|
|
/* Verify that config is valid */
|
|
drx_check_config_sane(drx_config, actx);
|
|
|
|
/* Look for UE identifier */
|
|
p_mac_lte_info = (mac_lte_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_mac_lte, 0);
|
|
if (p_mac_lte_info != NULL) {
|
|
/* If found, configure MAC with DRX config */
|
|
set_mac_lte_drx_config(p_mac_lte_info->ueid, drx_config, actx->pinfo);
|
|
}
|
|
|
|
/* Clear out state */
|
|
drx_config->configured = FALSE;
|
|
}
|
|
|
|
|
|
#.FN_BODY MAC-MainConfig/eag_1/sr-ProhibitTimer-r9 VAL_PTR=&timer
|
|
guint32 timer;
|
|
%(DEFAULT_BODY)s
|
|
|
|
#.FN_FTR MAC-MainConfig/eag_1/sr-ProhibitTimer-r9
|
|
proto_item_append_text(actx->created_item, " SR period%s", (timer > 1) ? "s" : "");
|
|
|
|
#.FN_BODY PDSCH-ConfigCommon/referenceSignalPower
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY P-Max
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY SPS-ConfigUL/setup/p0-Persistent/p0-NominalPUSCH-Persistent
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY SPS-ConfigUL/setup/p0-Persistent/p0-UE-PUSCH-Persistent
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.TYPE_ATTR
|
|
UplinkPowerControlCommon/deltaPreambleMsg3 STRINGS=VALS(lte_rrc_deltaPreambleMsg3_vals)
|
|
|
|
#.FN_BODY UplinkPowerControlCommon/p0-NominalPUSCH
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.TYPE_ATTR
|
|
UplinkPowerControlCommonSCell-v11x0/deltaPreambleMsg3-r11 STRINGS=VALS(lte_rrc_deltaPreambleMsg3_vals)
|
|
|
|
#.FN_BODY UplinkPowerControlCommon/p0-NominalPUCCH
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY UplinkPowerControlCommonSCell-r10/p0-NominalPUSCH-r10
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dBm");
|
|
|
|
#.FN_BODY UplinkPowerControlDedicated/p0-UE-PUSCH
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.FN_BODY UplinkPowerControlDedicated/p0-UE-PUCCH
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.FN_BODY UplinkPowerControlDedicatedSCell-r10/p0-UE-PUSCH-r10
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.FN_BODY Q-QualMin-r9
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.TYPE_ATTR
|
|
Q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_q_RxLevMin_vals_ext
|
|
|
|
#.FN_BODY Q-OffsetRangeInterRAT
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.TYPE_ATTR
|
|
ReselectionThreshold DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_ReselectionThreshold_vals_ext
|
|
|
|
#.FN_BODY ReselectionThresholdQ-r9
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "dB");
|
|
|
|
#.FN_BODY T-Reselection
|
|
%(DEFAULT_BODY)s
|
|
proto_item_append_text(actx->created_item, "s");
|
|
|
|
#.TYPE_ATTR
|
|
Hysteresis DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_Hysteresis_vals_ext
|
|
|
|
#.TYPE_RENAME
|
|
MeasConfig/s-Measure S_Measure
|
|
|
|
#.TYPE_ATTR
|
|
MeasConfig/s-Measure DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_s_Measure_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
MeasResultGERAN/measResult/rssi DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&gsm_a_rr_rxlev_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
MeasResultUTRA/measResult/utra-EcN0 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_utra_EcN0_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
MeasResultUTRA/measResult/utra-RSCP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_utra_RSCP_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
ReportConfigEUTRA/triggerType/event/eventId/eventA3/a3-Offset DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_a3_a6_Offset_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
ReportConfigEUTRA/triggerType/event/eventId/eventA6-r10/a6-Offset-r10 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_a3_a6_Offset_vals_ext
|
|
|
|
#.TYPE_RENAME
|
|
ThresholdEUTRA/threshold-RSRP Threshold_RSRP_Range
|
|
|
|
#.TYPE_ATTR
|
|
ThresholdEUTRA/threshold-RSRP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_threshold_RSRP_vals_ext
|
|
|
|
#.TYPE_RENAME
|
|
ThresholdEUTRA/threshold-RSRQ Threshold_RSRQ_Range
|
|
|
|
#.TYPE_ATTR
|
|
ThresholdEUTRA/threshold-RSRQ DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_threshold_RSRQ_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
ThresholdGERAN DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_thresholdGERAN_vals_ext
|
|
|
|
#.TYPE_RENAME
|
|
ThresholdUTRA/utra-RSCP Threshold_utra_RSRP
|
|
|
|
#.TYPE_ATTR
|
|
ThresholdUTRA/utra-RSCP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_thresholdUTRA_RSCP_vals_ext
|
|
|
|
#.TYPE_RENAME
|
|
ThresholdUTRA/utra-EcN0 Threshold_utra_EcN0
|
|
|
|
#.TYPE_ATTR
|
|
ThresholdUTRA/utra-EcN0 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_thresholdUTRA_EcN0_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
RSRP-Range DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_RSRP_Range_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
RSRQ-Range DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=<e_rrc_RSRQ_Range_vals_ext
|
|
|
|
#.TYPE_ATTR
|
|
MeasResultForECID-r9/ue-RxTxTimeDiffResult-r9 DISPLAY=BASE_CUSTOM STRINGS=<e_rrc_ue_RxTxTimeDiffResult_fmt
|
|
|
|
#.FN_BODY SoundingRS-UL-ConfigDedicated/setup/duration
|
|
actx->created_item = proto_tree_add_bits_item(tree, hf_index, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
offset++;
|
|
|
|
#.TYPE_ATTR
|
|
SoundingRS-UL-ConfigDedicated/setup/duration STRINGS=TFS(<e_rrc_duration_val)
|
|
|
|
#.FN_HDR MasterInformationBlock
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MasterInformationBlock");
|
|
|
|
#.FN_HDR SystemInformation
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation [ ");
|
|
|
|
#.FN_BODY SystemInformation
|
|
|
|
%(DEFAULT_BODY)s
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "]");
|
|
|
|
#.FN_HDR SystemInformationBlockType1
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformationBlockType1");
|
|
|
|
#.FN_HDR SystemInformationBlockType2
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB2 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType3
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB3 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType4
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB4 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType5
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB5 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType6
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB6 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType7
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB7 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType8
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB8 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB9 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB10 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB11 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType12-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB12 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType13-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB13 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType14-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB14 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType15-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB15 ");
|
|
|
|
#.FN_HDR SystemInformationBlockType16-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB16 ");
|
|
|
|
#.FN_HDR MBSFNAreaConfiguration-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MBSFNAreaConfiguration-r9");
|
|
|
|
#.FN_HDR MBMSCountingRequest-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCountingRequest-r10");
|
|
|
|
#.FN_HDR Paging
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "Paging");
|
|
|
|
#.FN_HDR RRCConnectionReestablishment
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishment");
|
|
|
|
#.FN_HDR RRCConnectionReestablishmentReject
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentReject");
|
|
|
|
#.FN_HDR RRCConnectionReject
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReject");
|
|
|
|
#.FN_HDR RRCConnectionSetup
|
|
mac_lte_info* p_mac_lte_info;
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetup");
|
|
|
|
#.FN_HDR CSFBParametersResponseCDMA2000
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersResponseCDMA2000");
|
|
|
|
#.FN_HDR DLInformationTransfer
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "DLInformationTransfer");
|
|
|
|
#.FN_HDR HandoverFromEUTRAPreparationRequest
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromEUTRAPreparationRequest");
|
|
|
|
#.FN_HDR MobilityFromEUTRACommand
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MobilityFromEUTRACommand");
|
|
|
|
#.FN_HDR RRCConnectionReconfiguration
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfiguration");
|
|
|
|
#.FN_HDR RRCConnectionRelease
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease");
|
|
|
|
#.FN_HDR SecurityModeCommand
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand");
|
|
|
|
#.FN_HDR UECapabilityEnquiry
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry");
|
|
|
|
#.FN_HDR CounterCheck
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheck");
|
|
|
|
#.FN_HDR UEInformationRequest-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationRequest-r9");
|
|
|
|
#.FN_HDR LoggedMeasurementConfiguration-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "LoggedMeasurementConfiguration-r10");
|
|
|
|
#.FN_HDR RNReconfiguration-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RNReconfiguration-r10");
|
|
|
|
#.FN_HDR RRCConnectionReestablishmentRequest
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentRequest");
|
|
|
|
#.FN_HDR RRCConnectionRequest
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRequest");
|
|
|
|
#.FN_HDR CSFBParametersRequestCDMA2000
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersRequestCDMA2000");
|
|
|
|
#.FN_HDR MeasurementReport
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementReport");
|
|
|
|
#.FN_HDR RRCConnectionReconfigurationComplete
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfigurationComplete");
|
|
|
|
#.FN_HDR RRCConnectionReestablishmentComplete
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentComplete");
|
|
|
|
#.FN_HDR RRCConnectionSetupComplete
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetupComplete");
|
|
|
|
#.FN_HDR SecurityModeComplete
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeComplete");
|
|
|
|
#.FN_HDR SecurityModeFailure
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeFailure");
|
|
|
|
#.FN_HDR UECapabilityInformation
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformation");
|
|
|
|
#.FN_HDR ULHandoverPreparationTransfer
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "ULHandoverPreparationTransfer");
|
|
|
|
#.FN_HDR ULInformationTransfer
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "ULInformationTransfer");
|
|
|
|
#.FN_HDR CounterCheckResponse
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse");
|
|
|
|
#.FN_HDR UEInformationResponse-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationResponse-r9");
|
|
|
|
#.FN_HDR ProximityIndication-r9
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "ProximityIndication-r9");
|
|
|
|
#.FN_HDR RNReconfigurationComplete-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "RNReconfigurationComplete-r10");
|
|
|
|
#.FN_HDR MBMSCountingResponse-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCountingResponse-r10");
|
|
|
|
#.FN_HDR InterFreqRSTDMeasurementIndication-r10
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "InterFreqRSTDMeasurementIndication-r10");
|
|
|
|
#.FN_HDR UEAssistanceInformation-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "UEAssistanceInformation-r11");
|
|
|
|
#.FN_HDR InDeviceCoexIndication-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "InDeviceCoexIndication-r11");
|
|
|
|
#.FN_HDR MBMSInterestIndication-r11
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSInterestIndication-r11");
|
|
|
|
#.FN_BODY Paging/systemInfoModification
|
|
%(DEFAULT_BODY)s
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, " (systemInfoModification)");
|
|
expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_sibs_changing);
|
|
|
|
#.FN_BODY Paging/pagingRecordList
|
|
/* Number of items is (last 3 bits of first byte and first bit of second) + 1 */
|
|
guint16 number_of_records = ((tvb_get_ntohs(tvb, 0) >> 7) & 0x0f) + 1;
|
|
%(DEFAULT_BODY)s
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%%u PagingRecords)", number_of_records);
|
|
|
|
#.FN_BODY MasterInformationBlock/systemFrameNumber VAL_PTR=&value_tvb
|
|
tvbuff_t *value_tvb;
|
|
guint32 sfn;
|
|
%(DEFAULT_BODY)s
|
|
/* Show SFN in info column */
|
|
sfn = tvb_get_guint8(value_tvb, 0);
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (SFN=%%u)", sfn);
|
|
|
|
#.FN_BODY SystemInformationBlockType1/systemInfoValueTag VAL_PTR=&value
|
|
guint32 value;
|
|
%(DEFAULT_BODY)s
|
|
/* Track whether systemInfoValue has changed since last seen, indicating new SI config
|
|
TODO: add link back to previous config and (if known) time since previous config
|
|
was first seen */
|
|
if (!actx->pinfo->fd->flags.visited) {
|
|
if (system_info_value_current_set && (value != system_info_value_current)) {
|
|
/* Add entry to the hash table. Offset by one to distinguish 0 from lookup failure */
|
|
g_hash_table_insert(lte_rrc_system_info_value_changed_hash, GUINT_TO_POINTER(actx->pinfo->fd->num),
|
|
GUINT_TO_POINTER(system_info_value_current+1));
|
|
}
|
|
system_info_value_current_set = TRUE;
|
|
system_info_value_current = value;
|
|
}
|
|
else {
|
|
/* Look up indication of changed info value from hash table */
|
|
gpointer p_previous = g_hash_table_lookup(lte_rrc_system_info_value_changed_hash, GUINT_TO_POINTER(actx->pinfo->fd->num));
|
|
if (p_previous != NULL) {
|
|
/* Subtract one from stored result to get previous value */
|
|
guint32 previous = GPOINTER_TO_UINT(p_previous) - 1;
|
|
expert_add_info_format(actx->pinfo, actx->created_item, &ei_lte_rrc_si_info_value_changed,
|
|
"SI Info Value changed (now %%u, was %%u)", value, previous);
|
|
}
|
|
}
|
|
|
|
#.FN_BODY Paging/etws-Indication
|
|
%(DEFAULT_BODY)s
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, " (ETWS)");
|
|
expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_earthquake_warning_sys);
|
|
|
|
#.FN_BODY Paging-v920-IEs/cmas-Indication-r9
|
|
%(DEFAULT_BODY)s
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, " (CMAS)");
|
|
expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_commercial_mobile_alert_sys);
|
|
|
|
#.FN_BODY DRB-ToAddMod
|
|
struct mac_lte_info *p_mac_lte_info;
|
|
/* Get the struct and clear it out */
|
|
drb_mapping_t *drb_mapping = private_data_get_drb_mapping(actx);
|
|
memset(drb_mapping, 0, sizeof(*drb_mapping));
|
|
%(DEFAULT_BODY)s
|
|
/* Need UE identifier */
|
|
p_mac_lte_info = (mac_lte_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_mac_lte, 0);
|
|
if (p_mac_lte_info == NULL) {
|
|
return offset;
|
|
}
|
|
else {
|
|
drb_mapping->ueid = p_mac_lte_info->ueid;
|
|
}
|
|
|
|
/* Tell MAC about this mapping */
|
|
set_mac_lte_channel_mapping(drb_mapping);
|
|
|
|
/* 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));
|
|
|
|
|
|
#.FN_BODY DRB-Identity VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->drbid = (guint8)value;
|
|
}
|
|
|
|
#.FN_BODY RLC-Config VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->rlcMode = (value==0) ? RLC_AM_MODE : RLC_UM_MODE;
|
|
mapping->rlcMode_present = TRUE;
|
|
|
|
if (mapping->rlcMode == RLC_AM_MODE) {
|
|
mapping->pdcp_sn_size = 12;
|
|
mapping->pdcp_sn_size_present = TRUE;
|
|
}
|
|
}
|
|
|
|
#.FN_BODY DRB-ToAddMod/logicalChannelIdentity VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->lcid = (guint8)value;
|
|
mapping->lcid_present = TRUE;
|
|
}
|
|
|
|
#.FN_BODY SN-FieldLength VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->um_sn_length = (value==0) ? 5 : 10;
|
|
mapping->um_sn_length_present = TRUE;
|
|
}
|
|
|
|
#.FN_BODY LogicalChannelConfig/ul-SpecificParameters/priority VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->ul_priority = value;
|
|
mapping->ul_priority_present = TRUE;
|
|
}
|
|
|
|
#.FN_BODY PDCP-Config/rlc-UM/pdcp-SN-Size VAL_PTR=&value
|
|
guint32 value;
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->pdcp_sn_size = (value==0) ? 7 : 12;
|
|
mapping->pdcp_sn_size_present = TRUE;
|
|
}
|
|
|
|
#.FN_BODY PDCP-Config/eag_2/pdcp-SN-Size-v1130
|
|
drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
|
|
%(DEFAULT_BODY)s
|
|
if (mapping != NULL) {
|
|
mapping->pdcp_sn_size = 15;
|
|
mapping->pdcp_sn_size_present = TRUE;
|
|
}
|
|
|
|
|
|
#.FN_BODY RACH-ConfigCommon/preambleInfo
|
|
%(DEFAULT_BODY)s
|
|
/* Initialise to invalid value */
|
|
private_data_set_ra_preambles(actx, 0);
|
|
|
|
#.FN_BODY RACH-ConfigCommon/preambleInfo/numberOfRA-Preambles VAL_PTR=&value
|
|
guint value;
|
|
%(DEFAULT_BODY)s
|
|
/* This is mandatory, store value */
|
|
private_data_set_ra_preambles(actx, value);
|
|
|
|
#.FN_BODY RACH-ConfigCommon/preambleInfo/preamblesGroupAConfig/sizeOfRA-PreamblesGroupA VAL_PTR=&value
|
|
guint ra_value, value;
|
|
%(DEFAULT_BODY)s
|
|
/* Retrived stored value for RA (both Group A & Group B) */
|
|
ra_value = private_data_get_ra_preambles(actx);
|
|
if (value > ra_value) {
|
|
/* Something is wrong if A has more RAPIDs than A & B combined! */
|
|
expert_add_info_format(actx->pinfo, actx->created_item, &ei_lte_rrc_too_many_group_a_rapids,
|
|
"Group A size (%%s) > Total RA size (%%s)!",
|
|
val_to_str_const(value, lte_rrc_T_sizeOfRA_PreamblesGroupA_vals, "Unknown"),
|
|
val_to_str_const(ra_value, lte_rrc_T_numberOfRA_Preambles_vals, "Unknown"));
|
|
|
|
}
|
|
/* Reset again */
|
|
private_data_set_ra_preambles(actx, 0);
|
|
|
|
|
|
#.FN_BODY DRX-Config/setup/onDurationTimer VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
/* Set 'configured' state so that config can be examine once complete! */
|
|
config->configured = TRUE;
|
|
config->onDurationTimer = drx_lookup_onDurationTimer(value);
|
|
|
|
#.FN_BODY DRX-Config/setup/drx-InactivityTimer VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->inactivityTimer = drx_lookup_inactivityTimer(value);
|
|
|
|
#.FN_BODY DRX-Config/setup/drx-RetransmissionTimer VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->retransmissionTimer = drx_lookup_retransmissionTimer(value);
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->longCycle = drx_lookup_longCycle(value);
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf10 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf20 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf32 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf40 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf64 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf80 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf128 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf160 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf256 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf320 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf512 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf640 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf1024 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf1280 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf2048 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf2560 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config/setup/shortDRX/shortDRX-Cycle VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->shortCycleConfigured = TRUE;
|
|
config->shortCycle = drx_lookup_shortCycle(value);
|
|
|
|
#.FN_BODY DRX-Config/setup/shortDRX/drxShortCycleTimer VAL_PTR=&timer
|
|
guint32 timer;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->shortCycleTimer = timer;
|
|
|
|
#.FN_FTR DRX-Config/setup/shortDRX/drxShortCycleTimer
|
|
proto_item_append_text(actx->created_item, " shortDRX-Cycle%s", plurality(timer, "", "s"));
|
|
|
|
#.FN_BODY DRX-Config-v1130/drx-RetransmissionTimer-v1130 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->retransmissionTimer = 0;
|
|
|
|
#.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->longCycle = drx_lookup_longCycle_v1130(value);
|
|
|
|
#.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130/sf60-v1130 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130/sf70-v1130 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
config->cycleOffset = value;
|
|
|
|
#.FN_BODY DRX-Config-v1130/shortDRX-Cycle-v1130 VAL_PTR=&value
|
|
guint32 value;
|
|
drx_config_t* config = private_data_get_drx_config(actx);
|
|
%(DEFAULT_BODY)s
|
|
/* Presumably config->shortCycleConfigured will be set... */
|
|
config->shortCycle = 4;
|
|
|
|
#.FN_BODY DRX-Config/release
|
|
mac_lte_info* p_mac_lte_info;
|
|
%(DEFAULT_BODY)s
|
|
/* Look for UE identifier */
|
|
p_mac_lte_info = (mac_lte_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_mac_lte, 0);
|
|
if (p_mac_lte_info != NULL) {
|
|
/* If found, tell MAC to release DRX config */
|
|
set_mac_lte_drx_config_release(p_mac_lte_info->ueid, actx->pinfo);
|
|
}
|
|
|
|
#.FN_BODY RRCConnectionSetup
|
|
/* Look for UE identifier */
|
|
p_mac_lte_info = (mac_lte_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_mac_lte, 0);
|
|
if (p_mac_lte_info != NULL) {
|
|
/* If found, tell MAC to release DRX config coming from a previous RRC connection */
|
|
/* We do release the configuration here instead of RRC Connection Release message */
|
|
/* as the UE could have locally dropped the previous RRC Connection */
|
|
set_mac_lte_drx_config_release(p_mac_lte_info->ueid, actx->pinfo);
|
|
}
|
|
%(DEFAULT_BODY)s
|
|
|
|
|
|
#.FN_BODY SecurityAlgorithmConfig
|
|
pdcp_lte_info *p_pdcp_lte_info;
|
|
pdcp_security_info_t *p_security_algorithms;
|
|
%(DEFAULT_BODY)s
|
|
p_security_algorithms = private_data_pdcp_security_algorithms(actx);
|
|
p_security_algorithms->configuration_frame = actx->pinfo->fd->num;
|
|
/* Look for UE identifier */
|
|
p_pdcp_lte_info = (pdcp_lte_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_pdcp_lte, 0);
|
|
if (p_pdcp_lte_info != NULL) {
|
|
/* Configure algorithms */
|
|
set_pdcp_lte_security_algorithms(p_pdcp_lte_info->ueid, p_security_algorithms);
|
|
}
|
|
|
|
#.FN_BODY SecurityAlgorithmConfig/cipheringAlgorithm VAL_PTR=&value
|
|
guint32 value;
|
|
pdcp_security_info_t *p_security_algorithms;
|
|
%(DEFAULT_BODY)s
|
|
p_security_algorithms = private_data_pdcp_security_algorithms(actx);
|
|
p_security_algorithms->ciphering = (enum security_ciphering_algorithm_e)value;
|
|
|
|
#.FN_BODY SecurityAlgorithmConfig/integrityProtAlgorithm VAL_PTR=&value
|
|
guint32 value;
|
|
pdcp_security_info_t *p_security_algorithms;
|
|
%(DEFAULT_BODY)s
|
|
p_security_algorithms = private_data_pdcp_security_algorithms(actx);
|
|
p_security_algorithms->integrity = (enum security_integrity_algorithm_e)value;
|