diff options
author | Anders Broman <anders.broman@ericsson.com> | 2008-11-05 22:34:22 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2008-11-05 22:34:22 +0000 |
commit | 72738bc081c5050e3e8b8aac94c60fbea9de39a4 (patch) | |
tree | d6c384d5c6828d5bc3648e1c0c6df74d4f01fd88 /epan/dissectors/packet-rrc.c | |
parent | 7baa58887db3e41b5e1f57bfa3d08c3810e320d4 (diff) |
From Pascal Quantin:
3GPP 25.331: Dissect UE Radio Access Capability Info message embedded in InterRAT Handover Info message.
svn path=/trunk/; revision=26705
Diffstat (limited to 'epan/dissectors/packet-rrc.c')
-rw-r--r-- | epan/dissectors/packet-rrc.c | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/epan/dissectors/packet-rrc.c b/epan/dissectors/packet-rrc.c index 241c4c0488..46f50b6ed2 100644 --- a/epan/dissectors/packet-rrc.c +++ b/epan/dissectors/packet-rrc.c @@ -62,6 +62,7 @@ #define PFNAME "rrc" static dissector_handle_t gsm_a_dtap_handle; +static dissector_handle_t rrc_ue_radio_access_cap_info_handle=NULL; /* Include constants */ @@ -189,7 +190,7 @@ static dissector_handle_t gsm_a_dtap_handle; #define maxURNTI_Group 8 /*--- End of included file: packet-rrc-val.h ---*/ -#line 60 "packet-rrc-template.c" +#line 61 "packet-rrc-template.c" /* Initialize the protocol and registered fields */ static int proto_rrc = -1; @@ -210,6 +211,7 @@ static int hf_rrc_MCCH_Message_PDU = -1; /* MCCH_Message */ static int hf_rrc_MSCH_Message_PDU = -1; /* MSCH_Message */ static int hf_rrc_HandoverToUTRANCommand_PDU = -1; /* HandoverToUTRANCommand */ static int hf_rrc_InterRATHandoverInfo_PDU = -1; /* InterRATHandoverInfo */ +static int hf_rrc_UE_RadioAccessCapabilityInfo_PDU = -1; /* UE_RadioAccessCapabilityInfo */ static int hf_rrc_MasterInformationBlock_PDU = -1; /* MasterInformationBlock */ static int hf_rrc_SysInfoType1_PDU = -1; /* SysInfoType1 */ static int hf_rrc_SysInfoType2_PDU = -1; /* SysInfoType2 */ @@ -915,9 +917,9 @@ static int hf_rrc_present = -1; /* PredefinedConfigStatusList static int hf_rrc_uE_SecurityInformation = -1; /* T_uE_SecurityInformation */ static int hf_rrc_present_01 = -1; /* UE_SecurityInformation */ static int hf_rrc_ue_CapabilityContainer = -1; /* T_ue_CapabilityContainer */ -static int hf_rrc_present_02 = -1; /* OCTET_STRING_SIZE_0_63 */ +static int hf_rrc_present_02 = -1; /* T_present */ static int hf_rrc_v390NonCriticalExtensions = -1; /* T_v390NonCriticalExtensions */ -static int hf_rrc_present_03 = -1; /* T_present */ +static int hf_rrc_present_03 = -1; /* T_present_01 */ static int hf_rrc_interRATHandoverInfo_v390ext = -1; /* InterRATHandoverInfo_v390ext_IEs */ static int hf_rrc_v3a0NonCriticalExtensions_03 = -1; /* T_v3a0NonCriticalExtensions_03 */ static int hf_rrc_interRATHandoverInfo_v3a0ext = -1; /* InterRATHandoverInfo_v3a0ext_IEs */ @@ -4422,13 +4424,13 @@ static int hf_rrc_ul_DPCH_PowerControlInfo_04 = -1; /* UL_DPCH_PowerControlInfo static int hf_rrc_modeSpecificInfo_65 = -1; /* T_modeSpecificInfo_65 */ static int hf_rrc_fdd_100 = -1; /* T_fdd_97 */ static int hf_rrc_dpdchPresence = -1; /* T_dpdchPresence */ -static int hf_rrc_present_04 = -1; /* T_present_01 */ +static int hf_rrc_present_04 = -1; /* T_present_02 */ static int hf_rrc_notPresent = -1; /* T_notPresent */ static int hf_rrc_tdd_55 = -1; /* T_tdd_49 */ static int hf_rrc_modeSpecificInfo_66 = -1; /* T_modeSpecificInfo_66 */ static int hf_rrc_fdd_101 = -1; /* T_fdd_98 */ static int hf_rrc_dpdchPresence_01 = -1; /* T_dpdchPresence_01 */ -static int hf_rrc_present_05 = -1; /* T_present_02 */ +static int hf_rrc_present_05 = -1; /* T_present_03 */ static int hf_rrc_numberOfTPC_Bits = -1; /* NumberOfTPC_Bits */ static int hf_rrc_notPresent_01 = -1; /* T_notPresent_01 */ static int hf_rrc_tdd_56 = -1; /* T_tdd_50 */ @@ -6997,7 +6999,7 @@ static int hf_rrc_GsmSecurityCapability_a5_2 = -1; static int hf_rrc_GsmSecurityCapability_a5_1 = -1; /*--- End of included file: packet-rrc-hf.c ---*/ -#line 65 "packet-rrc-template.c" +#line 66 "packet-rrc-template.c" /* Initialize the subtree pointers */ static int ett_rrc = -1; @@ -7370,7 +7372,7 @@ static gint ett_rrc_T_predefinedConfigStatusList = -1; static gint ett_rrc_T_uE_SecurityInformation = -1; static gint ett_rrc_T_ue_CapabilityContainer = -1; static gint ett_rrc_T_v390NonCriticalExtensions = -1; -static gint ett_rrc_T_present = -1; +static gint ett_rrc_T_present_01 = -1; static gint ett_rrc_T_v3a0NonCriticalExtensions_03 = -1; static gint ett_rrc_T_laterNonCriticalExtensions_17 = -1; static gint ett_rrc_T_v3g0NonCriticalExtensions = -1; @@ -9790,14 +9792,14 @@ static gint ett_rrc_UL_DPCH_Info_r6 = -1; static gint ett_rrc_T_modeSpecificInfo_65 = -1; static gint ett_rrc_T_fdd_97 = -1; static gint ett_rrc_T_dpdchPresence = -1; -static gint ett_rrc_T_present_01 = -1; +static gint ett_rrc_T_present_02 = -1; static gint ett_rrc_T_notPresent = -1; static gint ett_rrc_T_tdd_49 = -1; static gint ett_rrc_UL_DPCH_Info_r7 = -1; static gint ett_rrc_T_modeSpecificInfo_66 = -1; static gint ett_rrc_T_fdd_98 = -1; static gint ett_rrc_T_dpdchPresence_01 = -1; -static gint ett_rrc_T_present_02 = -1; +static gint ett_rrc_T_present_03 = -1; static gint ett_rrc_T_notPresent_01 = -1; static gint ett_rrc_T_tdd_50 = -1; static gint ett_rrc_UL_DPCH_InfoPostFDD = -1; @@ -11256,7 +11258,7 @@ static gint ett_rrc_UE_RadioAccessCapability_r6 = -1; static gint ett_rrc_UL_RFC3095_Context = -1; /*--- End of included file: packet-rrc-ett.c ---*/ -#line 70 "packet-rrc-template.c" +#line 71 "packet-rrc-template.c" /* Global variables */ static proto_tree *top_tree; @@ -31398,7 +31400,7 @@ dissect_rrc_UL_DPCH_PowerControlInfo_r6(tvbuff_t *tvb _U_, int offset _U_, asn1_ } -static const per_sequence_t T_present_01_sequence[] = { +static const per_sequence_t T_present_02_sequence[] = { { &hf_rrc_numberOfDPDCH , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_rrc_NumberOfDPDCH }, { &hf_rrc_spreadingFactor_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_SpreadingFactor }, { &hf_rrc_tfci_Existence , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_BOOLEAN }, @@ -31408,9 +31410,9 @@ static const per_sequence_t T_present_01_sequence[] = { }; static int -dissect_rrc_T_present_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_rrc_T_present_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, - ett_rrc_T_present_01, T_present_01_sequence); + ett_rrc_T_present_02, T_present_02_sequence); return offset; } @@ -31438,7 +31440,7 @@ static const value_string rrc_T_dpdchPresence_vals[] = { }; static const per_choice_t T_dpdchPresence_choice[] = { - { 0, &hf_rrc_present_04 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present_01 }, + { 0, &hf_rrc_present_04 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present_02 }, { 1, &hf_rrc_notPresent , ASN1_NO_EXTENSIONS , dissect_rrc_T_notPresent }, { 0, NULL, 0, NULL } }; @@ -34226,7 +34228,7 @@ dissect_rrc_NumberOfTPC_Bits(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx } -static const per_sequence_t T_present_02_sequence[] = { +static const per_sequence_t T_present_03_sequence[] = { { &hf_rrc_numberOfDPDCH , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_rrc_NumberOfDPDCH }, { &hf_rrc_spreadingFactor_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_SpreadingFactor }, { &hf_rrc_tfci_Existence , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_BOOLEAN }, @@ -34237,9 +34239,9 @@ static const per_sequence_t T_present_02_sequence[] = { }; static int -dissect_rrc_T_present_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_rrc_T_present_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, - ett_rrc_T_present_02, T_present_02_sequence); + ett_rrc_T_present_03, T_present_03_sequence); return offset; } @@ -34268,7 +34270,7 @@ static const value_string rrc_T_dpdchPresence_01_vals[] = { }; static const per_choice_t T_dpdchPresence_01_choice[] = { - { 0, &hf_rrc_present_05 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present_02 }, + { 0, &hf_rrc_present_05 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present_03 }, { 1, &hf_rrc_notPresent_01 , ASN1_NO_EXTENSIONS , dissect_rrc_T_notPresent_01 }, { 0, NULL, 0, NULL } }; @@ -39731,7 +39733,7 @@ dissect_rrc_CounterCheck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_rrc_NAS_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 73 "rrc.cnf" +#line 74 "rrc.cnf" tvbuff_t *nas_message_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -80083,9 +80085,18 @@ dissect_rrc_T_uE_SecurityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx static int -dissect_rrc_OCTET_STRING_SIZE_0_63(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_rrc_T_present(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 82 "rrc.cnf" + tvbuff_t *ue_radio_access_cap_info_tvb=NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 0, 63, FALSE, NULL); + 0, 63, FALSE, &ue_radio_access_cap_info_tvb); + + + if (ue_radio_access_cap_info_tvb) + call_dissector(rrc_ue_radio_access_cap_info_handle,ue_radio_access_cap_info_tvb,actx->pinfo, proto_tree_get_root(tree)); + + return offset; } @@ -80099,7 +80110,7 @@ static const value_string rrc_T_ue_CapabilityContainer_vals[] = { static const per_choice_t T_ue_CapabilityContainer_choice[] = { { 0, &hf_rrc_absent , ASN1_NO_EXTENSIONS , dissect_rrc_NULL }, - { 1, &hf_rrc_present_02 , ASN1_NO_EXTENSIONS , dissect_rrc_OCTET_STRING_SIZE_0_63 }, + { 1, &hf_rrc_present_02 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present }, { 0, NULL, 0, NULL } }; @@ -81332,16 +81343,16 @@ dissect_rrc_T_v3a0NonCriticalExtensions_03(tvbuff_t *tvb _U_, int offset _U_, as } -static const per_sequence_t T_present_sequence[] = { +static const per_sequence_t T_present_01_sequence[] = { { &hf_rrc_interRATHandoverInfo_v390ext, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rrc_InterRATHandoverInfo_v390ext_IEs }, { &hf_rrc_v3a0NonCriticalExtensions_03, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_rrc_T_v3a0NonCriticalExtensions_03 }, { NULL, 0, 0, NULL } }; static int -dissect_rrc_T_present(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_rrc_T_present_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, - ett_rrc_T_present, T_present_sequence); + ett_rrc_T_present_01, T_present_01_sequence); return offset; } @@ -81355,7 +81366,7 @@ static const value_string rrc_T_v390NonCriticalExtensions_vals[] = { static const per_choice_t T_v390NonCriticalExtensions_choice[] = { { 0, &hf_rrc_absent , ASN1_NO_EXTENSIONS , dissect_rrc_NULL }, - { 1, &hf_rrc_present_03 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present }, + { 1, &hf_rrc_present_03 , ASN1_NO_EXTENSIONS , dissect_rrc_T_present_01 }, { 0, NULL, 0, NULL } }; @@ -98440,6 +98451,11 @@ static void dissect_InterRATHandoverInfo_PDU(tvbuff_t *tvb _U_, packet_info *pin asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo); dissect_rrc_InterRATHandoverInfo(tvb, 0, &asn1_ctx, tree, hf_rrc_InterRATHandoverInfo_PDU); } +static void dissect_UE_RadioAccessCapabilityInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo); + dissect_rrc_UE_RadioAccessCapabilityInfo(tvb, 0, &asn1_ctx, tree, hf_rrc_UE_RadioAccessCapabilityInfo_PDU); +} static void dissect_MasterInformationBlock_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { asn1_ctx_t asn1_ctx; asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo); @@ -98686,7 +98702,7 @@ static int dissect_MeasurementReport_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _ /*--- End of included file: packet-rrc-fn.c ---*/ -#line 75 "packet-rrc-template.c" +#line 76 "packet-rrc-template.c" /* TODO: Remove the dummy function when these functions are taken into use @@ -98702,7 +98718,6 @@ dissect_rrc_dymmy_remove_unused_code_warnings(tvbuff_t *tvb _U_, int offset _U_, /* Dummy code to keep GCC happy */ switch(hf_index){ case 0: - dissect_rrc_UE_RadioAccessCapabilityInfo( tvb, offset, actx , tree, hf_index); dissect_rrc_UL_PhysChCapabilityFDD_r6( tvb, offset, actx , tree, hf_index); dissect_rrc_UE_Positioning_GANSS_Data( tvb, offset, actx , tree, hf_index); dissect_rrc_ToTargetRNC_Container( tvb, offset, actx , tree, hf_index); @@ -98794,6 +98809,10 @@ void proto_register_rrc(void) { { "InterRATHandoverInfo", "rrc.InterRATHandoverInfo", FT_NONE, BASE_NONE, NULL, 0, "rrc.InterRATHandoverInfo", HFILL }}, + { &hf_rrc_UE_RadioAccessCapabilityInfo_PDU, + { "UE-RadioAccessCapabilityInfo", "rrc.UE_RadioAccessCapabilityInfo", + FT_NONE, BASE_NONE, NULL, 0, + "rrc.UE_RadioAccessCapabilityInfo", HFILL }}, { &hf_rrc_MasterInformationBlock_PDU, { "MasterInformationBlock", "rrc.MasterInformationBlock", FT_NONE, BASE_NONE, NULL, 0, @@ -101617,7 +101636,7 @@ void proto_register_rrc(void) { { &hf_rrc_present_02, { "present", "rrc.present", FT_BYTES, BASE_HEX, NULL, 0, - "rrc.OCTET_STRING_SIZE_0_63", HFILL }}, + "rrc.T_present", HFILL }}, { &hf_rrc_v390NonCriticalExtensions, { "v390NonCriticalExtensions", "rrc.v390NonCriticalExtensions", FT_UINT32, BASE_DEC, VALS(rrc_T_v390NonCriticalExtensions_vals), 0, @@ -101625,7 +101644,7 @@ void proto_register_rrc(void) { { &hf_rrc_present_03, { "present", "rrc.present", FT_NONE, BASE_NONE, NULL, 0, - "rrc.T_present", HFILL }}, + "rrc.T_present_01", HFILL }}, { &hf_rrc_interRATHandoverInfo_v390ext, { "interRATHandoverInfo-v390ext", "rrc.interRATHandoverInfo_v390ext", FT_NONE, BASE_NONE, NULL, 0, @@ -115645,7 +115664,7 @@ void proto_register_rrc(void) { { &hf_rrc_present_04, { "present", "rrc.present", FT_NONE, BASE_NONE, NULL, 0, - "rrc.T_present_01", HFILL }}, + "rrc.T_present_02", HFILL }}, { &hf_rrc_notPresent, { "notPresent", "rrc.notPresent", FT_NONE, BASE_NONE, NULL, 0, @@ -115669,7 +115688,7 @@ void proto_register_rrc(void) { { &hf_rrc_present_05, { "present", "rrc.present", FT_NONE, BASE_NONE, NULL, 0, - "rrc.T_present_02", HFILL }}, + "rrc.T_present_03", HFILL }}, { &hf_rrc_numberOfTPC_Bits, { "numberOfTPC-Bits", "rrc.numberOfTPC_Bits", FT_UINT32, BASE_DEC, VALS(rrc_NumberOfTPC_Bits_vals), 0, @@ -126306,7 +126325,7 @@ void proto_register_rrc(void) { &ett_rrc_T_uE_SecurityInformation, &ett_rrc_T_ue_CapabilityContainer, &ett_rrc_T_v390NonCriticalExtensions, - &ett_rrc_T_present, + &ett_rrc_T_present_01, &ett_rrc_T_v3a0NonCriticalExtensions_03, &ett_rrc_T_laterNonCriticalExtensions_17, &ett_rrc_T_v3g0NonCriticalExtensions, @@ -128726,14 +128745,14 @@ void proto_register_rrc(void) { &ett_rrc_T_modeSpecificInfo_65, &ett_rrc_T_fdd_97, &ett_rrc_T_dpdchPresence, - &ett_rrc_T_present_01, + &ett_rrc_T_present_02, &ett_rrc_T_notPresent, &ett_rrc_T_tdd_49, &ett_rrc_UL_DPCH_Info_r7, &ett_rrc_T_modeSpecificInfo_66, &ett_rrc_T_fdd_98, &ett_rrc_T_dpdchPresence_01, - &ett_rrc_T_present_02, + &ett_rrc_T_present_03, &ett_rrc_T_notPresent_01, &ett_rrc_T_tdd_50, &ett_rrc_UL_DPCH_InfoPostFDD, @@ -130220,6 +130239,7 @@ void proto_register_rrc(void) { register_dissector("rrc.msch", dissect_MSCH_Message_PDU, proto_rrc); register_dissector("rrc.irat.ho_to_utran_cmd", dissect_HandoverToUTRANCommand_PDU, proto_rrc); register_dissector("rrc.irat.irat_ho_info", dissect_InterRATHandoverInfo_PDU, proto_rrc); + register_dissector("rrc.ue_radio_access_cap_info", dissect_UE_RadioAccessCapabilityInfo_PDU, proto_rrc); register_dissector("rrc.si.mib", dissect_MasterInformationBlock_PDU, proto_rrc); register_dissector("rrc.si.sib1", dissect_SysInfoType1_PDU, proto_rrc); register_dissector("rrc.si.sib2", dissect_SysInfoType2_PDU, proto_rrc); @@ -130273,7 +130293,7 @@ proto_reg_handoff_rrc(void) { gsm_a_dtap_handle = find_dissector("gsm_a_dtap"); - + rrc_ue_radio_access_cap_info_handle = find_dissector("rrc.ue_radio_access_cap_info"); } |