Coverage Report

Created: 2026-11-12 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-rua.c
Line
Count
Source
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 */
5
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>
9
 *
10
 * Wireshark - Network traffic analyzer
11
 * By Gerald Combs <gerald@wireshark.org>
12
 * Copyright 1998 Gerald Combs
13
 *
14
 * SPDX-License-Identifier: GPL-2.0-or-later
15
 *
16
 * Ref: 3GPP TS 25.468 version 8.1.0 Release 8
17
 */
18
19
#include "config.h"
20
21
#include <epan/packet.h>
22
#include <epan/asn1.h>
23
#include <epan/prefs.h>
24
#include <wsutil/array.h>
25
26
#include "packet-per.h"
27
#include "packet-sctp.h"
28
29
/* Dissector to use SCTP PPID 19 or a configured SCTP port. IANA assigned port = 29169*/
30
16
#define SCTP_PORT_RUA              29169
31
32
void proto_register_rua(void);
33
34
7
#define maxPrivateIEs                  65535
35
10
#define maxProtocolExtensions          65535
36
237
#define maxProtocolIEs                 65535
37
0
#define maxNrOfErrors                  256
38
39
typedef enum _ProcedureCode_enum {
40
  id_Connect   =   1,
41
  id_DirectTransfer =   2,
42
  id_Disconnect =   3,
43
  id_ConnectionlessTransfer =   4,
44
  id_ErrorIndication =   5,
45
  id_privateMessage =   6
46
} ProcedureCode_enum;
47
48
typedef enum _ProtocolIE_ID_enum {
49
  id_Cause     =   1,
50
  id_CriticalityDiagnostics =   2,
51
  id_Context_ID =   3,
52
  id_RANAP_Message =   4,
53
  id_IntraDomainNasNodeSelector =   5,
54
  id_Establishment_Cause =   6,
55
  id_CN_DomainIndicator =   7,
56
  id_CSGMembershipStatus =   9
57
} ProtocolIE_ID_enum;
58
59
/* Initialize the protocol and registered fields */
60
static int proto_rua;
61
62
static int hf_rua_CN_DomainIndicator_PDU;         /* CN_DomainIndicator */
63
static int hf_rua_CSGMembershipStatus_PDU;        /* CSGMembershipStatus */
64
static int hf_rua_Establishment_Cause_PDU;        /* Establishment_Cause */
65
static int hf_rua_Context_ID_PDU;                 /* Context_ID */
66
static int hf_rua_IntraDomainNasNodeSelector_PDU;  /* IntraDomainNasNodeSelector */
67
static int hf_rua_RANAP_Message_PDU;              /* RANAP_Message */
68
static int hf_rua_Cause_PDU;                      /* Cause */
69
static int hf_rua_CriticalityDiagnostics_PDU;     /* CriticalityDiagnostics */
70
static int hf_rua_Connect_PDU;                    /* Connect */
71
static int hf_rua_DirectTransfer_PDU;             /* DirectTransfer */
72
static int hf_rua_Disconnect_PDU;                 /* Disconnect */
73
static int hf_rua_ConnectionlessTransfer_PDU;     /* ConnectionlessTransfer */
74
static int hf_rua_ErrorIndication_PDU;            /* ErrorIndication */
75
static int hf_rua_PrivateMessage_PDU;             /* PrivateMessage */
76
static int hf_rua_RUA_PDU_PDU;                    /* RUA_PDU */
77
static int hf_rua_local;                          /* INTEGER_0_65535 */
78
static int hf_rua_global;                         /* OBJECT_IDENTIFIER */
79
static int hf_rua_ProtocolIE_Container_item;      /* ProtocolIE_Field */
80
static int hf_rua_protocol_ie_field_id;           /* ProtocolIE_ID */
81
static int hf_rua_criticality;                    /* Criticality */
82
static int hf_rua_ie_field_value;                 /* ProtocolIE_Field_value */
83
static int hf_rua_ProtocolExtensionContainer_item;  /* ProtocolExtensionField */
84
static int hf_rua_id;                             /* ProtocolIE_ID */
85
static int hf_rua_extensionValue;                 /* T_extensionValue */
86
static int hf_rua_PrivateIE_Container_item;       /* PrivateIE_Field */
87
static int hf_rua_private_ie_field_id;            /* PrivateIE_ID */
88
static int hf_rua_private_value;                  /* PrivateIE_Field_value */
89
static int hf_rua_version;                        /* T_version */
90
static int hf_rua_release99;                      /* T_release99 */
91
static int hf_rua_cn_Type;                        /* T_cn_Type */
92
static int hf_rua_gsm_Map_IDNNS;                  /* Gsm_map_IDNNS */
93
static int hf_rua_ansi_41_IDNNS;                  /* Ansi_41_IDNNS */
94
static int hf_rua_later;                          /* T_later */
95
static int hf_rua_futurecoding;                   /* BIT_STRING_SIZE_15 */
96
static int hf_rua_routingbasis;                   /* T_routingbasis */
97
static int hf_rua_localPTMSI;                     /* T_localPTMSI */
98
static int hf_rua_routingparameter;               /* RoutingParameter */
99
static int hf_rua_tMSIofsamePLMN;                 /* T_tMSIofsamePLMN */
100
static int hf_rua_tMSIofdifferentPLMN;            /* T_tMSIofdifferentPLMN */
101
static int hf_rua_iMSIresponsetopaging;           /* T_iMSIresponsetopaging */
102
static int hf_rua_iMSIcauseUEinitiatedEvent;      /* T_iMSIcauseUEinitiatedEvent */
103
static int hf_rua_iMEI;                           /* T_iMEI */
104
static int hf_rua_spare2;                         /* T_spare2 */
105
static int hf_rua_spare1;                         /* T_spare1 */
106
static int hf_rua_dummy;                          /* BOOLEAN */
107
static int hf_rua_radioNetwork;                   /* CauseRadioNetwork */
108
static int hf_rua_transport;                      /* CauseTransport */
109
static int hf_rua_protocol;                       /* CauseProtocol */
110
static int hf_rua_misc;                           /* CauseMisc */
111
static int hf_rua_procedureCode;                  /* ProcedureCode */
112
static int hf_rua_triggeringMessage;              /* TriggeringMessage */
113
static int hf_rua_procedureCriticality;           /* Criticality */
114
static int hf_rua_iEsCriticalityDiagnostics;      /* CriticalityDiagnostics_IE_List */
115
static int hf_rua_iE_Extensions;                  /* ProtocolExtensionContainer */
116
static int hf_rua_CriticalityDiagnostics_IE_List_item;  /* CriticalityDiagnostics_IE_List_item */
117
static int hf_rua_iECriticality;                  /* Criticality */
118
static int hf_rua_iE_ID;                          /* ProtocolIE_ID */
119
static int hf_rua_typeOfError;                    /* TypeOfError */
120
static int hf_rua_protocolIEs;                    /* ProtocolIE_Container */
121
static int hf_rua_protocolExtensions;             /* ProtocolExtensionContainer */
122
static int hf_rua_privateIEs;                     /* PrivateIE_Container */
123
static int hf_rua_initiatingMessage;              /* InitiatingMessage */
124
static int hf_rua_successfulOutcome;              /* SuccessfulOutcome */
125
static int hf_rua_unsuccessfulOutcome;            /* UnsuccessfulOutcome */
126
static int hf_rua_initiatingMessagevalue;         /* InitiatingMessage_value */
127
static int hf_rua_successfulOutcome_value;        /* SuccessfulOutcome_value */
128
static int hf_rua_unsuccessfulOutcome_value;      /* UnsuccessfulOutcome_value */
129
130
/* Initialize the subtree pointers */
131
static int ett_rua;
132
133
 /* initialise sub-dissector handles */
134
 static dissector_handle_t ranap_handle = NULL;
135
136
static int ett_rua_PrivateIE_ID;
137
static int ett_rua_ProtocolIE_Container;
138
static int ett_rua_ProtocolIE_Field;
139
static int ett_rua_ProtocolExtensionContainer;
140
static int ett_rua_ProtocolExtensionField;
141
static int ett_rua_PrivateIE_Container;
142
static int ett_rua_PrivateIE_Field;
143
static int ett_rua_IntraDomainNasNodeSelector;
144
static int ett_rua_T_version;
145
static int ett_rua_T_release99;
146
static int ett_rua_T_cn_Type;
147
static int ett_rua_T_later;
148
static int ett_rua_Gsm_map_IDNNS;
149
static int ett_rua_T_routingbasis;
150
static int ett_rua_T_localPTMSI;
151
static int ett_rua_T_tMSIofsamePLMN;
152
static int ett_rua_T_tMSIofdifferentPLMN;
153
static int ett_rua_T_iMSIresponsetopaging;
154
static int ett_rua_T_iMSIcauseUEinitiatedEvent;
155
static int ett_rua_T_iMEI;
156
static int ett_rua_T_spare2;
157
static int ett_rua_T_spare1;
158
static int ett_rua_Cause;
159
static int ett_rua_CriticalityDiagnostics;
160
static int ett_rua_CriticalityDiagnostics_IE_List;
161
static int ett_rua_CriticalityDiagnostics_IE_List_item;
162
static int ett_rua_Connect;
163
static int ett_rua_DirectTransfer;
164
static int ett_rua_Disconnect;
165
static int ett_rua_ConnectionlessTransfer;
166
static int ett_rua_ErrorIndication;
167
static int ett_rua_PrivateMessage;
168
static int ett_rua_RUA_PDU;
169
static int ett_rua_InitiatingMessage;
170
static int ett_rua_SuccessfulOutcome;
171
static int ett_rua_UnsuccessfulOutcome;
172
173
/* Global variables */
174
static uint32_t ProcedureCode;
175
static uint32_t ProtocolIE_ID;
176
177
/* Dissector tables */
178
static dissector_table_t rua_ies_dissector_table;
179
static dissector_table_t rua_extension_dissector_table;
180
static dissector_table_t rua_proc_imsg_dissector_table;
181
static dissector_table_t rua_proc_sout_dissector_table;
182
static dissector_table_t rua_proc_uout_dissector_table;
183
184
static dissector_handle_t rua_handle;
185
186
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
187
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
188
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
189
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
190
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
191
192
void proto_reg_handoff_rua(void);
193
194
/*--- Cyclic dependencies ---*/
195
196
/* ProtocolIE-Field/value -> ProtocolIE-Field/value */
197
static unsigned dissect_rua_ProtocolIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
198
199
/* ProtocolExtensionField/extensionValue -> ProtocolExtensionField/extensionValue */
200
static unsigned dissect_rua_T_extensionValue(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
201
202
/* PrivateIE-Field/value -> PrivateIE-Field/value */
203
static unsigned dissect_rua_PrivateIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
204
205
/* InitiatingMessage/value -> InitiatingMessage/value */
206
static unsigned dissect_rua_InitiatingMessage_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
207
208
/* SuccessfulOutcome/value -> SuccessfulOutcome/value */
209
static unsigned dissect_rua_SuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
210
211
/* UnsuccessfulOutcome/value -> UnsuccessfulOutcome/value */
212
static unsigned dissect_rua_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
213
214
215
216
static const value_string rua_Criticality_vals[] = {
217
  {   0, "reject" },
218
  {   1, "ignore" },
219
  {   2, "notify" },
220
  { 0, NULL }
221
};
222
223
224
static unsigned
225
294
dissect_rua_Criticality(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
226
294
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
227
294
                                     3, NULL, false, 0, NULL);
228
229
294
  return offset;
230
294
}
231
232
233
static const value_string rua_ProcedureCode_vals[] = {
234
  { id_Connect, "id-Connect" },
235
  { id_DirectTransfer, "id-DirectTransfer" },
236
  { id_Disconnect, "id-Disconnect" },
237
  { id_ConnectionlessTransfer, "id-ConnectionlessTransfer" },
238
  { id_ErrorIndication, "id-ErrorIndication" },
239
  { id_privateMessage, "id-privateMessage" },
240
  { 0, NULL }
241
};
242
243
244
static unsigned
245
33
dissect_rua_ProcedureCode(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
246
33
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
247
33
                                                            0U, 255U, &ProcedureCode, false);
248
249
33
  if (strcmp(val_to_str_const(ProcedureCode, rua_ProcedureCode_vals, "Unknown"), "Unknown") == 0) {
250
2
    col_set_str(actx->pinfo->cinfo, COL_INFO,
251
2
                      "Unknown Message ");
252
2
  } /* Known Procedures should be included below and broken out as ELEMENTARY names to avoid confusion */
253
254
33
  return offset;
255
33
}
256
257
258
259
static unsigned
260
46
dissect_rua_INTEGER_0_65535(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
261
46
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
262
46
                                                            0U, 65535U, NULL, false);
263
264
46
  return offset;
265
46
}
266
267
268
269
static unsigned
270
8
dissect_rua_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
271
8
  offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
272
273
8
  return offset;
274
8
}
275
276
277
static const value_string rua_PrivateIE_ID_vals[] = {
278
  {   0, "local" },
279
  {   1, "global" },
280
  { 0, NULL }
281
};
282
283
static const per_choice_t PrivateIE_ID_choice[] = {
284
  {   0, &hf_rua_local           , ASN1_NO_EXTENSIONS     , dissect_rua_INTEGER_0_65535 },
285
  {   1, &hf_rua_global          , ASN1_NO_EXTENSIONS     , dissect_rua_OBJECT_IDENTIFIER },
286
  { 0, NULL, 0, NULL }
287
};
288
289
static unsigned
290
54
dissect_rua_PrivateIE_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
291
54
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
292
54
                                 ett_rua_PrivateIE_ID, PrivateIE_ID_choice,
293
54
                                 NULL);
294
295
54
  return offset;
296
54
}
297
298
299
static const value_string rua_ProtocolIE_ID_vals[] = {
300
  { id_Cause, "id-Cause" },
301
  { id_CriticalityDiagnostics, "id-CriticalityDiagnostics" },
302
  { id_Context_ID, "id-Context-ID" },
303
  { id_RANAP_Message, "id-RANAP-Message" },
304
  { id_IntraDomainNasNodeSelector, "id-IntraDomainNasNodeSelector" },
305
  { id_Establishment_Cause, "id-Establishment-Cause" },
306
  { id_CN_DomainIndicator, "id-CN-DomainIndicator" },
307
  { id_CSGMembershipStatus, "id-CSGMembershipStatus" },
308
  { 0, NULL }
309
};
310
311
312
static unsigned
313
213
dissect_rua_ProtocolIE_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
314
213
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
315
213
                                                            0U, maxProtocolIEs, &ProtocolIE_ID, false);
316
317
213
  if (tree) {
318
211
    proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
319
211
                           val_to_str(actx->pinfo->pool, ProtocolIE_ID, VALS(rua_ProtocolIE_ID_vals), "unknown (%d)"));
320
211
  }
321
213
  return offset;
322
213
}
323
324
325
static const value_string rua_TriggeringMessage_vals[] = {
326
  {   0, "initiating-message" },
327
  {   1, "successful-outcome" },
328
  {   2, "unsuccessful-outcome" },
329
  { 0, NULL }
330
};
331
332
333
static unsigned
334
0
dissect_rua_TriggeringMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
335
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
336
0
                                     3, NULL, false, 0, NULL);
337
338
0
  return offset;
339
0
}
340
341
342
343
static unsigned
344
97
dissect_rua_ProtocolIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
345
  // ProtocolIE-Field/value -> ProtocolIE-Field/value
346
97
  increment_dissection_depth_by_n(actx->pinfo, 1);
347
97
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
348
349
97
  decrement_dissection_depth_by_n(actx->pinfo, 1);
350
97
  return offset;
351
97
}
352
353
354
static const per_sequence_t ProtocolIE_Field_sequence[] = {
355
  { &hf_rua_protocol_ie_field_id, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
356
  { &hf_rua_criticality     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
357
  { &hf_rua_ie_field_value  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field_value },
358
  { NULL, 0, 0, NULL }
359
};
360
361
static unsigned
362
106
dissect_rua_ProtocolIE_Field(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
363
106
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
364
106
                                   ett_rua_ProtocolIE_Field, ProtocolIE_Field_sequence);
365
366
106
  return offset;
367
106
}
368
369
370
static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
371
  { &hf_rua_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field },
372
};
373
374
static unsigned
375
24
dissect_rua_ProtocolIE_Container(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
376
24
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
377
24
                                                  ett_rua_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
378
24
                                                  0, maxProtocolIEs, false);
379
380
24
  return offset;
381
24
}
382
383
384
385
static unsigned
386
114
dissect_rua_T_extensionValue(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
387
  // ProtocolExtensionField/extensionValue -> ProtocolExtensionField/extensionValue
388
114
  increment_dissection_depth_by_n(actx->pinfo, 1);
389
114
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
390
391
114
  decrement_dissection_depth_by_n(actx->pinfo, 1);
392
114
  return offset;
393
114
}
394
395
396
static const per_sequence_t ProtocolExtensionField_sequence[] = {
397
  { &hf_rua_id              , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
398
  { &hf_rua_criticality     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
399
  { &hf_rua_extensionValue  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_T_extensionValue },
400
  { NULL, 0, 0, NULL }
401
};
402
403
static unsigned
404
118
dissect_rua_ProtocolExtensionField(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
405
118
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
406
118
                                   ett_rua_ProtocolExtensionField, ProtocolExtensionField_sequence);
407
408
118
  return offset;
409
118
}
410
411
412
static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
413
  { &hf_rua_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolExtensionField },
414
};
415
416
static unsigned
417
10
dissect_rua_ProtocolExtensionContainer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
418
10
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
419
10
                                                  ett_rua_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
420
10
                                                  1, maxProtocolExtensions, false);
421
422
10
  return offset;
423
10
}
424
425
426
427
static unsigned
428
50
dissect_rua_PrivateIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
429
  // PrivateIE-Field/value -> PrivateIE-Field/value
430
50
  increment_dissection_depth_by_n(actx->pinfo, 1);
431
50
  offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
432
433
50
  decrement_dissection_depth_by_n(actx->pinfo, 1);
434
50
  return offset;
435
50
}
436
437
438
static const per_sequence_t PrivateIE_Field_sequence[] = {
439
  { &hf_rua_private_ie_field_id, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_ID },
440
  { &hf_rua_criticality     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
441
  { &hf_rua_private_value   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field_value },
442
  { NULL, 0, 0, NULL }
443
};
444
445
static unsigned
446
54
dissect_rua_PrivateIE_Field(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
447
54
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
448
54
                                   ett_rua_PrivateIE_Field, PrivateIE_Field_sequence);
449
450
54
  return offset;
451
54
}
452
453
454
static const per_sequence_t PrivateIE_Container_sequence_of[1] = {
455
  { &hf_rua_PrivateIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field },
456
};
457
458
static unsigned
459
7
dissect_rua_PrivateIE_Container(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
460
7
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
461
7
                                                  ett_rua_PrivateIE_Container, PrivateIE_Container_sequence_of,
462
7
                                                  1, maxPrivateIEs, false);
463
464
7
  return offset;
465
7
}
466
467
468
static const value_string rua_CN_DomainIndicator_vals[] = {
469
  {   0, "cs-domain" },
470
  {   1, "ps-domain" },
471
  { 0, NULL }
472
};
473
474
475
static unsigned
476
0
dissect_rua_CN_DomainIndicator(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
477
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
478
0
                                     2, NULL, false, 0, NULL);
479
480
0
  return offset;
481
0
}
482
483
484
static const value_string rua_CSGMembershipStatus_vals[] = {
485
  {   0, "member" },
486
  {   1, "non-member" },
487
  { 0, NULL }
488
};
489
490
491
static unsigned
492
3
dissect_rua_CSGMembershipStatus(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
493
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
494
3
                                     2, NULL, true, 0, NULL);
495
496
3
  return offset;
497
3
}
498
499
500
static const value_string rua_Establishment_Cause_vals[] = {
501
  {   0, "emergency-call" },
502
  {   1, "normal-call" },
503
  { 0, NULL }
504
};
505
506
507
static unsigned
508
5
dissect_rua_Establishment_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
509
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
510
5
                                     2, NULL, true, 0, NULL);
511
512
5
  return offset;
513
5
}
514
515
516
517
static unsigned
518
1
dissect_rua_Context_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
519
1
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
520
1
                                     24, 24, false, NULL, 0, NULL, NULL);
521
522
1
  return offset;
523
1
}
524
525
526
527
static unsigned
528
0
dissect_rua_RoutingParameter(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
529
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
530
0
                                     10, 10, false, NULL, 0, NULL, NULL);
531
532
0
  return offset;
533
0
}
534
535
536
static const per_sequence_t T_localPTMSI_sequence[] = {
537
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
538
  { NULL, 0, 0, NULL }
539
};
540
541
static unsigned
542
0
dissect_rua_T_localPTMSI(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
543
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
544
0
                                   ett_rua_T_localPTMSI, T_localPTMSI_sequence);
545
546
0
  return offset;
547
0
}
548
549
550
static const per_sequence_t T_tMSIofsamePLMN_sequence[] = {
551
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
552
  { NULL, 0, 0, NULL }
553
};
554
555
static unsigned
556
0
dissect_rua_T_tMSIofsamePLMN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
557
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
558
0
                                   ett_rua_T_tMSIofsamePLMN, T_tMSIofsamePLMN_sequence);
559
560
0
  return offset;
561
0
}
562
563
564
static const per_sequence_t T_tMSIofdifferentPLMN_sequence[] = {
565
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
566
  { NULL, 0, 0, NULL }
567
};
568
569
static unsigned
570
0
dissect_rua_T_tMSIofdifferentPLMN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
571
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
572
0
                                   ett_rua_T_tMSIofdifferentPLMN, T_tMSIofdifferentPLMN_sequence);
573
574
0
  return offset;
575
0
}
576
577
578
static const per_sequence_t T_iMSIresponsetopaging_sequence[] = {
579
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
580
  { NULL, 0, 0, NULL }
581
};
582
583
static unsigned
584
0
dissect_rua_T_iMSIresponsetopaging(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
585
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
586
0
                                   ett_rua_T_iMSIresponsetopaging, T_iMSIresponsetopaging_sequence);
587
588
0
  return offset;
589
0
}
590
591
592
static const per_sequence_t T_iMSIcauseUEinitiatedEvent_sequence[] = {
593
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
594
  { NULL, 0, 0, NULL }
595
};
596
597
static unsigned
598
0
dissect_rua_T_iMSIcauseUEinitiatedEvent(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
599
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
600
0
                                   ett_rua_T_iMSIcauseUEinitiatedEvent, T_iMSIcauseUEinitiatedEvent_sequence);
601
602
0
  return offset;
603
0
}
604
605
606
static const per_sequence_t T_iMEI_sequence[] = {
607
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
608
  { NULL, 0, 0, NULL }
609
};
610
611
static unsigned
612
0
dissect_rua_T_iMEI(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
613
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
614
0
                                   ett_rua_T_iMEI, T_iMEI_sequence);
615
616
0
  return offset;
617
0
}
618
619
620
static const per_sequence_t T_spare2_sequence[] = {
621
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
622
  { NULL, 0, 0, NULL }
623
};
624
625
static unsigned
626
0
dissect_rua_T_spare2(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
627
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
628
0
                                   ett_rua_T_spare2, T_spare2_sequence);
629
630
0
  return offset;
631
0
}
632
633
634
static const per_sequence_t T_spare1_sequence[] = {
635
  { &hf_rua_routingparameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
636
  { NULL, 0, 0, NULL }
637
};
638
639
static unsigned
640
0
dissect_rua_T_spare1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
641
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
642
0
                                   ett_rua_T_spare1, T_spare1_sequence);
643
644
0
  return offset;
645
0
}
646
647
648
static const value_string rua_T_routingbasis_vals[] = {
649
  {   0, "localPTMSI" },
650
  {   1, "tMSIofsamePLMN" },
651
  {   2, "tMSIofdifferentPLMN" },
652
  {   3, "iMSIresponsetopaging" },
653
  {   4, "iMSIcauseUEinitiatedEvent" },
654
  {   5, "iMEI" },
655
  {   6, "spare2" },
656
  {   7, "spare1" },
657
  { 0, NULL }
658
};
659
660
static const per_choice_t T_routingbasis_choice[] = {
661
  {   0, &hf_rua_localPTMSI      , ASN1_NO_EXTENSIONS     , dissect_rua_T_localPTMSI },
662
  {   1, &hf_rua_tMSIofsamePLMN  , ASN1_NO_EXTENSIONS     , dissect_rua_T_tMSIofsamePLMN },
663
  {   2, &hf_rua_tMSIofdifferentPLMN, ASN1_NO_EXTENSIONS     , dissect_rua_T_tMSIofdifferentPLMN },
664
  {   3, &hf_rua_iMSIresponsetopaging, ASN1_NO_EXTENSIONS     , dissect_rua_T_iMSIresponsetopaging },
665
  {   4, &hf_rua_iMSIcauseUEinitiatedEvent, ASN1_NO_EXTENSIONS     , dissect_rua_T_iMSIcauseUEinitiatedEvent },
666
  {   5, &hf_rua_iMEI            , ASN1_NO_EXTENSIONS     , dissect_rua_T_iMEI },
667
  {   6, &hf_rua_spare2          , ASN1_NO_EXTENSIONS     , dissect_rua_T_spare2 },
668
  {   7, &hf_rua_spare1          , ASN1_NO_EXTENSIONS     , dissect_rua_T_spare1 },
669
  { 0, NULL, 0, NULL }
670
};
671
672
static unsigned
673
0
dissect_rua_T_routingbasis(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
674
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
675
0
                                 ett_rua_T_routingbasis, T_routingbasis_choice,
676
0
                                 NULL);
677
678
0
  return offset;
679
0
}
680
681
682
683
static unsigned
684
0
dissect_rua_BOOLEAN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
685
0
  offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
686
687
0
  return offset;
688
0
}
689
690
691
static const per_sequence_t Gsm_map_IDNNS_sequence[] = {
692
  { &hf_rua_routingbasis    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_T_routingbasis },
693
  { &hf_rua_dummy           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_BOOLEAN },
694
  { NULL, 0, 0, NULL }
695
};
696
697
static unsigned
698
0
dissect_rua_Gsm_map_IDNNS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
699
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
700
0
                                   ett_rua_Gsm_map_IDNNS, Gsm_map_IDNNS_sequence);
701
702
0
  return offset;
703
0
}
704
705
706
707
static unsigned
708
0
dissect_rua_Ansi_41_IDNNS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
709
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
710
0
                                     14, 14, false, NULL, 0, NULL, NULL);
711
712
0
  return offset;
713
0
}
714
715
716
static const value_string rua_T_cn_Type_vals[] = {
717
  {   0, "gsm-Map-IDNNS" },
718
  {   1, "ansi-41-IDNNS" },
719
  { 0, NULL }
720
};
721
722
static const per_choice_t T_cn_Type_choice[] = {
723
  {   0, &hf_rua_gsm_Map_IDNNS   , ASN1_NO_EXTENSIONS     , dissect_rua_Gsm_map_IDNNS },
724
  {   1, &hf_rua_ansi_41_IDNNS   , ASN1_NO_EXTENSIONS     , dissect_rua_Ansi_41_IDNNS },
725
  { 0, NULL, 0, NULL }
726
};
727
728
static unsigned
729
0
dissect_rua_T_cn_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
730
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
731
0
                                 ett_rua_T_cn_Type, T_cn_Type_choice,
732
0
                                 NULL);
733
734
0
  return offset;
735
0
}
736
737
738
static const per_sequence_t T_release99_sequence[] = {
739
  { &hf_rua_cn_Type         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_T_cn_Type },
740
  { NULL, 0, 0, NULL }
741
};
742
743
static unsigned
744
0
dissect_rua_T_release99(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
745
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
746
0
                                   ett_rua_T_release99, T_release99_sequence);
747
748
0
  return offset;
749
0
}
750
751
752
753
static unsigned
754
0
dissect_rua_BIT_STRING_SIZE_15(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
755
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
756
0
                                     15, 15, false, NULL, 0, NULL, NULL);
757
758
0
  return offset;
759
0
}
760
761
762
static const per_sequence_t T_later_sequence[] = {
763
  { &hf_rua_futurecoding    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_BIT_STRING_SIZE_15 },
764
  { NULL, 0, 0, NULL }
765
};
766
767
static unsigned
768
0
dissect_rua_T_later(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
769
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
770
0
                                   ett_rua_T_later, T_later_sequence);
771
772
0
  return offset;
773
0
}
774
775
776
static const value_string rua_T_version_vals[] = {
777
  {   0, "release99" },
778
  {   1, "later" },
779
  { 0, NULL }
780
};
781
782
static const per_choice_t T_version_choice[] = {
783
  {   0, &hf_rua_release99       , ASN1_NO_EXTENSIONS     , dissect_rua_T_release99 },
784
  {   1, &hf_rua_later           , ASN1_NO_EXTENSIONS     , dissect_rua_T_later },
785
  { 0, NULL, 0, NULL }
786
};
787
788
static unsigned
789
0
dissect_rua_T_version(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
790
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
791
0
                                 ett_rua_T_version, T_version_choice,
792
0
                                 NULL);
793
794
0
  return offset;
795
0
}
796
797
798
static const per_sequence_t IntraDomainNasNodeSelector_sequence[] = {
799
  { &hf_rua_version         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_T_version },
800
  { NULL, 0, 0, NULL }
801
};
802
803
static unsigned
804
0
dissect_rua_IntraDomainNasNodeSelector(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
805
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
806
0
                                   ett_rua_IntraDomainNasNodeSelector, IntraDomainNasNodeSelector_sequence);
807
808
0
  return offset;
809
0
}
810
811
812
813
static unsigned
814
0
dissect_rua_RANAP_Message(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
815
0
  tvbuff_t *ranap_message_tvb=NULL;
816
0
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
817
0
                                       NO_BOUND, NO_BOUND, false, &ranap_message_tvb);
818
819
0
 if ((tvb_reported_length(ranap_message_tvb)>0)&&(ranap_handle)) {  /* RUA has a RANAP-PDU */
820
0
     col_set_str(actx->pinfo->cinfo, COL_INFO,
821
0
             "(RUA) ");                                    /* Set info to (RUA) to make room for RANAP */
822
0
     col_set_fence(actx->pinfo->cinfo, COL_INFO);
823
0
     call_dissector(ranap_handle,ranap_message_tvb,actx->pinfo, proto_tree_get_root(tree));
824
0
  }
825
826
0
  return offset;
827
0
}
828
829
830
static const value_string rua_CauseRadioNetwork_vals[] = {
831
  {   0, "normal" },
832
  {   1, "connect-failed" },
833
  {   2, "network-release" },
834
  {   3, "unspecified" },
835
  { 0, NULL }
836
};
837
838
839
static unsigned
840
0
dissect_rua_CauseRadioNetwork(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
841
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
842
0
                                     4, NULL, true, 0, NULL);
843
844
0
  return offset;
845
0
}
846
847
848
static const value_string rua_CauseTransport_vals[] = {
849
  {   0, "transport-resource-unavailable" },
850
  {   1, "unspecified" },
851
  { 0, NULL }
852
};
853
854
855
static unsigned
856
1
dissect_rua_CauseTransport(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
857
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
858
1
                                     2, NULL, true, 0, NULL);
859
860
1
  return offset;
861
1
}
862
863
864
static const value_string rua_CauseProtocol_vals[] = {
865
  {   0, "transfer-syntax-error" },
866
  {   1, "abstract-syntax-error-reject" },
867
  {   2, "abstract-syntax-error-ignore-and-notify" },
868
  {   3, "message-not-compatible-with-receiver-state" },
869
  {   4, "semantic-error" },
870
  {   5, "unspecified" },
871
  {   6, "abstract-syntax-error-falsely-constructed-message" },
872
  { 0, NULL }
873
};
874
875
876
static unsigned
877
0
dissect_rua_CauseProtocol(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
878
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
879
0
                                     7, NULL, true, 0, NULL);
880
881
0
  return offset;
882
0
}
883
884
885
static const value_string rua_CauseMisc_vals[] = {
886
  {   0, "processing-overload" },
887
  {   1, "hardware-failure" },
888
  {   2, "o-and-m-intervention" },
889
  {   3, "unspecified" },
890
  { 0, NULL }
891
};
892
893
894
static unsigned
895
0
dissect_rua_CauseMisc(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
896
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
897
0
                                     4, NULL, true, 0, NULL);
898
899
0
  return offset;
900
0
}
901
902
903
static const value_string rua_Cause_vals[] = {
904
  {   0, "radioNetwork" },
905
  {   1, "transport" },
906
  {   2, "protocol" },
907
  {   3, "misc" },
908
  { 0, NULL }
909
};
910
911
static const per_choice_t Cause_choice[] = {
912
  {   0, &hf_rua_radioNetwork    , ASN1_EXTENSION_ROOT    , dissect_rua_CauseRadioNetwork },
913
  {   1, &hf_rua_transport       , ASN1_EXTENSION_ROOT    , dissect_rua_CauseTransport },
914
  {   2, &hf_rua_protocol        , ASN1_EXTENSION_ROOT    , dissect_rua_CauseProtocol },
915
  {   3, &hf_rua_misc            , ASN1_EXTENSION_ROOT    , dissect_rua_CauseMisc },
916
  { 0, NULL, 0, NULL }
917
};
918
919
static unsigned
920
1
dissect_rua_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
921
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
922
1
                                 ett_rua_Cause, Cause_choice,
923
1
                                 NULL);
924
925
1
  return offset;
926
1
}
927
928
929
static const value_string rua_TypeOfError_vals[] = {
930
  {   0, "not-understood" },
931
  {   1, "missing" },
932
  { 0, NULL }
933
};
934
935
936
static unsigned
937
0
dissect_rua_TypeOfError(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
938
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
939
0
                                     2, NULL, true, 0, NULL);
940
941
0
  return offset;
942
0
}
943
944
945
static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
946
  { &hf_rua_iECriticality   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
947
  { &hf_rua_iE_ID           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
948
  { &hf_rua_typeOfError     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_TypeOfError },
949
  { &hf_rua_iE_Extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
950
  { NULL, 0, 0, NULL }
951
};
952
953
static unsigned
954
0
dissect_rua_CriticalityDiagnostics_IE_List_item(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
955
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
956
0
                                   ett_rua_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
957
958
0
  return offset;
959
0
}
960
961
962
static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
963
  { &hf_rua_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_CriticalityDiagnostics_IE_List_item },
964
};
965
966
static unsigned
967
0
dissect_rua_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
968
0
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
969
0
                                                  ett_rua_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
970
0
                                                  1, maxNrOfErrors, false);
971
972
0
  return offset;
973
0
}
974
975
976
static const per_sequence_t CriticalityDiagnostics_sequence[] = {
977
  { &hf_rua_procedureCode   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProcedureCode },
978
  { &hf_rua_triggeringMessage, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_TriggeringMessage },
979
  { &hf_rua_procedureCriticality, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_Criticality },
980
  { &hf_rua_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_CriticalityDiagnostics_IE_List },
981
  { &hf_rua_iE_Extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
982
  { NULL, 0, 0, NULL }
983
};
984
985
static unsigned
986
0
dissect_rua_CriticalityDiagnostics(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
987
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
988
0
                                   ett_rua_CriticalityDiagnostics, CriticalityDiagnostics_sequence);
989
990
0
  return offset;
991
0
}
992
993
994
static const per_sequence_t Connect_sequence[] = {
995
  { &hf_rua_protocolIEs     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
996
  { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
997
  { NULL, 0, 0, NULL }
998
};
999
1000
static unsigned
1001
21
dissect_rua_Connect(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1002
21
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1003
21
             "CONNECT ");
1004
21
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1005
21
                                   ett_rua_Connect, Connect_sequence);
1006
1007
1008
1009
21
  return offset;
1010
21
}
1011
1012
1013
static const per_sequence_t DirectTransfer_sequence[] = {
1014
  { &hf_rua_protocolIEs     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1015
  { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
1016
  { NULL, 0, 0, NULL }
1017
};
1018
1019
static unsigned
1020
1
dissect_rua_DirectTransfer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1021
1
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1022
1
             "DIRECT_TRANSFER ");
1023
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1024
1
                                   ett_rua_DirectTransfer, DirectTransfer_sequence);
1025
1026
1027
1028
1
  return offset;
1029
1
}
1030
1031
1032
static const per_sequence_t Disconnect_sequence[] = {
1033
  { &hf_rua_protocolIEs     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1034
  { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
1035
  { NULL, 0, 0, NULL }
1036
};
1037
1038
static unsigned
1039
1
dissect_rua_Disconnect(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1040
1
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1041
1
             "DISCONNECT ");
1042
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1043
1
                                   ett_rua_Disconnect, Disconnect_sequence);
1044
1045
1046
1047
1
  return offset;
1048
1
}
1049
1050
1051
static const per_sequence_t ConnectionlessTransfer_sequence[] = {
1052
  { &hf_rua_protocolIEs     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1053
  { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
1054
  { NULL, 0, 0, NULL }
1055
};
1056
1057
static unsigned
1058
1
dissect_rua_ConnectionlessTransfer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1059
1
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1060
1
             "CONNECTIONLESS_TRANSFER ");
1061
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1062
1
                                   ett_rua_ConnectionlessTransfer, ConnectionlessTransfer_sequence);
1063
1064
1065
1066
1
  return offset;
1067
1
}
1068
1069
1070
static const per_sequence_t ErrorIndication_sequence[] = {
1071
  { &hf_rua_protocolIEs     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
1072
  { &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_rua_ProtocolExtensionContainer },
1073
  { NULL, 0, 0, NULL }
1074
};
1075
1076
static unsigned
1077
0
dissect_rua_ErrorIndication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1078
0
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1079
0
             "ERROR_INDICATION ");
1080
0
    col_set_fence(actx->pinfo->cinfo, COL_INFO); /* Protect info from CriticalityDiagnostics decodes */
1081
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1082
0
                                   ett_rua_ErrorIndication, ErrorIndication_sequence);
1083
1084
1085
1086
0
  return offset;
1087
0
}
1088
1089
1090
static const per_sequence_t PrivateMessage_sequence[] = {
1091
  { &hf_rua_privateIEs      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Container },
1092
  { NULL, 0, 0, NULL }
1093
};
1094
1095
static unsigned
1096
7
dissect_rua_PrivateMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1097
7
    col_set_str(actx->pinfo->cinfo, COL_INFO,
1098
7
             "PRIVATE_MESSAGE ");
1099
7
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1100
7
                                   ett_rua_PrivateMessage, PrivateMessage_sequence);
1101
1102
1103
1104
7
  return offset;
1105
7
}
1106
1107
1108
1109
static unsigned
1110
31
dissect_rua_InitiatingMessage_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1111
  // InitiatingMessage/value -> InitiatingMessage/value
1112
31
  increment_dissection_depth_by_n(actx->pinfo, 1);
1113
31
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
1114
1115
31
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1116
31
  return offset;
1117
31
}
1118
1119
1120
static const per_sequence_t InitiatingMessage_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_initiatingMessagevalue, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_InitiatingMessage_value },
1124
  { NULL, 0, 0, NULL }
1125
};
1126
1127
static unsigned
1128
31
dissect_rua_InitiatingMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1129
31
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1130
31
                                   ett_rua_InitiatingMessage, InitiatingMessage_sequence);
1131
1132
31
  return offset;
1133
31
}
1134
1135
1136
1137
static unsigned
1138
1
dissect_rua_SuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1139
  // SuccessfulOutcome/value -> SuccessfulOutcome/value
1140
1
  increment_dissection_depth_by_n(actx->pinfo, 1);
1141
1
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
1142
1143
1
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1144
1
  return offset;
1145
1
}
1146
1147
1148
static const per_sequence_t SuccessfulOutcome_sequence[] = {
1149
  { &hf_rua_procedureCode   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
1150
  { &hf_rua_criticality     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
1151
  { &hf_rua_successfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_SuccessfulOutcome_value },
1152
  { NULL, 0, 0, NULL }
1153
};
1154
1155
static unsigned
1156
1
dissect_rua_SuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1157
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1158
1
                                   ett_rua_SuccessfulOutcome, SuccessfulOutcome_sequence);
1159
1160
1
  return offset;
1161
1
}
1162
1163
1164
1165
static unsigned
1166
1
dissect_rua_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1167
  // UnsuccessfulOutcome/value -> UnsuccessfulOutcome/value
1168
1
  increment_dissection_depth_by_n(actx->pinfo, 1);
1169
1
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
1170
1171
1
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1172
1
  return offset;
1173
1
}
1174
1175
1176
static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
1177
  { &hf_rua_procedureCode   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
1178
  { &hf_rua_criticality     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
1179
  { &hf_rua_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_rua_UnsuccessfulOutcome_value },
1180
  { NULL, 0, 0, NULL }
1181
};
1182
1183
static unsigned
1184
1
dissect_rua_UnsuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1185
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1186
1
                                   ett_rua_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
1187
1188
1
  return offset;
1189
1
}
1190
1191
1192
static const value_string rua_RUA_PDU_vals[] = {
1193
  {   0, "initiatingMessage" },
1194
  {   1, "successfulOutcome" },
1195
  {   2, "unsuccessfulOutcome" },
1196
  { 0, NULL }
1197
};
1198
1199
static const per_choice_t RUA_PDU_choice[] = {
1200
  {   0, &hf_rua_initiatingMessage, ASN1_EXTENSION_ROOT    , dissect_rua_InitiatingMessage },
1201
  {   1, &hf_rua_successfulOutcome, ASN1_EXTENSION_ROOT    , dissect_rua_SuccessfulOutcome },
1202
  {   2, &hf_rua_unsuccessfulOutcome, ASN1_EXTENSION_ROOT    , dissect_rua_UnsuccessfulOutcome },
1203
  { 0, NULL, 0, NULL }
1204
};
1205
1206
static unsigned
1207
33
dissect_rua_RUA_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1208
33
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1209
33
                                 ett_rua_RUA_PDU, RUA_PDU_choice,
1210
33
                                 NULL);
1211
1212
33
  return offset;
1213
33
}
1214
1215
/*--- PDUs ---*/
1216
1217
0
static int dissect_CN_DomainIndicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1218
0
  unsigned offset = 0;
1219
0
  asn1_ctx_t asn1_ctx;
1220
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1221
0
  offset = dissect_rua_CN_DomainIndicator(tvb, offset, &asn1_ctx, tree, hf_rua_CN_DomainIndicator_PDU);
1222
0
  offset += 7; offset >>= 3;
1223
0
  return offset;
1224
0
}
1225
3
static int dissect_CSGMembershipStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1226
3
  unsigned offset = 0;
1227
3
  asn1_ctx_t asn1_ctx;
1228
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1229
3
  offset = dissect_rua_CSGMembershipStatus(tvb, offset, &asn1_ctx, tree, hf_rua_CSGMembershipStatus_PDU);
1230
3
  offset += 7; offset >>= 3;
1231
3
  return offset;
1232
3
}
1233
5
static int dissect_Establishment_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1234
5
  unsigned offset = 0;
1235
5
  asn1_ctx_t asn1_ctx;
1236
5
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1237
5
  offset = dissect_rua_Establishment_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Establishment_Cause_PDU);
1238
5
  offset += 7; offset >>= 3;
1239
5
  return offset;
1240
5
}
1241
1
static int dissect_Context_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1242
1
  unsigned offset = 0;
1243
1
  asn1_ctx_t asn1_ctx;
1244
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1245
1
  offset = dissect_rua_Context_ID(tvb, offset, &asn1_ctx, tree, hf_rua_Context_ID_PDU);
1246
1
  offset += 7; offset >>= 3;
1247
1
  return offset;
1248
1
}
1249
0
static int dissect_IntraDomainNasNodeSelector_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1250
0
  unsigned offset = 0;
1251
0
  asn1_ctx_t asn1_ctx;
1252
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1253
0
  offset = dissect_rua_IntraDomainNasNodeSelector(tvb, offset, &asn1_ctx, tree, hf_rua_IntraDomainNasNodeSelector_PDU);
1254
0
  offset += 7; offset >>= 3;
1255
0
  return offset;
1256
0
}
1257
0
static int dissect_RANAP_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1258
0
  unsigned offset = 0;
1259
0
  asn1_ctx_t asn1_ctx;
1260
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1261
0
  offset = dissect_rua_RANAP_Message(tvb, offset, &asn1_ctx, tree, hf_rua_RANAP_Message_PDU);
1262
0
  offset += 7; offset >>= 3;
1263
0
  return offset;
1264
0
}
1265
1
static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1266
1
  unsigned offset = 0;
1267
1
  asn1_ctx_t asn1_ctx;
1268
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1269
1
  offset = dissect_rua_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Cause_PDU);
1270
1
  offset += 7; offset >>= 3;
1271
1
  return offset;
1272
1
}
1273
0
static int dissect_CriticalityDiagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1274
0
  unsigned offset = 0;
1275
0
  asn1_ctx_t asn1_ctx;
1276
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1277
0
  offset = dissect_rua_CriticalityDiagnostics(tvb, offset, &asn1_ctx, tree, hf_rua_CriticalityDiagnostics_PDU);
1278
0
  offset += 7; offset >>= 3;
1279
0
  return offset;
1280
0
}
1281
21
static int dissect_Connect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1282
21
  unsigned offset = 0;
1283
21
  asn1_ctx_t asn1_ctx;
1284
21
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1285
21
  offset = dissect_rua_Connect(tvb, offset, &asn1_ctx, tree, hf_rua_Connect_PDU);
1286
21
  offset += 7; offset >>= 3;
1287
21
  return offset;
1288
21
}
1289
1
static int dissect_DirectTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1290
1
  unsigned offset = 0;
1291
1
  asn1_ctx_t asn1_ctx;
1292
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1293
1
  offset = dissect_rua_DirectTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_DirectTransfer_PDU);
1294
1
  offset += 7; offset >>= 3;
1295
1
  return offset;
1296
1
}
1297
1
static int dissect_Disconnect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1298
1
  unsigned offset = 0;
1299
1
  asn1_ctx_t asn1_ctx;
1300
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1301
1
  offset = dissect_rua_Disconnect(tvb, offset, &asn1_ctx, tree, hf_rua_Disconnect_PDU);
1302
1
  offset += 7; offset >>= 3;
1303
1
  return offset;
1304
1
}
1305
1
static int dissect_ConnectionlessTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1306
1
  unsigned offset = 0;
1307
1
  asn1_ctx_t asn1_ctx;
1308
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1309
1
  offset = dissect_rua_ConnectionlessTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_ConnectionlessTransfer_PDU);
1310
1
  offset += 7; offset >>= 3;
1311
1
  return offset;
1312
1
}
1313
0
static int dissect_ErrorIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1314
0
  unsigned offset = 0;
1315
0
  asn1_ctx_t asn1_ctx;
1316
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1317
0
  offset = dissect_rua_ErrorIndication(tvb, offset, &asn1_ctx, tree, hf_rua_ErrorIndication_PDU);
1318
0
  offset += 7; offset >>= 3;
1319
0
  return offset;
1320
0
}
1321
7
static int dissect_PrivateMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1322
7
  unsigned offset = 0;
1323
7
  asn1_ctx_t asn1_ctx;
1324
7
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1325
7
  offset = dissect_rua_PrivateMessage(tvb, offset, &asn1_ctx, tree, hf_rua_PrivateMessage_PDU);
1326
7
  offset += 7; offset >>= 3;
1327
7
  return offset;
1328
7
}
1329
33
static int dissect_RUA_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1330
33
  unsigned offset = 0;
1331
33
  asn1_ctx_t asn1_ctx;
1332
33
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1333
33
  offset = dissect_rua_RUA_PDU(tvb, offset, &asn1_ctx, tree, hf_rua_RUA_PDU_PDU);
1334
33
  offset += 7; offset >>= 3;
1335
33
  return offset;
1336
33
}
1337
1338
1339
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1340
37
{
1341
37
  return (dissector_try_uint_with_data(rua_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1342
37
}
1343
1344
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1345
46
{
1346
46
  return (dissector_try_uint_with_data(rua_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1347
46
}
1348
1349
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1350
31
{
1351
31
  return (dissector_try_uint_with_data(rua_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1352
31
}
1353
1354
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1355
1
{
1356
1
  return (dissector_try_uint_with_data(rua_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1357
1
}
1358
1359
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1360
1
{
1361
1
  return (dissector_try_uint_with_data(rua_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
1362
1
}
1363
1364
static int
1365
dissect_rua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
1366
33
{
1367
33
    proto_item  *rua_item = NULL;
1368
33
    proto_tree  *rua_tree = NULL;
1369
1370
    /* make entry in the Protocol column on summary display */
1371
33
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "RUA");
1372
1373
    /* create the rua protocol tree */
1374
33
    rua_item = proto_tree_add_item(tree, proto_rua, tvb, 0, -1, ENC_NA);
1375
33
    rua_tree = proto_item_add_subtree(rua_item, ett_rua);
1376
1377
33
    return dissect_RUA_PDU_PDU(tvb, pinfo, rua_tree, data);
1378
33
}
1379
1380
/*--- proto_register_rua -------------------------------------------*/
1381
16
void proto_register_rua(void) {
1382
1383
  /* List of fields */
1384
1385
16
  static hf_register_info hf[] = {
1386
1387
16
    { &hf_rua_CN_DomainIndicator_PDU,
1388
16
      { "CN-DomainIndicator", "rua.CN_DomainIndicator",
1389
16
        FT_UINT32, BASE_DEC, VALS(rua_CN_DomainIndicator_vals), 0,
1390
16
        NULL, HFILL }},
1391
16
    { &hf_rua_CSGMembershipStatus_PDU,
1392
16
      { "CSGMembershipStatus", "rua.CSGMembershipStatus",
1393
16
        FT_UINT32, BASE_DEC, VALS(rua_CSGMembershipStatus_vals), 0,
1394
16
        NULL, HFILL }},
1395
16
    { &hf_rua_Establishment_Cause_PDU,
1396
16
      { "Establishment-Cause", "rua.Establishment_Cause",
1397
16
        FT_UINT32, BASE_DEC, VALS(rua_Establishment_Cause_vals), 0,
1398
16
        NULL, HFILL }},
1399
16
    { &hf_rua_Context_ID_PDU,
1400
16
      { "Context-ID", "rua.Context_ID",
1401
16
        FT_BYTES, BASE_NONE, NULL, 0,
1402
16
        NULL, HFILL }},
1403
16
    { &hf_rua_IntraDomainNasNodeSelector_PDU,
1404
16
      { "IntraDomainNasNodeSelector", "rua.IntraDomainNasNodeSelector_element",
1405
16
        FT_NONE, BASE_NONE, NULL, 0,
1406
16
        NULL, HFILL }},
1407
16
    { &hf_rua_RANAP_Message_PDU,
1408
16
      { "RANAP-Message", "rua.RANAP_Message",
1409
16
        FT_BYTES, BASE_NONE, NULL, 0,
1410
16
        NULL, HFILL }},
1411
16
    { &hf_rua_Cause_PDU,
1412
16
      { "Cause", "rua.Cause",
1413
16
        FT_UINT32, BASE_DEC, VALS(rua_Cause_vals), 0,
1414
16
        NULL, HFILL }},
1415
16
    { &hf_rua_CriticalityDiagnostics_PDU,
1416
16
      { "CriticalityDiagnostics", "rua.CriticalityDiagnostics_element",
1417
16
        FT_NONE, BASE_NONE, NULL, 0,
1418
16
        NULL, HFILL }},
1419
16
    { &hf_rua_Connect_PDU,
1420
16
      { "Connect", "rua.Connect_element",
1421
16
        FT_NONE, BASE_NONE, NULL, 0,
1422
16
        NULL, HFILL }},
1423
16
    { &hf_rua_DirectTransfer_PDU,
1424
16
      { "DirectTransfer", "rua.DirectTransfer_element",
1425
16
        FT_NONE, BASE_NONE, NULL, 0,
1426
16
        NULL, HFILL }},
1427
16
    { &hf_rua_Disconnect_PDU,
1428
16
      { "Disconnect", "rua.Disconnect_element",
1429
16
        FT_NONE, BASE_NONE, NULL, 0,
1430
16
        NULL, HFILL }},
1431
16
    { &hf_rua_ConnectionlessTransfer_PDU,
1432
16
      { "ConnectionlessTransfer", "rua.ConnectionlessTransfer_element",
1433
16
        FT_NONE, BASE_NONE, NULL, 0,
1434
16
        NULL, HFILL }},
1435
16
    { &hf_rua_ErrorIndication_PDU,
1436
16
      { "ErrorIndication", "rua.ErrorIndication_element",
1437
16
        FT_NONE, BASE_NONE, NULL, 0,
1438
16
        NULL, HFILL }},
1439
16
    { &hf_rua_PrivateMessage_PDU,
1440
16
      { "PrivateMessage", "rua.PrivateMessage_element",
1441
16
        FT_NONE, BASE_NONE, NULL, 0,
1442
16
        NULL, HFILL }},
1443
16
    { &hf_rua_RUA_PDU_PDU,
1444
16
      { "RUA-PDU", "rua.RUA_PDU",
1445
16
        FT_UINT32, BASE_DEC, VALS(rua_RUA_PDU_vals), 0,
1446
16
        NULL, HFILL }},
1447
16
    { &hf_rua_local,
1448
16
      { "local", "rua.local",
1449
16
        FT_UINT32, BASE_DEC, NULL, 0,
1450
16
        "INTEGER_0_65535", HFILL }},
1451
16
    { &hf_rua_global,
1452
16
      { "global", "rua.global",
1453
16
        FT_OID, BASE_NONE, NULL, 0,
1454
16
        "OBJECT_IDENTIFIER", HFILL }},
1455
16
    { &hf_rua_ProtocolIE_Container_item,
1456
16
      { "ProtocolIE-Field", "rua.ProtocolIE_Field_element",
1457
16
        FT_NONE, BASE_NONE, NULL, 0,
1458
16
        NULL, HFILL }},
1459
16
    { &hf_rua_protocol_ie_field_id,
1460
16
      { "id", "rua.protocol_ie_field_id",
1461
16
        FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1462
16
        "ProtocolIE_ID", HFILL }},
1463
16
    { &hf_rua_criticality,
1464
16
      { "criticality", "rua.criticality",
1465
16
        FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1466
16
        NULL, HFILL }},
1467
16
    { &hf_rua_ie_field_value,
1468
16
      { "value", "rua.ie_field_value_element",
1469
16
        FT_NONE, BASE_NONE, NULL, 0,
1470
16
        "ProtocolIE_Field_value", HFILL }},
1471
16
    { &hf_rua_ProtocolExtensionContainer_item,
1472
16
      { "ProtocolExtensionField", "rua.ProtocolExtensionField_element",
1473
16
        FT_NONE, BASE_NONE, NULL, 0,
1474
16
        NULL, HFILL }},
1475
16
    { &hf_rua_id,
1476
16
      { "id", "rua.id",
1477
16
        FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1478
16
        "ProtocolIE_ID", HFILL }},
1479
16
    { &hf_rua_extensionValue,
1480
16
      { "extensionValue", "rua.extensionValue_element",
1481
16
        FT_NONE, BASE_NONE, NULL, 0,
1482
16
        NULL, HFILL }},
1483
16
    { &hf_rua_PrivateIE_Container_item,
1484
16
      { "PrivateIE-Field", "rua.PrivateIE_Field_element",
1485
16
        FT_NONE, BASE_NONE, NULL, 0,
1486
16
        NULL, HFILL }},
1487
16
    { &hf_rua_private_ie_field_id,
1488
16
      { "id", "rua.private_ie_field_id",
1489
16
        FT_UINT32, BASE_DEC, VALS(rua_PrivateIE_ID_vals), 0,
1490
16
        "PrivateIE_ID", HFILL }},
1491
16
    { &hf_rua_private_value,
1492
16
      { "value", "rua.private_value_element",
1493
16
        FT_NONE, BASE_NONE, NULL, 0,
1494
16
        "PrivateIE_Field_value", HFILL }},
1495
16
    { &hf_rua_version,
1496
16
      { "version", "rua.version",
1497
16
        FT_UINT32, BASE_DEC, VALS(rua_T_version_vals), 0,
1498
16
        NULL, HFILL }},
1499
16
    { &hf_rua_release99,
1500
16
      { "release99", "rua.release99_element",
1501
16
        FT_NONE, BASE_NONE, NULL, 0,
1502
16
        NULL, HFILL }},
1503
16
    { &hf_rua_cn_Type,
1504
16
      { "cn-Type", "rua.cn_Type",
1505
16
        FT_UINT32, BASE_DEC, VALS(rua_T_cn_Type_vals), 0,
1506
16
        NULL, HFILL }},
1507
16
    { &hf_rua_gsm_Map_IDNNS,
1508
16
      { "gsm-Map-IDNNS", "rua.gsm_Map_IDNNS_element",
1509
16
        FT_NONE, BASE_NONE, NULL, 0,
1510
16
        NULL, HFILL }},
1511
16
    { &hf_rua_ansi_41_IDNNS,
1512
16
      { "ansi-41-IDNNS", "rua.ansi_41_IDNNS",
1513
16
        FT_BYTES, BASE_NONE, NULL, 0,
1514
16
        NULL, HFILL }},
1515
16
    { &hf_rua_later,
1516
16
      { "later", "rua.later_element",
1517
16
        FT_NONE, BASE_NONE, NULL, 0,
1518
16
        NULL, HFILL }},
1519
16
    { &hf_rua_futurecoding,
1520
16
      { "futurecoding", "rua.futurecoding",
1521
16
        FT_BYTES, BASE_NONE, NULL, 0,
1522
16
        "BIT_STRING_SIZE_15", HFILL }},
1523
16
    { &hf_rua_routingbasis,
1524
16
      { "routingbasis", "rua.routingbasis",
1525
16
        FT_UINT32, BASE_DEC, VALS(rua_T_routingbasis_vals), 0,
1526
16
        NULL, HFILL }},
1527
16
    { &hf_rua_localPTMSI,
1528
16
      { "localPTMSI", "rua.localPTMSI_element",
1529
16
        FT_NONE, BASE_NONE, NULL, 0,
1530
16
        NULL, HFILL }},
1531
16
    { &hf_rua_routingparameter,
1532
16
      { "routingparameter", "rua.routingparameter",
1533
16
        FT_BYTES, BASE_NONE, NULL, 0,
1534
16
        NULL, HFILL }},
1535
16
    { &hf_rua_tMSIofsamePLMN,
1536
16
      { "tMSIofsamePLMN", "rua.tMSIofsamePLMN_element",
1537
16
        FT_NONE, BASE_NONE, NULL, 0,
1538
16
        NULL, HFILL }},
1539
16
    { &hf_rua_tMSIofdifferentPLMN,
1540
16
      { "tMSIofdifferentPLMN", "rua.tMSIofdifferentPLMN_element",
1541
16
        FT_NONE, BASE_NONE, NULL, 0,
1542
16
        NULL, HFILL }},
1543
16
    { &hf_rua_iMSIresponsetopaging,
1544
16
      { "iMSIresponsetopaging", "rua.iMSIresponsetopaging_element",
1545
16
        FT_NONE, BASE_NONE, NULL, 0,
1546
16
        NULL, HFILL }},
1547
16
    { &hf_rua_iMSIcauseUEinitiatedEvent,
1548
16
      { "iMSIcauseUEinitiatedEvent", "rua.iMSIcauseUEinitiatedEvent_element",
1549
16
        FT_NONE, BASE_NONE, NULL, 0,
1550
16
        NULL, HFILL }},
1551
16
    { &hf_rua_iMEI,
1552
16
      { "iMEI", "rua.iMEI_element",
1553
16
        FT_NONE, BASE_NONE, NULL, 0,
1554
16
        NULL, HFILL }},
1555
16
    { &hf_rua_spare2,
1556
16
      { "spare2", "rua.spare2_element",
1557
16
        FT_NONE, BASE_NONE, NULL, 0,
1558
16
        NULL, HFILL }},
1559
16
    { &hf_rua_spare1,
1560
16
      { "spare1", "rua.spare1_element",
1561
16
        FT_NONE, BASE_NONE, NULL, 0,
1562
16
        NULL, HFILL }},
1563
16
    { &hf_rua_dummy,
1564
16
      { "dummy", "rua.dummy",
1565
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
1566
16
        "BOOLEAN", HFILL }},
1567
16
    { &hf_rua_radioNetwork,
1568
16
      { "radioNetwork", "rua.radioNetwork",
1569
16
        FT_UINT32, BASE_DEC, VALS(rua_CauseRadioNetwork_vals), 0,
1570
16
        "CauseRadioNetwork", HFILL }},
1571
16
    { &hf_rua_transport,
1572
16
      { "transport", "rua.transport",
1573
16
        FT_UINT32, BASE_DEC, VALS(rua_CauseTransport_vals), 0,
1574
16
        "CauseTransport", HFILL }},
1575
16
    { &hf_rua_protocol,
1576
16
      { "protocol", "rua.protocol",
1577
16
        FT_UINT32, BASE_DEC, VALS(rua_CauseProtocol_vals), 0,
1578
16
        "CauseProtocol", HFILL }},
1579
16
    { &hf_rua_misc,
1580
16
      { "misc", "rua.misc",
1581
16
        FT_UINT32, BASE_DEC, VALS(rua_CauseMisc_vals), 0,
1582
16
        "CauseMisc", HFILL }},
1583
16
    { &hf_rua_procedureCode,
1584
16
      { "procedureCode", "rua.procedureCode",
1585
16
        FT_UINT32, BASE_DEC, VALS(rua_ProcedureCode_vals), 0,
1586
16
        NULL, HFILL }},
1587
16
    { &hf_rua_triggeringMessage,
1588
16
      { "triggeringMessage", "rua.triggeringMessage",
1589
16
        FT_UINT32, BASE_DEC, VALS(rua_TriggeringMessage_vals), 0,
1590
16
        NULL, HFILL }},
1591
16
    { &hf_rua_procedureCriticality,
1592
16
      { "procedureCriticality", "rua.procedureCriticality",
1593
16
        FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1594
16
        "Criticality", HFILL }},
1595
16
    { &hf_rua_iEsCriticalityDiagnostics,
1596
16
      { "iEsCriticalityDiagnostics", "rua.iEsCriticalityDiagnostics",
1597
16
        FT_UINT32, BASE_DEC, NULL, 0,
1598
16
        "CriticalityDiagnostics_IE_List", HFILL }},
1599
16
    { &hf_rua_iE_Extensions,
1600
16
      { "iE-Extensions", "rua.iE_Extensions",
1601
16
        FT_UINT32, BASE_DEC, NULL, 0,
1602
16
        "ProtocolExtensionContainer", HFILL }},
1603
16
    { &hf_rua_CriticalityDiagnostics_IE_List_item,
1604
16
      { "CriticalityDiagnostics-IE-List item", "rua.CriticalityDiagnostics_IE_List_item_element",
1605
16
        FT_NONE, BASE_NONE, NULL, 0,
1606
16
        NULL, HFILL }},
1607
16
    { &hf_rua_iECriticality,
1608
16
      { "iECriticality", "rua.iECriticality",
1609
16
        FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
1610
16
        "Criticality", HFILL }},
1611
16
    { &hf_rua_iE_ID,
1612
16
      { "iE-ID", "rua.iE_ID",
1613
16
        FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
1614
16
        "ProtocolIE_ID", HFILL }},
1615
16
    { &hf_rua_typeOfError,
1616
16
      { "typeOfError", "rua.typeOfError",
1617
16
        FT_UINT32, BASE_DEC, VALS(rua_TypeOfError_vals), 0,
1618
16
        NULL, HFILL }},
1619
16
    { &hf_rua_protocolIEs,
1620
16
      { "protocolIEs", "rua.protocolIEs",
1621
16
        FT_UINT32, BASE_DEC, NULL, 0,
1622
16
        "ProtocolIE_Container", HFILL }},
1623
16
    { &hf_rua_protocolExtensions,
1624
16
      { "protocolExtensions", "rua.protocolExtensions",
1625
16
        FT_UINT32, BASE_DEC, NULL, 0,
1626
16
        "ProtocolExtensionContainer", HFILL }},
1627
16
    { &hf_rua_privateIEs,
1628
16
      { "privateIEs", "rua.privateIEs",
1629
16
        FT_UINT32, BASE_DEC, NULL, 0,
1630
16
        "PrivateIE_Container", HFILL }},
1631
16
    { &hf_rua_initiatingMessage,
1632
16
      { "initiatingMessage", "rua.initiatingMessage_element",
1633
16
        FT_NONE, BASE_NONE, NULL, 0,
1634
16
        NULL, HFILL }},
1635
16
    { &hf_rua_successfulOutcome,
1636
16
      { "successfulOutcome", "rua.successfulOutcome_element",
1637
16
        FT_NONE, BASE_NONE, NULL, 0,
1638
16
        NULL, HFILL }},
1639
16
    { &hf_rua_unsuccessfulOutcome,
1640
16
      { "unsuccessfulOutcome", "rua.unsuccessfulOutcome_element",
1641
16
        FT_NONE, BASE_NONE, NULL, 0,
1642
16
        NULL, HFILL }},
1643
16
    { &hf_rua_initiatingMessagevalue,
1644
16
      { "value", "rua.initiatingMessagevalue_element",
1645
16
        FT_NONE, BASE_NONE, NULL, 0,
1646
16
        "InitiatingMessage_value", HFILL }},
1647
16
    { &hf_rua_successfulOutcome_value,
1648
16
      { "value", "rua.successfulOutcome_value_element",
1649
16
        FT_NONE, BASE_NONE, NULL, 0,
1650
16
        "SuccessfulOutcome_value", HFILL }},
1651
16
    { &hf_rua_unsuccessfulOutcome_value,
1652
16
      { "value", "rua.unsuccessfulOutcome_value_element",
1653
16
        FT_NONE, BASE_NONE, NULL, 0,
1654
16
        "UnsuccessfulOutcome_value", HFILL }},
1655
16
  };
1656
1657
  /* List of subtrees */
1658
16
  static int *ett[] = {
1659
16
          &ett_rua,
1660
16
    &ett_rua_PrivateIE_ID,
1661
16
    &ett_rua_ProtocolIE_Container,
1662
16
    &ett_rua_ProtocolIE_Field,
1663
16
    &ett_rua_ProtocolExtensionContainer,
1664
16
    &ett_rua_ProtocolExtensionField,
1665
16
    &ett_rua_PrivateIE_Container,
1666
16
    &ett_rua_PrivateIE_Field,
1667
16
    &ett_rua_IntraDomainNasNodeSelector,
1668
16
    &ett_rua_T_version,
1669
16
    &ett_rua_T_release99,
1670
16
    &ett_rua_T_cn_Type,
1671
16
    &ett_rua_T_later,
1672
16
    &ett_rua_Gsm_map_IDNNS,
1673
16
    &ett_rua_T_routingbasis,
1674
16
    &ett_rua_T_localPTMSI,
1675
16
    &ett_rua_T_tMSIofsamePLMN,
1676
16
    &ett_rua_T_tMSIofdifferentPLMN,
1677
16
    &ett_rua_T_iMSIresponsetopaging,
1678
16
    &ett_rua_T_iMSIcauseUEinitiatedEvent,
1679
16
    &ett_rua_T_iMEI,
1680
16
    &ett_rua_T_spare2,
1681
16
    &ett_rua_T_spare1,
1682
16
    &ett_rua_Cause,
1683
16
    &ett_rua_CriticalityDiagnostics,
1684
16
    &ett_rua_CriticalityDiagnostics_IE_List,
1685
16
    &ett_rua_CriticalityDiagnostics_IE_List_item,
1686
16
    &ett_rua_Connect,
1687
16
    &ett_rua_DirectTransfer,
1688
16
    &ett_rua_Disconnect,
1689
16
    &ett_rua_ConnectionlessTransfer,
1690
16
    &ett_rua_ErrorIndication,
1691
16
    &ett_rua_PrivateMessage,
1692
16
    &ett_rua_RUA_PDU,
1693
16
    &ett_rua_InitiatingMessage,
1694
16
    &ett_rua_SuccessfulOutcome,
1695
16
    &ett_rua_UnsuccessfulOutcome,
1696
16
  };
1697
1698
1699
  /* Register protocol */
1700
16
  proto_rua = proto_register_protocol("UTRAN Iuh interface RUA signalling", "RUA", "rua");
1701
  /* Register fields and subtrees */
1702
16
  proto_register_field_array(proto_rua, hf, array_length(hf));
1703
16
  proto_register_subtree_array(ett, array_length(ett));
1704
1705
  /* Register dissector */
1706
16
  rua_handle = register_dissector("rua", dissect_rua, proto_rua);
1707
1708
  /* Register dissector tables */
1709
16
  rua_ies_dissector_table = register_dissector_table("rua.ies", "RUA-PROTOCOL-IES", proto_rua, FT_UINT32, BASE_DEC);
1710
16
  rua_extension_dissector_table = register_dissector_table("rua.extension", "RUA-PROTOCOL-EXTENSION", proto_rua, FT_UINT32, BASE_DEC);
1711
16
  rua_proc_imsg_dissector_table = register_dissector_table("rua.proc.imsg", "RUA-ELEMENTARY-PROCEDURE InitiatingMessage", proto_rua, FT_UINT32, BASE_DEC);
1712
16
  rua_proc_sout_dissector_table = register_dissector_table("rua.proc.sout", "RUA-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
1713
16
  rua_proc_uout_dissector_table = register_dissector_table("rua.proc.uout", "RUA-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
1714
1715
  /* rua_module = prefs_register_protocol(proto_rua, NULL); */
1716
1717
16
}
1718
1719
1720
/*--- proto_reg_handoff_rua ---------------------------------------*/
1721
void
1722
proto_reg_handoff_rua(void)
1723
16
{
1724
16
        ranap_handle = find_dissector_add_dependency("ranap", proto_rua);
1725
16
        dissector_add_uint("sctp.ppi", RUA_PAYLOAD_PROTOCOL_ID, rua_handle);
1726
16
        dissector_add_uint_with_preference("sctp.port", SCTP_PORT_RUA, rua_handle);
1727
16
  dissector_add_uint("rua.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_rua));
1728
16
  dissector_add_uint("rua.ies", id_CriticalityDiagnostics, create_dissector_handle(dissect_CriticalityDiagnostics_PDU, proto_rua));
1729
16
  dissector_add_uint("rua.ies", id_Context_ID, create_dissector_handle(dissect_Context_ID_PDU, proto_rua));
1730
16
  dissector_add_uint("rua.ies", id_RANAP_Message, create_dissector_handle(dissect_RANAP_Message_PDU, proto_rua));
1731
16
  dissector_add_uint("rua.ies", id_IntraDomainNasNodeSelector, create_dissector_handle(dissect_IntraDomainNasNodeSelector_PDU, proto_rua));
1732
16
  dissector_add_uint("rua.ies", id_Establishment_Cause, create_dissector_handle(dissect_Establishment_Cause_PDU, proto_rua));
1733
16
  dissector_add_uint("rua.ies", id_CN_DomainIndicator, create_dissector_handle(dissect_CN_DomainIndicator_PDU, proto_rua));
1734
16
  dissector_add_uint("rua.extension", id_CSGMembershipStatus, create_dissector_handle(dissect_CSGMembershipStatus_PDU, proto_rua));
1735
16
  dissector_add_uint("rua.proc.imsg", id_Connect, create_dissector_handle(dissect_Connect_PDU, proto_rua));
1736
16
  dissector_add_uint("rua.proc.imsg", id_DirectTransfer, create_dissector_handle(dissect_DirectTransfer_PDU, proto_rua));
1737
16
  dissector_add_uint("rua.proc.imsg", id_Disconnect, create_dissector_handle(dissect_Disconnect_PDU, proto_rua));
1738
16
  dissector_add_uint("rua.proc.imsg", id_ConnectionlessTransfer, create_dissector_handle(dissect_ConnectionlessTransfer_PDU, proto_rua));
1739
16
  dissector_add_uint("rua.proc.imsg", id_ErrorIndication, create_dissector_handle(dissect_ErrorIndication_PDU, proto_rua));
1740
16
  dissector_add_uint("rua.proc.imsg", id_privateMessage, create_dissector_handle(dissect_PrivateMessage_PDU, proto_rua));
1741
1742
16
}