Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-rua.c
blob2101c00413432e21dc1094548a8eff4f16d80bb1
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-rua.c */
4 /* asn2wrs.py -q -L -p rua -c ./rua.cnf -s ./packet-rua-template -D . -O ../.. RUA-CommonDataTypes.asn RUA-Constants.asn RUA-Containers.asn RUA-IEs.asn RUA-PDU-Contents.asn RUA-PDU-Descriptions.asn */
6 /* packet-rua-template.c
7 * Routines for UMTS Home Node B RANAP User Adaptation (RUA) packet dissection
8 * Copyright 2010 Neil Piercy, ip.access Limited <Neil.Piercy@ipaccess.com>
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
16 * Ref: 3GPP TS 25.468 version 8.1.0 Release 8
19 #include "config.h"
21 #include <epan/packet.h>
22 #include <epan/sctpppids.h>
23 #include <epan/asn1.h>
24 #include <epan/prefs.h>
25 #include <wsutil/array.h>
27 #include "packet-per.h"
29 #ifdef _MSC_VER
30 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
31 #pragma warning(disable:4146)
32 #endif
34 #define PNAME "UTRAN Iuh interface RUA signalling"
35 #define PSNAME "RUA"
36 #define PFNAME "rua"
37 /* Dissector to use SCTP PPID 19 or a configured SCTP port. IANA assigned port = 29169*/
38 #define SCTP_PORT_RUA 29169
40 void proto_register_rua(void);
42 #define maxPrivateIEs 65535
43 #define maxProtocolExtensions 65535
44 #define maxProtocolIEs 65535
45 #define maxNrOfErrors 256
47 typedef enum _ProcedureCode_enum {
48 id_Connect = 1,
49 id_DirectTransfer = 2,
50 id_Disconnect = 3,
51 id_ConnectionlessTransfer = 4,
52 id_ErrorIndication = 5,
53 id_privateMessage = 6
54 } ProcedureCode_enum;
56 typedef enum _ProtocolIE_ID_enum {
57 id_Cause = 1,
58 id_CriticalityDiagnostics = 2,
59 id_Context_ID = 3,
60 id_RANAP_Message = 4,
61 id_IntraDomainNasNodeSelector = 5,
62 id_Establishment_Cause = 6,
63 id_CN_DomainIndicator = 7,
64 id_CSGMembershipStatus = 9
65 } ProtocolIE_ID_enum;
67 /* Initialize the protocol and registered fields */
68 static int proto_rua;
70 static int hf_rua_CN_DomainIndicator_PDU; /* CN_DomainIndicator */
71 static int hf_rua_CSGMembershipStatus_PDU; /* CSGMembershipStatus */
72 static int hf_rua_Establishment_Cause_PDU; /* Establishment_Cause */
73 static int hf_rua_Context_ID_PDU; /* Context_ID */
74 static int hf_rua_IntraDomainNasNodeSelector_PDU; /* IntraDomainNasNodeSelector */
75 static int hf_rua_RANAP_Message_PDU; /* RANAP_Message */
76 static int hf_rua_Cause_PDU; /* Cause */
77 static int hf_rua_CriticalityDiagnostics_PDU; /* CriticalityDiagnostics */
78 static int hf_rua_Connect_PDU; /* Connect */
79 static int hf_rua_DirectTransfer_PDU; /* DirectTransfer */
80 static int hf_rua_Disconnect_PDU; /* Disconnect */
81 static int hf_rua_ConnectionlessTransfer_PDU; /* ConnectionlessTransfer */
82 static int hf_rua_ErrorIndication_PDU; /* ErrorIndication */
83 static int hf_rua_PrivateMessage_PDU; /* PrivateMessage */
84 static int hf_rua_RUA_PDU_PDU; /* RUA_PDU */
85 static int hf_rua_local; /* INTEGER_0_65535 */
86 static int hf_rua_global; /* OBJECT_IDENTIFIER */
87 static int hf_rua_ProtocolIE_Container_item; /* ProtocolIE_Field */
88 static int hf_rua_protocol_ie_field_id; /* ProtocolIE_ID */
89 static int hf_rua_criticality; /* Criticality */
90 static int hf_rua_ie_field_value; /* ProtocolIE_Field_value */
91 static int hf_rua_ProtocolExtensionContainer_item; /* ProtocolExtensionField */
92 static int hf_rua_id; /* ProtocolIE_ID */
93 static int hf_rua_extensionValue; /* T_extensionValue */
94 static int hf_rua_PrivateIE_Container_item; /* PrivateIE_Field */
95 static int hf_rua_private_ie_field_id; /* PrivateIE_ID */
96 static int hf_rua_private_value; /* PrivateIE_Field_value */
97 static int hf_rua_version; /* T_version */
98 static int hf_rua_release99; /* T_release99 */
99 static int hf_rua_cn_Type; /* T_cn_Type */
100 static int hf_rua_gsm_Map_IDNNS; /* Gsm_map_IDNNS */
101 static int hf_rua_ansi_41_IDNNS; /* Ansi_41_IDNNS */
102 static int hf_rua_later; /* T_later */
103 static int hf_rua_futurecoding; /* BIT_STRING_SIZE_15 */
104 static int hf_rua_routingbasis; /* T_routingbasis */
105 static int hf_rua_localPTMSI; /* T_localPTMSI */
106 static int hf_rua_routingparameter; /* RoutingParameter */
107 static int hf_rua_tMSIofsamePLMN; /* T_tMSIofsamePLMN */
108 static int hf_rua_tMSIofdifferentPLMN; /* T_tMSIofdifferentPLMN */
109 static int hf_rua_iMSIresponsetopaging; /* T_iMSIresponsetopaging */
110 static int hf_rua_iMSIcauseUEinitiatedEvent; /* T_iMSIcauseUEinitiatedEvent */
111 static int hf_rua_iMEI; /* T_iMEI */
112 static int hf_rua_spare2; /* T_spare2 */
113 static int hf_rua_spare1; /* T_spare1 */
114 static int hf_rua_dummy; /* BOOLEAN */
115 static int hf_rua_radioNetwork; /* CauseRadioNetwork */
116 static int hf_rua_transport; /* CauseTransport */
117 static int hf_rua_protocol; /* CauseProtocol */
118 static int hf_rua_misc; /* CauseMisc */
119 static int hf_rua_procedureCode; /* ProcedureCode */
120 static int hf_rua_triggeringMessage; /* TriggeringMessage */
121 static int hf_rua_procedureCriticality; /* Criticality */
122 static int hf_rua_iEsCriticalityDiagnostics; /* CriticalityDiagnostics_IE_List */
123 static int hf_rua_iE_Extensions; /* ProtocolExtensionContainer */
124 static int hf_rua_CriticalityDiagnostics_IE_List_item; /* CriticalityDiagnostics_IE_List_item */
125 static int hf_rua_iECriticality; /* Criticality */
126 static int hf_rua_iE_ID; /* ProtocolIE_ID */
127 static int hf_rua_typeOfError; /* TypeOfError */
128 static int hf_rua_protocolIEs; /* ProtocolIE_Container */
129 static int hf_rua_protocolExtensions; /* ProtocolExtensionContainer */
130 static int hf_rua_privateIEs; /* PrivateIE_Container */
131 static int hf_rua_initiatingMessage; /* InitiatingMessage */
132 static int hf_rua_successfulOutcome; /* SuccessfulOutcome */
133 static int hf_rua_unsuccessfulOutcome; /* UnsuccessfulOutcome */
134 static int hf_rua_initiatingMessagevalue; /* InitiatingMessage_value */
135 static int hf_rua_successfulOutcome_value; /* SuccessfulOutcome_value */
136 static int hf_rua_unsuccessfulOutcome_value; /* UnsuccessfulOutcome_value */
138 /* Initialize the subtree pointers */
139 static int ett_rua;
141 /* initialise sub-dissector handles */
142 static dissector_handle_t ranap_handle = NULL;
144 static int ett_rua_PrivateIE_ID;
145 static int ett_rua_ProtocolIE_Container;
146 static int ett_rua_ProtocolIE_Field;
147 static int ett_rua_ProtocolExtensionContainer;
148 static int ett_rua_ProtocolExtensionField;
149 static int ett_rua_PrivateIE_Container;
150 static int ett_rua_PrivateIE_Field;
151 static int ett_rua_IntraDomainNasNodeSelector;
152 static int ett_rua_T_version;
153 static int ett_rua_T_release99;
154 static int ett_rua_T_cn_Type;
155 static int ett_rua_T_later;
156 static int ett_rua_Gsm_map_IDNNS;
157 static int ett_rua_T_routingbasis;
158 static int ett_rua_T_localPTMSI;
159 static int ett_rua_T_tMSIofsamePLMN;
160 static int ett_rua_T_tMSIofdifferentPLMN;
161 static int ett_rua_T_iMSIresponsetopaging;
162 static int ett_rua_T_iMSIcauseUEinitiatedEvent;
163 static int ett_rua_T_iMEI;
164 static int ett_rua_T_spare2;
165 static int ett_rua_T_spare1;
166 static int ett_rua_Cause;
167 static int ett_rua_CriticalityDiagnostics;
168 static int ett_rua_CriticalityDiagnostics_IE_List;
169 static int ett_rua_CriticalityDiagnostics_IE_List_item;
170 static int ett_rua_Connect;
171 static int ett_rua_DirectTransfer;
172 static int ett_rua_Disconnect;
173 static int ett_rua_ConnectionlessTransfer;
174 static int ett_rua_ErrorIndication;
175 static int ett_rua_PrivateMessage;
176 static int ett_rua_RUA_PDU;
177 static int ett_rua_InitiatingMessage;
178 static int ett_rua_SuccessfulOutcome;
179 static int ett_rua_UnsuccessfulOutcome;
181 /* Global variables */
182 static uint32_t ProcedureCode;
183 static uint32_t ProtocolIE_ID;
185 /* Dissector tables */
186 static dissector_table_t rua_ies_dissector_table;
187 static dissector_table_t rua_extension_dissector_table;
188 static dissector_table_t rua_proc_imsg_dissector_table;
189 static dissector_table_t rua_proc_sout_dissector_table;
190 static dissector_table_t rua_proc_uout_dissector_table;
192 static dissector_handle_t rua_handle;
194 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
195 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
196 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
197 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
198 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
200 void proto_reg_handoff_rua(void);
203 static const value_string rua_Criticality_vals[] = {
204 { 0, "reject" },
205 { 1, "ignore" },
206 { 2, "notify" },
207 { 0, NULL }
211 static int
212 dissect_rua_Criticality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
213 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
214 3, NULL, false, 0, NULL);
216 return offset;
220 static const value_string rua_ProcedureCode_vals[] = {
221 { id_Connect, "id-Connect" },
222 { id_DirectTransfer, "id-DirectTransfer" },
223 { id_Disconnect, "id-Disconnect" },
224 { id_ConnectionlessTransfer, "id-ConnectionlessTransfer" },
225 { id_ErrorIndication, "id-ErrorIndication" },
226 { id_privateMessage, "id-privateMessage" },
227 { 0, NULL }
231 static int
232 dissect_rua_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
233 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
234 0U, 255U, &ProcedureCode, false);
236 if (strcmp(val_to_str_const(ProcedureCode, rua_ProcedureCode_vals, "Unknown"), "Unknown") == 0) {
237 col_set_str(actx->pinfo->cinfo, COL_INFO,
238 "Unknown Message ");
239 } /* Known Procedures should be included below and broken out as ELEMENTARY names to avoid confusion */
241 return offset;
246 static int
247 dissect_rua_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
248 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
249 0U, 65535U, NULL, false);
251 return offset;
256 static int
257 dissect_rua_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
258 offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
260 return offset;
264 static const value_string rua_PrivateIE_ID_vals[] = {
265 { 0, "local" },
266 { 1, "global" },
267 { 0, NULL }
270 static const per_choice_t PrivateIE_ID_choice[] = {
271 { 0, &hf_rua_local , ASN1_NO_EXTENSIONS , dissect_rua_INTEGER_0_65535 },
272 { 1, &hf_rua_global , ASN1_NO_EXTENSIONS , dissect_rua_OBJECT_IDENTIFIER },
273 { 0, NULL, 0, NULL }
276 static int
277 dissect_rua_PrivateIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
278 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
279 ett_rua_PrivateIE_ID, PrivateIE_ID_choice,
280 NULL);
282 return offset;
286 static const value_string rua_ProtocolIE_ID_vals[] = {
287 { id_Cause, "id-Cause" },
288 { id_CriticalityDiagnostics, "id-CriticalityDiagnostics" },
289 { id_Context_ID, "id-Context-ID" },
290 { id_RANAP_Message, "id-RANAP-Message" },
291 { id_IntraDomainNasNodeSelector, "id-IntraDomainNasNodeSelector" },
292 { id_Establishment_Cause, "id-Establishment-Cause" },
293 { id_CN_DomainIndicator, "id-CN-DomainIndicator" },
294 { id_CSGMembershipStatus, "id-CSGMembershipStatus" },
295 { 0, NULL }
299 static int
300 dissect_rua_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
301 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
302 0U, maxProtocolIEs, &ProtocolIE_ID, false);
304 if (tree) {
305 proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
306 val_to_str(ProtocolIE_ID, VALS(rua_ProtocolIE_ID_vals), "unknown (%d)"));
308 return offset;
312 static const value_string rua_TriggeringMessage_vals[] = {
313 { 0, "initiating-message" },
314 { 1, "successful-outcome" },
315 { 2, "unsuccessful-outcome" },
316 { 0, NULL }
320 static int
321 dissect_rua_TriggeringMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
322 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
323 3, NULL, false, 0, NULL);
325 return offset;
330 static int
331 dissect_rua_ProtocolIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
332 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
334 return offset;
338 static const per_sequence_t ProtocolIE_Field_sequence[] = {
339 { &hf_rua_protocol_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
340 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
341 { &hf_rua_ie_field_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field_value },
342 { NULL, 0, 0, NULL }
345 static int
346 dissect_rua_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
347 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
348 ett_rua_ProtocolIE_Field, ProtocolIE_Field_sequence);
350 return offset;
354 static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
355 { &hf_rua_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field },
358 static int
359 dissect_rua_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
360 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
361 ett_rua_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
362 0, maxProtocolIEs, false);
364 return offset;
369 static int
370 dissect_rua_T_extensionValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
371 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
373 return offset;
377 static const per_sequence_t ProtocolExtensionField_sequence[] = {
378 { &hf_rua_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
379 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
380 { &hf_rua_extensionValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_extensionValue },
381 { NULL, 0, 0, NULL }
384 static int
385 dissect_rua_ProtocolExtensionField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
386 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
387 ett_rua_ProtocolExtensionField, ProtocolExtensionField_sequence);
389 return offset;
393 static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
394 { &hf_rua_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolExtensionField },
397 static int
398 dissect_rua_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
399 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
400 ett_rua_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
401 1, maxProtocolExtensions, false);
403 return offset;
408 static int
409 dissect_rua_PrivateIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
410 offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
412 return offset;
416 static const per_sequence_t PrivateIE_Field_sequence[] = {
417 { &hf_rua_private_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_ID },
418 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
419 { &hf_rua_private_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field_value },
420 { NULL, 0, 0, NULL }
423 static int
424 dissect_rua_PrivateIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
425 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
426 ett_rua_PrivateIE_Field, PrivateIE_Field_sequence);
428 return offset;
432 static const per_sequence_t PrivateIE_Container_sequence_of[1] = {
433 { &hf_rua_PrivateIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field },
436 static int
437 dissect_rua_PrivateIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
438 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
439 ett_rua_PrivateIE_Container, PrivateIE_Container_sequence_of,
440 1, maxPrivateIEs, false);
442 return offset;
446 static const value_string rua_CN_DomainIndicator_vals[] = {
447 { 0, "cs-domain" },
448 { 1, "ps-domain" },
449 { 0, NULL }
453 static int
454 dissect_rua_CN_DomainIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
455 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
456 2, NULL, false, 0, NULL);
458 return offset;
462 static const value_string rua_CSGMembershipStatus_vals[] = {
463 { 0, "member" },
464 { 1, "non-member" },
465 { 0, NULL }
469 static int
470 dissect_rua_CSGMembershipStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
471 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
472 2, NULL, true, 0, NULL);
474 return offset;
478 static const value_string rua_Establishment_Cause_vals[] = {
479 { 0, "emergency-call" },
480 { 1, "normal-call" },
481 { 0, NULL }
485 static int
486 dissect_rua_Establishment_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
487 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
488 2, NULL, true, 0, NULL);
490 return offset;
495 static int
496 dissect_rua_Context_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
497 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
498 24, 24, false, NULL, 0, NULL, NULL);
500 return offset;
505 static int
506 dissect_rua_RoutingParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
507 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
508 10, 10, false, NULL, 0, NULL, NULL);
510 return offset;
514 static const per_sequence_t T_localPTMSI_sequence[] = {
515 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
516 { NULL, 0, 0, NULL }
519 static int
520 dissect_rua_T_localPTMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
521 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
522 ett_rua_T_localPTMSI, T_localPTMSI_sequence);
524 return offset;
528 static const per_sequence_t T_tMSIofsamePLMN_sequence[] = {
529 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
530 { NULL, 0, 0, NULL }
533 static int
534 dissect_rua_T_tMSIofsamePLMN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
535 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
536 ett_rua_T_tMSIofsamePLMN, T_tMSIofsamePLMN_sequence);
538 return offset;
542 static const per_sequence_t T_tMSIofdifferentPLMN_sequence[] = {
543 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
544 { NULL, 0, 0, NULL }
547 static int
548 dissect_rua_T_tMSIofdifferentPLMN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
549 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
550 ett_rua_T_tMSIofdifferentPLMN, T_tMSIofdifferentPLMN_sequence);
552 return offset;
556 static const per_sequence_t T_iMSIresponsetopaging_sequence[] = {
557 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
558 { NULL, 0, 0, NULL }
561 static int
562 dissect_rua_T_iMSIresponsetopaging(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
563 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
564 ett_rua_T_iMSIresponsetopaging, T_iMSIresponsetopaging_sequence);
566 return offset;
570 static const per_sequence_t T_iMSIcauseUEinitiatedEvent_sequence[] = {
571 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
572 { NULL, 0, 0, NULL }
575 static int
576 dissect_rua_T_iMSIcauseUEinitiatedEvent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
577 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
578 ett_rua_T_iMSIcauseUEinitiatedEvent, T_iMSIcauseUEinitiatedEvent_sequence);
580 return offset;
584 static const per_sequence_t T_iMEI_sequence[] = {
585 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
586 { NULL, 0, 0, NULL }
589 static int
590 dissect_rua_T_iMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
591 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
592 ett_rua_T_iMEI, T_iMEI_sequence);
594 return offset;
598 static const per_sequence_t T_spare2_sequence[] = {
599 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
600 { NULL, 0, 0, NULL }
603 static int
604 dissect_rua_T_spare2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
605 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
606 ett_rua_T_spare2, T_spare2_sequence);
608 return offset;
612 static const per_sequence_t T_spare1_sequence[] = {
613 { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
614 { NULL, 0, 0, NULL }
617 static int
618 dissect_rua_T_spare1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
619 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
620 ett_rua_T_spare1, T_spare1_sequence);
622 return offset;
626 static const value_string rua_T_routingbasis_vals[] = {
627 { 0, "localPTMSI" },
628 { 1, "tMSIofsamePLMN" },
629 { 2, "tMSIofdifferentPLMN" },
630 { 3, "iMSIresponsetopaging" },
631 { 4, "iMSIcauseUEinitiatedEvent" },
632 { 5, "iMEI" },
633 { 6, "spare2" },
634 { 7, "spare1" },
635 { 0, NULL }
638 static const per_choice_t T_routingbasis_choice[] = {
639 { 0, &hf_rua_localPTMSI , ASN1_NO_EXTENSIONS , dissect_rua_T_localPTMSI },
640 { 1, &hf_rua_tMSIofsamePLMN , ASN1_NO_EXTENSIONS , dissect_rua_T_tMSIofsamePLMN },
641 { 2, &hf_rua_tMSIofdifferentPLMN, ASN1_NO_EXTENSIONS , dissect_rua_T_tMSIofdifferentPLMN },
642 { 3, &hf_rua_iMSIresponsetopaging, ASN1_NO_EXTENSIONS , dissect_rua_T_iMSIresponsetopaging },
643 { 4, &hf_rua_iMSIcauseUEinitiatedEvent, ASN1_NO_EXTENSIONS , dissect_rua_T_iMSIcauseUEinitiatedEvent },
644 { 5, &hf_rua_iMEI , ASN1_NO_EXTENSIONS , dissect_rua_T_iMEI },
645 { 6, &hf_rua_spare2 , ASN1_NO_EXTENSIONS , dissect_rua_T_spare2 },
646 { 7, &hf_rua_spare1 , ASN1_NO_EXTENSIONS , dissect_rua_T_spare1 },
647 { 0, NULL, 0, NULL }
650 static int
651 dissect_rua_T_routingbasis(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
652 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
653 ett_rua_T_routingbasis, T_routingbasis_choice,
654 NULL);
656 return offset;
661 static int
662 dissect_rua_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
663 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
665 return offset;
669 static const per_sequence_t Gsm_map_IDNNS_sequence[] = {
670 { &hf_rua_routingbasis , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_routingbasis },
671 { &hf_rua_dummy , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_BOOLEAN },
672 { NULL, 0, 0, NULL }
675 static int
676 dissect_rua_Gsm_map_IDNNS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
677 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
678 ett_rua_Gsm_map_IDNNS, Gsm_map_IDNNS_sequence);
680 return offset;
685 static int
686 dissect_rua_Ansi_41_IDNNS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
687 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
688 14, 14, false, NULL, 0, NULL, NULL);
690 return offset;
694 static const value_string rua_T_cn_Type_vals[] = {
695 { 0, "gsm-Map-IDNNS" },
696 { 1, "ansi-41-IDNNS" },
697 { 0, NULL }
700 static const per_choice_t T_cn_Type_choice[] = {
701 { 0, &hf_rua_gsm_Map_IDNNS , ASN1_NO_EXTENSIONS , dissect_rua_Gsm_map_IDNNS },
702 { 1, &hf_rua_ansi_41_IDNNS , ASN1_NO_EXTENSIONS , dissect_rua_Ansi_41_IDNNS },
703 { 0, NULL, 0, NULL }
706 static int
707 dissect_rua_T_cn_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
708 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
709 ett_rua_T_cn_Type, T_cn_Type_choice,
710 NULL);
712 return offset;
716 static const per_sequence_t T_release99_sequence[] = {
717 { &hf_rua_cn_Type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_cn_Type },
718 { NULL, 0, 0, NULL }
721 static int
722 dissect_rua_T_release99(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
723 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
724 ett_rua_T_release99, T_release99_sequence);
726 return offset;
731 static int
732 dissect_rua_BIT_STRING_SIZE_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
733 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
734 15, 15, false, NULL, 0, NULL, NULL);
736 return offset;
740 static const per_sequence_t T_later_sequence[] = {
741 { &hf_rua_futurecoding , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_BIT_STRING_SIZE_15 },
742 { NULL, 0, 0, NULL }
745 static int
746 dissect_rua_T_later(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
747 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
748 ett_rua_T_later, T_later_sequence);
750 return offset;
754 static const value_string rua_T_version_vals[] = {
755 { 0, "release99" },
756 { 1, "later" },
757 { 0, NULL }
760 static const per_choice_t T_version_choice[] = {
761 { 0, &hf_rua_release99 , ASN1_NO_EXTENSIONS , dissect_rua_T_release99 },
762 { 1, &hf_rua_later , ASN1_NO_EXTENSIONS , dissect_rua_T_later },
763 { 0, NULL, 0, NULL }
766 static int
767 dissect_rua_T_version(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
768 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
769 ett_rua_T_version, T_version_choice,
770 NULL);
772 return offset;
776 static const per_sequence_t IntraDomainNasNodeSelector_sequence[] = {
777 { &hf_rua_version , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_version },
778 { NULL, 0, 0, NULL }
781 static int
782 dissect_rua_IntraDomainNasNodeSelector(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
783 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
784 ett_rua_IntraDomainNasNodeSelector, IntraDomainNasNodeSelector_sequence);
786 return offset;
791 static int
792 dissect_rua_RANAP_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
793 tvbuff_t *ranap_message_tvb=NULL;
794 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
795 NO_BOUND, NO_BOUND, false, &ranap_message_tvb);
797 if ((tvb_reported_length(ranap_message_tvb)>0)&&(ranap_handle)) { /* RUA has a RANAP-PDU */
798 col_set_str(actx->pinfo->cinfo, COL_INFO,
799 "(RUA) "); /* Set info to (RUA) to make room for RANAP */
800 col_set_fence(actx->pinfo->cinfo, COL_INFO);
801 call_dissector(ranap_handle,ranap_message_tvb,actx->pinfo, proto_tree_get_root(tree));
804 return offset;
808 static const value_string rua_CauseRadioNetwork_vals[] = {
809 { 0, "normal" },
810 { 1, "connect-failed" },
811 { 2, "network-release" },
812 { 3, "unspecified" },
813 { 0, NULL }
817 static int
818 dissect_rua_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
819 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
820 4, NULL, true, 0, NULL);
822 return offset;
826 static const value_string rua_CauseTransport_vals[] = {
827 { 0, "transport-resource-unavailable" },
828 { 1, "unspecified" },
829 { 0, NULL }
833 static int
834 dissect_rua_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
835 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
836 2, NULL, true, 0, NULL);
838 return offset;
842 static const value_string rua_CauseProtocol_vals[] = {
843 { 0, "transfer-syntax-error" },
844 { 1, "abstract-syntax-error-reject" },
845 { 2, "abstract-syntax-error-ignore-and-notify" },
846 { 3, "message-not-compatible-with-receiver-state" },
847 { 4, "semantic-error" },
848 { 5, "unspecified" },
849 { 6, "abstract-syntax-error-falsely-constructed-message" },
850 { 0, NULL }
854 static int
855 dissect_rua_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
856 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
857 7, NULL, true, 0, NULL);
859 return offset;
863 static const value_string rua_CauseMisc_vals[] = {
864 { 0, "processing-overload" },
865 { 1, "hardware-failure" },
866 { 2, "o-and-m-intervention" },
867 { 3, "unspecified" },
868 { 0, NULL }
872 static int
873 dissect_rua_CauseMisc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
874 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
875 4, NULL, true, 0, NULL);
877 return offset;
881 static const value_string rua_Cause_vals[] = {
882 { 0, "radioNetwork" },
883 { 1, "transport" },
884 { 2, "protocol" },
885 { 3, "misc" },
886 { 0, NULL }
889 static const per_choice_t Cause_choice[] = {
890 { 0, &hf_rua_radioNetwork , ASN1_EXTENSION_ROOT , dissect_rua_CauseRadioNetwork },
891 { 1, &hf_rua_transport , ASN1_EXTENSION_ROOT , dissect_rua_CauseTransport },
892 { 2, &hf_rua_protocol , ASN1_EXTENSION_ROOT , dissect_rua_CauseProtocol },
893 { 3, &hf_rua_misc , ASN1_EXTENSION_ROOT , dissect_rua_CauseMisc },
894 { 0, NULL, 0, NULL }
897 static int
898 dissect_rua_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
899 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
900 ett_rua_Cause, Cause_choice,
901 NULL);
903 return offset;
907 static const value_string rua_TypeOfError_vals[] = {
908 { 0, "not-understood" },
909 { 1, "missing" },
910 { 0, NULL }
914 static int
915 dissect_rua_TypeOfError(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
916 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
917 2, NULL, true, 0, NULL);
919 return offset;
923 static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
924 { &hf_rua_iECriticality , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
925 { &hf_rua_iE_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
926 { &hf_rua_typeOfError , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_TypeOfError },
927 { &hf_rua_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
928 { NULL, 0, 0, NULL }
931 static int
932 dissect_rua_CriticalityDiagnostics_IE_List_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
933 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
934 ett_rua_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
936 return offset;
940 static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
941 { &hf_rua_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_CriticalityDiagnostics_IE_List_item },
944 static int
945 dissect_rua_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
946 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
947 ett_rua_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
948 1, maxNrOfErrors, false);
950 return offset;
954 static const per_sequence_t CriticalityDiagnostics_sequence[] = {
955 { &hf_rua_procedureCode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProcedureCode },
956 { &hf_rua_triggeringMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_TriggeringMessage },
957 { &hf_rua_procedureCriticality, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_Criticality },
958 { &hf_rua_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_CriticalityDiagnostics_IE_List },
959 { &hf_rua_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
960 { NULL, 0, 0, NULL }
963 static int
964 dissect_rua_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
965 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
966 ett_rua_CriticalityDiagnostics, CriticalityDiagnostics_sequence);
968 return offset;
972 static const per_sequence_t Connect_sequence[] = {
973 { &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
974 { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
975 { NULL, 0, 0, NULL }
978 static int
979 dissect_rua_Connect(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
980 col_set_str(actx->pinfo->cinfo, COL_INFO,
981 "CONNECT ");
982 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
983 ett_rua_Connect, Connect_sequence);
987 return offset;
991 static const per_sequence_t DirectTransfer_sequence[] = {
992 { &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
993 { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
994 { NULL, 0, 0, NULL }
997 static int
998 dissect_rua_DirectTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
999 col_set_str(actx->pinfo->cinfo, COL_INFO,
1000 "DIRECT_TRANSFER ");
1001 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1002 ett_rua_DirectTransfer, DirectTransfer_sequence);
1006 return offset;
1010 static const per_sequence_t Disconnect_sequence[] = {
1011 { &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1012 { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
1013 { NULL, 0, 0, NULL }
1016 static int
1017 dissect_rua_Disconnect(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1018 col_set_str(actx->pinfo->cinfo, COL_INFO,
1019 "DISCONNECT ");
1020 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1021 ett_rua_Disconnect, Disconnect_sequence);
1025 return offset;
1029 static const per_sequence_t ConnectionlessTransfer_sequence[] = {
1030 { &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1031 { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
1032 { NULL, 0, 0, NULL }
1035 static int
1036 dissect_rua_ConnectionlessTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1037 col_set_str(actx->pinfo->cinfo, COL_INFO,
1038 "CONNECTIONLESS_TRANSFER ");
1039 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1040 ett_rua_ConnectionlessTransfer, ConnectionlessTransfer_sequence);
1044 return offset;
1048 static const per_sequence_t ErrorIndication_sequence[] = {
1049 { &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1050 { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
1051 { NULL, 0, 0, NULL }
1054 static int
1055 dissect_rua_ErrorIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1056 col_set_str(actx->pinfo->cinfo, COL_INFO,
1057 "ERROR_INDICATION ");
1058 col_set_fence(actx->pinfo->cinfo, COL_INFO); /* Protect info from CriticalityDiagnostics decodes */
1059 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1060 ett_rua_ErrorIndication, ErrorIndication_sequence);
1064 return offset;
1068 static const per_sequence_t PrivateMessage_sequence[] = {
1069 { &hf_rua_privateIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Container },
1070 { NULL, 0, 0, NULL }
1073 static int
1074 dissect_rua_PrivateMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1075 col_set_str(actx->pinfo->cinfo, COL_INFO,
1076 "PRIVATE_MESSAGE ");
1077 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1078 ett_rua_PrivateMessage, PrivateMessage_sequence);
1082 return offset;
1087 static int
1088 dissect_rua_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1089 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
1091 return offset;
1095 static const per_sequence_t InitiatingMessage_sequence[] = {
1096 { &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
1097 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
1098 { &hf_rua_initiatingMessagevalue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_InitiatingMessage_value },
1099 { NULL, 0, 0, NULL }
1102 static int
1103 dissect_rua_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1104 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1105 ett_rua_InitiatingMessage, InitiatingMessage_sequence);
1107 return offset;
1112 static int
1113 dissect_rua_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1114 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
1116 return offset;
1120 static const per_sequence_t SuccessfulOutcome_sequence[] = {
1121 { &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
1122 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
1123 { &hf_rua_successfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_SuccessfulOutcome_value },
1124 { NULL, 0, 0, NULL }
1127 static int
1128 dissect_rua_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1129 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1130 ett_rua_SuccessfulOutcome, SuccessfulOutcome_sequence);
1132 return offset;
1137 static int
1138 dissect_rua_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1139 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
1141 return offset;
1145 static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
1146 { &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
1147 { &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
1148 { &hf_rua_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_UnsuccessfulOutcome_value },
1149 { NULL, 0, 0, NULL }
1152 static int
1153 dissect_rua_UnsuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1154 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1155 ett_rua_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
1157 return offset;
1161 static const value_string rua_RUA_PDU_vals[] = {
1162 { 0, "initiatingMessage" },
1163 { 1, "successfulOutcome" },
1164 { 2, "unsuccessfulOutcome" },
1165 { 0, NULL }
1168 static const per_choice_t RUA_PDU_choice[] = {
1169 { 0, &hf_rua_initiatingMessage, ASN1_EXTENSION_ROOT , dissect_rua_InitiatingMessage },
1170 { 1, &hf_rua_successfulOutcome, ASN1_EXTENSION_ROOT , dissect_rua_SuccessfulOutcome },
1171 { 2, &hf_rua_unsuccessfulOutcome, ASN1_EXTENSION_ROOT , dissect_rua_UnsuccessfulOutcome },
1172 { 0, NULL, 0, NULL }
1175 static int
1176 dissect_rua_RUA_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1177 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1178 ett_rua_RUA_PDU, RUA_PDU_choice,
1179 NULL);
1181 return offset;
1184 /*--- PDUs ---*/
1186 static int dissect_CN_DomainIndicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1187 int offset = 0;
1188 asn1_ctx_t asn1_ctx;
1189 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1190 offset = dissect_rua_CN_DomainIndicator(tvb, offset, &asn1_ctx, tree, hf_rua_CN_DomainIndicator_PDU);
1191 offset += 7; offset >>= 3;
1192 return offset;
1194 static int dissect_CSGMembershipStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1195 int offset = 0;
1196 asn1_ctx_t asn1_ctx;
1197 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1198 offset = dissect_rua_CSGMembershipStatus(tvb, offset, &asn1_ctx, tree, hf_rua_CSGMembershipStatus_PDU);
1199 offset += 7; offset >>= 3;
1200 return offset;
1202 static int dissect_Establishment_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1203 int offset = 0;
1204 asn1_ctx_t asn1_ctx;
1205 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1206 offset = dissect_rua_Establishment_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Establishment_Cause_PDU);
1207 offset += 7; offset >>= 3;
1208 return offset;
1210 static int dissect_Context_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1211 int offset = 0;
1212 asn1_ctx_t asn1_ctx;
1213 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1214 offset = dissect_rua_Context_ID(tvb, offset, &asn1_ctx, tree, hf_rua_Context_ID_PDU);
1215 offset += 7; offset >>= 3;
1216 return offset;
1218 static int dissect_IntraDomainNasNodeSelector_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1219 int offset = 0;
1220 asn1_ctx_t asn1_ctx;
1221 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1222 offset = dissect_rua_IntraDomainNasNodeSelector(tvb, offset, &asn1_ctx, tree, hf_rua_IntraDomainNasNodeSelector_PDU);
1223 offset += 7; offset >>= 3;
1224 return offset;
1226 static int dissect_RANAP_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1227 int offset = 0;
1228 asn1_ctx_t asn1_ctx;
1229 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1230 offset = dissect_rua_RANAP_Message(tvb, offset, &asn1_ctx, tree, hf_rua_RANAP_Message_PDU);
1231 offset += 7; offset >>= 3;
1232 return offset;
1234 static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1235 int offset = 0;
1236 asn1_ctx_t asn1_ctx;
1237 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1238 offset = dissect_rua_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Cause_PDU);
1239 offset += 7; offset >>= 3;
1240 return offset;
1242 static int dissect_CriticalityDiagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1243 int offset = 0;
1244 asn1_ctx_t asn1_ctx;
1245 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1246 offset = dissect_rua_CriticalityDiagnostics(tvb, offset, &asn1_ctx, tree, hf_rua_CriticalityDiagnostics_PDU);
1247 offset += 7; offset >>= 3;
1248 return offset;
1250 static int dissect_Connect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1251 int offset = 0;
1252 asn1_ctx_t asn1_ctx;
1253 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1254 offset = dissect_rua_Connect(tvb, offset, &asn1_ctx, tree, hf_rua_Connect_PDU);
1255 offset += 7; offset >>= 3;
1256 return offset;
1258 static int dissect_DirectTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1259 int offset = 0;
1260 asn1_ctx_t asn1_ctx;
1261 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1262 offset = dissect_rua_DirectTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_DirectTransfer_PDU);
1263 offset += 7; offset >>= 3;
1264 return offset;
1266 static int dissect_Disconnect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1267 int offset = 0;
1268 asn1_ctx_t asn1_ctx;
1269 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1270 offset = dissect_rua_Disconnect(tvb, offset, &asn1_ctx, tree, hf_rua_Disconnect_PDU);
1271 offset += 7; offset >>= 3;
1272 return offset;
1274 static int dissect_ConnectionlessTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1275 int offset = 0;
1276 asn1_ctx_t asn1_ctx;
1277 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1278 offset = dissect_rua_ConnectionlessTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_ConnectionlessTransfer_PDU);
1279 offset += 7; offset >>= 3;
1280 return offset;
1282 static int dissect_ErrorIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1283 int offset = 0;
1284 asn1_ctx_t asn1_ctx;
1285 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1286 offset = dissect_rua_ErrorIndication(tvb, offset, &asn1_ctx, tree, hf_rua_ErrorIndication_PDU);
1287 offset += 7; offset >>= 3;
1288 return offset;
1290 static int dissect_PrivateMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1291 int offset = 0;
1292 asn1_ctx_t asn1_ctx;
1293 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1294 offset = dissect_rua_PrivateMessage(tvb, offset, &asn1_ctx, tree, hf_rua_PrivateMessage_PDU);
1295 offset += 7; offset >>= 3;
1296 return offset;
1298 static int dissect_RUA_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1299 int offset = 0;
1300 asn1_ctx_t asn1_ctx;
1301 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1302 offset = dissect_rua_RUA_PDU(tvb, offset, &asn1_ctx, tree, hf_rua_RUA_PDU_PDU);
1303 offset += 7; offset >>= 3;
1304 return offset;
1308 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1310 return (dissector_try_uint_with_data(rua_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1313 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1315 return (dissector_try_uint_with_data(rua_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1318 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1320 return (dissector_try_uint_with_data(rua_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1323 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1325 return (dissector_try_uint_with_data(rua_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1328 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1330 return (dissector_try_uint_with_data(rua_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1333 static int
1334 dissect_rua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
1336 proto_item *rua_item = NULL;
1337 proto_tree *rua_tree = NULL;
1339 /* make entry in the Protocol column on summary display */
1340 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RUA");
1342 /* create the rua protocol tree */
1343 rua_item = proto_tree_add_item(tree, proto_rua, tvb, 0, -1, ENC_NA);
1344 rua_tree = proto_item_add_subtree(rua_item, ett_rua);
1346 return dissect_RUA_PDU_PDU(tvb, pinfo, rua_tree, data);
1349 /*--- proto_register_rua -------------------------------------------*/
1350 void proto_register_rua(void) {
1352 /* List of fields */
1354 static hf_register_info hf[] = {
1356 { &hf_rua_CN_DomainIndicator_PDU,
1357 { "CN-DomainIndicator", "rua.CN_DomainIndicator",
1358 FT_UINT32, BASE_DEC, VALS(rua_CN_DomainIndicator_vals), 0,
1359 NULL, HFILL }},
1360 { &hf_rua_CSGMembershipStatus_PDU,
1361 { "CSGMembershipStatus", "rua.CSGMembershipStatus",
1362 FT_UINT32, BASE_DEC, VALS(rua_CSGMembershipStatus_vals), 0,
1363 NULL, HFILL }},
1364 { &hf_rua_Establishment_Cause_PDU,
1365 { "Establishment-Cause", "rua.Establishment_Cause",
1366 FT_UINT32, BASE_DEC, VALS(rua_Establishment_Cause_vals), 0,
1367 NULL, HFILL }},
1368 { &hf_rua_Context_ID_PDU,
1369 { "Context-ID", "rua.Context_ID",
1370 FT_BYTES, BASE_NONE, NULL, 0,
1371 NULL, HFILL }},
1372 { &hf_rua_IntraDomainNasNodeSelector_PDU,
1373 { "IntraDomainNasNodeSelector", "rua.IntraDomainNasNodeSelector_element",
1374 FT_NONE, BASE_NONE, NULL, 0,
1375 NULL, HFILL }},
1376 { &hf_rua_RANAP_Message_PDU,
1377 { "RANAP-Message", "rua.RANAP_Message",
1378 FT_BYTES, BASE_NONE, NULL, 0,
1379 NULL, HFILL }},
1380 { &hf_rua_Cause_PDU,
1381 { "Cause", "rua.Cause",
1382 FT_UINT32, BASE_DEC, VALS(rua_Cause_vals), 0,
1383 NULL, HFILL }},
1384 { &hf_rua_CriticalityDiagnostics_PDU,
1385 { "CriticalityDiagnostics", "rua.CriticalityDiagnostics_element",
1386 FT_NONE, BASE_NONE, NULL, 0,
1387 NULL, HFILL }},
1388 { &hf_rua_Connect_PDU,
1389 { "Connect", "rua.Connect_element",
1390 FT_NONE, BASE_NONE, NULL, 0,
1391 NULL, HFILL }},
1392 { &hf_rua_DirectTransfer_PDU,
1393 { "DirectTransfer", "rua.DirectTransfer_element",
1394 FT_NONE, BASE_NONE, NULL, 0,
1395 NULL, HFILL }},
1396 { &hf_rua_Disconnect_PDU,
1397 { "Disconnect", "rua.Disconnect_element",
1398 FT_NONE, BASE_NONE, NULL, 0,
1399 NULL, HFILL }},
1400 { &hf_rua_ConnectionlessTransfer_PDU,
1401 { "ConnectionlessTransfer", "rua.ConnectionlessTransfer_element",
1402 FT_NONE, BASE_NONE, NULL, 0,
1403 NULL, HFILL }},
1404 { &hf_rua_ErrorIndication_PDU,
1405 { "ErrorIndication", "rua.ErrorIndication_element",
1406 FT_NONE, BASE_NONE, NULL, 0,
1407 NULL, HFILL }},
1408 { &hf_rua_PrivateMessage_PDU,
1409 { "PrivateMessage", "rua.PrivateMessage_element",
1410 FT_NONE, BASE_NONE, NULL, 0,
1411 NULL, HFILL }},
1412 { &hf_rua_RUA_PDU_PDU,
1413 { "RUA-PDU", "rua.RUA_PDU",
1414 FT_UINT32, BASE_DEC, VALS(rua_RUA_PDU_vals), 0,
1415 NULL, HFILL }},
1416 { &hf_rua_local,
1417 { "local", "rua.local",
1418 FT_UINT32, BASE_DEC, NULL, 0,
1419 "INTEGER_0_65535", HFILL }},
1420 { &hf_rua_global,
1421 { "global", "rua.global",
1422 FT_OID, BASE_NONE, NULL, 0,
1423 "OBJECT_IDENTIFIER", HFILL }},
1424 { &hf_rua_ProtocolIE_Container_item,
1425 { "ProtocolIE-Field", "rua.ProtocolIE_Field_element",
1426 FT_NONE, BASE_NONE, NULL, 0,
1427 NULL, HFILL }},
1428 { &hf_rua_protocol_ie_field_id,
1429 { "id", "rua.id",
1430 FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1431 "ProtocolIE_ID", HFILL }},
1432 { &hf_rua_criticality,
1433 { "criticality", "rua.criticality",
1434 FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1435 NULL, HFILL }},
1436 { &hf_rua_ie_field_value,
1437 { "value", "rua.value_element",
1438 FT_NONE, BASE_NONE, NULL, 0,
1439 "ProtocolIE_Field_value", HFILL }},
1440 { &hf_rua_ProtocolExtensionContainer_item,
1441 { "ProtocolExtensionField", "rua.ProtocolExtensionField_element",
1442 FT_NONE, BASE_NONE, NULL, 0,
1443 NULL, HFILL }},
1444 { &hf_rua_id,
1445 { "id", "rua.id",
1446 FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1447 "ProtocolIE_ID", HFILL }},
1448 { &hf_rua_extensionValue,
1449 { "extensionValue", "rua.extensionValue_element",
1450 FT_NONE, BASE_NONE, NULL, 0,
1451 NULL, HFILL }},
1452 { &hf_rua_PrivateIE_Container_item,
1453 { "PrivateIE-Field", "rua.PrivateIE_Field_element",
1454 FT_NONE, BASE_NONE, NULL, 0,
1455 NULL, HFILL }},
1456 { &hf_rua_private_ie_field_id,
1457 { "id", "rua.id",
1458 FT_UINT32, BASE_DEC, VALS(rua_PrivateIE_ID_vals), 0,
1459 "PrivateIE_ID", HFILL }},
1460 { &hf_rua_private_value,
1461 { "value", "rua.value_element",
1462 FT_NONE, BASE_NONE, NULL, 0,
1463 "PrivateIE_Field_value", HFILL }},
1464 { &hf_rua_version,
1465 { "version", "rua.version",
1466 FT_UINT32, BASE_DEC, VALS(rua_T_version_vals), 0,
1467 NULL, HFILL }},
1468 { &hf_rua_release99,
1469 { "release99", "rua.release99_element",
1470 FT_NONE, BASE_NONE, NULL, 0,
1471 NULL, HFILL }},
1472 { &hf_rua_cn_Type,
1473 { "cn-Type", "rua.cn_Type",
1474 FT_UINT32, BASE_DEC, VALS(rua_T_cn_Type_vals), 0,
1475 NULL, HFILL }},
1476 { &hf_rua_gsm_Map_IDNNS,
1477 { "gsm-Map-IDNNS", "rua.gsm_Map_IDNNS_element",
1478 FT_NONE, BASE_NONE, NULL, 0,
1479 NULL, HFILL }},
1480 { &hf_rua_ansi_41_IDNNS,
1481 { "ansi-41-IDNNS", "rua.ansi_41_IDNNS",
1482 FT_BYTES, BASE_NONE, NULL, 0,
1483 NULL, HFILL }},
1484 { &hf_rua_later,
1485 { "later", "rua.later_element",
1486 FT_NONE, BASE_NONE, NULL, 0,
1487 NULL, HFILL }},
1488 { &hf_rua_futurecoding,
1489 { "futurecoding", "rua.futurecoding",
1490 FT_BYTES, BASE_NONE, NULL, 0,
1491 "BIT_STRING_SIZE_15", HFILL }},
1492 { &hf_rua_routingbasis,
1493 { "routingbasis", "rua.routingbasis",
1494 FT_UINT32, BASE_DEC, VALS(rua_T_routingbasis_vals), 0,
1495 NULL, HFILL }},
1496 { &hf_rua_localPTMSI,
1497 { "localPTMSI", "rua.localPTMSI_element",
1498 FT_NONE, BASE_NONE, NULL, 0,
1499 NULL, HFILL }},
1500 { &hf_rua_routingparameter,
1501 { "routingparameter", "rua.routingparameter",
1502 FT_BYTES, BASE_NONE, NULL, 0,
1503 NULL, HFILL }},
1504 { &hf_rua_tMSIofsamePLMN,
1505 { "tMSIofsamePLMN", "rua.tMSIofsamePLMN_element",
1506 FT_NONE, BASE_NONE, NULL, 0,
1507 NULL, HFILL }},
1508 { &hf_rua_tMSIofdifferentPLMN,
1509 { "tMSIofdifferentPLMN", "rua.tMSIofdifferentPLMN_element",
1510 FT_NONE, BASE_NONE, NULL, 0,
1511 NULL, HFILL }},
1512 { &hf_rua_iMSIresponsetopaging,
1513 { "iMSIresponsetopaging", "rua.iMSIresponsetopaging_element",
1514 FT_NONE, BASE_NONE, NULL, 0,
1515 NULL, HFILL }},
1516 { &hf_rua_iMSIcauseUEinitiatedEvent,
1517 { "iMSIcauseUEinitiatedEvent", "rua.iMSIcauseUEinitiatedEvent_element",
1518 FT_NONE, BASE_NONE, NULL, 0,
1519 NULL, HFILL }},
1520 { &hf_rua_iMEI,
1521 { "iMEI", "rua.iMEI_element",
1522 FT_NONE, BASE_NONE, NULL, 0,
1523 NULL, HFILL }},
1524 { &hf_rua_spare2,
1525 { "spare2", "rua.spare2_element",
1526 FT_NONE, BASE_NONE, NULL, 0,
1527 NULL, HFILL }},
1528 { &hf_rua_spare1,
1529 { "spare1", "rua.spare1_element",
1530 FT_NONE, BASE_NONE, NULL, 0,
1531 NULL, HFILL }},
1532 { &hf_rua_dummy,
1533 { "dummy", "rua.dummy",
1534 FT_BOOLEAN, BASE_NONE, NULL, 0,
1535 "BOOLEAN", HFILL }},
1536 { &hf_rua_radioNetwork,
1537 { "radioNetwork", "rua.radioNetwork",
1538 FT_UINT32, BASE_DEC, VALS(rua_CauseRadioNetwork_vals), 0,
1539 "CauseRadioNetwork", HFILL }},
1540 { &hf_rua_transport,
1541 { "transport", "rua.transport",
1542 FT_UINT32, BASE_DEC, VALS(rua_CauseTransport_vals), 0,
1543 "CauseTransport", HFILL }},
1544 { &hf_rua_protocol,
1545 { "protocol", "rua.protocol",
1546 FT_UINT32, BASE_DEC, VALS(rua_CauseProtocol_vals), 0,
1547 "CauseProtocol", HFILL }},
1548 { &hf_rua_misc,
1549 { "misc", "rua.misc",
1550 FT_UINT32, BASE_DEC, VALS(rua_CauseMisc_vals), 0,
1551 "CauseMisc", HFILL }},
1552 { &hf_rua_procedureCode,
1553 { "procedureCode", "rua.procedureCode",
1554 FT_UINT32, BASE_DEC, VALS(rua_ProcedureCode_vals), 0,
1555 NULL, HFILL }},
1556 { &hf_rua_triggeringMessage,
1557 { "triggeringMessage", "rua.triggeringMessage",
1558 FT_UINT32, BASE_DEC, VALS(rua_TriggeringMessage_vals), 0,
1559 NULL, HFILL }},
1560 { &hf_rua_procedureCriticality,
1561 { "procedureCriticality", "rua.procedureCriticality",
1562 FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1563 "Criticality", HFILL }},
1564 { &hf_rua_iEsCriticalityDiagnostics,
1565 { "iEsCriticalityDiagnostics", "rua.iEsCriticalityDiagnostics",
1566 FT_UINT32, BASE_DEC, NULL, 0,
1567 "CriticalityDiagnostics_IE_List", HFILL }},
1568 { &hf_rua_iE_Extensions,
1569 { "iE-Extensions", "rua.iE_Extensions",
1570 FT_UINT32, BASE_DEC, NULL, 0,
1571 "ProtocolExtensionContainer", HFILL }},
1572 { &hf_rua_CriticalityDiagnostics_IE_List_item,
1573 { "CriticalityDiagnostics-IE-List item", "rua.CriticalityDiagnostics_IE_List_item_element",
1574 FT_NONE, BASE_NONE, NULL, 0,
1575 NULL, HFILL }},
1576 { &hf_rua_iECriticality,
1577 { "iECriticality", "rua.iECriticality",
1578 FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1579 "Criticality", HFILL }},
1580 { &hf_rua_iE_ID,
1581 { "iE-ID", "rua.iE_ID",
1582 FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1583 "ProtocolIE_ID", HFILL }},
1584 { &hf_rua_typeOfError,
1585 { "typeOfError", "rua.typeOfError",
1586 FT_UINT32, BASE_DEC, VALS(rua_TypeOfError_vals), 0,
1587 NULL, HFILL }},
1588 { &hf_rua_protocolIEs,
1589 { "protocolIEs", "rua.protocolIEs",
1590 FT_UINT32, BASE_DEC, NULL, 0,
1591 "ProtocolIE_Container", HFILL }},
1592 { &hf_rua_protocolExtensions,
1593 { "protocolExtensions", "rua.protocolExtensions",
1594 FT_UINT32, BASE_DEC, NULL, 0,
1595 "ProtocolExtensionContainer", HFILL }},
1596 { &hf_rua_privateIEs,
1597 { "privateIEs", "rua.privateIEs",
1598 FT_UINT32, BASE_DEC, NULL, 0,
1599 "PrivateIE_Container", HFILL }},
1600 { &hf_rua_initiatingMessage,
1601 { "initiatingMessage", "rua.initiatingMessage_element",
1602 FT_NONE, BASE_NONE, NULL, 0,
1603 NULL, HFILL }},
1604 { &hf_rua_successfulOutcome,
1605 { "successfulOutcome", "rua.successfulOutcome_element",
1606 FT_NONE, BASE_NONE, NULL, 0,
1607 NULL, HFILL }},
1608 { &hf_rua_unsuccessfulOutcome,
1609 { "unsuccessfulOutcome", "rua.unsuccessfulOutcome_element",
1610 FT_NONE, BASE_NONE, NULL, 0,
1611 NULL, HFILL }},
1612 { &hf_rua_initiatingMessagevalue,
1613 { "value", "rua.value_element",
1614 FT_NONE, BASE_NONE, NULL, 0,
1615 "InitiatingMessage_value", HFILL }},
1616 { &hf_rua_successfulOutcome_value,
1617 { "value", "rua.value_element",
1618 FT_NONE, BASE_NONE, NULL, 0,
1619 "SuccessfulOutcome_value", HFILL }},
1620 { &hf_rua_unsuccessfulOutcome_value,
1621 { "value", "rua.value_element",
1622 FT_NONE, BASE_NONE, NULL, 0,
1623 "UnsuccessfulOutcome_value", HFILL }},
1626 /* List of subtrees */
1627 static int *ett[] = {
1628 &ett_rua,
1629 &ett_rua_PrivateIE_ID,
1630 &ett_rua_ProtocolIE_Container,
1631 &ett_rua_ProtocolIE_Field,
1632 &ett_rua_ProtocolExtensionContainer,
1633 &ett_rua_ProtocolExtensionField,
1634 &ett_rua_PrivateIE_Container,
1635 &ett_rua_PrivateIE_Field,
1636 &ett_rua_IntraDomainNasNodeSelector,
1637 &ett_rua_T_version,
1638 &ett_rua_T_release99,
1639 &ett_rua_T_cn_Type,
1640 &ett_rua_T_later,
1641 &ett_rua_Gsm_map_IDNNS,
1642 &ett_rua_T_routingbasis,
1643 &ett_rua_T_localPTMSI,
1644 &ett_rua_T_tMSIofsamePLMN,
1645 &ett_rua_T_tMSIofdifferentPLMN,
1646 &ett_rua_T_iMSIresponsetopaging,
1647 &ett_rua_T_iMSIcauseUEinitiatedEvent,
1648 &ett_rua_T_iMEI,
1649 &ett_rua_T_spare2,
1650 &ett_rua_T_spare1,
1651 &ett_rua_Cause,
1652 &ett_rua_CriticalityDiagnostics,
1653 &ett_rua_CriticalityDiagnostics_IE_List,
1654 &ett_rua_CriticalityDiagnostics_IE_List_item,
1655 &ett_rua_Connect,
1656 &ett_rua_DirectTransfer,
1657 &ett_rua_Disconnect,
1658 &ett_rua_ConnectionlessTransfer,
1659 &ett_rua_ErrorIndication,
1660 &ett_rua_PrivateMessage,
1661 &ett_rua_RUA_PDU,
1662 &ett_rua_InitiatingMessage,
1663 &ett_rua_SuccessfulOutcome,
1664 &ett_rua_UnsuccessfulOutcome,
1668 /* Register protocol */
1669 proto_rua = proto_register_protocol(PNAME, PSNAME, PFNAME);
1670 /* Register fields and subtrees */
1671 proto_register_field_array(proto_rua, hf, array_length(hf));
1672 proto_register_subtree_array(ett, array_length(ett));
1674 /* Register dissector */
1675 rua_handle = register_dissector("rua", dissect_rua, proto_rua);
1677 /* Register dissector tables */
1678 rua_ies_dissector_table = register_dissector_table("rua.ies", "RUA-PROTOCOL-IES", proto_rua, FT_UINT32, BASE_DEC);
1679 rua_extension_dissector_table = register_dissector_table("rua.extension", "RUA-PROTOCOL-EXTENSION", proto_rua, FT_UINT32, BASE_DEC);
1680 rua_proc_imsg_dissector_table = register_dissector_table("rua.proc.imsg", "RUA-ELEMENTARY-PROCEDURE InitiatingMessage", proto_rua, FT_UINT32, BASE_DEC);
1681 rua_proc_sout_dissector_table = register_dissector_table("rua.proc.sout", "RUA-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
1682 rua_proc_uout_dissector_table = register_dissector_table("rua.proc.uout", "RUA-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
1684 /* rua_module = prefs_register_protocol(proto_rua, NULL); */
1689 /*--- proto_reg_handoff_rua ---------------------------------------*/
1690 void
1691 proto_reg_handoff_rua(void)
1693 ranap_handle = find_dissector_add_dependency("ranap", proto_rua);
1694 dissector_add_uint("sctp.ppi", RUA_PAYLOAD_PROTOCOL_ID, rua_handle);
1695 dissector_add_uint_with_preference("sctp.port", SCTP_PORT_RUA, rua_handle);
1696 dissector_add_uint("rua.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_rua));
1697 dissector_add_uint("rua.ies", id_CriticalityDiagnostics, create_dissector_handle(dissect_CriticalityDiagnostics_PDU, proto_rua));
1698 dissector_add_uint("rua.ies", id_Context_ID, create_dissector_handle(dissect_Context_ID_PDU, proto_rua));
1699 dissector_add_uint("rua.ies", id_RANAP_Message, create_dissector_handle(dissect_RANAP_Message_PDU, proto_rua));
1700 dissector_add_uint("rua.ies", id_IntraDomainNasNodeSelector, create_dissector_handle(dissect_IntraDomainNasNodeSelector_PDU, proto_rua));
1701 dissector_add_uint("rua.ies", id_Establishment_Cause, create_dissector_handle(dissect_Establishment_Cause_PDU, proto_rua));
1702 dissector_add_uint("rua.ies", id_CN_DomainIndicator, create_dissector_handle(dissect_CN_DomainIndicator_PDU, proto_rua));
1703 dissector_add_uint("rua.extension", id_CSGMembershipStatus, create_dissector_handle(dissect_CSGMembershipStatus_PDU, proto_rua));
1704 dissector_add_uint("rua.proc.imsg", id_Connect, create_dissector_handle(dissect_Connect_PDU, proto_rua));
1705 dissector_add_uint("rua.proc.imsg", id_DirectTransfer, create_dissector_handle(dissect_DirectTransfer_PDU, proto_rua));
1706 dissector_add_uint("rua.proc.imsg", id_Disconnect, create_dissector_handle(dissect_Disconnect_PDU, proto_rua));
1707 dissector_add_uint("rua.proc.imsg", id_ConnectionlessTransfer, create_dissector_handle(dissect_ConnectionlessTransfer_PDU, proto_rua));
1708 dissector_add_uint("rua.proc.imsg", id_ErrorIndication, create_dissector_handle(dissect_ErrorIndication_PDU, proto_rua));
1709 dissector_add_uint("rua.proc.imsg", id_privateMessage, create_dissector_handle(dissect_PrivateMessage_PDU, proto_rua));