1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -q -L -p m3ap -c ./m3ap.cnf -s ./packet-m3ap-template -D . -O ../.. M3AP-CommonDataTypes.asn M3AP-Constants.asn M3AP-Containers.asn M3AP-IEs.asn M3AP-PDU-Contents.asn M3AP-PDU-Descriptions.asn */
7 * Routines for M3 Application Protocol packet dissection
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * SPDX-License-Identifier: GPL-2.0-or-later
15 * Reference: 3GPP TS 36.444 v16.0.0
20 #include <epan/packet.h>
22 #include <epan/strutil.h>
23 #include <epan/asn1.h>
24 #include <epan/sctpppids.h>
25 #include <epan/expert.h>
26 #include <epan/proto_data.h>
27 #include <epan/unit_strings.h>
28 #include <wsutil/array.h>
30 #include "packet-ber.h"
31 #include "packet-per.h"
32 #include "packet-e212.h"
33 #include "packet-gtpv2.h"
35 #define PNAME "M3 Application Protocol"
39 void proto_register_m3ap(void);
40 void proto_reg_handoff_m3ap(void);
42 /* M3AP uses port 36444 as recommended by IANA. */
43 #define M3AP_PORT 36444
44 static dissector_handle_t m3ap_handle
;
46 #define maxPrivateIEs 65535
47 #define maxProtocolExtensions 65535
48 #define maxProtocolIEs 65535
49 #define maxnoofMBMSServiceAreaIdentitiesPerMCE 65536
50 #define maxnooferrors 256
51 #define maxNrOfIndividualM3ConnectionsToReset 256
52 #define maxnoofCellsforMBMS 4096
54 typedef enum _ProcedureCode_enum
{
55 id_mBMSsessionStart
= 0,
56 id_mBMSsessionStop
= 1,
57 id_errorIndication
= 2,
58 id_privateMessage
= 3,
60 id_mBMSsessionUpdate
= 5,
61 id_mCEConfigurationUpdate
= 6,
65 typedef enum _ProtocolIE_ID_enum
{
66 id_MME_MBMS_M3AP_ID
= 0,
67 id_MCE_MBMS_M3AP_ID
= 1,
69 id_MBMS_Session_ID
= 3,
70 id_MBMS_E_RAB_QoS_Parameters
= 4,
71 id_MBMS_Session_Duration
= 5,
72 id_MBMS_Service_Area
= 6,
73 id_TNL_Information
= 7,
74 id_CriticalityDiagnostics
= 8,
76 id_MBMS_Service_Area_List
= 10,
77 id_MBMS_Service_Area_List_Item
= 11,
80 id_MBMS_Service_associatedLogicalM3_ConnectionItem
= 14,
81 id_MBMS_Service_associatedLogicalM3_ConnectionListResAck
= 15,
82 id_MinimumTimeToMBMSDataTransfer
= 16,
83 id_AllocationAndRetentionPriority
= 17,
84 id_Global_MCE_ID
= 18,
86 id_MBMSServiceAreaList
= 20,
87 id_Time_ofMBMS_DataTransfer
= 21,
88 id_Time_ofMBMS_DataStop
= 22,
89 id_Reestablishment
= 23,
90 id_Alternative_TNL_Information
= 24,
91 id_MBMS_Cell_List
= 25
94 /* Initialize the protocol and registered fields */
95 static int proto_m3ap
;
97 static int hf_m3ap_Absolute_Time_ofMBMS_Data_value
;
98 static int hf_m3ap_IPAddress_v4
;
99 static int hf_m3ap_IPAddress_v6
;
101 static int hf_m3ap_Absolute_Time_ofMBMS_Data_PDU
; /* Absolute_Time_ofMBMS_Data */
102 static int hf_m3ap_AllocationAndRetentionPriority_PDU
; /* AllocationAndRetentionPriority */
103 static int hf_m3ap_Cause_PDU
; /* Cause */
104 static int hf_m3ap_CriticalityDiagnostics_PDU
; /* CriticalityDiagnostics */
105 static int hf_m3ap_Global_MCE_ID_PDU
; /* Global_MCE_ID */
106 static int hf_m3ap_MBMS_Cell_List_PDU
; /* MBMS_Cell_List */
107 static int hf_m3ap_MBMS_E_RAB_QoS_Parameters_PDU
; /* MBMS_E_RAB_QoS_Parameters */
108 static int hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem_PDU
; /* MBMS_Service_associatedLogicalM3_ConnectionItem */
109 static int hf_m3ap_MBMS_Service_Area_PDU
; /* MBMS_Service_Area */
110 static int hf_m3ap_MBMS_Session_Duration_PDU
; /* MBMS_Session_Duration */
111 static int hf_m3ap_MBMS_Session_ID_PDU
; /* MBMS_Session_ID */
112 static int hf_m3ap_MCE_MBMS_M3AP_ID_PDU
; /* MCE_MBMS_M3AP_ID */
113 static int hf_m3ap_MCEname_PDU
; /* MCEname */
114 static int hf_m3ap_MinimumTimeToMBMSDataTransfer_PDU
; /* MinimumTimeToMBMSDataTransfer */
115 static int hf_m3ap_MME_MBMS_M3AP_ID_PDU
; /* MME_MBMS_M3AP_ID */
116 static int hf_m3ap_Reestablishment_PDU
; /* Reestablishment */
117 static int hf_m3ap_TimeToWait_PDU
; /* TimeToWait */
118 static int hf_m3ap_TMGI_PDU
; /* TMGI */
119 static int hf_m3ap_TNL_Information_PDU
; /* TNL_Information */
120 static int hf_m3ap_MBMSSessionStartRequest_PDU
; /* MBMSSessionStartRequest */
121 static int hf_m3ap_MBMSSessionStartResponse_PDU
; /* MBMSSessionStartResponse */
122 static int hf_m3ap_MBMSSessionStartFailure_PDU
; /* MBMSSessionStartFailure */
123 static int hf_m3ap_MBMSSessionStopRequest_PDU
; /* MBMSSessionStopRequest */
124 static int hf_m3ap_MBMSSessionStopResponse_PDU
; /* MBMSSessionStopResponse */
125 static int hf_m3ap_MBMSSessionUpdateRequest_PDU
; /* MBMSSessionUpdateRequest */
126 static int hf_m3ap_MBMSSessionUpdateResponse_PDU
; /* MBMSSessionUpdateResponse */
127 static int hf_m3ap_MBMSSessionUpdateFailure_PDU
; /* MBMSSessionUpdateFailure */
128 static int hf_m3ap_ErrorIndication_PDU
; /* ErrorIndication */
129 static int hf_m3ap_Reset_PDU
; /* Reset */
130 static int hf_m3ap_ResetType_PDU
; /* ResetType */
131 static int hf_m3ap_ResetAcknowledge_PDU
; /* ResetAcknowledge */
132 static int hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_PDU
; /* MBMS_Service_associatedLogicalM3_ConnectionListResAck */
133 static int hf_m3ap_PrivateMessage_PDU
; /* PrivateMessage */
134 static int hf_m3ap_M3SetupRequest_PDU
; /* M3SetupRequest */
135 static int hf_m3ap_MBMSServiceAreaListItem_PDU
; /* MBMSServiceAreaListItem */
136 static int hf_m3ap_M3SetupResponse_PDU
; /* M3SetupResponse */
137 static int hf_m3ap_M3SetupFailure_PDU
; /* M3SetupFailure */
138 static int hf_m3ap_MCEConfigurationUpdate_PDU
; /* MCEConfigurationUpdate */
139 static int hf_m3ap_MCEConfigurationUpdateAcknowledge_PDU
; /* MCEConfigurationUpdateAcknowledge */
140 static int hf_m3ap_MCEConfigurationUpdateFailure_PDU
; /* MCEConfigurationUpdateFailure */
141 static int hf_m3ap_M3AP_PDU_PDU
; /* M3AP_PDU */
142 static int hf_m3ap_local
; /* INTEGER_0_maxPrivateIEs */
143 static int hf_m3ap_global
; /* OBJECT_IDENTIFIER */
144 static int hf_m3ap_ProtocolIE_Container_item
; /* ProtocolIE_Field */
145 static int hf_m3ap_id
; /* ProtocolIE_ID */
146 static int hf_m3ap_criticality
; /* Criticality */
147 static int hf_m3ap_ie_field_value
; /* T_ie_field_value */
148 static int hf_m3ap_ProtocolExtensionContainer_item
; /* ProtocolExtensionField */
149 static int hf_m3ap_ext_id
; /* ProtocolIE_ID */
150 static int hf_m3ap_extensionValue
; /* T_extensionValue */
151 static int hf_m3ap_PrivateIE_Container_item
; /* PrivateIE_Field */
152 static int hf_m3ap_private_id
; /* PrivateIE_ID */
153 static int hf_m3ap_private_value
; /* T_private_value */
154 static int hf_m3ap_priorityLevel
; /* PriorityLevel */
155 static int hf_m3ap_pre_emptionCapability
; /* Pre_emptionCapability */
156 static int hf_m3ap_pre_emptionVulnerability
; /* Pre_emptionVulnerability */
157 static int hf_m3ap_iE_Extensions
; /* ProtocolExtensionContainer */
158 static int hf_m3ap_radioNetwork
; /* CauseRadioNetwork */
159 static int hf_m3ap_transport
; /* CauseTransport */
160 static int hf_m3ap_nAS
; /* CauseNAS */
161 static int hf_m3ap_protocol
; /* CauseProtocol */
162 static int hf_m3ap_misc
; /* CauseMisc */
163 static int hf_m3ap_procedureCode
; /* ProcedureCode */
164 static int hf_m3ap_triggeringMessage
; /* TriggeringMessage */
165 static int hf_m3ap_procedureCriticality
; /* Criticality */
166 static int hf_m3ap_iEsCriticalityDiagnostics
; /* CriticalityDiagnostics_IE_List */
167 static int hf_m3ap_CriticalityDiagnostics_IE_List_item
; /* CriticalityDiagnostics_IE_List_item */
168 static int hf_m3ap_iECriticality
; /* Criticality */
169 static int hf_m3ap_iE_ID
; /* ProtocolIE_ID */
170 static int hf_m3ap_typeOfError
; /* TypeOfError */
171 static int hf_m3ap_pLMN_Identity
; /* PLMN_Identity */
172 static int hf_m3ap_eUTRANcellIdentifier
; /* EUTRANCellIdentifier */
173 static int hf_m3ap_mCE_ID
; /* MCE_ID */
174 static int hf_m3ap_extendedMCE_ID
; /* ExtendedMCE_ID */
175 static int hf_m3ap_mBMS_E_RAB_MaximumBitrateDL
; /* BitRate */
176 static int hf_m3ap_mBMS_E_RAB_GuaranteedBitrateDL
; /* BitRate */
177 static int hf_m3ap_MBMS_Cell_List_item
; /* ECGI */
178 static int hf_m3ap_qCI
; /* QCI */
179 static int hf_m3ap_gbrQosInformation
; /* GBR_QosInformation */
180 static int hf_m3ap_mME_MBMS_M3AP_ID
; /* MME_MBMS_M3AP_ID */
181 static int hf_m3ap_mCE_MBMS_M3AP_ID
; /* MCE_MBMS_M3AP_ID */
182 static int hf_m3ap_pLMNidentity
; /* PLMN_Identity */
183 static int hf_m3ap_serviceID
; /* OCTET_STRING_SIZE_3 */
184 static int hf_m3ap_iPMCAddress
; /* IPAddress */
185 static int hf_m3ap_iPSourceAddress
; /* IPAddress */
186 static int hf_m3ap_gTP_DLTEID
; /* GTP_TEID */
187 static int hf_m3ap_protocolIEs
; /* ProtocolIE_Container */
188 static int hf_m3ap_m3_Interface
; /* ResetAll */
189 static int hf_m3ap_partOfM3_Interface
; /* MBMS_Service_associatedLogicalM3_ConnectionListRes */
190 static int hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes_item
; /* ProtocolIE_Single_Container */
191 static int hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_item
; /* ProtocolIE_Single_Container */
192 static int hf_m3ap_privateIEs
; /* PrivateIE_Container */
193 static int hf_m3ap_MBMSServiceAreaListItem_item
; /* MBMSServiceArea1 */
194 static int hf_m3ap_initiatingMessage
; /* InitiatingMessage */
195 static int hf_m3ap_successfulOutcome
; /* SuccessfulOutcome */
196 static int hf_m3ap_unsuccessfulOutcome
; /* UnsuccessfulOutcome */
197 static int hf_m3ap_initiatingMessagevalue
; /* InitiatingMessage_value */
198 static int hf_m3ap_successfulOutcome_value
; /* SuccessfulOutcome_value */
199 static int hf_m3ap_unsuccessfulOutcome_value
; /* UnsuccessfulOutcome_value */
201 /* Initialize the subtree pointers */
203 static int ett_m3ap_IPAddress
;
204 static int ett_m3ap_PrivateIE_ID
;
205 static int ett_m3ap_ProtocolIE_Container
;
206 static int ett_m3ap_ProtocolIE_Field
;
207 static int ett_m3ap_ProtocolExtensionContainer
;
208 static int ett_m3ap_ProtocolExtensionField
;
209 static int ett_m3ap_PrivateIE_Container
;
210 static int ett_m3ap_PrivateIE_Field
;
211 static int ett_m3ap_AllocationAndRetentionPriority
;
212 static int ett_m3ap_Cause
;
213 static int ett_m3ap_CriticalityDiagnostics
;
214 static int ett_m3ap_CriticalityDiagnostics_IE_List
;
215 static int ett_m3ap_CriticalityDiagnostics_IE_List_item
;
216 static int ett_m3ap_ECGI
;
217 static int ett_m3ap_Global_MCE_ID
;
218 static int ett_m3ap_GBR_QosInformation
;
219 static int ett_m3ap_MBMS_Cell_List
;
220 static int ett_m3ap_MBMS_E_RAB_QoS_Parameters
;
221 static int ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem
;
222 static int ett_m3ap_TMGI
;
223 static int ett_m3ap_TNL_Information
;
224 static int ett_m3ap_MBMSSessionStartRequest
;
225 static int ett_m3ap_MBMSSessionStartResponse
;
226 static int ett_m3ap_MBMSSessionStartFailure
;
227 static int ett_m3ap_MBMSSessionStopRequest
;
228 static int ett_m3ap_MBMSSessionStopResponse
;
229 static int ett_m3ap_MBMSSessionUpdateRequest
;
230 static int ett_m3ap_MBMSSessionUpdateResponse
;
231 static int ett_m3ap_MBMSSessionUpdateFailure
;
232 static int ett_m3ap_ErrorIndication
;
233 static int ett_m3ap_Reset
;
234 static int ett_m3ap_ResetType
;
235 static int ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes
;
236 static int ett_m3ap_ResetAcknowledge
;
237 static int ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck
;
238 static int ett_m3ap_PrivateMessage
;
239 static int ett_m3ap_M3SetupRequest
;
240 static int ett_m3ap_MBMSServiceAreaListItem
;
241 static int ett_m3ap_M3SetupResponse
;
242 static int ett_m3ap_M3SetupFailure
;
243 static int ett_m3ap_MCEConfigurationUpdate
;
244 static int ett_m3ap_MCEConfigurationUpdateAcknowledge
;
245 static int ett_m3ap_MCEConfigurationUpdateFailure
;
246 static int ett_m3ap_M3AP_PDU
;
247 static int ett_m3ap_InitiatingMessage
;
248 static int ett_m3ap_SuccessfulOutcome
;
249 static int ett_m3ap_UnsuccessfulOutcome
;
251 static expert_field ei_m3ap_invalid_ip_address_len
;
253 struct m3ap_private_data
{
254 e212_number_type_t number_type
;
263 /* Global variables */
264 static uint32_t ProcedureCode
;
265 static uint32_t ProtocolIE_ID
;
266 /*static uint32_t ProtocolExtensionID; */
267 static int global_m3ap_port
= M3AP_PORT
;
268 static uint32_t message_type
;
270 /* Dissector tables */
271 static dissector_table_t m3ap_ies_dissector_table
;
272 static dissector_table_t m3ap_extension_dissector_table
;
273 static dissector_table_t m3ap_proc_imsg_dissector_table
;
274 static dissector_table_t m3ap_proc_sout_dissector_table
;
275 static dissector_table_t m3ap_proc_uout_dissector_table
;
277 static int dissect_ProtocolIEFieldValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
278 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
279 static int dissect_InitiatingMessageValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
280 static int dissect_SuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
281 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
283 static struct m3ap_private_data
*
284 m3ap_get_private_data(packet_info
*pinfo
)
286 struct m3ap_private_data
*m3ap_data
= (struct m3ap_private_data
*)p_get_proto_data(pinfo
->pool
, pinfo
, proto_m3ap
, 0);
288 m3ap_data
= wmem_new0(pinfo
->pool
, struct m3ap_private_data
);
289 p_add_proto_data(pinfo
->pool
, pinfo
, proto_m3ap
, 0, m3ap_data
);
295 static const value_string m3ap_Criticality_vals
[] = {
304 dissect_m3ap_Criticality(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
305 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
306 3, NULL
, false, 0, NULL
);
314 dissect_m3ap_INTEGER_0_maxPrivateIEs(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
315 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
316 0U, maxPrivateIEs
, NULL
, false);
324 dissect_m3ap_OBJECT_IDENTIFIER(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
325 offset
= dissect_per_object_identifier(tvb
, offset
, actx
, tree
, hf_index
, NULL
);
331 static const value_string m3ap_PrivateIE_ID_vals
[] = {
337 static const per_choice_t PrivateIE_ID_choice
[] = {
338 { 0, &hf_m3ap_local
, ASN1_NO_EXTENSIONS
, dissect_m3ap_INTEGER_0_maxPrivateIEs
},
339 { 1, &hf_m3ap_global
, ASN1_NO_EXTENSIONS
, dissect_m3ap_OBJECT_IDENTIFIER
},
344 dissect_m3ap_PrivateIE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
345 offset
= dissect_per_choice(tvb
, offset
, actx
, tree
, hf_index
,
346 ett_m3ap_PrivateIE_ID
, PrivateIE_ID_choice
,
353 static const value_string m3ap_ProcedureCode_vals
[] = {
354 { id_mBMSsessionStart
, "id-mBMSsessionStart" },
355 { id_mBMSsessionStop
, "id-mBMSsessionStop" },
356 { id_errorIndication
, "id-errorIndication" },
357 { id_privateMessage
, "id-privateMessage" },
358 { id_Reset
, "id-Reset" },
359 { id_mBMSsessionUpdate
, "id-mBMSsessionUpdate" },
360 { id_mCEConfigurationUpdate
, "id-mCEConfigurationUpdate" },
361 { id_m3Setup
, "id-m3Setup" },
365 static value_string_ext m3ap_ProcedureCode_vals_ext
= VALUE_STRING_EXT_INIT(m3ap_ProcedureCode_vals
);
369 dissect_m3ap_ProcedureCode(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
370 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
371 0U, 255U, &ProcedureCode
, false);
377 static const value_string m3ap_ProtocolIE_ID_vals
[] = {
378 { id_MME_MBMS_M3AP_ID
, "id-MME-MBMS-M3AP-ID" },
379 { id_MCE_MBMS_M3AP_ID
, "id-MCE-MBMS-M3AP-ID" },
380 { id_TMGI
, "id-TMGI" },
381 { id_MBMS_Session_ID
, "id-MBMS-Session-ID" },
382 { id_MBMS_E_RAB_QoS_Parameters
, "id-MBMS-E-RAB-QoS-Parameters" },
383 { id_MBMS_Session_Duration
, "id-MBMS-Session-Duration" },
384 { id_MBMS_Service_Area
, "id-MBMS-Service-Area" },
385 { id_TNL_Information
, "id-TNL-Information" },
386 { id_CriticalityDiagnostics
, "id-CriticalityDiagnostics" },
387 { id_Cause
, "id-Cause" },
388 { id_MBMS_Service_Area_List
, "id-MBMS-Service-Area-List" },
389 { id_MBMS_Service_Area_List_Item
, "id-MBMS-Service-Area-List-Item" },
390 { id_TimeToWait
, "id-TimeToWait" },
391 { id_ResetType
, "id-ResetType" },
392 { id_MBMS_Service_associatedLogicalM3_ConnectionItem
, "id-MBMS-Service-associatedLogicalM3-ConnectionItem" },
393 { id_MBMS_Service_associatedLogicalM3_ConnectionListResAck
, "id-MBMS-Service-associatedLogicalM3-ConnectionListResAck" },
394 { id_MinimumTimeToMBMSDataTransfer
, "id-MinimumTimeToMBMSDataTransfer" },
395 { id_AllocationAndRetentionPriority
, "id-AllocationAndRetentionPriority" },
396 { id_Global_MCE_ID
, "id-Global-MCE-ID" },
397 { id_MCEname
, "id-MCEname" },
398 { id_MBMSServiceAreaList
, "id-MBMSServiceAreaList" },
399 { id_Time_ofMBMS_DataTransfer
, "id-Time-ofMBMS-DataTransfer" },
400 { id_Time_ofMBMS_DataStop
, "id-Time-ofMBMS-DataStop" },
401 { id_Reestablishment
, "id-Reestablishment" },
402 { id_Alternative_TNL_Information
, "id-Alternative-TNL-Information" },
403 { id_MBMS_Cell_List
, "id-MBMS-Cell-List" },
407 static value_string_ext m3ap_ProtocolIE_ID_vals_ext
= VALUE_STRING_EXT_INIT(m3ap_ProtocolIE_ID_vals
);
411 dissect_m3ap_ProtocolIE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
412 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
413 0U, maxProtocolIEs
, &ProtocolIE_ID
, false);
416 proto_item_append_text(proto_item_get_parent_nth(actx
->created_item
, 2), ": %s", val_to_str_ext(ProtocolIE_ID
, &m3ap_ProtocolIE_ID_vals_ext
, "unknown (%d)"));
422 static const value_string m3ap_TriggeringMessage_vals
[] = {
423 { 0, "initiating-message" },
424 { 1, "successful-outcome" },
425 { 2, "unsuccessful-outcome" },
431 dissect_m3ap_TriggeringMessage(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
432 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
433 3, NULL
, false, 0, NULL
);
441 dissect_m3ap_T_ie_field_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
442 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_ProtocolIEFieldValue
);
448 static const per_sequence_t ProtocolIE_Field_sequence
[] = {
449 { &hf_m3ap_id
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_ID
},
450 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
451 { &hf_m3ap_ie_field_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_T_ie_field_value
},
456 dissect_m3ap_ProtocolIE_Field(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
457 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
458 ett_m3ap_ProtocolIE_Field
, ProtocolIE_Field_sequence
);
464 static const per_sequence_t ProtocolIE_Container_sequence_of
[1] = {
465 { &hf_m3ap_ProtocolIE_Container_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Field
},
469 dissect_m3ap_ProtocolIE_Container(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
470 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
471 ett_m3ap_ProtocolIE_Container
, ProtocolIE_Container_sequence_of
,
472 0, maxProtocolIEs
, false);
480 dissect_m3ap_ProtocolIE_Single_Container(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
481 offset
= dissect_m3ap_ProtocolIE_Field(tvb
, offset
, actx
, tree
, hf_index
);
489 dissect_m3ap_T_extensionValue(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
490 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_ProtocolExtensionFieldExtensionValue
);
496 static const per_sequence_t ProtocolExtensionField_sequence
[] = {
497 { &hf_m3ap_ext_id
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_ID
},
498 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
499 { &hf_m3ap_extensionValue
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_T_extensionValue
},
504 dissect_m3ap_ProtocolExtensionField(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
505 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
506 ett_m3ap_ProtocolExtensionField
, ProtocolExtensionField_sequence
);
512 static const per_sequence_t ProtocolExtensionContainer_sequence_of
[1] = {
513 { &hf_m3ap_ProtocolExtensionContainer_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolExtensionField
},
517 dissect_m3ap_ProtocolExtensionContainer(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
518 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
519 ett_m3ap_ProtocolExtensionContainer
, ProtocolExtensionContainer_sequence_of
,
520 1, maxProtocolExtensions
, false);
528 dissect_m3ap_T_private_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
529 offset
= dissect_per_open_type(tvb
, offset
, actx
, tree
, hf_index
, NULL
);
535 static const per_sequence_t PrivateIE_Field_sequence
[] = {
536 { &hf_m3ap_private_id
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PrivateIE_ID
},
537 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
538 { &hf_m3ap_private_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_T_private_value
},
543 dissect_m3ap_PrivateIE_Field(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
544 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
545 ett_m3ap_PrivateIE_Field
, PrivateIE_Field_sequence
);
551 static const per_sequence_t PrivateIE_Container_sequence_of
[1] = {
552 { &hf_m3ap_PrivateIE_Container_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PrivateIE_Field
},
556 dissect_m3ap_PrivateIE_Container(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
557 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
558 ett_m3ap_PrivateIE_Container
, PrivateIE_Container_sequence_of
,
559 1, maxPrivateIEs
, false);
567 dissect_m3ap_Absolute_Time_ofMBMS_Data(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
568 tvbuff_t
*parameter_tvb
=NULL
;
570 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
571 64, 64, false, NULL
, 0, ¶meter_tvb
, NULL
);
577 proto_tree_add_item(tree
, hf_m3ap_Absolute_Time_ofMBMS_Data_value
, parameter_tvb
, 0, 8, ENC_TIME_NTP
|ENC_BIG_ENDIAN
);
583 static const value_string m3ap_PriorityLevel_vals
[] = {
587 { 15, "no-priority" },
593 dissect_m3ap_PriorityLevel(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
594 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
595 0U, 15U, NULL
, false);
601 static const value_string m3ap_Pre_emptionCapability_vals
[] = {
602 { 0, "shall-not-trigger-pre-emption" },
603 { 1, "may-trigger-pre-emption" },
609 dissect_m3ap_Pre_emptionCapability(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
610 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
611 2, NULL
, false, 0, NULL
);
617 static const value_string m3ap_Pre_emptionVulnerability_vals
[] = {
618 { 0, "not-pre-emptable" },
619 { 1, "pre-emptable" },
625 dissect_m3ap_Pre_emptionVulnerability(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
626 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
627 2, NULL
, false, 0, NULL
);
633 static const per_sequence_t AllocationAndRetentionPriority_sequence
[] = {
634 { &hf_m3ap_priorityLevel
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PriorityLevel
},
635 { &hf_m3ap_pre_emptionCapability
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Pre_emptionCapability
},
636 { &hf_m3ap_pre_emptionVulnerability
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Pre_emptionVulnerability
},
637 { &hf_m3ap_iE_Extensions
, ASN1_NO_EXTENSIONS
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
642 dissect_m3ap_AllocationAndRetentionPriority(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
643 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
644 ett_m3ap_AllocationAndRetentionPriority
, AllocationAndRetentionPriority_sequence
);
652 dissect_m3ap_BitRate(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
653 offset
= dissect_per_constrained_integer_64b(tvb
, offset
, actx
, tree
, hf_index
,
654 0U, UINT64_C(10000000000), NULL
, false);
660 static const value_string m3ap_CauseRadioNetwork_vals
[] = {
661 { 0, "unknown-or-already-allocated-MME-MBMS-M3AP-ID" },
662 { 1, "unknown-or-already-allocated-MCE-MBMS-M3AP-ID" },
663 { 2, "unknown-or-inconsistent-pair-of-MBMS-M3AP-IDs" },
664 { 3, "radio-resources-not-available" },
665 { 4, "invalid-QoS-combination" },
666 { 5, "interaction-with-other-procedure" },
667 { 6, "not-supported-QCI-value" },
668 { 7, "unspecified" },
669 { 8, "uninvolved-MCE" },
675 dissect_m3ap_CauseRadioNetwork(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
676 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
677 8, NULL
, true, 1, NULL
);
683 static const value_string m3ap_CauseTransport_vals
[] = {
684 { 0, "transport-resource-unavailable" },
685 { 1, "unspecified" },
691 dissect_m3ap_CauseTransport(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
692 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
693 2, NULL
, true, 0, NULL
);
699 static const value_string m3ap_CauseNAS_vals
[] = {
700 { 0, "unspecified" },
706 dissect_m3ap_CauseNAS(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
707 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
708 1, NULL
, true, 0, NULL
);
714 static const value_string m3ap_CauseProtocol_vals
[] = {
715 { 0, "transfer-syntax-error" },
716 { 1, "abstract-syntax-error-reject" },
717 { 2, "abstract-syntax-error-ignore-and-notify" },
718 { 3, "message-not-compatible-with-receiver-state" },
719 { 4, "semantic-error" },
720 { 5, "abstract-syntax-error-falsely-constructed-message" },
721 { 6, "unspecified" },
727 dissect_m3ap_CauseProtocol(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
728 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
729 7, NULL
, true, 0, NULL
);
735 static const value_string m3ap_CauseMisc_vals
[] = {
736 { 0, "control-processing-overload" },
737 { 1, "not-enough-user-plane-processing-resources" },
738 { 2, "hardware-failure" },
739 { 3, "om-intervention" },
740 { 4, "unspecified" },
746 dissect_m3ap_CauseMisc(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
747 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
748 5, NULL
, true, 0, NULL
);
754 static const value_string m3ap_Cause_vals
[] = {
755 { 0, "radioNetwork" },
763 static const per_choice_t Cause_choice
[] = {
764 { 0, &hf_m3ap_radioNetwork
, ASN1_EXTENSION_ROOT
, dissect_m3ap_CauseRadioNetwork
},
765 { 1, &hf_m3ap_transport
, ASN1_EXTENSION_ROOT
, dissect_m3ap_CauseTransport
},
766 { 2, &hf_m3ap_nAS
, ASN1_EXTENSION_ROOT
, dissect_m3ap_CauseNAS
},
767 { 3, &hf_m3ap_protocol
, ASN1_EXTENSION_ROOT
, dissect_m3ap_CauseProtocol
},
768 { 4, &hf_m3ap_misc
, ASN1_EXTENSION_ROOT
, dissect_m3ap_CauseMisc
},
773 dissect_m3ap_Cause(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
774 offset
= dissect_per_choice(tvb
, offset
, actx
, tree
, hf_index
,
775 ett_m3ap_Cause
, Cause_choice
,
782 static const value_string m3ap_TypeOfError_vals
[] = {
783 { 0, "not-understood" },
790 dissect_m3ap_TypeOfError(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
791 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
792 2, NULL
, true, 0, NULL
);
798 static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence
[] = {
799 { &hf_m3ap_iECriticality
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
800 { &hf_m3ap_iE_ID
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_ID
},
801 { &hf_m3ap_typeOfError
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_TypeOfError
},
802 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
807 dissect_m3ap_CriticalityDiagnostics_IE_List_item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
808 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
809 ett_m3ap_CriticalityDiagnostics_IE_List_item
, CriticalityDiagnostics_IE_List_item_sequence
);
815 static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of
[1] = {
816 { &hf_m3ap_CriticalityDiagnostics_IE_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_CriticalityDiagnostics_IE_List_item
},
820 dissect_m3ap_CriticalityDiagnostics_IE_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
821 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
822 ett_m3ap_CriticalityDiagnostics_IE_List
, CriticalityDiagnostics_IE_List_sequence_of
,
823 1, maxnooferrors
, false);
829 static const per_sequence_t CriticalityDiagnostics_sequence
[] = {
830 { &hf_m3ap_procedureCode
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProcedureCode
},
831 { &hf_m3ap_triggeringMessage
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_TriggeringMessage
},
832 { &hf_m3ap_procedureCriticality
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_Criticality
},
833 { &hf_m3ap_iEsCriticalityDiagnostics
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_CriticalityDiagnostics_IE_List
},
834 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
839 dissect_m3ap_CriticalityDiagnostics(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
840 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
841 ett_m3ap_CriticalityDiagnostics
, CriticalityDiagnostics_sequence
);
849 dissect_m3ap_PLMN_Identity(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
850 tvbuff_t
*parameter_tvb
=NULL
;
851 struct m3ap_private_data
*m3ap_data
= m3ap_get_private_data(actx
->pinfo
);
852 e212_number_type_t number_type
= m3ap_data
->number_type
;
853 m3ap_data
->number_type
= E212_NONE
;
854 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
855 3, 3, false, ¶meter_tvb
);
859 dissect_e212_mcc_mnc(parameter_tvb
, actx
->pinfo
, tree
, 0, number_type
, false);
867 dissect_m3ap_EUTRANCellIdentifier(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
868 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
869 28, 28, false, NULL
, 0, NULL
, NULL
);
875 static const per_sequence_t ECGI_sequence
[] = {
876 { &hf_m3ap_pLMN_Identity
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PLMN_Identity
},
877 { &hf_m3ap_eUTRANcellIdentifier
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_EUTRANCellIdentifier
},
878 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
883 dissect_m3ap_ECGI(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
884 struct m3ap_private_data
*m3ap_data
= m3ap_get_private_data(actx
->pinfo
);
885 m3ap_data
->number_type
= E212_ECGI
;
886 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
887 ett_m3ap_ECGI
, ECGI_sequence
);
897 dissect_m3ap_ExtendedMCE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
898 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
907 dissect_m3ap_MCE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
908 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
915 static const per_sequence_t Global_MCE_ID_sequence
[] = {
916 { &hf_m3ap_pLMN_Identity
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PLMN_Identity
},
917 { &hf_m3ap_mCE_ID
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_MCE_ID
},
918 { &hf_m3ap_extendedMCE_ID
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ExtendedMCE_ID
},
919 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
924 dissect_m3ap_Global_MCE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
925 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
926 ett_m3ap_Global_MCE_ID
, Global_MCE_ID_sequence
);
932 static const per_sequence_t GBR_QosInformation_sequence
[] = {
933 { &hf_m3ap_mBMS_E_RAB_MaximumBitrateDL
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_BitRate
},
934 { &hf_m3ap_mBMS_E_RAB_GuaranteedBitrateDL
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_BitRate
},
935 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
940 dissect_m3ap_GBR_QosInformation(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
941 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
942 ett_m3ap_GBR_QosInformation
, GBR_QosInformation_sequence
);
950 dissect_m3ap_GTP_TEID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
951 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
960 dissect_m3ap_IPAddress(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
961 tvbuff_t
*parameter_tvb
=NULL
;
965 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
966 4, 16, true, ¶meter_tvb
);
972 tvb_len
= tvb_reported_length(parameter_tvb
);
973 subtree
= proto_item_add_subtree(actx
->created_item
, ett_m3ap_IPAddress
);
976 proto_tree_add_item(subtree
, hf_m3ap_IPAddress_v4
, parameter_tvb
, 0, 4, ENC_BIG_ENDIAN
);
979 proto_tree_add_item(subtree
, hf_m3ap_IPAddress_v6
, parameter_tvb
, 0, 16, ENC_NA
);
982 proto_tree_add_expert(subtree
, actx
->pinfo
, &ei_m3ap_invalid_ip_address_len
, parameter_tvb
, 0, tvb_len
);
990 static const per_sequence_t MBMS_Cell_List_sequence_of
[1] = {
991 { &hf_m3ap_MBMS_Cell_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ECGI
},
995 dissect_m3ap_MBMS_Cell_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
996 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
997 ett_m3ap_MBMS_Cell_List
, MBMS_Cell_List_sequence_of
,
998 1, maxnoofCellsforMBMS
, false);
1006 dissect_m3ap_QCI(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1007 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
1008 0U, 255U, NULL
, false);
1014 static const per_sequence_t MBMS_E_RAB_QoS_Parameters_sequence
[] = {
1015 { &hf_m3ap_qCI
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_QCI
},
1016 { &hf_m3ap_gbrQosInformation
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_GBR_QosInformation
},
1017 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
1018 { NULL
, 0, 0, NULL
}
1022 dissect_m3ap_MBMS_E_RAB_QoS_Parameters(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1023 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1024 ett_m3ap_MBMS_E_RAB_QoS_Parameters
, MBMS_E_RAB_QoS_Parameters_sequence
);
1032 dissect_m3ap_MME_MBMS_M3AP_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1033 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
1034 0U, 65535U, NULL
, false);
1042 dissect_m3ap_MCE_MBMS_M3AP_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1043 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
1044 0U, 65535U, NULL
, false);
1050 static const per_sequence_t MBMS_Service_associatedLogicalM3_ConnectionItem_sequence
[] = {
1051 { &hf_m3ap_mME_MBMS_M3AP_ID
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_MME_MBMS_M3AP_ID
},
1052 { &hf_m3ap_mCE_MBMS_M3AP_ID
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_MCE_MBMS_M3AP_ID
},
1053 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
1054 { NULL
, 0, 0, NULL
}
1058 dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1059 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1060 ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem
, MBMS_Service_associatedLogicalM3_ConnectionItem_sequence
);
1068 dissect_m3ap_MBMSServiceArea1(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1069 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1078 dissect_m3ap_MBMS_Service_Area(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1079 tvbuff_t
*parameter_tvb
=NULL
;
1082 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1083 NO_BOUND
, NO_BOUND
, false, ¶meter_tvb
);
1089 tvb_len
= tvb_reported_length(parameter_tvb
);
1091 dissect_gtpv2_mbms_service_area(parameter_tvb
, actx
->pinfo
, tree
, actx
->created_item
, tvb_len
, 0, 0, NULL
);
1099 dissect_m3ap_MBMS_Session_Duration(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1100 tvbuff_t
*parameter_tvb
=NULL
;
1103 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1104 3, 3, false, ¶meter_tvb
);
1109 tvb_len
= tvb_reported_length(parameter_tvb
);
1111 proto_item_append_text(actx
->created_item
, " ");
1112 dissect_gtpv2_mbms_session_duration(parameter_tvb
, actx
->pinfo
, tree
, actx
->created_item
, tvb_len
, 0, 0, NULL
);
1120 dissect_m3ap_MBMS_Session_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1121 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1130 dissect_m3ap_MCEname(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1131 offset
= dissect_per_PrintableString(tvb
, offset
, actx
, tree
, hf_index
,
1141 dissect_m3ap_MinimumTimeToMBMSDataTransfer(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1142 tvbuff_t
*parameter_tvb
=NULL
;
1145 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1146 1, 1, false, ¶meter_tvb
);
1152 tvb_len
= tvb_reported_length(parameter_tvb
);
1153 dissect_gtpv2_mbms_time_to_data_xfer(parameter_tvb
, actx
->pinfo
, tree
, actx
->created_item
, tvb_len
, 0, 0, NULL
);
1159 static const value_string m3ap_Reestablishment_vals
[] = {
1166 dissect_m3ap_Reestablishment(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1167 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
1168 1, NULL
, true, 0, NULL
);
1174 static const value_string m3ap_TimeToWait_vals
[] = {
1186 dissect_m3ap_TimeToWait(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1187 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
1188 6, NULL
, true, 0, NULL
);
1196 dissect_m3ap_OCTET_STRING_SIZE_3(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1197 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
1204 static const per_sequence_t TMGI_sequence
[] = {
1205 { &hf_m3ap_pLMNidentity
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PLMN_Identity
},
1206 { &hf_m3ap_serviceID
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_OCTET_STRING_SIZE_3
},
1207 { &hf_m3ap_iE_Extensions
, ASN1_NO_EXTENSIONS
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
1208 { NULL
, 0, 0, NULL
}
1212 dissect_m3ap_TMGI(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1213 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1214 ett_m3ap_TMGI
, TMGI_sequence
);
1220 static const per_sequence_t TNL_Information_sequence
[] = {
1221 { &hf_m3ap_iPMCAddress
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_IPAddress
},
1222 { &hf_m3ap_iPSourceAddress
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_IPAddress
},
1223 { &hf_m3ap_gTP_DLTEID
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_GTP_TEID
},
1224 { &hf_m3ap_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_m3ap_ProtocolExtensionContainer
},
1225 { NULL
, 0, 0, NULL
}
1229 dissect_m3ap_TNL_Information(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1230 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1231 ett_m3ap_TNL_Information
, TNL_Information_sequence
);
1237 static const per_sequence_t MBMSSessionStartRequest_sequence
[] = {
1238 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1239 { NULL
, 0, 0, NULL
}
1243 dissect_m3ap_MBMSSessionStartRequest(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1244 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Start Request ");
1245 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1246 ett_m3ap_MBMSSessionStartRequest
, MBMSSessionStartRequest_sequence
);
1252 static const per_sequence_t MBMSSessionStartResponse_sequence
[] = {
1253 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1254 { NULL
, 0, 0, NULL
}
1258 dissect_m3ap_MBMSSessionStartResponse(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1259 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Start Response ");
1260 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1261 ett_m3ap_MBMSSessionStartResponse
, MBMSSessionStartResponse_sequence
);
1267 static const per_sequence_t MBMSSessionStartFailure_sequence
[] = {
1268 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1269 { NULL
, 0, 0, NULL
}
1273 dissect_m3ap_MBMSSessionStartFailure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1274 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Start Failure ");
1275 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1276 ett_m3ap_MBMSSessionStartFailure
, MBMSSessionStartFailure_sequence
);
1282 static const per_sequence_t MBMSSessionStopRequest_sequence
[] = {
1283 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1284 { NULL
, 0, 0, NULL
}
1288 dissect_m3ap_MBMSSessionStopRequest(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1289 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Stop Request ");
1290 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1291 ett_m3ap_MBMSSessionStopRequest
, MBMSSessionStopRequest_sequence
);
1297 static const per_sequence_t MBMSSessionStopResponse_sequence
[] = {
1298 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1299 { NULL
, 0, 0, NULL
}
1303 dissect_m3ap_MBMSSessionStopResponse(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1304 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Stop Response ");
1305 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1306 ett_m3ap_MBMSSessionStopResponse
, MBMSSessionStopResponse_sequence
);
1312 static const per_sequence_t MBMSSessionUpdateRequest_sequence
[] = {
1313 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1314 { NULL
, 0, 0, NULL
}
1318 dissect_m3ap_MBMSSessionUpdateRequest(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1319 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Update Request ");
1320 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1321 ett_m3ap_MBMSSessionUpdateRequest
, MBMSSessionUpdateRequest_sequence
);
1327 static const per_sequence_t MBMSSessionUpdateResponse_sequence
[] = {
1328 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1329 { NULL
, 0, 0, NULL
}
1333 dissect_m3ap_MBMSSessionUpdateResponse(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1334 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Update Response ");
1335 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1336 ett_m3ap_MBMSSessionUpdateResponse
, MBMSSessionUpdateResponse_sequence
);
1342 static const per_sequence_t MBMSSessionUpdateFailure_sequence
[] = {
1343 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1344 { NULL
, 0, 0, NULL
}
1348 dissect_m3ap_MBMSSessionUpdateFailure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1349 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MBMS Session Update Failure ");
1350 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1351 ett_m3ap_MBMSSessionUpdateFailure
, MBMSSessionUpdateFailure_sequence
);
1357 static const per_sequence_t ErrorIndication_sequence
[] = {
1358 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1359 { NULL
, 0, 0, NULL
}
1363 dissect_m3ap_ErrorIndication(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1364 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"Error Indication ");
1365 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1366 ett_m3ap_ErrorIndication
, ErrorIndication_sequence
);
1372 static const per_sequence_t Reset_sequence
[] = {
1373 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1374 { NULL
, 0, 0, NULL
}
1378 dissect_m3ap_Reset(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1379 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"Reset ");
1380 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1381 ett_m3ap_Reset
, Reset_sequence
);
1387 static const value_string m3ap_ResetAll_vals
[] = {
1394 dissect_m3ap_ResetAll(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1395 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
1396 1, NULL
, true, 0, NULL
);
1402 static const per_sequence_t MBMS_Service_associatedLogicalM3_ConnectionListRes_sequence_of
[1] = {
1403 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Single_Container
},
1407 dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1408 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
1409 ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes
, MBMS_Service_associatedLogicalM3_ConnectionListRes_sequence_of
,
1410 1, maxNrOfIndividualM3ConnectionsToReset
, false);
1416 static const value_string m3ap_ResetType_vals
[] = {
1417 { 0, "m3-Interface" },
1418 { 1, "partOfM3-Interface" },
1422 static const per_choice_t ResetType_choice
[] = {
1423 { 0, &hf_m3ap_m3_Interface
, ASN1_EXTENSION_ROOT
, dissect_m3ap_ResetAll
},
1424 { 1, &hf_m3ap_partOfM3_Interface
, ASN1_EXTENSION_ROOT
, dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes
},
1425 { 0, NULL
, 0, NULL
}
1429 dissect_m3ap_ResetType(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1430 offset
= dissect_per_choice(tvb
, offset
, actx
, tree
, hf_index
,
1431 ett_m3ap_ResetType
, ResetType_choice
,
1438 static const per_sequence_t ResetAcknowledge_sequence
[] = {
1439 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1440 { NULL
, 0, 0, NULL
}
1444 dissect_m3ap_ResetAcknowledge(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1445 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"Reset Acknowledge ");
1446 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1447 ett_m3ap_ResetAcknowledge
, ResetAcknowledge_sequence
);
1453 static const per_sequence_t MBMS_Service_associatedLogicalM3_ConnectionListResAck_sequence_of
[1] = {
1454 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Single_Container
},
1458 dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1459 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
1460 ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck
, MBMS_Service_associatedLogicalM3_ConnectionListResAck_sequence_of
,
1461 1, maxNrOfIndividualM3ConnectionsToReset
, false);
1467 static const per_sequence_t PrivateMessage_sequence
[] = {
1468 { &hf_m3ap_privateIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_PrivateIE_Container
},
1469 { NULL
, 0, 0, NULL
}
1473 dissect_m3ap_PrivateMessage(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1474 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"Private Message ");
1475 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1476 ett_m3ap_PrivateMessage
, PrivateMessage_sequence
);
1482 static const per_sequence_t M3SetupRequest_sequence
[] = {
1483 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1484 { NULL
, 0, 0, NULL
}
1488 dissect_m3ap_M3SetupRequest(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1489 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"M3 Setup Request ");
1490 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1491 ett_m3ap_M3SetupRequest
, M3SetupRequest_sequence
);
1497 static const per_sequence_t MBMSServiceAreaListItem_sequence_of
[1] = {
1498 { &hf_m3ap_MBMSServiceAreaListItem_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_MBMSServiceArea1
},
1502 dissect_m3ap_MBMSServiceAreaListItem(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1503 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
1504 ett_m3ap_MBMSServiceAreaListItem
, MBMSServiceAreaListItem_sequence_of
,
1505 1, maxnoofMBMSServiceAreaIdentitiesPerMCE
, false);
1511 static const per_sequence_t M3SetupResponse_sequence
[] = {
1512 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1513 { NULL
, 0, 0, NULL
}
1517 dissect_m3ap_M3SetupResponse(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1518 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"M3 Setup Response ");
1519 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1520 ett_m3ap_M3SetupResponse
, M3SetupResponse_sequence
);
1526 static const per_sequence_t M3SetupFailure_sequence
[] = {
1527 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1528 { NULL
, 0, 0, NULL
}
1532 dissect_m3ap_M3SetupFailure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1533 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"M3 Setup Failure ");
1536 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1537 ett_m3ap_M3SetupFailure
, M3SetupFailure_sequence
);
1543 static const per_sequence_t MCEConfigurationUpdate_sequence
[] = {
1544 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1545 { NULL
, 0, 0, NULL
}
1549 dissect_m3ap_MCEConfigurationUpdate(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1550 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MCE Configuration Update ");
1551 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1552 ett_m3ap_MCEConfigurationUpdate
, MCEConfigurationUpdate_sequence
);
1558 static const per_sequence_t MCEConfigurationUpdateAcknowledge_sequence
[] = {
1559 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1560 { NULL
, 0, 0, NULL
}
1564 dissect_m3ap_MCEConfigurationUpdateAcknowledge(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1565 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MCE Configuration Update Acknowledge ");
1566 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1567 ett_m3ap_MCEConfigurationUpdateAcknowledge
, MCEConfigurationUpdateAcknowledge_sequence
);
1573 static const per_sequence_t MCEConfigurationUpdateFailure_sequence
[] = {
1574 { &hf_m3ap_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProtocolIE_Container
},
1575 { NULL
, 0, 0, NULL
}
1579 dissect_m3ap_MCEConfigurationUpdateFailure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1580 col_set_str(actx
->pinfo
->cinfo
, COL_INFO
,"MCE Configuration Update Failure ");
1581 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1582 ett_m3ap_MCEConfigurationUpdateFailure
, MCEConfigurationUpdateFailure_sequence
);
1590 dissect_m3ap_InitiatingMessage_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1591 message_type
= INITIATING_MESSAGE
;
1592 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_InitiatingMessageValue
);
1598 static const per_sequence_t InitiatingMessage_sequence
[] = {
1599 { &hf_m3ap_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProcedureCode
},
1600 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
1601 { &hf_m3ap_initiatingMessagevalue
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_InitiatingMessage_value
},
1602 { NULL
, 0, 0, NULL
}
1606 dissect_m3ap_InitiatingMessage(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1607 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1608 ett_m3ap_InitiatingMessage
, InitiatingMessage_sequence
);
1616 dissect_m3ap_SuccessfulOutcome_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1617 message_type
= SUCCESSFUL_OUTCOME
;
1618 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_SuccessfulOutcomeValue
);
1624 static const per_sequence_t SuccessfulOutcome_sequence
[] = {
1625 { &hf_m3ap_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProcedureCode
},
1626 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
1627 { &hf_m3ap_successfulOutcome_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_SuccessfulOutcome_value
},
1628 { NULL
, 0, 0, NULL
}
1632 dissect_m3ap_SuccessfulOutcome(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1633 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1634 ett_m3ap_SuccessfulOutcome
, SuccessfulOutcome_sequence
);
1642 dissect_m3ap_UnsuccessfulOutcome_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1643 message_type
= UNSUCCESSFUL_OUTCOME
;
1651 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_UnsuccessfulOutcomeValue
);
1657 static const per_sequence_t UnsuccessfulOutcome_sequence
[] = {
1658 { &hf_m3ap_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_ProcedureCode
},
1659 { &hf_m3ap_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_Criticality
},
1660 { &hf_m3ap_unsuccessfulOutcome_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_m3ap_UnsuccessfulOutcome_value
},
1661 { NULL
, 0, 0, NULL
}
1665 dissect_m3ap_UnsuccessfulOutcome(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1666 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1667 ett_m3ap_UnsuccessfulOutcome
, UnsuccessfulOutcome_sequence
);
1673 static const value_string m3ap_M3AP_PDU_vals
[] = {
1674 { 0, "initiatingMessage" },
1675 { 1, "successfulOutcome" },
1676 { 2, "unsuccessfulOutcome" },
1680 static const per_choice_t M3AP_PDU_choice
[] = {
1681 { 0, &hf_m3ap_initiatingMessage
, ASN1_EXTENSION_ROOT
, dissect_m3ap_InitiatingMessage
},
1682 { 1, &hf_m3ap_successfulOutcome
, ASN1_EXTENSION_ROOT
, dissect_m3ap_SuccessfulOutcome
},
1683 { 2, &hf_m3ap_unsuccessfulOutcome
, ASN1_EXTENSION_ROOT
, dissect_m3ap_UnsuccessfulOutcome
},
1684 { 0, NULL
, 0, NULL
}
1688 dissect_m3ap_M3AP_PDU(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1689 offset
= dissect_per_choice(tvb
, offset
, actx
, tree
, hf_index
,
1690 ett_m3ap_M3AP_PDU
, M3AP_PDU_choice
,
1698 static int dissect_Absolute_Time_ofMBMS_Data_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1700 asn1_ctx_t asn1_ctx
;
1701 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1702 offset
= dissect_m3ap_Absolute_Time_ofMBMS_Data(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_Absolute_Time_ofMBMS_Data_PDU
);
1703 offset
+= 7; offset
>>= 3;
1706 static int dissect_AllocationAndRetentionPriority_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1708 asn1_ctx_t asn1_ctx
;
1709 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1710 offset
= dissect_m3ap_AllocationAndRetentionPriority(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_AllocationAndRetentionPriority_PDU
);
1711 offset
+= 7; offset
>>= 3;
1714 static int dissect_Cause_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1716 asn1_ctx_t asn1_ctx
;
1717 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1718 offset
= dissect_m3ap_Cause(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_Cause_PDU
);
1719 offset
+= 7; offset
>>= 3;
1722 static int dissect_CriticalityDiagnostics_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1724 asn1_ctx_t asn1_ctx
;
1725 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1726 offset
= dissect_m3ap_CriticalityDiagnostics(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_CriticalityDiagnostics_PDU
);
1727 offset
+= 7; offset
>>= 3;
1730 static int dissect_Global_MCE_ID_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1732 asn1_ctx_t asn1_ctx
;
1733 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1734 offset
= dissect_m3ap_Global_MCE_ID(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_Global_MCE_ID_PDU
);
1735 offset
+= 7; offset
>>= 3;
1738 static int dissect_MBMS_Cell_List_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1740 asn1_ctx_t asn1_ctx
;
1741 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1742 offset
= dissect_m3ap_MBMS_Cell_List(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Cell_List_PDU
);
1743 offset
+= 7; offset
>>= 3;
1746 static int dissect_MBMS_E_RAB_QoS_Parameters_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1748 asn1_ctx_t asn1_ctx
;
1749 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1750 offset
= dissect_m3ap_MBMS_E_RAB_QoS_Parameters(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_E_RAB_QoS_Parameters_PDU
);
1751 offset
+= 7; offset
>>= 3;
1754 static int dissect_MBMS_Service_associatedLogicalM3_ConnectionItem_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1756 asn1_ctx_t asn1_ctx
;
1757 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1758 offset
= dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem_PDU
);
1759 offset
+= 7; offset
>>= 3;
1762 static int dissect_MBMS_Service_Area_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1764 asn1_ctx_t asn1_ctx
;
1765 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1766 offset
= dissect_m3ap_MBMS_Service_Area(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Service_Area_PDU
);
1767 offset
+= 7; offset
>>= 3;
1770 static int dissect_MBMS_Session_Duration_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1772 asn1_ctx_t asn1_ctx
;
1773 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1774 offset
= dissect_m3ap_MBMS_Session_Duration(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Session_Duration_PDU
);
1775 offset
+= 7; offset
>>= 3;
1778 static int dissect_MBMS_Session_ID_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1780 asn1_ctx_t asn1_ctx
;
1781 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1782 offset
= dissect_m3ap_MBMS_Session_ID(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Session_ID_PDU
);
1783 offset
+= 7; offset
>>= 3;
1786 static int dissect_MCE_MBMS_M3AP_ID_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1788 asn1_ctx_t asn1_ctx
;
1789 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1790 offset
= dissect_m3ap_MCE_MBMS_M3AP_ID(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MCE_MBMS_M3AP_ID_PDU
);
1791 offset
+= 7; offset
>>= 3;
1794 static int dissect_MCEname_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1796 asn1_ctx_t asn1_ctx
;
1797 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1798 offset
= dissect_m3ap_MCEname(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MCEname_PDU
);
1799 offset
+= 7; offset
>>= 3;
1802 static int dissect_MinimumTimeToMBMSDataTransfer_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1804 asn1_ctx_t asn1_ctx
;
1805 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1806 offset
= dissect_m3ap_MinimumTimeToMBMSDataTransfer(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MinimumTimeToMBMSDataTransfer_PDU
);
1807 offset
+= 7; offset
>>= 3;
1810 static int dissect_MME_MBMS_M3AP_ID_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1812 asn1_ctx_t asn1_ctx
;
1813 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1814 offset
= dissect_m3ap_MME_MBMS_M3AP_ID(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MME_MBMS_M3AP_ID_PDU
);
1815 offset
+= 7; offset
>>= 3;
1818 static int dissect_Reestablishment_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1820 asn1_ctx_t asn1_ctx
;
1821 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1822 offset
= dissect_m3ap_Reestablishment(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_Reestablishment_PDU
);
1823 offset
+= 7; offset
>>= 3;
1826 static int dissect_TimeToWait_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1828 asn1_ctx_t asn1_ctx
;
1829 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1830 offset
= dissect_m3ap_TimeToWait(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_TimeToWait_PDU
);
1831 offset
+= 7; offset
>>= 3;
1834 static int dissect_TMGI_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1836 asn1_ctx_t asn1_ctx
;
1837 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1838 offset
= dissect_m3ap_TMGI(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_TMGI_PDU
);
1839 offset
+= 7; offset
>>= 3;
1842 static int dissect_TNL_Information_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1844 asn1_ctx_t asn1_ctx
;
1845 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1846 offset
= dissect_m3ap_TNL_Information(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_TNL_Information_PDU
);
1847 offset
+= 7; offset
>>= 3;
1850 static int dissect_MBMSSessionStartRequest_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1852 asn1_ctx_t asn1_ctx
;
1853 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1854 offset
= dissect_m3ap_MBMSSessionStartRequest(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionStartRequest_PDU
);
1855 offset
+= 7; offset
>>= 3;
1858 static int dissect_MBMSSessionStartResponse_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1860 asn1_ctx_t asn1_ctx
;
1861 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1862 offset
= dissect_m3ap_MBMSSessionStartResponse(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionStartResponse_PDU
);
1863 offset
+= 7; offset
>>= 3;
1866 static int dissect_MBMSSessionStartFailure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1868 asn1_ctx_t asn1_ctx
;
1869 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1870 offset
= dissect_m3ap_MBMSSessionStartFailure(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionStartFailure_PDU
);
1871 offset
+= 7; offset
>>= 3;
1874 static int dissect_MBMSSessionStopRequest_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1876 asn1_ctx_t asn1_ctx
;
1877 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1878 offset
= dissect_m3ap_MBMSSessionStopRequest(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionStopRequest_PDU
);
1879 offset
+= 7; offset
>>= 3;
1882 static int dissect_MBMSSessionStopResponse_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1884 asn1_ctx_t asn1_ctx
;
1885 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1886 offset
= dissect_m3ap_MBMSSessionStopResponse(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionStopResponse_PDU
);
1887 offset
+= 7; offset
>>= 3;
1890 static int dissect_MBMSSessionUpdateRequest_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1892 asn1_ctx_t asn1_ctx
;
1893 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1894 offset
= dissect_m3ap_MBMSSessionUpdateRequest(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionUpdateRequest_PDU
);
1895 offset
+= 7; offset
>>= 3;
1898 static int dissect_MBMSSessionUpdateResponse_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1900 asn1_ctx_t asn1_ctx
;
1901 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1902 offset
= dissect_m3ap_MBMSSessionUpdateResponse(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionUpdateResponse_PDU
);
1903 offset
+= 7; offset
>>= 3;
1906 static int dissect_MBMSSessionUpdateFailure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1908 asn1_ctx_t asn1_ctx
;
1909 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1910 offset
= dissect_m3ap_MBMSSessionUpdateFailure(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSSessionUpdateFailure_PDU
);
1911 offset
+= 7; offset
>>= 3;
1914 static int dissect_ErrorIndication_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1916 asn1_ctx_t asn1_ctx
;
1917 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1918 offset
= dissect_m3ap_ErrorIndication(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_ErrorIndication_PDU
);
1919 offset
+= 7; offset
>>= 3;
1922 static int dissect_Reset_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1924 asn1_ctx_t asn1_ctx
;
1925 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1926 offset
= dissect_m3ap_Reset(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_Reset_PDU
);
1927 offset
+= 7; offset
>>= 3;
1930 static int dissect_ResetType_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1932 asn1_ctx_t asn1_ctx
;
1933 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1934 offset
= dissect_m3ap_ResetType(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_ResetType_PDU
);
1935 offset
+= 7; offset
>>= 3;
1938 static int dissect_ResetAcknowledge_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1940 asn1_ctx_t asn1_ctx
;
1941 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1942 offset
= dissect_m3ap_ResetAcknowledge(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_ResetAcknowledge_PDU
);
1943 offset
+= 7; offset
>>= 3;
1946 static int dissect_MBMS_Service_associatedLogicalM3_ConnectionListResAck_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1948 asn1_ctx_t asn1_ctx
;
1949 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1950 offset
= dissect_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_PDU
);
1951 offset
+= 7; offset
>>= 3;
1954 static int dissect_PrivateMessage_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1956 asn1_ctx_t asn1_ctx
;
1957 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1958 offset
= dissect_m3ap_PrivateMessage(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_PrivateMessage_PDU
);
1959 offset
+= 7; offset
>>= 3;
1962 static int dissect_M3SetupRequest_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1964 asn1_ctx_t asn1_ctx
;
1965 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1966 offset
= dissect_m3ap_M3SetupRequest(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_M3SetupRequest_PDU
);
1967 offset
+= 7; offset
>>= 3;
1970 static int dissect_MBMSServiceAreaListItem_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1972 asn1_ctx_t asn1_ctx
;
1973 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1974 offset
= dissect_m3ap_MBMSServiceAreaListItem(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MBMSServiceAreaListItem_PDU
);
1975 offset
+= 7; offset
>>= 3;
1978 static int dissect_M3SetupResponse_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1980 asn1_ctx_t asn1_ctx
;
1981 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1982 offset
= dissect_m3ap_M3SetupResponse(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_M3SetupResponse_PDU
);
1983 offset
+= 7; offset
>>= 3;
1986 static int dissect_M3SetupFailure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1988 asn1_ctx_t asn1_ctx
;
1989 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1990 offset
= dissect_m3ap_M3SetupFailure(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_M3SetupFailure_PDU
);
1991 offset
+= 7; offset
>>= 3;
1994 static int dissect_MCEConfigurationUpdate_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1996 asn1_ctx_t asn1_ctx
;
1997 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1998 offset
= dissect_m3ap_MCEConfigurationUpdate(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MCEConfigurationUpdate_PDU
);
1999 offset
+= 7; offset
>>= 3;
2002 static int dissect_MCEConfigurationUpdateAcknowledge_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
2004 asn1_ctx_t asn1_ctx
;
2005 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
2006 offset
= dissect_m3ap_MCEConfigurationUpdateAcknowledge(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MCEConfigurationUpdateAcknowledge_PDU
);
2007 offset
+= 7; offset
>>= 3;
2010 static int dissect_MCEConfigurationUpdateFailure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
2012 asn1_ctx_t asn1_ctx
;
2013 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
2014 offset
= dissect_m3ap_MCEConfigurationUpdateFailure(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_MCEConfigurationUpdateFailure_PDU
);
2015 offset
+= 7; offset
>>= 3;
2018 static int dissect_M3AP_PDU_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
2020 asn1_ctx_t asn1_ctx
;
2021 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
2022 offset
= dissect_m3ap_M3AP_PDU(tvb
, offset
, &asn1_ctx
, tree
, hf_m3ap_M3AP_PDU_PDU
);
2023 offset
+= 7; offset
>>= 3;
2028 static int dissect_ProtocolIEFieldValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
2030 return (dissector_try_uint_with_data(m3ap_ies_dissector_table
, ProtocolIE_ID
, tvb
, pinfo
, tree
, false, NULL
)) ? tvb_captured_length(tvb
) : 0;
2033 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
2035 return (dissector_try_uint_with_data(m3ap_extension_dissector_table
, ProtocolIE_ID
, tvb
, pinfo
, tree
, false, NULL
)) ? tvb_captured_length(tvb
) : 0;
2038 static int dissect_InitiatingMessageValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
2040 return (dissector_try_uint_with_data(m3ap_proc_imsg_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
, false, NULL
)) ? tvb_captured_length(tvb
) : 0;
2043 static int dissect_SuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
2045 return (dissector_try_uint_with_data(m3ap_proc_sout_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
, false, NULL
)) ? tvb_captured_length(tvb
) : 0;
2048 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
2050 return (dissector_try_uint_with_data(m3ap_proc_uout_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
, false, NULL
)) ? tvb_captured_length(tvb
) : 0;
2055 dissect_m3ap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2057 proto_item
*m3ap_item
= NULL
;
2058 proto_tree
*m3ap_tree
= NULL
;
2060 /* make entry in the Protocol column on summary display */
2061 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, PSNAME
);
2062 col_clear_fence(pinfo
->cinfo
, COL_INFO
);
2063 col_clear(pinfo
->cinfo
, COL_INFO
);
2065 /* create the m3ap protocol tree */
2066 m3ap_item
= proto_tree_add_item(tree
, proto_m3ap
, tvb
, 0, -1, ENC_NA
);
2067 m3ap_tree
= proto_item_add_subtree(m3ap_item
, ett_m3ap
);
2069 dissect_M3AP_PDU_PDU(tvb
, pinfo
, m3ap_tree
, NULL
);
2070 return tvb_captured_length(tvb
);
2072 /*--- proto_register_m3ap -------------------------------------------*/
2073 void proto_register_m3ap(void) {
2075 /* List of fields */
2076 static hf_register_info hf
[] = {
2077 { &hf_m3ap_Absolute_Time_ofMBMS_Data_value
,
2078 { "Absolute-Time-ofMBMS-Data-value", "m3ap.Absolute_Time_ofMBMS_Data_value",
2079 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_NTP_UTC
, NULL
, 0,
2082 { &hf_m3ap_IPAddress_v4
,
2083 { "IPAddress", "m3ap.IPAddress_v4",
2084 FT_IPv4
, BASE_NONE
, NULL
, 0,
2087 { &hf_m3ap_IPAddress_v6
,
2088 { "IPAddress", "m3ap.IPAddress_v6",
2089 FT_IPv6
, BASE_NONE
, NULL
, 0,
2093 { &hf_m3ap_Absolute_Time_ofMBMS_Data_PDU
,
2094 { "Absolute-Time-ofMBMS-Data", "m3ap.Absolute_Time_ofMBMS_Data",
2095 FT_BYTES
, BASE_NONE
, NULL
, 0,
2097 { &hf_m3ap_AllocationAndRetentionPriority_PDU
,
2098 { "AllocationAndRetentionPriority", "m3ap.AllocationAndRetentionPriority_element",
2099 FT_NONE
, BASE_NONE
, NULL
, 0,
2101 { &hf_m3ap_Cause_PDU
,
2102 { "Cause", "m3ap.Cause",
2103 FT_UINT32
, BASE_DEC
, VALS(m3ap_Cause_vals
), 0,
2105 { &hf_m3ap_CriticalityDiagnostics_PDU
,
2106 { "CriticalityDiagnostics", "m3ap.CriticalityDiagnostics_element",
2107 FT_NONE
, BASE_NONE
, NULL
, 0,
2109 { &hf_m3ap_Global_MCE_ID_PDU
,
2110 { "Global-MCE-ID", "m3ap.Global_MCE_ID_element",
2111 FT_NONE
, BASE_NONE
, NULL
, 0,
2113 { &hf_m3ap_MBMS_Cell_List_PDU
,
2114 { "MBMS-Cell-List", "m3ap.MBMS_Cell_List",
2115 FT_UINT32
, BASE_DEC
, NULL
, 0,
2117 { &hf_m3ap_MBMS_E_RAB_QoS_Parameters_PDU
,
2118 { "MBMS-E-RAB-QoS-Parameters", "m3ap.MBMS_E_RAB_QoS_Parameters_element",
2119 FT_NONE
, BASE_NONE
, NULL
, 0,
2121 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem_PDU
,
2122 { "MBMS-Service-associatedLogicalM3-ConnectionItem", "m3ap.MBMS_Service_associatedLogicalM3_ConnectionItem_element",
2123 FT_NONE
, BASE_NONE
, NULL
, 0,
2125 { &hf_m3ap_MBMS_Service_Area_PDU
,
2126 { "MBMS-Service-Area", "m3ap.MBMS_Service_Area",
2127 FT_BYTES
, BASE_NONE
, NULL
, 0,
2129 { &hf_m3ap_MBMS_Session_Duration_PDU
,
2130 { "MBMS-Session-Duration", "m3ap.MBMS_Session_Duration",
2131 FT_BYTES
, BASE_NONE
, NULL
, 0,
2133 { &hf_m3ap_MBMS_Session_ID_PDU
,
2134 { "MBMS-Session-ID", "m3ap.MBMS_Session_ID",
2135 FT_BYTES
, BASE_NONE
, NULL
, 0,
2137 { &hf_m3ap_MCE_MBMS_M3AP_ID_PDU
,
2138 { "MCE-MBMS-M3AP-ID", "m3ap.MCE_MBMS_M3AP_ID",
2139 FT_UINT32
, BASE_DEC
, NULL
, 0,
2141 { &hf_m3ap_MCEname_PDU
,
2142 { "MCEname", "m3ap.MCEname",
2143 FT_STRING
, BASE_NONE
, NULL
, 0,
2145 { &hf_m3ap_MinimumTimeToMBMSDataTransfer_PDU
,
2146 { "MinimumTimeToMBMSDataTransfer", "m3ap.MinimumTimeToMBMSDataTransfer",
2147 FT_BYTES
, BASE_NONE
, NULL
, 0,
2149 { &hf_m3ap_MME_MBMS_M3AP_ID_PDU
,
2150 { "MME-MBMS-M3AP-ID", "m3ap.MME_MBMS_M3AP_ID",
2151 FT_UINT32
, BASE_DEC
, NULL
, 0,
2153 { &hf_m3ap_Reestablishment_PDU
,
2154 { "Reestablishment", "m3ap.Reestablishment",
2155 FT_UINT32
, BASE_DEC
, VALS(m3ap_Reestablishment_vals
), 0,
2157 { &hf_m3ap_TimeToWait_PDU
,
2158 { "TimeToWait", "m3ap.TimeToWait",
2159 FT_UINT32
, BASE_DEC
, VALS(m3ap_TimeToWait_vals
), 0,
2161 { &hf_m3ap_TMGI_PDU
,
2162 { "TMGI", "m3ap.TMGI_element",
2163 FT_NONE
, BASE_NONE
, NULL
, 0,
2165 { &hf_m3ap_TNL_Information_PDU
,
2166 { "TNL-Information", "m3ap.TNL_Information_element",
2167 FT_NONE
, BASE_NONE
, NULL
, 0,
2169 { &hf_m3ap_MBMSSessionStartRequest_PDU
,
2170 { "MBMSSessionStartRequest", "m3ap.MBMSSessionStartRequest_element",
2171 FT_NONE
, BASE_NONE
, NULL
, 0,
2173 { &hf_m3ap_MBMSSessionStartResponse_PDU
,
2174 { "MBMSSessionStartResponse", "m3ap.MBMSSessionStartResponse_element",
2175 FT_NONE
, BASE_NONE
, NULL
, 0,
2177 { &hf_m3ap_MBMSSessionStartFailure_PDU
,
2178 { "MBMSSessionStartFailure", "m3ap.MBMSSessionStartFailure_element",
2179 FT_NONE
, BASE_NONE
, NULL
, 0,
2181 { &hf_m3ap_MBMSSessionStopRequest_PDU
,
2182 { "MBMSSessionStopRequest", "m3ap.MBMSSessionStopRequest_element",
2183 FT_NONE
, BASE_NONE
, NULL
, 0,
2185 { &hf_m3ap_MBMSSessionStopResponse_PDU
,
2186 { "MBMSSessionStopResponse", "m3ap.MBMSSessionStopResponse_element",
2187 FT_NONE
, BASE_NONE
, NULL
, 0,
2189 { &hf_m3ap_MBMSSessionUpdateRequest_PDU
,
2190 { "MBMSSessionUpdateRequest", "m3ap.MBMSSessionUpdateRequest_element",
2191 FT_NONE
, BASE_NONE
, NULL
, 0,
2193 { &hf_m3ap_MBMSSessionUpdateResponse_PDU
,
2194 { "MBMSSessionUpdateResponse", "m3ap.MBMSSessionUpdateResponse_element",
2195 FT_NONE
, BASE_NONE
, NULL
, 0,
2197 { &hf_m3ap_MBMSSessionUpdateFailure_PDU
,
2198 { "MBMSSessionUpdateFailure", "m3ap.MBMSSessionUpdateFailure_element",
2199 FT_NONE
, BASE_NONE
, NULL
, 0,
2201 { &hf_m3ap_ErrorIndication_PDU
,
2202 { "ErrorIndication", "m3ap.ErrorIndication_element",
2203 FT_NONE
, BASE_NONE
, NULL
, 0,
2205 { &hf_m3ap_Reset_PDU
,
2206 { "Reset", "m3ap.Reset_element",
2207 FT_NONE
, BASE_NONE
, NULL
, 0,
2209 { &hf_m3ap_ResetType_PDU
,
2210 { "ResetType", "m3ap.ResetType",
2211 FT_UINT32
, BASE_DEC
, VALS(m3ap_ResetType_vals
), 0,
2213 { &hf_m3ap_ResetAcknowledge_PDU
,
2214 { "ResetAcknowledge", "m3ap.ResetAcknowledge_element",
2215 FT_NONE
, BASE_NONE
, NULL
, 0,
2217 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_PDU
,
2218 { "MBMS-Service-associatedLogicalM3-ConnectionListResAck", "m3ap.MBMS_Service_associatedLogicalM3_ConnectionListResAck",
2219 FT_UINT32
, BASE_DEC
, NULL
, 0,
2221 { &hf_m3ap_PrivateMessage_PDU
,
2222 { "PrivateMessage", "m3ap.PrivateMessage_element",
2223 FT_NONE
, BASE_NONE
, NULL
, 0,
2225 { &hf_m3ap_M3SetupRequest_PDU
,
2226 { "M3SetupRequest", "m3ap.M3SetupRequest_element",
2227 FT_NONE
, BASE_NONE
, NULL
, 0,
2229 { &hf_m3ap_MBMSServiceAreaListItem_PDU
,
2230 { "MBMSServiceAreaListItem", "m3ap.MBMSServiceAreaListItem",
2231 FT_UINT32
, BASE_DEC
, NULL
, 0,
2233 { &hf_m3ap_M3SetupResponse_PDU
,
2234 { "M3SetupResponse", "m3ap.M3SetupResponse_element",
2235 FT_NONE
, BASE_NONE
, NULL
, 0,
2237 { &hf_m3ap_M3SetupFailure_PDU
,
2238 { "M3SetupFailure", "m3ap.M3SetupFailure_element",
2239 FT_NONE
, BASE_NONE
, NULL
, 0,
2241 { &hf_m3ap_MCEConfigurationUpdate_PDU
,
2242 { "MCEConfigurationUpdate", "m3ap.MCEConfigurationUpdate_element",
2243 FT_NONE
, BASE_NONE
, NULL
, 0,
2245 { &hf_m3ap_MCEConfigurationUpdateAcknowledge_PDU
,
2246 { "MCEConfigurationUpdateAcknowledge", "m3ap.MCEConfigurationUpdateAcknowledge_element",
2247 FT_NONE
, BASE_NONE
, NULL
, 0,
2249 { &hf_m3ap_MCEConfigurationUpdateFailure_PDU
,
2250 { "MCEConfigurationUpdateFailure", "m3ap.MCEConfigurationUpdateFailure_element",
2251 FT_NONE
, BASE_NONE
, NULL
, 0,
2253 { &hf_m3ap_M3AP_PDU_PDU
,
2254 { "M3AP-PDU", "m3ap.M3AP_PDU",
2255 FT_UINT32
, BASE_DEC
, VALS(m3ap_M3AP_PDU_vals
), 0,
2258 { "local", "m3ap.local",
2259 FT_UINT32
, BASE_DEC
, NULL
, 0,
2260 "INTEGER_0_maxPrivateIEs", HFILL
}},
2262 { "global", "m3ap.global",
2263 FT_OID
, BASE_NONE
, NULL
, 0,
2264 "OBJECT_IDENTIFIER", HFILL
}},
2265 { &hf_m3ap_ProtocolIE_Container_item
,
2266 { "ProtocolIE-Field", "m3ap.ProtocolIE_Field_element",
2267 FT_NONE
, BASE_NONE
, NULL
, 0,
2271 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &m3ap_ProtocolIE_ID_vals_ext
, 0,
2272 "ProtocolIE_ID", HFILL
}},
2273 { &hf_m3ap_criticality
,
2274 { "criticality", "m3ap.criticality",
2275 FT_UINT32
, BASE_DEC
, VALS(m3ap_Criticality_vals
), 0,
2277 { &hf_m3ap_ie_field_value
,
2278 { "value", "m3ap.value_element",
2279 FT_NONE
, BASE_NONE
, NULL
, 0,
2280 "T_ie_field_value", HFILL
}},
2281 { &hf_m3ap_ProtocolExtensionContainer_item
,
2282 { "ProtocolExtensionField", "m3ap.ProtocolExtensionField_element",
2283 FT_NONE
, BASE_NONE
, NULL
, 0,
2287 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &m3ap_ProtocolIE_ID_vals_ext
, 0,
2288 "ProtocolIE_ID", HFILL
}},
2289 { &hf_m3ap_extensionValue
,
2290 { "extensionValue", "m3ap.extensionValue_element",
2291 FT_NONE
, BASE_NONE
, NULL
, 0,
2293 { &hf_m3ap_PrivateIE_Container_item
,
2294 { "PrivateIE-Field", "m3ap.PrivateIE_Field_element",
2295 FT_NONE
, BASE_NONE
, NULL
, 0,
2297 { &hf_m3ap_private_id
,
2299 FT_UINT32
, BASE_DEC
, VALS(m3ap_PrivateIE_ID_vals
), 0,
2300 "PrivateIE_ID", HFILL
}},
2301 { &hf_m3ap_private_value
,
2302 { "value", "m3ap.value_element",
2303 FT_NONE
, BASE_NONE
, NULL
, 0,
2304 "T_private_value", HFILL
}},
2305 { &hf_m3ap_priorityLevel
,
2306 { "priorityLevel", "m3ap.priorityLevel",
2307 FT_UINT32
, BASE_DEC
, VALS(m3ap_PriorityLevel_vals
), 0,
2309 { &hf_m3ap_pre_emptionCapability
,
2310 { "pre-emptionCapability", "m3ap.pre_emptionCapability",
2311 FT_UINT32
, BASE_DEC
, VALS(m3ap_Pre_emptionCapability_vals
), 0,
2313 { &hf_m3ap_pre_emptionVulnerability
,
2314 { "pre-emptionVulnerability", "m3ap.pre_emptionVulnerability",
2315 FT_UINT32
, BASE_DEC
, VALS(m3ap_Pre_emptionVulnerability_vals
), 0,
2317 { &hf_m3ap_iE_Extensions
,
2318 { "iE-Extensions", "m3ap.iE_Extensions",
2319 FT_UINT32
, BASE_DEC
, NULL
, 0,
2320 "ProtocolExtensionContainer", HFILL
}},
2321 { &hf_m3ap_radioNetwork
,
2322 { "radioNetwork", "m3ap.radioNetwork",
2323 FT_UINT32
, BASE_DEC
, VALS(m3ap_CauseRadioNetwork_vals
), 0,
2324 "CauseRadioNetwork", HFILL
}},
2325 { &hf_m3ap_transport
,
2326 { "transport", "m3ap.transport",
2327 FT_UINT32
, BASE_DEC
, VALS(m3ap_CauseTransport_vals
), 0,
2328 "CauseTransport", HFILL
}},
2330 { "nAS", "m3ap.nAS",
2331 FT_UINT32
, BASE_DEC
, VALS(m3ap_CauseNAS_vals
), 0,
2332 "CauseNAS", HFILL
}},
2333 { &hf_m3ap_protocol
,
2334 { "protocol", "m3ap.protocol",
2335 FT_UINT32
, BASE_DEC
, VALS(m3ap_CauseProtocol_vals
), 0,
2336 "CauseProtocol", HFILL
}},
2338 { "misc", "m3ap.misc",
2339 FT_UINT32
, BASE_DEC
, VALS(m3ap_CauseMisc_vals
), 0,
2340 "CauseMisc", HFILL
}},
2341 { &hf_m3ap_procedureCode
,
2342 { "procedureCode", "m3ap.procedureCode",
2343 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &m3ap_ProcedureCode_vals_ext
, 0,
2345 { &hf_m3ap_triggeringMessage
,
2346 { "triggeringMessage", "m3ap.triggeringMessage",
2347 FT_UINT32
, BASE_DEC
, VALS(m3ap_TriggeringMessage_vals
), 0,
2349 { &hf_m3ap_procedureCriticality
,
2350 { "procedureCriticality", "m3ap.procedureCriticality",
2351 FT_UINT32
, BASE_DEC
, VALS(m3ap_Criticality_vals
), 0,
2352 "Criticality", HFILL
}},
2353 { &hf_m3ap_iEsCriticalityDiagnostics
,
2354 { "iEsCriticalityDiagnostics", "m3ap.iEsCriticalityDiagnostics",
2355 FT_UINT32
, BASE_DEC
, NULL
, 0,
2356 "CriticalityDiagnostics_IE_List", HFILL
}},
2357 { &hf_m3ap_CriticalityDiagnostics_IE_List_item
,
2358 { "CriticalityDiagnostics-IE-List item", "m3ap.CriticalityDiagnostics_IE_List_item_element",
2359 FT_NONE
, BASE_NONE
, NULL
, 0,
2361 { &hf_m3ap_iECriticality
,
2362 { "iECriticality", "m3ap.iECriticality",
2363 FT_UINT32
, BASE_DEC
, VALS(m3ap_Criticality_vals
), 0,
2364 "Criticality", HFILL
}},
2366 { "iE-ID", "m3ap.iE_ID",
2367 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &m3ap_ProtocolIE_ID_vals_ext
, 0,
2368 "ProtocolIE_ID", HFILL
}},
2369 { &hf_m3ap_typeOfError
,
2370 { "typeOfError", "m3ap.typeOfError",
2371 FT_UINT32
, BASE_DEC
, VALS(m3ap_TypeOfError_vals
), 0,
2373 { &hf_m3ap_pLMN_Identity
,
2374 { "pLMN-Identity", "m3ap.pLMN_Identity",
2375 FT_BYTES
, BASE_NONE
, NULL
, 0,
2377 { &hf_m3ap_eUTRANcellIdentifier
,
2378 { "eUTRANcellIdentifier", "m3ap.eUTRANcellIdentifier",
2379 FT_BYTES
, BASE_NONE
, NULL
, 0,
2382 { "mCE-ID", "m3ap.mCE_ID",
2383 FT_BYTES
, BASE_NONE
, NULL
, 0,
2385 { &hf_m3ap_extendedMCE_ID
,
2386 { "extendedMCE-ID", "m3ap.extendedMCE_ID",
2387 FT_BYTES
, BASE_NONE
, NULL
, 0,
2389 { &hf_m3ap_mBMS_E_RAB_MaximumBitrateDL
,
2390 { "mBMS-E-RAB-MaximumBitrateDL", "m3ap.mBMS_E_RAB_MaximumBitrateDL",
2391 FT_UINT64
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_bit_sec
), 0,
2392 "BitRate", HFILL
}},
2393 { &hf_m3ap_mBMS_E_RAB_GuaranteedBitrateDL
,
2394 { "mBMS-E-RAB-GuaranteedBitrateDL", "m3ap.mBMS_E_RAB_GuaranteedBitrateDL",
2395 FT_UINT64
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_bit_sec
), 0,
2396 "BitRate", HFILL
}},
2397 { &hf_m3ap_MBMS_Cell_List_item
,
2398 { "ECGI", "m3ap.ECGI_element",
2399 FT_NONE
, BASE_NONE
, NULL
, 0,
2402 { "qCI", "m3ap.qCI",
2403 FT_UINT32
, BASE_DEC
, NULL
, 0,
2405 { &hf_m3ap_gbrQosInformation
,
2406 { "gbrQosInformation", "m3ap.gbrQosInformation_element",
2407 FT_NONE
, BASE_NONE
, NULL
, 0,
2408 "GBR_QosInformation", HFILL
}},
2409 { &hf_m3ap_mME_MBMS_M3AP_ID
,
2410 { "mME-MBMS-M3AP-ID", "m3ap.mME_MBMS_M3AP_ID",
2411 FT_UINT32
, BASE_DEC
, NULL
, 0,
2413 { &hf_m3ap_mCE_MBMS_M3AP_ID
,
2414 { "mCE-MBMS-M3AP-ID", "m3ap.mCE_MBMS_M3AP_ID",
2415 FT_UINT32
, BASE_DEC
, NULL
, 0,
2417 { &hf_m3ap_pLMNidentity
,
2418 { "pLMNidentity", "m3ap.pLMNidentity",
2419 FT_BYTES
, BASE_NONE
, NULL
, 0,
2420 "PLMN_Identity", HFILL
}},
2421 { &hf_m3ap_serviceID
,
2422 { "serviceID", "m3ap.serviceID",
2423 FT_BYTES
, BASE_NONE
, NULL
, 0,
2424 "OCTET_STRING_SIZE_3", HFILL
}},
2425 { &hf_m3ap_iPMCAddress
,
2426 { "iPMCAddress", "m3ap.iPMCAddress",
2427 FT_BYTES
, BASE_NONE
, NULL
, 0,
2428 "IPAddress", HFILL
}},
2429 { &hf_m3ap_iPSourceAddress
,
2430 { "iPSourceAddress", "m3ap.iPSourceAddress",
2431 FT_BYTES
, BASE_NONE
, NULL
, 0,
2432 "IPAddress", HFILL
}},
2433 { &hf_m3ap_gTP_DLTEID
,
2434 { "gTP-DLTEID", "m3ap.gTP_DLTEID",
2435 FT_BYTES
, BASE_NONE
, NULL
, 0,
2436 "GTP_TEID", HFILL
}},
2437 { &hf_m3ap_protocolIEs
,
2438 { "protocolIEs", "m3ap.protocolIEs",
2439 FT_UINT32
, BASE_DEC
, NULL
, 0,
2440 "ProtocolIE_Container", HFILL
}},
2441 { &hf_m3ap_m3_Interface
,
2442 { "m3-Interface", "m3ap.m3_Interface",
2443 FT_UINT32
, BASE_DEC
, VALS(m3ap_ResetAll_vals
), 0,
2444 "ResetAll", HFILL
}},
2445 { &hf_m3ap_partOfM3_Interface
,
2446 { "partOfM3-Interface", "m3ap.partOfM3_Interface",
2447 FT_UINT32
, BASE_DEC
, NULL
, 0,
2448 "MBMS_Service_associatedLogicalM3_ConnectionListRes", HFILL
}},
2449 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes_item
,
2450 { "ProtocolIE-Single-Container", "m3ap.ProtocolIE_Single_Container_element",
2451 FT_NONE
, BASE_NONE
, NULL
, 0,
2453 { &hf_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck_item
,
2454 { "ProtocolIE-Single-Container", "m3ap.ProtocolIE_Single_Container_element",
2455 FT_NONE
, BASE_NONE
, NULL
, 0,
2457 { &hf_m3ap_privateIEs
,
2458 { "privateIEs", "m3ap.privateIEs",
2459 FT_UINT32
, BASE_DEC
, NULL
, 0,
2460 "PrivateIE_Container", HFILL
}},
2461 { &hf_m3ap_MBMSServiceAreaListItem_item
,
2462 { "MBMSServiceArea1", "m3ap.MBMSServiceArea1",
2463 FT_BYTES
, BASE_NONE
, NULL
, 0,
2465 { &hf_m3ap_initiatingMessage
,
2466 { "initiatingMessage", "m3ap.initiatingMessage_element",
2467 FT_NONE
, BASE_NONE
, NULL
, 0,
2469 { &hf_m3ap_successfulOutcome
,
2470 { "successfulOutcome", "m3ap.successfulOutcome_element",
2471 FT_NONE
, BASE_NONE
, NULL
, 0,
2473 { &hf_m3ap_unsuccessfulOutcome
,
2474 { "unsuccessfulOutcome", "m3ap.unsuccessfulOutcome_element",
2475 FT_NONE
, BASE_NONE
, NULL
, 0,
2477 { &hf_m3ap_initiatingMessagevalue
,
2478 { "value", "m3ap.value_element",
2479 FT_NONE
, BASE_NONE
, NULL
, 0,
2480 "InitiatingMessage_value", HFILL
}},
2481 { &hf_m3ap_successfulOutcome_value
,
2482 { "value", "m3ap.value_element",
2483 FT_NONE
, BASE_NONE
, NULL
, 0,
2484 "SuccessfulOutcome_value", HFILL
}},
2485 { &hf_m3ap_unsuccessfulOutcome_value
,
2486 { "value", "m3ap.value_element",
2487 FT_NONE
, BASE_NONE
, NULL
, 0,
2488 "UnsuccessfulOutcome_value", HFILL
}},
2491 /* List of subtrees */
2492 static int *ett
[] = {
2494 &ett_m3ap_IPAddress
,
2495 &ett_m3ap_PrivateIE_ID
,
2496 &ett_m3ap_ProtocolIE_Container
,
2497 &ett_m3ap_ProtocolIE_Field
,
2498 &ett_m3ap_ProtocolExtensionContainer
,
2499 &ett_m3ap_ProtocolExtensionField
,
2500 &ett_m3ap_PrivateIE_Container
,
2501 &ett_m3ap_PrivateIE_Field
,
2502 &ett_m3ap_AllocationAndRetentionPriority
,
2504 &ett_m3ap_CriticalityDiagnostics
,
2505 &ett_m3ap_CriticalityDiagnostics_IE_List
,
2506 &ett_m3ap_CriticalityDiagnostics_IE_List_item
,
2508 &ett_m3ap_Global_MCE_ID
,
2509 &ett_m3ap_GBR_QosInformation
,
2510 &ett_m3ap_MBMS_Cell_List
,
2511 &ett_m3ap_MBMS_E_RAB_QoS_Parameters
,
2512 &ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionItem
,
2514 &ett_m3ap_TNL_Information
,
2515 &ett_m3ap_MBMSSessionStartRequest
,
2516 &ett_m3ap_MBMSSessionStartResponse
,
2517 &ett_m3ap_MBMSSessionStartFailure
,
2518 &ett_m3ap_MBMSSessionStopRequest
,
2519 &ett_m3ap_MBMSSessionStopResponse
,
2520 &ett_m3ap_MBMSSessionUpdateRequest
,
2521 &ett_m3ap_MBMSSessionUpdateResponse
,
2522 &ett_m3ap_MBMSSessionUpdateFailure
,
2523 &ett_m3ap_ErrorIndication
,
2525 &ett_m3ap_ResetType
,
2526 &ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListRes
,
2527 &ett_m3ap_ResetAcknowledge
,
2528 &ett_m3ap_MBMS_Service_associatedLogicalM3_ConnectionListResAck
,
2529 &ett_m3ap_PrivateMessage
,
2530 &ett_m3ap_M3SetupRequest
,
2531 &ett_m3ap_MBMSServiceAreaListItem
,
2532 &ett_m3ap_M3SetupResponse
,
2533 &ett_m3ap_M3SetupFailure
,
2534 &ett_m3ap_MCEConfigurationUpdate
,
2535 &ett_m3ap_MCEConfigurationUpdateAcknowledge
,
2536 &ett_m3ap_MCEConfigurationUpdateFailure
,
2538 &ett_m3ap_InitiatingMessage
,
2539 &ett_m3ap_SuccessfulOutcome
,
2540 &ett_m3ap_UnsuccessfulOutcome
,
2543 expert_module_t
* expert_m3ap
;
2545 static ei_register_info ei
[] = {
2546 { &ei_m3ap_invalid_ip_address_len
, { "m3ap.invalid_ip_address_len", PI_MALFORMED
, PI_ERROR
, "Invalid IP address length", EXPFILL
}}
2549 /* Register protocol */
2550 proto_m3ap
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
2551 /* Register fields and subtrees */
2552 proto_register_field_array(proto_m3ap
, hf
, array_length(hf
));
2553 proto_register_subtree_array(ett
, array_length(ett
));
2554 expert_m3ap
= expert_register_protocol(proto_m3ap
);
2555 expert_register_field_array(expert_m3ap
, ei
, array_length(ei
));
2556 /* Register dissector */
2557 m3ap_handle
= register_dissector(PFNAME
, dissect_m3ap
, proto_m3ap
);
2559 /* Register dissector tables */
2560 m3ap_ies_dissector_table
= register_dissector_table("m3ap.ies", "M3AP-PROTOCOL-IES", proto_m3ap
, FT_UINT32
, BASE_DEC
);
2561 m3ap_extension_dissector_table
= register_dissector_table("m3ap.extension", "M3AP-PROTOCOL-EXTENSION", proto_m3ap
, FT_UINT32
, BASE_DEC
);
2562 m3ap_proc_imsg_dissector_table
= register_dissector_table("m3ap.proc.imsg", "M3AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_m3ap
, FT_UINT32
, BASE_DEC
);
2563 m3ap_proc_sout_dissector_table
= register_dissector_table("m3ap.proc.sout", "M3AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_m3ap
, FT_UINT32
, BASE_DEC
);
2564 m3ap_proc_uout_dissector_table
= register_dissector_table("m3ap.proc.uout", "M3AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_m3ap
, FT_UINT32
, BASE_DEC
);
2568 /*--- proto_reg_handoff_m3ap ---------------------------------------*/
2570 proto_reg_handoff_m3ap(void)
2572 static bool inited
= false;
2573 static unsigned SctpPort
;
2576 dissector_add_uint("sctp.ppi", PROTO_3GPP_M3AP_PROTOCOL_ID
, m3ap_handle
);
2578 dissector_add_uint("m3ap.ies", id_MME_MBMS_M3AP_ID
, create_dissector_handle(dissect_MME_MBMS_M3AP_ID_PDU
, proto_m3ap
));
2579 dissector_add_uint("m3ap.ies", id_MCE_MBMS_M3AP_ID
, create_dissector_handle(dissect_MCE_MBMS_M3AP_ID_PDU
, proto_m3ap
));
2580 dissector_add_uint("m3ap.ies", id_TMGI
, create_dissector_handle(dissect_TMGI_PDU
, proto_m3ap
));
2581 dissector_add_uint("m3ap.ies", id_MBMS_Session_ID
, create_dissector_handle(dissect_MBMS_Session_ID_PDU
, proto_m3ap
));
2582 dissector_add_uint("m3ap.ies", id_MBMS_E_RAB_QoS_Parameters
, create_dissector_handle(dissect_MBMS_E_RAB_QoS_Parameters_PDU
, proto_m3ap
));
2583 dissector_add_uint("m3ap.ies", id_MBMS_Session_Duration
, create_dissector_handle(dissect_MBMS_Session_Duration_PDU
, proto_m3ap
));
2584 dissector_add_uint("m3ap.ies", id_MBMS_Service_Area
, create_dissector_handle(dissect_MBMS_Service_Area_PDU
, proto_m3ap
));
2585 dissector_add_uint("m3ap.ies", id_TNL_Information
, create_dissector_handle(dissect_TNL_Information_PDU
, proto_m3ap
));
2586 dissector_add_uint("m3ap.ies", id_CriticalityDiagnostics
, create_dissector_handle(dissect_CriticalityDiagnostics_PDU
, proto_m3ap
));
2587 dissector_add_uint("m3ap.ies", id_Cause
, create_dissector_handle(dissect_Cause_PDU
, proto_m3ap
));
2588 dissector_add_uint("m3ap.ies", id_TimeToWait
, create_dissector_handle(dissect_TimeToWait_PDU
, proto_m3ap
));
2589 dissector_add_uint("m3ap.ies", id_ResetType
, create_dissector_handle(dissect_ResetType_PDU
, proto_m3ap
));
2590 dissector_add_uint("m3ap.ies", id_MBMS_Service_associatedLogicalM3_ConnectionItem
, create_dissector_handle(dissect_MBMS_Service_associatedLogicalM3_ConnectionItem_PDU
, proto_m3ap
));
2591 dissector_add_uint("m3ap.ies", id_MBMS_Service_associatedLogicalM3_ConnectionListResAck
, create_dissector_handle(dissect_MBMS_Service_associatedLogicalM3_ConnectionListResAck_PDU
, proto_m3ap
));
2592 dissector_add_uint("m3ap.ies", id_MinimumTimeToMBMSDataTransfer
, create_dissector_handle(dissect_MinimumTimeToMBMSDataTransfer_PDU
, proto_m3ap
));
2593 dissector_add_uint("m3ap.ies", id_AllocationAndRetentionPriority
, create_dissector_handle(dissect_AllocationAndRetentionPriority_PDU
, proto_m3ap
));
2594 dissector_add_uint("m3ap.ies", id_Global_MCE_ID
, create_dissector_handle(dissect_Global_MCE_ID_PDU
, proto_m3ap
));
2595 dissector_add_uint("m3ap.ies", id_MCEname
, create_dissector_handle(dissect_MCEname_PDU
, proto_m3ap
));
2596 dissector_add_uint("m3ap.ies", id_MBMSServiceAreaList
, create_dissector_handle(dissect_MBMSServiceAreaListItem_PDU
, proto_m3ap
));
2597 dissector_add_uint("m3ap.ies", id_Time_ofMBMS_DataTransfer
, create_dissector_handle(dissect_Absolute_Time_ofMBMS_Data_PDU
, proto_m3ap
));
2598 dissector_add_uint("m3ap.ies", id_Time_ofMBMS_DataStop
, create_dissector_handle(dissect_Absolute_Time_ofMBMS_Data_PDU
, proto_m3ap
));
2599 dissector_add_uint("m3ap.ies", id_Reestablishment
, create_dissector_handle(dissect_Reestablishment_PDU
, proto_m3ap
));
2600 dissector_add_uint("m3ap.ies", id_Alternative_TNL_Information
, create_dissector_handle(dissect_TNL_Information_PDU
, proto_m3ap
));
2601 dissector_add_uint("m3ap.ies", id_MBMS_Cell_List
, create_dissector_handle(dissect_MBMS_Cell_List_PDU
, proto_m3ap
));
2602 dissector_add_uint("m3ap.proc.imsg", id_mBMSsessionStart
, create_dissector_handle(dissect_MBMSSessionStartRequest_PDU
, proto_m3ap
));
2603 dissector_add_uint("m3ap.proc.sout", id_mBMSsessionStart
, create_dissector_handle(dissect_MBMSSessionStartResponse_PDU
, proto_m3ap
));
2604 dissector_add_uint("m3ap.proc.uout", id_mBMSsessionStart
, create_dissector_handle(dissect_MBMSSessionStartFailure_PDU
, proto_m3ap
));
2605 dissector_add_uint("m3ap.proc.imsg", id_mBMSsessionStop
, create_dissector_handle(dissect_MBMSSessionStopRequest_PDU
, proto_m3ap
));
2606 dissector_add_uint("m3ap.proc.sout", id_mBMSsessionStop
, create_dissector_handle(dissect_MBMSSessionStopResponse_PDU
, proto_m3ap
));
2607 dissector_add_uint("m3ap.proc.imsg", id_mBMSsessionUpdate
, create_dissector_handle(dissect_MBMSSessionUpdateRequest_PDU
, proto_m3ap
));
2608 dissector_add_uint("m3ap.proc.sout", id_mBMSsessionUpdate
, create_dissector_handle(dissect_MBMSSessionUpdateResponse_PDU
, proto_m3ap
));
2609 dissector_add_uint("m3ap.proc.uout", id_mBMSsessionUpdate
, create_dissector_handle(dissect_MBMSSessionUpdateFailure_PDU
, proto_m3ap
));
2610 dissector_add_uint("m3ap.proc.imsg", id_errorIndication
, create_dissector_handle(dissect_ErrorIndication_PDU
, proto_m3ap
));
2611 dissector_add_uint("m3ap.proc.imsg", id_Reset
, create_dissector_handle(dissect_Reset_PDU
, proto_m3ap
));
2612 dissector_add_uint("m3ap.proc.sout", id_Reset
, create_dissector_handle(dissect_ResetAcknowledge_PDU
, proto_m3ap
));
2613 dissector_add_uint("m3ap.proc.imsg", id_privateMessage
, create_dissector_handle(dissect_PrivateMessage_PDU
, proto_m3ap
));
2614 dissector_add_uint("m3ap.proc.imsg", id_mCEConfigurationUpdate
, create_dissector_handle(dissect_MCEConfigurationUpdate_PDU
, proto_m3ap
));
2615 dissector_add_uint("m3ap.proc.sout", id_mCEConfigurationUpdate
, create_dissector_handle(dissect_MCEConfigurationUpdateAcknowledge_PDU
, proto_m3ap
));
2616 dissector_add_uint("m3ap.proc.uout", id_mCEConfigurationUpdate
, create_dissector_handle(dissect_MCEConfigurationUpdateFailure_PDU
, proto_m3ap
));
2617 dissector_add_uint("m3ap.proc.imsg", id_m3Setup
, create_dissector_handle(dissect_M3SetupRequest_PDU
, proto_m3ap
));
2618 dissector_add_uint("m3ap.proc.sout", id_m3Setup
, create_dissector_handle(dissect_M3SetupResponse_PDU
, proto_m3ap
));
2619 dissector_add_uint("m3ap.proc.uout", id_m3Setup
, create_dissector_handle(dissect_M3SetupFailure_PDU
, proto_m3ap
));
2621 dissector_add_uint("m3ap.extension", 17, create_dissector_handle(dissect_AllocationAndRetentionPriority_PDU
, proto_m3ap
));
2624 if (SctpPort
!= 0) {
2625 dissector_delete_uint("sctp.port", SctpPort
, m3ap_handle
);
2629 SctpPort
= global_m3ap_port
;
2630 if (SctpPort
!= 0) {
2631 dissector_add_uint("sctp.port", SctpPort
, m3ap_handle
);