aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rrc.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2008-11-05 22:34:22 +0000
committerAnders Broman <anders.broman@ericsson.com>2008-11-05 22:34:22 +0000
commit72738bc081c5050e3e8b8aac94c60fbea9de39a4 (patch)
treed6c384d5c6828d5bc3648e1c0c6df74d4f01fd88 /epan/dissectors/packet-rrc.c
parent7baa58887db3e41b5e1f57bfa3d08c3810e320d4 (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.c92
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");
}