aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rrc.c
diff options
context:
space:
mode:
authorVincent Helfre <vincent.helfre@gmx.net>2015-03-29 14:44:52 +0200
committerPascal Quantin <pascal.quantin@gmail.com>2015-03-29 15:36:44 +0000
commitf3d1e3c660c6dee6330ef7a99c11e074b38c18cb (patch)
treef761b64b1bb6b7af1b9e9dce36c34a5611bffce2 /epan/dissectors/packet-rrc.c
parentbeb76282fc0c2a055ace99eecb4dc616889c3a47 (diff)
RRC: add dissection of ims-Information IE
Bug: 11096 Change-Id: I348726dcd3b62f75db67e63c07bcdc79e86657a7 Reviewed-on: https://code.wireshark.org/review/7842 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-rrc.c')
-rw-r--r--epan/dissectors/packet-rrc.c118
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"