diff options
Diffstat (limited to 'epan/dissectors/packet-rrc.c')
-rw-r--r-- | epan/dissectors/packet-rrc.c | 118 |
1 files changed, 88 insertions, 30 deletions
diff --git a/epan/dissectors/packet-rrc.c b/epan/dissectors/packet-rrc.c index f416e3b365..bee2a029d1 100644 --- a/epan/dissectors/packet-rrc.c +++ b/epan/dissectors/packet-rrc.c @@ -3602,7 +3602,7 @@ static int hf_rrc_noRelease = -1; /* NULL */ static int hf_rrc_release = -1; /* T_release */ static int hf_rrc_RRC_MessageSequenceNumberList_item = -1; /* RRC_MessageSequenceNumber */ static int hf_rrc_nonce = -1; /* BIT_STRING_SIZE_128 */ -static int hf_rrc_ims_Information = -1; /* OCTET_STRING_SIZE_1_32 */ +static int hf_rrc_ims_Information = -1; /* T_ims_Information */ static int hf_rrc_cipheringAlgorithmCap = -1; /* T_cipheringAlgorithmCap */ static int hf_rrc_integrityProtectionAlgorithmCap = -1; /* T_integrityProtectionAlgorithmCap */ static int hf_rrc_primary_E_RNTI = -1; /* E_RNTI */ @@ -16100,6 +16100,7 @@ static gint ett_rrc_UL_RFC3095_Context = -1; static gint ett_rrc_eutraFeatureGroupIndicators = -1; static gint ett_rrc_cn_CommonGSM_MAP_NAS_SysInfo = -1; +static gint ett_rrc_ims_info = -1; static expert_field ei_rrc_no_hrnti = EI_INIT; @@ -16110,6 +16111,10 @@ static int hf_rrc_eutra_feat_group_ind_1 = -1; static int hf_rrc_eutra_feat_group_ind_2 = -1; static int hf_rrc_eutra_feat_group_ind_3 = -1; static int hf_rrc_eutra_feat_group_ind_4 = -1; +static int hf_rrc_ims_info_atgw_trans_det_cont_type = -1; +static int hf_rrc_ims_info_atgw_udp_port = -1; +static int hf_rrc_ims_info_atgw_ipv4 = -1; +static int hf_rrc_ims_info_atgw_ipv6 = -1; static const true_false_string rrc_eutra_feat_group_ind_1_val = { "UTRA CELL_PCH to EUTRA RRC_IDLE cell reselection - Supported", @@ -16127,6 +16132,12 @@ static const true_false_string rrc_eutra_feat_group_ind_4_val = { "UTRA CELL_FACH absolute priority cell reselection for all layers - Supported", "UTRA CELL_FACH absolute priority cell reselection for all layers - Not supported" }; +static const value_string rrc_ims_info_atgw_trans_det_cont_type[] = { + {0, "ATGW-IPv4-address-and-port"}, + {1, "ATGW-IPv6-address-and-port"}, + {2, "ATGW-not-available"}, + {0, NULL} +}; static int flowd,type; static int cipher_start_val[2] _U_; @@ -16415,7 +16426,7 @@ dissect_rrc_ActivationTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_rrc_RB_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 876 "../../asn1/rrc/rrc.cnf" +#line 905 "../../asn1/rrc/rrc.cnf" offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 32U, &rbid, FALSE); @@ -16432,7 +16443,7 @@ dissect_rrc_RB_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_rrc_RLC_SequenceNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 882 "../../asn1/rrc/rrc.cnf" +#line 911 "../../asn1/rrc/rrc.cnf" offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4095U, &activation_frame, FALSE); @@ -16452,7 +16463,7 @@ static const per_sequence_t RB_ActivationTimeInfo_sequence[] = { static int dissect_rrc_RB_ActivationTimeInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 854 "../../asn1/rrc/rrc.cnf" +#line 883 "../../asn1/rrc/rrc.cnf" fp_info *fpinf; rrc_ciphering_info * c_inf; @@ -16603,7 +16614,7 @@ dissect_rrc_PLMN_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_rrc_NAS_SystemInformationGSM_MAP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 677 "../../asn1/rrc/rrc.cnf" +#line 706 "../../asn1/rrc/rrc.cnf" tvbuff_t *nas_sys_info_gsm_map_tvb = NULL; guint32 length; proto_tree *subtree; @@ -16647,7 +16658,7 @@ dissect_rrc_NAS_SystemInformationGSM_MAP(tvbuff_t *tvb _U_, int offset _U_, asn1 static int dissect_rrc_T_cn_CommonGSM_MAP_NAS_SysInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 661 "../../asn1/rrc/rrc.cnf" +#line 690 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_CN_COMMON+1); offset = dissect_rrc_NAS_SystemInformationGSM_MAP(tvb, offset, actx, tree, hf_index); @@ -16667,7 +16678,7 @@ static const value_string rrc_CN_DomainIdentity_vals[] = { static int dissect_rrc_CN_DomainIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 656 "../../asn1/rrc/rrc.cnf" +#line 685 "../../asn1/rrc/rrc.cnf" guint32 nas_sys_info_gsm_map; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 2, &nas_sys_info_gsm_map, FALSE, 0, NULL); @@ -20534,7 +20545,7 @@ dissect_rrc_T_r3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_ static int dissect_rrc_H_RNTI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 784 "../../asn1/rrc/rrc.cnf" +#line 813 "../../asn1/rrc/rrc.cnf" tvbuff_t *hrnti_tvb; struct rrc_info *rrcinf; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, @@ -20543,7 +20554,7 @@ dissect_rrc_H_RNTI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, prot -#line 789 "../../asn1/rrc/rrc.cnf" +#line 818 "../../asn1/rrc/rrc.cnf" rrcinf = (struct rrc_info *)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_rrc, 0); if (!rrcinf) { rrcinf = wmem_new0(wmem_file_scope(), struct rrc_info); @@ -20569,7 +20580,7 @@ dissect_rrc_E_RNTI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, prot static int dissect_rrc_T_cn_CommonGSM_MAP_NAS_SysInfo_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 665 "../../asn1/rrc/rrc.cnf" +#line 694 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_CN_COMMON+1); offset = dissect_rrc_NAS_SystemInformationGSM_MAP(tvb, offset, actx, tree, hf_index); @@ -41367,7 +41378,7 @@ dissect_rrc_RLC_Info_r5(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_rrc_MAC_d_FlowIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 781 "../../asn1/rrc/rrc.cnf" +#line 810 "../../asn1/rrc/rrc.cnf" offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 7U, &flowd, FALSE); @@ -41415,7 +41426,7 @@ static const per_choice_t DL_TransportChannelType_r5_choice[] = { static int dissect_rrc_DL_TransportChannelType_r5(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 710 "../../asn1/rrc/rrc.cnf" +#line 739 "../../asn1/rrc/rrc.cnf" gint *flowd_p; gint *cur_val=NULL; @@ -44889,7 +44900,7 @@ static const per_choice_t DL_TransportChannelType_r7_choice[] = { static int dissect_rrc_DL_TransportChannelType_r7(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 745 "../../asn1/rrc/rrc.cnf" +#line 774 "../../asn1/rrc/rrc.cnf" gint *flowd_p; gint *cur_val=NULL; @@ -84214,7 +84225,7 @@ dissect_rrc_UE_ConnTimersAndConstants(tvbuff_t *tvb _U_, int offset _U_, asn1_ct static int dissect_rrc_T_cn_CommonGSM_MAP_NAS_SysInfo_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 669 "../../asn1/rrc/rrc.cnf" +#line 698 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_CN_COMMON+1); offset = dissect_rrc_NAS_SystemInformationGSM_MAP(tvb, offset, actx, tree, hf_index); @@ -86332,9 +86343,39 @@ dissect_rrc_T_r8_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pro static int -dissect_rrc_OCTET_STRING_SIZE_1_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_rrc_T_ims_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 647 "../../asn1/rrc/rrc.cnf" + tvbuff_t *imsInformation_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 1, 32, FALSE, NULL); + 1, 32, FALSE, &imsInformation_tvb); + + if(imsInformation_tvb){ + /* Dissect ims-Information + Decoding specified in TS 124 237 V11.4.0 Annex D.5.3.3 ATGW transfer details + */ + proto_tree *subtree; + gint curr_offset = 0; + guint32 atgw_trans_det_cont; + subtree = proto_item_add_subtree(actx->created_item, ett_rrc_ims_info); + proto_tree_add_item_ret_uint(subtree, hf_rrc_ims_info_atgw_trans_det_cont_type, imsInformation_tvb, curr_offset, 1, ENC_BIG_ENDIAN, &atgw_trans_det_cont); + curr_offset++; + switch (atgw_trans_det_cont) { + case 0: + proto_tree_add_item(subtree, hf_rrc_ims_info_atgw_udp_port, imsInformation_tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + proto_tree_add_item(subtree, hf_rrc_ims_info_atgw_ipv4, imsInformation_tvb, curr_offset, 4, ENC_BIG_ENDIAN); + break; + case 1: + proto_tree_add_item(subtree, hf_rrc_ims_info_atgw_udp_port, imsInformation_tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + proto_tree_add_item(subtree, hf_rrc_ims_info_atgw_ipv6, imsInformation_tvb, curr_offset, 16, ENC_NA); + break; + default: + break; + } +} + + return offset; } @@ -86342,7 +86383,7 @@ dissect_rrc_OCTET_STRING_SIZE_1_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static const per_sequence_t RSR_VCC_Info_sequence[] = { { &hf_rrc_nonce , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_rrc_BIT_STRING_SIZE_128 }, - { &hf_rrc_ims_Information , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_OCTET_STRING_SIZE_1_32 }, + { &hf_rrc_ims_Information , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_T_ims_Information }, { NULL, 0, 0, NULL } }; @@ -87503,7 +87544,7 @@ static const per_choice_t DL_DCCH_MessageType_choice[] = { static int dissect_rrc_DL_DCCH_MessageType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 886 "../../asn1/rrc/rrc.cnf" +#line 915 "../../asn1/rrc/rrc.cnf" offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_rrc_DL_DCCH_MessageType, DL_DCCH_MessageType_choice, &msg_type); @@ -87523,7 +87564,7 @@ static const per_sequence_t DL_DCCH_Message_sequence[] = { static int dissect_rrc_DL_DCCH_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 889 "../../asn1/rrc/rrc.cnf" +#line 918 "../../asn1/rrc/rrc.cnf" offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_rrc_DL_DCCH_Message, DL_DCCH_Message_sequence); @@ -87537,7 +87578,7 @@ dissect_rrc_DL_DCCH_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_rrc_START_Value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 797 "../../asn1/rrc/rrc.cnf" +#line 826 "../../asn1/rrc/rrc.cnf" tvbuff_t * start_val; fp_info *fpinf; rrc_ciphering_info * c_inf; @@ -114232,7 +114273,7 @@ static const per_choice_t HandoverToUTRANCommand_choice[] = { static int dissect_rrc_HandoverToUTRANCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 892 "../../asn1/rrc/rrc.cnf" +#line 921 "../../asn1/rrc/rrc.cnf" offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_rrc_HandoverToUTRANCommand, HandoverToUTRANCommand_choice, NULL); @@ -114373,7 +114414,7 @@ static const per_sequence_t UE_SecurityInformation_sequence[] = { static int dissect_rrc_UE_SecurityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 895 "../../asn1/rrc/rrc.cnf" +#line 924 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_CS+1); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_rrc_UE_SecurityInformation, UE_SecurityInformation_sequence); @@ -114776,7 +114817,7 @@ static const per_sequence_t UE_SecurityInformation2_sequence[] = { static int dissect_rrc_UE_SecurityInformation2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 899 "../../asn1/rrc/rrc.cnf" +#line 928 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_PS+1); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_rrc_UE_SecurityInformation2, UE_SecurityInformation2_sequence); @@ -133272,7 +133313,7 @@ dissect_rrc_ExtSIBTypeInfoSchedulingInfo_List2(tvbuff_t *tvb _U_, int offset _U_ static int dissect_rrc_HNBName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 650 "../../asn1/rrc/rrc.cnf" +#line 679 "../../asn1/rrc/rrc.cnf" tvbuff_t *hnbname_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, @@ -133550,7 +133591,7 @@ dissect_rrc_SIB_ReferenceList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_rrc_T_cn_CommonGSM_MAP_NAS_SysInfo_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 673 "../../asn1/rrc/rrc.cnf" +#line 702 "../../asn1/rrc/rrc.cnf" actx->private_data = GUINT_TO_POINTER(RRC_NAS_SYS_INFO_CN_COMMON+1); offset = dissect_rrc_NAS_SystemInformationGSM_MAP(tvb, offset, actx, tree, hf_index); @@ -143764,7 +143805,7 @@ static int dissect_MeasurementReport_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _ /*--- End of included file: packet-rrc-fn.c ---*/ -#line 182 "../../asn1/rrc/packet-rrc-template.c" +#line 193 "../../asn1/rrc/packet-rrc-template.c" @@ -157121,7 +157162,7 @@ void proto_register_rrc(void) { { &hf_rrc_ims_Information, { "ims-Information", "rrc.ims_Information", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_1_32", HFILL }}, + NULL, HFILL }}, { &hf_rrc_cipheringAlgorithmCap, { "cipheringAlgorithmCap", "rrc.cipheringAlgorithmCap", FT_BYTES, BASE_NONE, NULL, 0, @@ -182488,7 +182529,7 @@ void proto_register_rrc(void) { NULL, HFILL }}, /*--- End of included file: packet-rrc-hfarr.c ---*/ -#line 261 "../../asn1/rrc/packet-rrc-template.c" +#line 272 "../../asn1/rrc/packet-rrc-template.c" { &hf_test, { "RAB Test", "rrc.RAB.test", FT_UINT8, BASE_DEC, NULL, 0, @@ -182509,6 +182550,22 @@ void proto_register_rrc(void) { { "Indicator 4", "rrc.eutra_feat_group_ind_4", FT_BOOLEAN, BASE_NONE, TFS(&rrc_eutra_feat_group_ind_4_val), 0, "EUTRA Feature Group Indicator 4", HFILL }}, + { &hf_rrc_ims_info_atgw_trans_det_cont_type, + { "ATGW transfer details content type", "rrc.rsrvcc_info.ims_info_atgw_trans_det_cont", + FT_UINT8, BASE_DEC, VALS(rrc_ims_info_atgw_trans_det_cont_type), 0x3, + "rSR-VCC IMS information ATGW transfer details content type", HFILL }}, + {&hf_rrc_ims_info_atgw_udp_port, + {"ATGW UDP port","rrc.rsrvcc_info.ims_info_atgw_udp_port", + FT_UINT16,BASE_DEC, NULL, 0x0, + "rSR-VCC IMS information ATGW UDP port", HFILL }}, + { &hf_rrc_ims_info_atgw_ipv4, + {"ATGW IPv4", "rrc.rsrvcc_info.ims_info_atgw_ipv4", + FT_IPv4, BASE_NONE, NULL, 0x0, + "rSR-VCC IMS information ATGW IPv4", HFILL}}, + { &hf_rrc_ims_info_atgw_ipv6, + {"ATGW IPv6", "rrc.rsrvcc_info.ims_info_atgw_ipv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "rSR-VCC IMS information ATGW IPv6", HFILL}}, }; /* List of subtrees */ @@ -188658,9 +188715,10 @@ void proto_register_rrc(void) { &ett_rrc_UL_RFC3095_Context, /*--- End of included file: packet-rrc-ettarr.c ---*/ -#line 287 "../../asn1/rrc/packet-rrc-template.c" +#line 314 "../../asn1/rrc/packet-rrc-template.c" &ett_rrc_eutraFeatureGroupIndicators, &ett_rrc_cn_CommonGSM_MAP_NAS_SysInfo, + &ett_rrc_ims_info, }; static ei_register_info ei[] = { @@ -188747,7 +188805,7 @@ void proto_register_rrc(void) { /*--- End of included file: packet-rrc-dis-reg.c ---*/ -#line 308 "../../asn1/rrc/packet-rrc-template.c" +#line 336 "../../asn1/rrc/packet-rrc-template.c" |