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 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
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"
30 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
31 #pragma warning(disable:4146)
34 #define PNAME "UTRAN Iuh interface RUA signalling"
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
{
49 id_DirectTransfer
= 2,
51 id_ConnectionlessTransfer
= 4,
52 id_ErrorIndication
= 5,
56 typedef enum _ProtocolIE_ID_enum
{
58 id_CriticalityDiagnostics
= 2,
61 id_IntraDomainNasNodeSelector
= 5,
62 id_Establishment_Cause
= 6,
63 id_CN_DomainIndicator
= 7,
64 id_CSGMembershipStatus
= 9
67 /* Initialize the protocol and registered fields */
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 */
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
[] = {
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
);
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" },
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
,
239 } /* Known Procedures should be included below and broken out as ELEMENTARY names to avoid confusion */
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);
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
);
264 static const value_string rua_PrivateIE_ID_vals
[] = {
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
},
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
,
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" },
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);
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)"));
312 static const value_string rua_TriggeringMessage_vals
[] = {
313 { 0, "initiating-message" },
314 { 1, "successful-outcome" },
315 { 2, "unsuccessful-outcome" },
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
);
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
);
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
},
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
);
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
},
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);
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
);
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
},
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
);
393 static const per_sequence_t ProtocolExtensionContainer_sequence_of
[1] = {
394 { &hf_rua_ProtocolExtensionContainer_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_ProtocolExtensionField
},
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);
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
);
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
},
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
);
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
},
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);
446 static const value_string rua_CN_DomainIndicator_vals
[] = {
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
);
462 static const value_string rua_CSGMembershipStatus_vals
[] = {
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
);
478 static const value_string rua_Establishment_Cause_vals
[] = {
479 { 0, "emergency-call" },
480 { 1, "normal-call" },
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
);
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
);
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
);
514 static const per_sequence_t T_localPTMSI_sequence
[] = {
515 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
528 static const per_sequence_t T_tMSIofsamePLMN_sequence
[] = {
529 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
542 static const per_sequence_t T_tMSIofdifferentPLMN_sequence
[] = {
543 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
556 static const per_sequence_t T_iMSIresponsetopaging_sequence
[] = {
557 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
570 static const per_sequence_t T_iMSIcauseUEinitiatedEvent_sequence
[] = {
571 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
584 static const per_sequence_t T_iMEI_sequence
[] = {
585 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
598 static const per_sequence_t T_spare2_sequence
[] = {
599 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
612 static const per_sequence_t T_spare1_sequence
[] = {
613 { &hf_rua_routingparameter
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_RoutingParameter
},
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
);
626 static const value_string rua_T_routingbasis_vals
[] = {
628 { 1, "tMSIofsamePLMN" },
629 { 2, "tMSIofdifferentPLMN" },
630 { 3, "iMSIresponsetopaging" },
631 { 4, "iMSIcauseUEinitiatedEvent" },
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
},
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
,
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
);
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
},
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
);
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
);
694 static const value_string rua_T_cn_Type_vals
[] = {
695 { 0, "gsm-Map-IDNNS" },
696 { 1, "ansi-41-IDNNS" },
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
},
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
,
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
},
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
);
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
);
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
},
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
);
754 static const value_string rua_T_version_vals
[] = {
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
},
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
,
776 static const per_sequence_t IntraDomainNasNodeSelector_sequence
[] = {
777 { &hf_rua_version
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_rua_T_version
},
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
);
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
));
808 static const value_string rua_CauseRadioNetwork_vals
[] = {
810 { 1, "connect-failed" },
811 { 2, "network-release" },
812 { 3, "unspecified" },
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
);
826 static const value_string rua_CauseTransport_vals
[] = {
827 { 0, "transport-resource-unavailable" },
828 { 1, "unspecified" },
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
);
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" },
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
);
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" },
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
);
881 static const value_string rua_Cause_vals
[] = {
882 { 0, "radioNetwork" },
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
},
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
,
907 static const value_string rua_TypeOfError_vals
[] = {
908 { 0, "not-understood" },
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
);
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
},
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
);
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
},
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);
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
},
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
);
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
},
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
,
982 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
983 ett_rua_Connect
, Connect_sequence
);
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
},
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
);
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
}
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
,
1020 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1021 ett_rua_Disconnect
, Disconnect_sequence
);
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
}
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
);
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
}
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
);
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
}
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
);
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
);
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
}
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
);
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
);
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
}
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
);
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
);
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
}
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
);
1161 static const value_string rua_RUA_PDU_vals
[] = {
1162 { 0, "initiatingMessage" },
1163 { 1, "successfulOutcome" },
1164 { 2, "unsuccessfulOutcome" },
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
}
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
,
1186 static int dissect_CN_DomainIndicator_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1194 static int dissect_CSGMembershipStatus_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1202 static int dissect_Establishment_Cause_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1210 static int dissect_Context_ID_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1218 static int dissect_IntraDomainNasNodeSelector_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1226 static int dissect_RANAP_Message_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1234 static int dissect_Cause_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1242 static int dissect_CriticalityDiagnostics_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1250 static int dissect_Connect_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1258 static int dissect_DirectTransfer_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1266 static int dissect_Disconnect_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1274 static int dissect_ConnectionlessTransfer_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1282 static int dissect_ErrorIndication_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1290 static int dissect_PrivateMessage_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
1298 static int dissect_RUA_PDU_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
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;
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,
1360 { &hf_rua_CSGMembershipStatus_PDU
,
1361 { "CSGMembershipStatus", "rua.CSGMembershipStatus",
1362 FT_UINT32
, BASE_DEC
, VALS(rua_CSGMembershipStatus_vals
), 0,
1364 { &hf_rua_Establishment_Cause_PDU
,
1365 { "Establishment-Cause", "rua.Establishment_Cause",
1366 FT_UINT32
, BASE_DEC
, VALS(rua_Establishment_Cause_vals
), 0,
1368 { &hf_rua_Context_ID_PDU
,
1369 { "Context-ID", "rua.Context_ID",
1370 FT_BYTES
, BASE_NONE
, NULL
, 0,
1372 { &hf_rua_IntraDomainNasNodeSelector_PDU
,
1373 { "IntraDomainNasNodeSelector", "rua.IntraDomainNasNodeSelector_element",
1374 FT_NONE
, BASE_NONE
, NULL
, 0,
1376 { &hf_rua_RANAP_Message_PDU
,
1377 { "RANAP-Message", "rua.RANAP_Message",
1378 FT_BYTES
, BASE_NONE
, NULL
, 0,
1380 { &hf_rua_Cause_PDU
,
1381 { "Cause", "rua.Cause",
1382 FT_UINT32
, BASE_DEC
, VALS(rua_Cause_vals
), 0,
1384 { &hf_rua_CriticalityDiagnostics_PDU
,
1385 { "CriticalityDiagnostics", "rua.CriticalityDiagnostics_element",
1386 FT_NONE
, BASE_NONE
, NULL
, 0,
1388 { &hf_rua_Connect_PDU
,
1389 { "Connect", "rua.Connect_element",
1390 FT_NONE
, BASE_NONE
, NULL
, 0,
1392 { &hf_rua_DirectTransfer_PDU
,
1393 { "DirectTransfer", "rua.DirectTransfer_element",
1394 FT_NONE
, BASE_NONE
, NULL
, 0,
1396 { &hf_rua_Disconnect_PDU
,
1397 { "Disconnect", "rua.Disconnect_element",
1398 FT_NONE
, BASE_NONE
, NULL
, 0,
1400 { &hf_rua_ConnectionlessTransfer_PDU
,
1401 { "ConnectionlessTransfer", "rua.ConnectionlessTransfer_element",
1402 FT_NONE
, BASE_NONE
, NULL
, 0,
1404 { &hf_rua_ErrorIndication_PDU
,
1405 { "ErrorIndication", "rua.ErrorIndication_element",
1406 FT_NONE
, BASE_NONE
, NULL
, 0,
1408 { &hf_rua_PrivateMessage_PDU
,
1409 { "PrivateMessage", "rua.PrivateMessage_element",
1410 FT_NONE
, BASE_NONE
, NULL
, 0,
1412 { &hf_rua_RUA_PDU_PDU
,
1413 { "RUA-PDU", "rua.RUA_PDU",
1414 FT_UINT32
, BASE_DEC
, VALS(rua_RUA_PDU_vals
), 0,
1417 { "local", "rua.local",
1418 FT_UINT32
, BASE_DEC
, NULL
, 0,
1419 "INTEGER_0_65535", HFILL
}},
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,
1428 { &hf_rua_protocol_ie_field_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,
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,
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,
1452 { &hf_rua_PrivateIE_Container_item
,
1453 { "PrivateIE-Field", "rua.PrivateIE_Field_element",
1454 FT_NONE
, BASE_NONE
, NULL
, 0,
1456 { &hf_rua_private_ie_field_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
}},
1465 { "version", "rua.version",
1466 FT_UINT32
, BASE_DEC
, VALS(rua_T_version_vals
), 0,
1468 { &hf_rua_release99
,
1469 { "release99", "rua.release99_element",
1470 FT_NONE
, BASE_NONE
, NULL
, 0,
1473 { "cn-Type", "rua.cn_Type",
1474 FT_UINT32
, BASE_DEC
, VALS(rua_T_cn_Type_vals
), 0,
1476 { &hf_rua_gsm_Map_IDNNS
,
1477 { "gsm-Map-IDNNS", "rua.gsm_Map_IDNNS_element",
1478 FT_NONE
, BASE_NONE
, NULL
, 0,
1480 { &hf_rua_ansi_41_IDNNS
,
1481 { "ansi-41-IDNNS", "rua.ansi_41_IDNNS",
1482 FT_BYTES
, BASE_NONE
, NULL
, 0,
1485 { "later", "rua.later_element",
1486 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
1496 { &hf_rua_localPTMSI
,
1497 { "localPTMSI", "rua.localPTMSI_element",
1498 FT_NONE
, BASE_NONE
, NULL
, 0,
1500 { &hf_rua_routingparameter
,
1501 { "routingparameter", "rua.routingparameter",
1502 FT_BYTES
, BASE_NONE
, NULL
, 0,
1504 { &hf_rua_tMSIofsamePLMN
,
1505 { "tMSIofsamePLMN", "rua.tMSIofsamePLMN_element",
1506 FT_NONE
, BASE_NONE
, NULL
, 0,
1508 { &hf_rua_tMSIofdifferentPLMN
,
1509 { "tMSIofdifferentPLMN", "rua.tMSIofdifferentPLMN_element",
1510 FT_NONE
, BASE_NONE
, NULL
, 0,
1512 { &hf_rua_iMSIresponsetopaging
,
1513 { "iMSIresponsetopaging", "rua.iMSIresponsetopaging_element",
1514 FT_NONE
, BASE_NONE
, NULL
, 0,
1516 { &hf_rua_iMSIcauseUEinitiatedEvent
,
1517 { "iMSIcauseUEinitiatedEvent", "rua.iMSIcauseUEinitiatedEvent_element",
1518 FT_NONE
, BASE_NONE
, NULL
, 0,
1521 { "iMEI", "rua.iMEI_element",
1522 FT_NONE
, BASE_NONE
, NULL
, 0,
1525 { "spare2", "rua.spare2_element",
1526 FT_NONE
, BASE_NONE
, NULL
, 0,
1529 { "spare1", "rua.spare1_element",
1530 FT_NONE
, BASE_NONE
, NULL
, 0,
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
}},
1545 { "protocol", "rua.protocol",
1546 FT_UINT32
, BASE_DEC
, VALS(rua_CauseProtocol_vals
), 0,
1547 "CauseProtocol", HFILL
}},
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,
1556 { &hf_rua_triggeringMessage
,
1557 { "triggeringMessage", "rua.triggeringMessage",
1558 FT_UINT32
, BASE_DEC
, VALS(rua_TriggeringMessage_vals
), 0,
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,
1576 { &hf_rua_iECriticality
,
1577 { "iECriticality", "rua.iECriticality",
1578 FT_UINT32
, BASE_DEC
, VALS(rua_Criticality_vals
), 0,
1579 "Criticality", HFILL
}},
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,
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,
1604 { &hf_rua_successfulOutcome
,
1605 { "successfulOutcome", "rua.successfulOutcome_element",
1606 FT_NONE
, BASE_NONE
, NULL
, 0,
1608 { &hf_rua_unsuccessfulOutcome
,
1609 { "unsuccessfulOutcome", "rua.unsuccessfulOutcome_element",
1610 FT_NONE
, BASE_NONE
, NULL
, 0,
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
[] = {
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
,
1638 &ett_rua_T_release99
,
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
,
1652 &ett_rua_CriticalityDiagnostics
,
1653 &ett_rua_CriticalityDiagnostics_IE_List
,
1654 &ett_rua_CriticalityDiagnostics_IE_List_item
,
1656 &ett_rua_DirectTransfer
,
1657 &ett_rua_Disconnect
,
1658 &ett_rua_ConnectionlessTransfer
,
1659 &ett_rua_ErrorIndication
,
1660 &ett_rua_PrivateMessage
,
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 ---------------------------------------*/
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
));