diff options
Diffstat (limited to 'asn1/lte-rrc/lte-rrc.cnf')
-rw-r--r-- | asn1/lte-rrc/lte-rrc.cnf | 153 |
1 files changed, 83 insertions, 70 deletions
diff --git a/asn1/lte-rrc/lte-rrc.cnf b/asn1/lte-rrc/lte-rrc.cnf index 3544e2e414..f0efd6cc94 100644 --- a/asn1/lte-rrc/lte-rrc.cnf +++ b/asn1/lte-rrc/lte-rrc.cnf @@ -74,11 +74,12 @@ SI-OrPSI-GERAN TYPE_PREFIX #.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)) - call_dissector(nas_eps_handle,nas_eps_tvb,actx->pinfo, tree); + 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 lte_rrc_rat_type_value = -1; @@ -112,62 +113,63 @@ SI-OrPSI-GERAN TYPE_PREFIX # 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_eutra_cap_tvb - tvbuff_t *ue_eutra_cap_tvb=NULL; +#.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_eutra_cap_tvb){ - guint32 length; - proto_item *item; - proto_tree *subtree; - guint8 byte; - switch(lte_rrc_rat_type_value){ - case RAT_Type_eutra: - /* eutra */ - dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_eutra_cap_tvb, actx->pinfo, tree, NULL); - break; - case RAT_Type_utra: - /* utra */ - dissect_rrc_InterRATHandoverInfo_PDU(ue_eutra_cap_tvb, actx->pinfo, tree, 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(tree, ue_eutra_cap_tvb, 0, 5, "Mobile Station Classmark 2"); - subtree = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container); - byte = tvb_get_guint8(ue_eutra_cap_tvb, 0); - if (byte != 0x33) { - expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR, - "Unexpected type value (found 0x%02X)", byte); - } - byte = tvb_get_guint8(ue_eutra_cap_tvb, 1); - if (byte != 0x03) { - expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR, - "Unexpected length value (found %d)", byte); - } - de_ms_cm_2(ue_eutra_cap_tvb, subtree, actx->pinfo, 2, 3, NULL, 0); - /* Mobile Station Classmark 3 is formatted as V */ - length = tvb_length(ue_eutra_cap_tvb)-5; - item = proto_tree_add_text(tree, ue_eutra_cap_tvb, 5, length, "Mobile Station Classmark 3"); - subtree = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container); - de_ms_cm_3(ue_eutra_cap_tvb, subtree, 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_eutra_cap_tvb); - item = proto_tree_add_text(tree, ue_eutra_cap_tvb, 0, length, "MS Radio Access Capability"); - subtree = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container); - de_gmm_ms_radio_acc_cap(ue_eutra_cap_tvb, subtree, 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; - } +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(lte_rrc_rat_type_value){ + 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, PI_MALFORMED, PI_ERROR, + "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, PI_MALFORMED, PI_ERROR, + "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 @@ -626,22 +628,24 @@ if(ue_eutra_cap_tvb){ %(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(lte_rrc_ho_target_rat_type_value){ 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, tree); + 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, tree); + 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, tree); + call_dissector(gsm_rlcmac_dl_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree); } } break; @@ -665,7 +669,6 @@ if(ue_eutra_cap_tvb){ 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); - proto_tree_add_text(subtree, nas_sec_param_from_eutra_tvb, 0, length, "NAS security parameters from E-UTRA"); de_emm_sec_par_from_eutra(nas_sec_param_from_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0); } @@ -678,7 +681,6 @@ if(ue_eutra_cap_tvb){ 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); - proto_tree_add_text(subtree, nas_sec_param_to_eutra_tvb, 0, length, "NAS security parameters to E-UTRA"); de_emm_sec_par_to_eutra(nas_sec_param_to_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0); } @@ -691,19 +693,21 @@ if(ue_eutra_cap_tvb){ #.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 (lte_rrc_si_or_psi_geran_val) { case SI_OrPSI_GERAN_si: /* SI message */ if (gsm_a_dtap_handle) { - call_dissector(gsm_a_dtap_handle, sys_info_list_tvb ,actx->pinfo, tree); + 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, tree); + call_dissector(gsm_rlcmac_dl_handle, sys_info_list_tvb, actx->pinfo, subtree); } break; default: @@ -713,21 +717,30 @@ if(ue_eutra_cap_tvb){ #.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) - call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, tree); + 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) - call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, tree); + 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) - call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, tree); + 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 NeighCellConfig VAL_PTR = &neigh_cell_config_tvb tvbuff_t *neigh_cell_config_tvb = NULL; |