Coverage Report

Created: 2026-05-14 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-sabp.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-sabp.c                                                              */
4
/* asn2wrs.py -q -L -p sabp -c ./sabp.cnf -s ./packet-sabp-template -D . -O ../.. SABP-CommonDataTypes.asn SABP-Constants.asn SABP-Containers.asn SABP-IEs.asn SABP-PDU-Contents.asn SABP-PDU-Descriptions.asn */
5
6
/* packet-sabp-template.c
7
 * Routines for UTRAN Iu-BC Interface: Service Area Broadcast Protocol (SABP) packet dissection
8
 * Copyright 2007, Tomas Kukosa <tomas.kukosa@siemens.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.419 version  V9.0.0 (2009-12)
17
 */
18
19
#include "config.h"
20
21
#include <epan/packet.h>
22
23
#include <epan/asn1.h>
24
#include <wsutil/array.h>
25
26
#include "packet-tcp.h"
27
#include "packet-per.h"
28
#include "packet-e212.h"
29
#include "packet-gsm_map.h"
30
#include "packet-gsm_sms.h"
31
#include "packet-sctp.h"
32
#include "packet-cell_broadcast.h"
33
34
9
#define maxNrOfErrors                  256
35
12
#define maxnoofSAI                     65535
36
26
#define maxProtocolExtensions          65535
37
49
#define maxProtocolIEs                 65535
38
0
#define maxNrOfLevels                  256
39
40
typedef enum _ProcedureCode_enum {
41
  id_Write_Replace =   0,
42
  id_Kill      =   1,
43
  id_Load_Status_Enquiry =   2,
44
  id_Message_Status_Query =   3,
45
  id_Restart_Indication =   4,
46
  id_Reset     =   5,
47
  id_Failure_Indication =   6,
48
  id_Error_Indication =   7
49
} ProcedureCode_enum;
50
51
typedef enum _ProtocolIE_ID_enum {
52
  id_Broadcast_Message_Content =   0,
53
  id_Category  =   1,
54
  id_Cause     =   2,
55
  id_Criticality_Diagnostics =   3,
56
  id_Data_Coding_Scheme =   4,
57
  id_Failure_List =   5,
58
  id_Message_Identifier =   6,
59
  id_New_Serial_Number =   7,
60
  id_Number_of_Broadcasts_Completed_List =   8,
61
  id_Number_of_Broadcasts_Requested =   9,
62
  id_Old_Serial_Number =  10,
63
  id_Radio_Resource_Loading_List =  11,
64
  id_Recovery_Indication =  12,
65
  id_Repetition_Period =  13,
66
  id_Serial_Number =  14,
67
  id_Service_Areas_List =  15,
68
  id_MessageStructure =  16,
69
  id_TypeOfError =  17,
70
  id_Paging_ETWS_Indicator =  18,
71
  id_Warning_Type =  19,
72
  id_WarningSecurityInfo =  20,
73
  id_Broadcast_Message_Content_Validity_Indicator =  21
74
} ProtocolIE_ID_enum;
75
76
void proto_register_sabp(void);
77
void proto_reg_handoff_sabp(void);
78
79
/* Initialize the protocol and registered fields */
80
static int proto_sabp;
81
82
static int hf_sabp_no_of_pages;
83
static int hf_sabp_cb_inf_len;
84
static int hf_sabp_cb_msg_inf_page;
85
static int hf_sabp_cbs_page_content;
86
static int hf_sabp_Broadcast_Message_Content_PDU;  /* Broadcast_Message_Content */
87
static int hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU;  /* Broadcast_Message_Content_Validity_Indicator */
88
static int hf_sabp_Category_PDU;                  /* Category */
89
static int hf_sabp_Cause_PDU;                     /* Cause */
90
static int hf_sabp_Criticality_Diagnostics_PDU;   /* Criticality_Diagnostics */
91
static int hf_sabp_MessageStructure_PDU;          /* MessageStructure */
92
static int hf_sabp_Data_Coding_Scheme_PDU;        /* Data_Coding_Scheme */
93
static int hf_sabp_Failure_List_PDU;              /* Failure_List */
94
static int hf_sabp_Message_Identifier_PDU;        /* Message_Identifier */
95
static int hf_sabp_New_Serial_Number_PDU;         /* New_Serial_Number */
96
static int hf_sabp_Number_of_Broadcasts_Completed_List_PDU;  /* Number_of_Broadcasts_Completed_List */
97
static int hf_sabp_Number_of_Broadcasts_Requested_PDU;  /* Number_of_Broadcasts_Requested */
98
static int hf_sabp_Old_Serial_Number_PDU;         /* Old_Serial_Number */
99
static int hf_sabp_Paging_ETWS_Indicator_PDU;     /* Paging_ETWS_Indicator */
100
static int hf_sabp_Radio_Resource_Loading_List_PDU;  /* Radio_Resource_Loading_List */
101
static int hf_sabp_Recovery_Indication_PDU;       /* Recovery_Indication */
102
static int hf_sabp_Repetition_Period_PDU;         /* Repetition_Period */
103
static int hf_sabp_Serial_Number_PDU;             /* Serial_Number */
104
static int hf_sabp_Service_Areas_List_PDU;        /* Service_Areas_List */
105
static int hf_sabp_TypeOfError_PDU;               /* TypeOfError */
106
static int hf_sabp_WarningSecurityInfo_PDU;       /* WarningSecurityInfo */
107
static int hf_sabp_Warning_Type_PDU;              /* Warning_Type */
108
static int hf_sabp_Write_Replace_PDU;             /* Write_Replace */
109
static int hf_sabp_Write_Replace_Complete_PDU;    /* Write_Replace_Complete */
110
static int hf_sabp_Write_Replace_Failure_PDU;     /* Write_Replace_Failure */
111
static int hf_sabp_Kill_PDU;                      /* Kill */
112
static int hf_sabp_Kill_Complete_PDU;             /* Kill_Complete */
113
static int hf_sabp_Kill_Failure_PDU;              /* Kill_Failure */
114
static int hf_sabp_Load_Query_PDU;                /* Load_Query */
115
static int hf_sabp_Load_Query_Complete_PDU;       /* Load_Query_Complete */
116
static int hf_sabp_Load_Query_Failure_PDU;        /* Load_Query_Failure */
117
static int hf_sabp_Message_Status_Query_PDU;      /* Message_Status_Query */
118
static int hf_sabp_Message_Status_Query_Complete_PDU;  /* Message_Status_Query_Complete */
119
static int hf_sabp_Message_Status_Query_Failure_PDU;  /* Message_Status_Query_Failure */
120
static int hf_sabp_Reset_PDU;                     /* Reset */
121
static int hf_sabp_Reset_Complete_PDU;            /* Reset_Complete */
122
static int hf_sabp_Reset_Failure_PDU;             /* Reset_Failure */
123
static int hf_sabp_Restart_PDU;                   /* Restart */
124
static int hf_sabp_Failure_PDU;                   /* Failure */
125
static int hf_sabp_Error_Indication_PDU;          /* Error_Indication */
126
static int hf_sabp_SABP_PDU_PDU;                  /* SABP_PDU */
127
static int hf_sabp_ProtocolIE_Container_item;     /* ProtocolIE_Field */
128
static int hf_sabp_id;                            /* ProtocolIE_ID */
129
static int hf_sabp_criticality;                   /* Criticality */
130
static int hf_sabp_protocolIE_Field_value;        /* ProtocolIE_Field_value */
131
static int hf_sabp_ProtocolExtensionContainer_item;  /* ProtocolExtensionField */
132
static int hf_sabp_ext_id;                        /* ProtocolExtensionID */
133
static int hf_sabp_extensionValue;                /* T_extensionValue */
134
static int hf_sabp_procedureCode;                 /* ProcedureCode */
135
static int hf_sabp_triggeringMessage;             /* TriggeringMessage */
136
static int hf_sabp_procedureCriticality;          /* Criticality */
137
static int hf_sabp_iEsCriticalityDiagnostics;     /* CriticalityDiagnostics_IE_List */
138
static int hf_sabp_iE_Extensions;                 /* ProtocolExtensionContainer */
139
static int hf_sabp_CriticalityDiagnostics_IE_List_item;  /* CriticalityDiagnostics_IE_List_item */
140
static int hf_sabp_iECriticality;                 /* Criticality */
141
static int hf_sabp_iE_ID;                         /* ProtocolIE_ID */
142
static int hf_sabp_repetitionNumber;              /* RepetitionNumber0 */
143
static int hf_sabp_MessageStructure_item;         /* MessageStructure_item */
144
static int hf_sabp_repetitionNumber1;             /* RepetitionNumber1 */
145
static int hf_sabp_Failure_List_item;             /* Failure_List_Item */
146
static int hf_sabp_service_area_identifier;       /* Service_Area_Identifier */
147
static int hf_sabp_cause;                         /* Cause */
148
static int hf_sabp_Number_of_Broadcasts_Completed_List_item;  /* Number_of_Broadcasts_Completed_List_Item */
149
static int hf_sabp_number_of_broadcasts_completed;  /* INTEGER_0_65535 */
150
static int hf_sabp_number_of_broadcasts_completed_info;  /* Number_Of_Broadcasts_Completed_Info */
151
static int hf_sabp_Radio_Resource_Loading_List_item;  /* Radio_Resource_Loading_List_Item */
152
static int hf_sabp_available_bandwidth;           /* Available_Bandwidth */
153
static int hf_sabp_pLMNidentity;                  /* T_pLMNidentity */
154
static int hf_sabp_lac;                           /* OCTET_STRING_SIZE_2 */
155
static int hf_sabp_sac;                           /* OCTET_STRING_SIZE_2 */
156
static int hf_sabp_Service_Areas_List_item;       /* Service_Area_Identifier */
157
static int hf_sabp_protocolIEs;                   /* ProtocolIE_Container */
158
static int hf_sabp_protocolExtensions;            /* ProtocolExtensionContainer */
159
static int hf_sabp_initiatingMessage;             /* InitiatingMessage */
160
static int hf_sabp_successfulOutcome;             /* SuccessfulOutcome */
161
static int hf_sabp_unsuccessfulOutcome;           /* UnsuccessfulOutcome */
162
static int hf_sabp_initiatingMessage_value;       /* InitiatingMessage_value */
163
static int hf_sabp_successfulOutcome_value;       /* SuccessfulOutcome_value */
164
static int hf_sabp_unsuccessfulOutcome_value;     /* UnsuccessfulOutcome_value */
165
166
/* Initialize the subtree pointers */
167
static int ett_sabp;
168
static int ett_sabp_e212;
169
static int ett_sabp_cbs_data_coding;
170
static int ett_sabp_bcast_msg;
171
static int ett_sabp_cbs_serial_number;
172
static int ett_sabp_cbs_page;
173
static int ett_sabp_cbs_page_content;
174
175
static int ett_sabp_ProtocolIE_Container;
176
static int ett_sabp_ProtocolIE_Field;
177
static int ett_sabp_ProtocolExtensionContainer;
178
static int ett_sabp_ProtocolExtensionField;
179
static int ett_sabp_Criticality_Diagnostics;
180
static int ett_sabp_CriticalityDiagnostics_IE_List;
181
static int ett_sabp_CriticalityDiagnostics_IE_List_item;
182
static int ett_sabp_MessageStructure;
183
static int ett_sabp_MessageStructure_item;
184
static int ett_sabp_Failure_List;
185
static int ett_sabp_Failure_List_Item;
186
static int ett_sabp_Number_of_Broadcasts_Completed_List;
187
static int ett_sabp_Number_of_Broadcasts_Completed_List_Item;
188
static int ett_sabp_Radio_Resource_Loading_List;
189
static int ett_sabp_Radio_Resource_Loading_List_Item;
190
static int ett_sabp_Service_Area_Identifier;
191
static int ett_sabp_Service_Areas_List;
192
static int ett_sabp_Write_Replace;
193
static int ett_sabp_Write_Replace_Complete;
194
static int ett_sabp_Write_Replace_Failure;
195
static int ett_sabp_Kill;
196
static int ett_sabp_Kill_Complete;
197
static int ett_sabp_Kill_Failure;
198
static int ett_sabp_Load_Query;
199
static int ett_sabp_Load_Query_Complete;
200
static int ett_sabp_Load_Query_Failure;
201
static int ett_sabp_Message_Status_Query;
202
static int ett_sabp_Message_Status_Query_Complete;
203
static int ett_sabp_Message_Status_Query_Failure;
204
static int ett_sabp_Reset;
205
static int ett_sabp_Reset_Complete;
206
static int ett_sabp_Reset_Failure;
207
static int ett_sabp_Restart;
208
static int ett_sabp_Failure;
209
static int ett_sabp_Error_Indication;
210
static int ett_sabp_SABP_PDU;
211
static int ett_sabp_InitiatingMessage;
212
static int ett_sabp_SuccessfulOutcome;
213
static int ett_sabp_UnsuccessfulOutcome;
214
215
/* Global variables */
216
static uint32_t ProcedureCode;
217
static uint32_t ProtocolIE_ID;
218
static uint32_t ProtocolExtensionID;
219
static uint8_t sms_encoding;
220
221
30
#define SABP_PORT 3452
222
223
/* Dissector tables */
224
static dissector_table_t sabp_ies_dissector_table;
225
static dissector_table_t sabp_extension_dissector_table;
226
static dissector_table_t sabp_proc_imsg_dissector_table;
227
static dissector_table_t sabp_proc_sout_dissector_table;
228
static dissector_table_t sabp_proc_uout_dissector_table;
229
230
static dissector_handle_t sabp_handle;
231
static dissector_handle_t sabp_tcp_handle;
232
233
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
234
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
235
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
236
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
237
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
238
static void dissect_sabp_cb_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
239
240
/*--- Cyclic dependencies ---*/
241
242
/* ProtocolIE-Field/value -> ProtocolIE-Field/value */
243
static unsigned dissect_sabp_ProtocolIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
244
245
/* ProtocolExtensionField/extensionValue -> ProtocolExtensionField/extensionValue */
246
static unsigned dissect_sabp_T_extensionValue(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
247
248
/* InitiatingMessage/value -> InitiatingMessage/value */
249
static unsigned dissect_sabp_InitiatingMessage_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
250
251
/* SuccessfulOutcome/value -> SuccessfulOutcome/value */
252
static unsigned dissect_sabp_SuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
253
254
/* UnsuccessfulOutcome/value -> UnsuccessfulOutcome/value */
255
static unsigned dissect_sabp_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
256
257
258
259
static const value_string sabp_Criticality_vals[] = {
260
  {   0, "reject" },
261
  {   1, "ignore" },
262
  {   2, "notify" },
263
  { 0, NULL }
264
};
265
266
267
static unsigned
268
506
dissect_sabp_Criticality(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
269
506
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
270
506
                                     3, NULL, false, 0, NULL);
271
272
506
  return offset;
273
506
}
274
275
276
static const value_string sabp_ProcedureCode_vals[] = {
277
  { id_Write_Replace, "id-Write-Replace" },
278
  { id_Kill, "id-Kill" },
279
  { id_Load_Status_Enquiry, "id-Load-Status-Enquiry" },
280
  { id_Message_Status_Query, "id-Message-Status-Query" },
281
  { id_Restart_Indication, "id-Restart-Indication" },
282
  { id_Reset, "id-Reset" },
283
  { id_Failure_Indication, "id-Failure-Indication" },
284
  { id_Error_Indication, "id-Error-Indication" },
285
  { 0, NULL }
286
};
287
288
static value_string_ext sabp_ProcedureCode_vals_ext = VALUE_STRING_EXT_INIT(sabp_ProcedureCode_vals);
289
290
291
static unsigned
292
62
dissect_sabp_ProcedureCode(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
293
62
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
294
62
                                                            0U, 255U, &ProcedureCode, false);
295
296
62
       col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ",
297
62
                   val_to_str_ext_const(ProcedureCode, &sabp_ProcedureCode_vals_ext,
298
62
                                        "unknown message"));
299
62
  return offset;
300
62
}
301
302
303
304
static unsigned
305
79
dissect_sabp_ProtocolExtensionID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
306
79
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
307
79
                                                            0U, 65535U, &ProtocolExtensionID, false);
308
309
79
  return offset;
310
79
}
311
312
313
static const value_string sabp_ProtocolIE_ID_vals[] = {
314
  { id_Broadcast_Message_Content, "id-Broadcast-Message-Content" },
315
  { id_Category, "id-Category" },
316
  { id_Cause, "id-Cause" },
317
  { id_Criticality_Diagnostics, "id-Criticality-Diagnostics" },
318
  { id_Data_Coding_Scheme, "id-Data-Coding-Scheme" },
319
  { id_Failure_List, "id-Failure-List" },
320
  { id_Message_Identifier, "id-Message-Identifier" },
321
  { id_New_Serial_Number, "id-New-Serial-Number" },
322
  { id_Number_of_Broadcasts_Completed_List, "id-Number-of-Broadcasts-Completed-List" },
323
  { id_Number_of_Broadcasts_Requested, "id-Number-of-Broadcasts-Requested" },
324
  { id_Old_Serial_Number, "id-Old-Serial-Number" },
325
  { id_Radio_Resource_Loading_List, "id-Radio-Resource-Loading-List" },
326
  { id_Recovery_Indication, "id-Recovery-Indication" },
327
  { id_Repetition_Period, "id-Repetition-Period" },
328
  { id_Serial_Number, "id-Serial-Number" },
329
  { id_Service_Areas_List, "id-Service-Areas-List" },
330
  { id_MessageStructure, "id-MessageStructure" },
331
  { id_TypeOfError, "id-TypeOfError" },
332
  { id_Paging_ETWS_Indicator, "id-Paging-ETWS-Indicator" },
333
  { id_Warning_Type, "id-Warning-Type" },
334
  { id_WarningSecurityInfo, "id-WarningSecurityInfo" },
335
  { id_Broadcast_Message_Content_Validity_Indicator, "id-Broadcast-Message-Content-Validity-Indicator" },
336
  { 0, NULL }
337
};
338
339
static value_string_ext sabp_ProtocolIE_ID_vals_ext = VALUE_STRING_EXT_INIT(sabp_ProtocolIE_ID_vals);
340
341
342
static unsigned
343
373
dissect_sabp_ProtocolIE_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
344
373
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
345
373
                                                            0U, 65535U, &ProtocolIE_ID, false);
346
347
373
  if (tree) {
348
369
    proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
349
369
                           val_to_str_ext(actx->pinfo->pool, ProtocolIE_ID, &sabp_ProtocolIE_ID_vals_ext, "unknown (%d)"));
350
369
  }
351
373
  return offset;
352
373
}
353
354
355
static const value_string sabp_TriggeringMessage_vals[] = {
356
  {   0, "initiating-message" },
357
  {   1, "successful-outcome" },
358
  {   2, "unsuccessful-outcome" },
359
  {   3, "outcome" },
360
  { 0, NULL }
361
};
362
363
364
static unsigned
365
8
dissect_sabp_TriggeringMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
366
8
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
367
8
                                     4, NULL, false, 0, NULL);
368
369
8
  return offset;
370
8
}
371
372
373
374
static unsigned
375
279
dissect_sabp_ProtocolIE_Field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
376
  // ProtocolIE-Field/value -> ProtocolIE-Field/value
377
279
  increment_dissection_depth_by_n(actx->pinfo, 1);
378
279
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
379
380
279
  decrement_dissection_depth_by_n(actx->pinfo, 1);
381
279
  return offset;
382
279
}
383
384
385
static const per_sequence_t ProtocolIE_Field_sequence[] = {
386
  { &hf_sabp_id             , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_ID },
387
  { &hf_sabp_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
388
  { &hf_sabp_protocolIE_Field_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Field_value },
389
  { NULL, 0, 0, NULL }
390
};
391
392
static unsigned
393
299
dissect_sabp_ProtocolIE_Field(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
394
299
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
395
299
                                   ett_sabp_ProtocolIE_Field, ProtocolIE_Field_sequence);
396
397
299
  return offset;
398
299
}
399
400
401
static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
402
  { &hf_sabp_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Field },
403
};
404
405
static unsigned
406
49
dissect_sabp_ProtocolIE_Container(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
407
49
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
408
49
                                                  ett_sabp_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
409
49
                                                  0, maxProtocolIEs, false);
410
411
49
  return offset;
412
49
}
413
414
415
416
static unsigned
417
78
dissect_sabp_T_extensionValue(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
418
  // ProtocolExtensionField/extensionValue -> ProtocolExtensionField/extensionValue
419
78
  increment_dissection_depth_by_n(actx->pinfo, 1);
420
78
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
421
422
78
  decrement_dissection_depth_by_n(actx->pinfo, 1);
423
78
  return offset;
424
78
}
425
426
427
static const per_sequence_t ProtocolExtensionField_sequence[] = {
428
  { &hf_sabp_ext_id         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolExtensionID },
429
  { &hf_sabp_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
430
  { &hf_sabp_extensionValue , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_T_extensionValue },
431
  { NULL, 0, 0, NULL }
432
};
433
434
static unsigned
435
90
dissect_sabp_ProtocolExtensionField(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
436
90
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
437
90
                                   ett_sabp_ProtocolExtensionField, ProtocolExtensionField_sequence);
438
439
90
  return offset;
440
90
}
441
442
443
static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
444
  { &hf_sabp_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolExtensionField },
445
};
446
447
static unsigned
448
26
dissect_sabp_ProtocolExtensionContainer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
449
26
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
450
26
                                                  ett_sabp_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
451
26
                                                  1, maxProtocolExtensions, false);
452
453
26
  return offset;
454
26
}
455
456
457
458
static unsigned
459
0
dissect_sabp_Available_Bandwidth(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
460
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
461
0
                                                            0U, 20480U, NULL, false);
462
463
0
  return offset;
464
0
}
465
466
467
468
static unsigned
469
24
dissect_sabp_Broadcast_Message_Content(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
470
24
 tvbuff_t *parameter_tvb=NULL;
471
472
24
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
473
24
                                     1, 9968, false, NULL, 0, &parameter_tvb, NULL);
474
475
24
  if (!parameter_tvb)
476
0
    return offset;
477
24
    dissect_sabp_cb_data(parameter_tvb, actx->pinfo, tree);
478
479
24
  return offset;
480
24
}
481
482
483
static const value_string sabp_Broadcast_Message_Content_Validity_Indicator_vals[] = {
484
  {   0, "broadcast-Message-Content-not-valid" },
485
  { 0, NULL }
486
};
487
488
489
static unsigned
490
0
dissect_sabp_Broadcast_Message_Content_Validity_Indicator(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
491
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
492
0
                                     1, NULL, true, 0, NULL);
493
494
0
  return offset;
495
0
}
496
497
498
static const value_string sabp_Category_vals[] = {
499
  {   0, "high-priority" },
500
  {   1, "background-priority" },
501
  {   2, "normal-priority" },
502
  {   3, "default-priority" },
503
  { 0, NULL }
504
};
505
506
507
static unsigned
508
1
dissect_sabp_Category(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
509
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
510
1
                                     4, NULL, true, 0, NULL);
511
512
1
  return offset;
513
1
}
514
515
516
static const value_string sabp_Cause_vals[] = {
517
  {   0, "parameter-not-recognised" },
518
  {   1, "parameter-value-invalid" },
519
  {   2, "valid-CN-message-not-identified" },
520
  {   3, "service-area-identity-not-valid" },
521
  {   4, "unrecognised-message" },
522
  {   5, "missing-mandatory-element" },
523
  {   6, "rNC-capacity-exceeded" },
524
  {   7, "rNC-memory-exceeded" },
525
  {   8, "service-area-broadcast-not-supported" },
526
  {   9, "service-area-broadcast-not-operational" },
527
  {  10, "message-reference-already-used" },
528
  {  11, "unspecifed-error" },
529
  {  12, "transfer-syntax-error" },
530
  {  13, "semantic-error" },
531
  {  14, "message-not-compatible-with-receiver-state" },
532
  {  15, "abstract-syntax-error-reject" },
533
  {  16, "abstract-syntax-error-ignore-and-notify" },
534
  {  17, "abstract-syntax-error-falsely-constructed-message" },
535
  { 0, NULL }
536
};
537
538
static value_string_ext sabp_Cause_vals_ext = VALUE_STRING_EXT_INIT(sabp_Cause_vals);
539
540
541
static unsigned
542
4
dissect_sabp_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
543
4
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
544
4
                                                            0U, 255U, NULL, false);
545
546
4
  return offset;
547
4
}
548
549
550
551
static unsigned
552
14
dissect_sabp_RepetitionNumber0(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
553
14
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
554
14
                                                            0U, 255U, NULL, false);
555
556
14
  return offset;
557
14
}
558
559
560
static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
561
  { &hf_sabp_iECriticality  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
562
  { &hf_sabp_iE_ID          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_ID },
563
  { &hf_sabp_repetitionNumber, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_RepetitionNumber0 },
564
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
565
  { NULL, 0, 0, NULL }
566
};
567
568
static unsigned
569
90
dissect_sabp_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_) {
570
90
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
571
90
                                   ett_sabp_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
572
573
90
  return offset;
574
90
}
575
576
577
static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
578
  { &hf_sabp_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_CriticalityDiagnostics_IE_List_item },
579
};
580
581
static unsigned
582
9
dissect_sabp_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
583
9
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
584
9
                                                  ett_sabp_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
585
9
                                                  1, maxNrOfErrors, false);
586
587
9
  return offset;
588
9
}
589
590
591
static const per_sequence_t Criticality_Diagnostics_sequence[] = {
592
  { &hf_sabp_procedureCode  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProcedureCode },
593
  { &hf_sabp_triggeringMessage, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_TriggeringMessage },
594
  { &hf_sabp_procedureCriticality, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_Criticality },
595
  { &hf_sabp_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_CriticalityDiagnostics_IE_List },
596
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
597
  { NULL, 0, 0, NULL }
598
};
599
600
static unsigned
601
10
dissect_sabp_Criticality_Diagnostics(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
602
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
603
10
                                   ett_sabp_Criticality_Diagnostics, Criticality_Diagnostics_sequence);
604
605
10
  return offset;
606
10
}
607
608
609
610
static unsigned
611
0
dissect_sabp_RepetitionNumber1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
612
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
613
0
                                                            1U, 256U, NULL, false);
614
615
0
  return offset;
616
0
}
617
618
619
static const per_sequence_t MessageStructure_item_sequence[] = {
620
  { &hf_sabp_iE_ID          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_ID },
621
  { &hf_sabp_repetitionNumber1, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_RepetitionNumber1 },
622
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
623
  { NULL, 0, 0, NULL }
624
};
625
626
static unsigned
627
0
dissect_sabp_MessageStructure_item(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
628
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
629
0
                                   ett_sabp_MessageStructure_item, MessageStructure_item_sequence);
630
631
0
  return offset;
632
0
}
633
634
635
static const per_sequence_t MessageStructure_sequence_of[1] = {
636
  { &hf_sabp_MessageStructure_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_MessageStructure_item },
637
};
638
639
static unsigned
640
0
dissect_sabp_MessageStructure(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_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
642
0
                                                  ett_sabp_MessageStructure, MessageStructure_sequence_of,
643
0
                                                  1, maxNrOfLevels, false);
644
645
0
  return offset;
646
0
}
647
648
649
650
static unsigned
651
2
dissect_sabp_Data_Coding_Scheme(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
652
2
 tvbuff_t *parameter_tvb=NULL;
653
2
 proto_tree *subtree;
654
655
2
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
656
2
                                     8, 8, false, NULL, 0, &parameter_tvb, NULL);
657
658
659
2
  if (!parameter_tvb)
660
0
    return offset;
661
2
  subtree = proto_item_add_subtree(actx->created_item, ett_sabp_cbs_data_coding);
662
2
  sms_encoding = dissect_cbs_data_coding_scheme(parameter_tvb, actx->pinfo, subtree, 0);
663
664
665
2
  return offset;
666
2
}
667
668
669
670
static unsigned
671
55
dissect_sabp_T_pLMNidentity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
672
55
  tvbuff_t *parameter_tvb=NULL;
673
55
 proto_tree *subtree;
674
675
55
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
676
55
                                       3, 3, false, &parameter_tvb);
677
678
55
   if (!parameter_tvb)
679
0
    return offset;
680
55
  subtree = proto_item_add_subtree(actx->created_item, ett_sabp_e212);
681
55
  dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_SAI, false);
682
683
684
55
  return offset;
685
55
}
686
687
688
689
static unsigned
690
98
dissect_sabp_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
691
98
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
692
98
                                       2, 2, false, NULL);
693
694
98
  return offset;
695
98
}
696
697
698
static const per_sequence_t Service_Area_Identifier_sequence[] = {
699
  { &hf_sabp_pLMNidentity   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_T_pLMNidentity },
700
  { &hf_sabp_lac            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_OCTET_STRING_SIZE_2 },
701
  { &hf_sabp_sac            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_OCTET_STRING_SIZE_2 },
702
  { NULL, 0, 0, NULL }
703
};
704
705
static unsigned
706
55
dissect_sabp_Service_Area_Identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
707
55
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
708
55
                                   ett_sabp_Service_Area_Identifier, Service_Area_Identifier_sequence);
709
710
55
  return offset;
711
55
}
712
713
714
static const per_sequence_t Failure_List_Item_sequence[] = {
715
  { &hf_sabp_service_area_identifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Service_Area_Identifier },
716
  { &hf_sabp_cause          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Cause },
717
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
718
  { NULL, 0, 0, NULL }
719
};
720
721
static unsigned
722
4
dissect_sabp_Failure_List_Item(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
723
4
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
724
4
                                   ett_sabp_Failure_List_Item, Failure_List_Item_sequence);
725
726
4
  return offset;
727
4
}
728
729
730
static const per_sequence_t Failure_List_sequence_of[1] = {
731
  { &hf_sabp_Failure_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Failure_List_Item },
732
};
733
734
static unsigned
735
2
dissect_sabp_Failure_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
736
2
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
737
2
                                                  ett_sabp_Failure_List, Failure_List_sequence_of,
738
2
                                                  1, maxnoofSAI, false);
739
740
2
  return offset;
741
2
}
742
743
744
745
static unsigned
746
0
dissect_sabp_Message_Identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
747
0
 tvbuff_t *parameter_tvb=NULL;
748
749
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
750
0
                                     16, 16, false, NULL, 0, &parameter_tvb, NULL);
751
752
0
  if (!parameter_tvb)
753
0
    return offset;
754
0
        dissect_cbs_message_identifier(parameter_tvb, tree, 0);
755
756
757
0
  return offset;
758
0
}
759
760
761
762
static unsigned
763
1
dissect_sabp_Serial_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
764
1
 tvbuff_t *parameter_tvb=NULL;
765
1
 proto_tree *subtree;
766
767
1
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
768
1
                                     16, 16, false, NULL, 0, &parameter_tvb, NULL);
769
770
1
  if (!parameter_tvb)
771
0
    return offset;
772
1
  subtree = proto_item_add_subtree(actx->created_item, ett_sabp_cbs_serial_number);
773
1
        dissect_cbs_serial_number(parameter_tvb, subtree, 0);
774
775
776
1
  return offset;
777
1
}
778
779
780
781
static unsigned
782
0
dissect_sabp_New_Serial_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
783
0
  offset = dissect_sabp_Serial_Number(tvb, offset, actx, tree, hf_index);
784
785
0
  return offset;
786
0
}
787
788
789
790
static unsigned
791
4
dissect_sabp_INTEGER_0_65535(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
792
4
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
793
4
                                                            0U, 65535U, NULL, false);
794
795
4
  return offset;
796
4
}
797
798
799
static const value_string sabp_Number_Of_Broadcasts_Completed_Info_vals[] = {
800
  {   0, "overflow" },
801
  {   1, "unknown" },
802
  { 0, NULL }
803
};
804
805
806
static unsigned
807
1
dissect_sabp_Number_Of_Broadcasts_Completed_Info(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
808
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
809
1
                                     2, NULL, true, 0, NULL);
810
811
1
  return offset;
812
1
}
813
814
815
static const per_sequence_t Number_of_Broadcasts_Completed_List_Item_sequence[] = {
816
  { &hf_sabp_service_area_identifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Service_Area_Identifier },
817
  { &hf_sabp_number_of_broadcasts_completed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_INTEGER_0_65535 },
818
  { &hf_sabp_number_of_broadcasts_completed_info, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_Number_Of_Broadcasts_Completed_Info },
819
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
820
  { NULL, 0, 0, NULL }
821
};
822
823
static unsigned
824
5
dissect_sabp_Number_of_Broadcasts_Completed_List_Item(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
825
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
826
5
                                   ett_sabp_Number_of_Broadcasts_Completed_List_Item, Number_of_Broadcasts_Completed_List_Item_sequence);
827
828
5
  return offset;
829
5
}
830
831
832
static const per_sequence_t Number_of_Broadcasts_Completed_List_sequence_of[1] = {
833
  { &hf_sabp_Number_of_Broadcasts_Completed_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Number_of_Broadcasts_Completed_List_Item },
834
};
835
836
static unsigned
837
3
dissect_sabp_Number_of_Broadcasts_Completed_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
838
3
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
839
3
                                                  ett_sabp_Number_of_Broadcasts_Completed_List, Number_of_Broadcasts_Completed_List_sequence_of,
840
3
                                                  1, maxnoofSAI, false);
841
842
3
  return offset;
843
3
}
844
845
846
static const value_string sabp_Number_of_Broadcasts_Requested_vals[] = {
847
  {   0, "broadcast-indefinitely" },
848
  { 0, NULL }
849
};
850
851
852
static unsigned
853
0
dissect_sabp_Number_of_Broadcasts_Requested(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
854
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
855
0
                                                            0U, 65535U, NULL, false);
856
857
0
  return offset;
858
0
}
859
860
861
862
static unsigned
863
0
dissect_sabp_Old_Serial_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
864
0
  offset = dissect_sabp_Serial_Number(tvb, offset, actx, tree, hf_index);
865
866
0
  return offset;
867
0
}
868
869
870
static const value_string sabp_Paging_ETWS_Indicator_vals[] = {
871
  {   0, "paging" },
872
  { 0, NULL }
873
};
874
875
876
static unsigned
877
2
dissect_sabp_Paging_ETWS_Indicator(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
878
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
879
2
                                     1, NULL, true, 0, NULL);
880
881
2
  return offset;
882
2
}
883
884
885
static const per_sequence_t Radio_Resource_Loading_List_Item_sequence[] = {
886
  { &hf_sabp_service_area_identifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Service_Area_Identifier },
887
  { &hf_sabp_available_bandwidth, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_Available_Bandwidth },
888
  { &hf_sabp_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
889
  { NULL, 0, 0, NULL }
890
};
891
892
static unsigned
893
0
dissect_sabp_Radio_Resource_Loading_List_Item(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
894
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
895
0
                                   ett_sabp_Radio_Resource_Loading_List_Item, Radio_Resource_Loading_List_Item_sequence);
896
897
0
  return offset;
898
0
}
899
900
901
static const per_sequence_t Radio_Resource_Loading_List_sequence_of[1] = {
902
  { &hf_sabp_Radio_Resource_Loading_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Radio_Resource_Loading_List_Item },
903
};
904
905
static unsigned
906
2
dissect_sabp_Radio_Resource_Loading_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
907
2
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
908
2
                                                  ett_sabp_Radio_Resource_Loading_List, Radio_Resource_Loading_List_sequence_of,
909
2
                                                  1, maxnoofSAI, false);
910
911
2
  return offset;
912
2
}
913
914
915
static const value_string sabp_Recovery_Indication_vals[] = {
916
  {   0, "data-lost" },
917
  {   1, "data-available" },
918
  { 0, NULL }
919
};
920
921
922
static unsigned
923
0
dissect_sabp_Recovery_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
924
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
925
0
                                     2, NULL, false, 0, NULL);
926
927
0
  return offset;
928
0
}
929
930
931
932
static unsigned
933
2
dissect_sabp_Repetition_Period(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
934
2
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
935
2
                                                            1U, 4096U, NULL, false);
936
937
2
  return offset;
938
2
}
939
940
941
static const per_sequence_t Service_Areas_List_sequence_of[1] = {
942
  { &hf_sabp_Service_Areas_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Service_Area_Identifier },
943
};
944
945
static unsigned
946
5
dissect_sabp_Service_Areas_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
947
5
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
948
5
                                                  ett_sabp_Service_Areas_List, Service_Areas_List_sequence_of,
949
5
                                                  1, maxnoofSAI, false);
950
951
5
  return offset;
952
5
}
953
954
955
static const value_string sabp_TypeOfError_vals[] = {
956
  {   0, "not-understood" },
957
  {   1, "missing" },
958
  { 0, NULL }
959
};
960
961
962
static unsigned
963
0
dissect_sabp_TypeOfError(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
964
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
965
0
                                     2, NULL, true, 0, NULL);
966
967
0
  return offset;
968
0
}
969
970
971
972
static unsigned
973
1
dissect_sabp_WarningSecurityInfo(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
974
1
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
975
1
                                       50, 50, false, NULL);
976
977
1
  return offset;
978
1
}
979
980
981
982
static unsigned
983
0
dissect_sabp_Warning_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
984
0
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
985
0
                                       2, 2, false, NULL);
986
987
0
  return offset;
988
0
}
989
990
991
static const per_sequence_t Write_Replace_sequence[] = {
992
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
993
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
994
  { NULL, 0, 0, NULL }
995
};
996
997
static unsigned
998
17
dissect_sabp_Write_Replace(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
999
17
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1000
17
                                   ett_sabp_Write_Replace, Write_Replace_sequence);
1001
1002
17
  return offset;
1003
17
}
1004
1005
1006
static const per_sequence_t Write_Replace_Complete_sequence[] = {
1007
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1008
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1009
  { NULL, 0, 0, NULL }
1010
};
1011
1012
static unsigned
1013
10
dissect_sabp_Write_Replace_Complete(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1014
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1015
10
                                   ett_sabp_Write_Replace_Complete, Write_Replace_Complete_sequence);
1016
1017
10
  return offset;
1018
10
}
1019
1020
1021
static const per_sequence_t Write_Replace_Failure_sequence[] = {
1022
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1023
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1024
  { NULL, 0, 0, NULL }
1025
};
1026
1027
static unsigned
1028
9
dissect_sabp_Write_Replace_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1029
9
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1030
9
                                   ett_sabp_Write_Replace_Failure, Write_Replace_Failure_sequence);
1031
1032
9
  return offset;
1033
9
}
1034
1035
1036
static const per_sequence_t Kill_sequence[] = {
1037
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1038
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1039
  { NULL, 0, 0, NULL }
1040
};
1041
1042
static unsigned
1043
1
dissect_sabp_Kill(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1044
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1045
1
                                   ett_sabp_Kill, Kill_sequence);
1046
1047
1
  return offset;
1048
1
}
1049
1050
1051
static const per_sequence_t Kill_Complete_sequence[] = {
1052
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1053
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1054
  { NULL, 0, 0, NULL }
1055
};
1056
1057
static unsigned
1058
0
dissect_sabp_Kill_Complete(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1059
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1060
0
                                   ett_sabp_Kill_Complete, Kill_Complete_sequence);
1061
1062
0
  return offset;
1063
0
}
1064
1065
1066
static const per_sequence_t Kill_Failure_sequence[] = {
1067
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1068
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1069
  { NULL, 0, 0, NULL }
1070
};
1071
1072
static unsigned
1073
0
dissect_sabp_Kill_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1074
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1075
0
                                   ett_sabp_Kill_Failure, Kill_Failure_sequence);
1076
1077
0
  return offset;
1078
0
}
1079
1080
1081
static const per_sequence_t Load_Query_sequence[] = {
1082
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1083
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1084
  { NULL, 0, 0, NULL }
1085
};
1086
1087
static unsigned
1088
5
dissect_sabp_Load_Query(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1089
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1090
5
                                   ett_sabp_Load_Query, Load_Query_sequence);
1091
1092
5
  return offset;
1093
5
}
1094
1095
1096
static const per_sequence_t Load_Query_Complete_sequence[] = {
1097
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1098
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1099
  { NULL, 0, 0, NULL }
1100
};
1101
1102
static unsigned
1103
2
dissect_sabp_Load_Query_Complete(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1104
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1105
2
                                   ett_sabp_Load_Query_Complete, Load_Query_Complete_sequence);
1106
1107
2
  return offset;
1108
2
}
1109
1110
1111
static const per_sequence_t Load_Query_Failure_sequence[] = {
1112
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1113
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1114
  { NULL, 0, 0, NULL }
1115
};
1116
1117
static unsigned
1118
0
dissect_sabp_Load_Query_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1119
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1120
0
                                   ett_sabp_Load_Query_Failure, Load_Query_Failure_sequence);
1121
1122
0
  return offset;
1123
0
}
1124
1125
1126
static const per_sequence_t Message_Status_Query_sequence[] = {
1127
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1128
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1129
  { NULL, 0, 0, NULL }
1130
};
1131
1132
static unsigned
1133
0
dissect_sabp_Message_Status_Query(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1134
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1135
0
                                   ett_sabp_Message_Status_Query, Message_Status_Query_sequence);
1136
1137
0
  return offset;
1138
0
}
1139
1140
1141
static const per_sequence_t Message_Status_Query_Complete_sequence[] = {
1142
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1143
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1144
  { NULL, 0, 0, NULL }
1145
};
1146
1147
static unsigned
1148
1
dissect_sabp_Message_Status_Query_Complete(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1149
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1150
1
                                   ett_sabp_Message_Status_Query_Complete, Message_Status_Query_Complete_sequence);
1151
1152
1
  return offset;
1153
1
}
1154
1155
1156
static const per_sequence_t Message_Status_Query_Failure_sequence[] = {
1157
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1158
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1159
  { NULL, 0, 0, NULL }
1160
};
1161
1162
static unsigned
1163
0
dissect_sabp_Message_Status_Query_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1164
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1165
0
                                   ett_sabp_Message_Status_Query_Failure, Message_Status_Query_Failure_sequence);
1166
1167
0
  return offset;
1168
0
}
1169
1170
1171
static const per_sequence_t Reset_sequence[] = {
1172
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1173
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1174
  { NULL, 0, 0, NULL }
1175
};
1176
1177
static unsigned
1178
2
dissect_sabp_Reset(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1179
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1180
2
                                   ett_sabp_Reset, Reset_sequence);
1181
1182
2
  return offset;
1183
2
}
1184
1185
1186
static const per_sequence_t Reset_Complete_sequence[] = {
1187
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1188
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1189
  { NULL, 0, 0, NULL }
1190
};
1191
1192
static unsigned
1193
0
dissect_sabp_Reset_Complete(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1194
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1195
0
                                   ett_sabp_Reset_Complete, Reset_Complete_sequence);
1196
1197
0
  return offset;
1198
0
}
1199
1200
1201
static const per_sequence_t Reset_Failure_sequence[] = {
1202
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1203
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1204
  { NULL, 0, 0, NULL }
1205
};
1206
1207
static unsigned
1208
0
dissect_sabp_Reset_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1209
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1210
0
                                   ett_sabp_Reset_Failure, Reset_Failure_sequence);
1211
1212
0
  return offset;
1213
0
}
1214
1215
1216
static const per_sequence_t Restart_sequence[] = {
1217
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1218
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1219
  { NULL, 0, 0, NULL }
1220
};
1221
1222
static unsigned
1223
2
dissect_sabp_Restart(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1224
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1225
2
                                   ett_sabp_Restart, Restart_sequence);
1226
1227
2
  return offset;
1228
2
}
1229
1230
1231
static const per_sequence_t Failure_sequence[] = {
1232
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1233
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1234
  { NULL, 0, 0, NULL }
1235
};
1236
1237
static unsigned
1238
0
dissect_sabp_Failure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1239
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1240
0
                                   ett_sabp_Failure, Failure_sequence);
1241
1242
0
  return offset;
1243
0
}
1244
1245
1246
static const per_sequence_t Error_Indication_sequence[] = {
1247
  { &hf_sabp_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_sabp_ProtocolIE_Container },
1248
  { &hf_sabp_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_sabp_ProtocolExtensionContainer },
1249
  { NULL, 0, 0, NULL }
1250
};
1251
1252
static unsigned
1253
0
dissect_sabp_Error_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1254
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1255
0
                                   ett_sabp_Error_Indication, Error_Indication_sequence);
1256
1257
0
  return offset;
1258
0
}
1259
1260
1261
1262
static unsigned
1263
30
dissect_sabp_InitiatingMessage_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1264
  // InitiatingMessage/value -> InitiatingMessage/value
1265
30
  increment_dissection_depth_by_n(actx->pinfo, 1);
1266
30
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
1267
1268
30
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1269
30
  return offset;
1270
30
}
1271
1272
1273
static const per_sequence_t InitiatingMessage_sequence[] = {
1274
  { &hf_sabp_procedureCode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProcedureCode },
1275
  { &hf_sabp_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
1276
  { &hf_sabp_initiatingMessage_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_InitiatingMessage_value },
1277
  { NULL, 0, 0, NULL }
1278
};
1279
1280
static unsigned
1281
31
dissect_sabp_InitiatingMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1282
31
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1283
31
                                   ett_sabp_InitiatingMessage, InitiatingMessage_sequence);
1284
1285
31
  return offset;
1286
31
}
1287
1288
1289
1290
static unsigned
1291
16
dissect_sabp_SuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1292
  // SuccessfulOutcome/value -> SuccessfulOutcome/value
1293
16
  increment_dissection_depth_by_n(actx->pinfo, 1);
1294
16
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
1295
1296
16
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1297
16
  return offset;
1298
16
}
1299
1300
1301
static const per_sequence_t SuccessfulOutcome_sequence[] = {
1302
  { &hf_sabp_procedureCode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProcedureCode },
1303
  { &hf_sabp_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
1304
  { &hf_sabp_successfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_SuccessfulOutcome_value },
1305
  { NULL, 0, 0, NULL }
1306
};
1307
1308
static unsigned
1309
16
dissect_sabp_SuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1310
16
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1311
16
                                   ett_sabp_SuccessfulOutcome, SuccessfulOutcome_sequence);
1312
1313
16
  return offset;
1314
16
}
1315
1316
1317
1318
static unsigned
1319
9
dissect_sabp_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1320
  // UnsuccessfulOutcome/value -> UnsuccessfulOutcome/value
1321
9
  increment_dissection_depth_by_n(actx->pinfo, 1);
1322
9
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
1323
1324
9
  decrement_dissection_depth_by_n(actx->pinfo, 1);
1325
9
  return offset;
1326
9
}
1327
1328
1329
static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
1330
  { &hf_sabp_procedureCode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_ProcedureCode },
1331
  { &hf_sabp_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_Criticality },
1332
  { &hf_sabp_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_sabp_UnsuccessfulOutcome_value },
1333
  { NULL, 0, 0, NULL }
1334
};
1335
1336
static unsigned
1337
10
dissect_sabp_UnsuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1338
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1339
10
                                   ett_sabp_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
1340
1341
10
  return offset;
1342
10
}
1343
1344
1345
static const value_string sabp_SABP_PDU_vals[] = {
1346
  {   0, "initiatingMessage" },
1347
  {   1, "successfulOutcome" },
1348
  {   2, "unsuccessfulOutcome" },
1349
  { 0, NULL }
1350
};
1351
1352
static const per_choice_t SABP_PDU_choice[] = {
1353
  {   0, &hf_sabp_initiatingMessage, ASN1_EXTENSION_ROOT    , dissect_sabp_InitiatingMessage },
1354
  {   1, &hf_sabp_successfulOutcome, ASN1_EXTENSION_ROOT    , dissect_sabp_SuccessfulOutcome },
1355
  {   2, &hf_sabp_unsuccessfulOutcome, ASN1_EXTENSION_ROOT    , dissect_sabp_UnsuccessfulOutcome },
1356
  { 0, NULL, 0, NULL }
1357
};
1358
1359
static unsigned
1360
62
dissect_sabp_SABP_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1361
62
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1362
62
                                 ett_sabp_SABP_PDU, SABP_PDU_choice,
1363
62
                                 NULL);
1364
1365
62
  return offset;
1366
62
}
1367
1368
/*--- PDUs ---*/
1369
1370
24
static int dissect_Broadcast_Message_Content_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1371
24
  unsigned offset = 0;
1372
24
  asn1_ctx_t asn1_ctx;
1373
24
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1374
24
  offset = dissect_sabp_Broadcast_Message_Content(tvb, offset, &asn1_ctx, tree, hf_sabp_Broadcast_Message_Content_PDU);
1375
24
  offset += 7; offset >>= 3;
1376
24
  return offset;
1377
24
}
1378
0
static int dissect_Broadcast_Message_Content_Validity_Indicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1379
0
  unsigned offset = 0;
1380
0
  asn1_ctx_t asn1_ctx;
1381
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1382
0
  offset = dissect_sabp_Broadcast_Message_Content_Validity_Indicator(tvb, offset, &asn1_ctx, tree, hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU);
1383
0
  offset += 7; offset >>= 3;
1384
0
  return offset;
1385
0
}
1386
1
static int dissect_Category_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1387
1
  unsigned offset = 0;
1388
1
  asn1_ctx_t asn1_ctx;
1389
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1390
1
  offset = dissect_sabp_Category(tvb, offset, &asn1_ctx, tree, hf_sabp_Category_PDU);
1391
1
  offset += 7; offset >>= 3;
1392
1
  return offset;
1393
1
}
1394
1
static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1395
1
  unsigned offset = 0;
1396
1
  asn1_ctx_t asn1_ctx;
1397
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1398
1
  offset = dissect_sabp_Cause(tvb, offset, &asn1_ctx, tree, hf_sabp_Cause_PDU);
1399
1
  offset += 7; offset >>= 3;
1400
1
  return offset;
1401
1
}
1402
10
static int dissect_Criticality_Diagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1403
10
  unsigned offset = 0;
1404
10
  asn1_ctx_t asn1_ctx;
1405
10
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1406
10
  offset = dissect_sabp_Criticality_Diagnostics(tvb, offset, &asn1_ctx, tree, hf_sabp_Criticality_Diagnostics_PDU);
1407
10
  offset += 7; offset >>= 3;
1408
10
  return offset;
1409
10
}
1410
0
static int dissect_MessageStructure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1411
0
  unsigned offset = 0;
1412
0
  asn1_ctx_t asn1_ctx;
1413
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1414
0
  offset = dissect_sabp_MessageStructure(tvb, offset, &asn1_ctx, tree, hf_sabp_MessageStructure_PDU);
1415
0
  offset += 7; offset >>= 3;
1416
0
  return offset;
1417
0
}
1418
2
static int dissect_Data_Coding_Scheme_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1419
2
  unsigned offset = 0;
1420
2
  asn1_ctx_t asn1_ctx;
1421
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1422
2
  offset = dissect_sabp_Data_Coding_Scheme(tvb, offset, &asn1_ctx, tree, hf_sabp_Data_Coding_Scheme_PDU);
1423
2
  offset += 7; offset >>= 3;
1424
2
  return offset;
1425
2
}
1426
2
static int dissect_Failure_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1427
2
  unsigned offset = 0;
1428
2
  asn1_ctx_t asn1_ctx;
1429
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1430
2
  offset = dissect_sabp_Failure_List(tvb, offset, &asn1_ctx, tree, hf_sabp_Failure_List_PDU);
1431
2
  offset += 7; offset >>= 3;
1432
2
  return offset;
1433
2
}
1434
0
static int dissect_Message_Identifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1435
0
  unsigned offset = 0;
1436
0
  asn1_ctx_t asn1_ctx;
1437
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1438
0
  offset = dissect_sabp_Message_Identifier(tvb, offset, &asn1_ctx, tree, hf_sabp_Message_Identifier_PDU);
1439
0
  offset += 7; offset >>= 3;
1440
0
  return offset;
1441
0
}
1442
0
static int dissect_New_Serial_Number_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1443
0
  unsigned offset = 0;
1444
0
  asn1_ctx_t asn1_ctx;
1445
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1446
0
  offset = dissect_sabp_New_Serial_Number(tvb, offset, &asn1_ctx, tree, hf_sabp_New_Serial_Number_PDU);
1447
0
  offset += 7; offset >>= 3;
1448
0
  return offset;
1449
0
}
1450
3
static int dissect_Number_of_Broadcasts_Completed_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1451
3
  unsigned offset = 0;
1452
3
  asn1_ctx_t asn1_ctx;
1453
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1454
3
  offset = dissect_sabp_Number_of_Broadcasts_Completed_List(tvb, offset, &asn1_ctx, tree, hf_sabp_Number_of_Broadcasts_Completed_List_PDU);
1455
3
  offset += 7; offset >>= 3;
1456
3
  return offset;
1457
3
}
1458
0
static int dissect_Number_of_Broadcasts_Requested_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1459
0
  unsigned offset = 0;
1460
0
  asn1_ctx_t asn1_ctx;
1461
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1462
0
  offset = dissect_sabp_Number_of_Broadcasts_Requested(tvb, offset, &asn1_ctx, tree, hf_sabp_Number_of_Broadcasts_Requested_PDU);
1463
0
  offset += 7; offset >>= 3;
1464
0
  return offset;
1465
0
}
1466
0
static int dissect_Old_Serial_Number_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1467
0
  unsigned offset = 0;
1468
0
  asn1_ctx_t asn1_ctx;
1469
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1470
0
  offset = dissect_sabp_Old_Serial_Number(tvb, offset, &asn1_ctx, tree, hf_sabp_Old_Serial_Number_PDU);
1471
0
  offset += 7; offset >>= 3;
1472
0
  return offset;
1473
0
}
1474
2
static int dissect_Paging_ETWS_Indicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1475
2
  unsigned offset = 0;
1476
2
  asn1_ctx_t asn1_ctx;
1477
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1478
2
  offset = dissect_sabp_Paging_ETWS_Indicator(tvb, offset, &asn1_ctx, tree, hf_sabp_Paging_ETWS_Indicator_PDU);
1479
2
  offset += 7; offset >>= 3;
1480
2
  return offset;
1481
2
}
1482
2
static int dissect_Radio_Resource_Loading_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1483
2
  unsigned offset = 0;
1484
2
  asn1_ctx_t asn1_ctx;
1485
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1486
2
  offset = dissect_sabp_Radio_Resource_Loading_List(tvb, offset, &asn1_ctx, tree, hf_sabp_Radio_Resource_Loading_List_PDU);
1487
2
  offset += 7; offset >>= 3;
1488
2
  return offset;
1489
2
}
1490
0
static int dissect_Recovery_Indication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1491
0
  unsigned offset = 0;
1492
0
  asn1_ctx_t asn1_ctx;
1493
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1494
0
  offset = dissect_sabp_Recovery_Indication(tvb, offset, &asn1_ctx, tree, hf_sabp_Recovery_Indication_PDU);
1495
0
  offset += 7; offset >>= 3;
1496
0
  return offset;
1497
0
}
1498
2
static int dissect_Repetition_Period_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1499
2
  unsigned offset = 0;
1500
2
  asn1_ctx_t asn1_ctx;
1501
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1502
2
  offset = dissect_sabp_Repetition_Period(tvb, offset, &asn1_ctx, tree, hf_sabp_Repetition_Period_PDU);
1503
2
  offset += 7; offset >>= 3;
1504
2
  return offset;
1505
2
}
1506
1
static int dissect_Serial_Number_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1507
1
  unsigned offset = 0;
1508
1
  asn1_ctx_t asn1_ctx;
1509
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1510
1
  offset = dissect_sabp_Serial_Number(tvb, offset, &asn1_ctx, tree, hf_sabp_Serial_Number_PDU);
1511
1
  offset += 7; offset >>= 3;
1512
1
  return offset;
1513
1
}
1514
5
static int dissect_Service_Areas_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1515
5
  unsigned offset = 0;
1516
5
  asn1_ctx_t asn1_ctx;
1517
5
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1518
5
  offset = dissect_sabp_Service_Areas_List(tvb, offset, &asn1_ctx, tree, hf_sabp_Service_Areas_List_PDU);
1519
5
  offset += 7; offset >>= 3;
1520
5
  return offset;
1521
5
}
1522
0
static int dissect_TypeOfError_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1523
0
  unsigned offset = 0;
1524
0
  asn1_ctx_t asn1_ctx;
1525
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1526
0
  offset = dissect_sabp_TypeOfError(tvb, offset, &asn1_ctx, tree, hf_sabp_TypeOfError_PDU);
1527
0
  offset += 7; offset >>= 3;
1528
0
  return offset;
1529
0
}
1530
1
static int dissect_WarningSecurityInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1531
1
  unsigned offset = 0;
1532
1
  asn1_ctx_t asn1_ctx;
1533
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1534
1
  offset = dissect_sabp_WarningSecurityInfo(tvb, offset, &asn1_ctx, tree, hf_sabp_WarningSecurityInfo_PDU);
1535
1
  offset += 7; offset >>= 3;
1536
1
  return offset;
1537
1
}
1538
0
static int dissect_Warning_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1539
0
  unsigned offset = 0;
1540
0
  asn1_ctx_t asn1_ctx;
1541
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1542
0
  offset = dissect_sabp_Warning_Type(tvb, offset, &asn1_ctx, tree, hf_sabp_Warning_Type_PDU);
1543
0
  offset += 7; offset >>= 3;
1544
0
  return offset;
1545
0
}
1546
17
static int dissect_Write_Replace_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1547
17
  unsigned offset = 0;
1548
17
  asn1_ctx_t asn1_ctx;
1549
17
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1550
17
  offset = dissect_sabp_Write_Replace(tvb, offset, &asn1_ctx, tree, hf_sabp_Write_Replace_PDU);
1551
17
  offset += 7; offset >>= 3;
1552
17
  return offset;
1553
17
}
1554
10
static int dissect_Write_Replace_Complete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1555
10
  unsigned offset = 0;
1556
10
  asn1_ctx_t asn1_ctx;
1557
10
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1558
10
  offset = dissect_sabp_Write_Replace_Complete(tvb, offset, &asn1_ctx, tree, hf_sabp_Write_Replace_Complete_PDU);
1559
10
  offset += 7; offset >>= 3;
1560
10
  return offset;
1561
10
}
1562
9
static int dissect_Write_Replace_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1563
9
  unsigned offset = 0;
1564
9
  asn1_ctx_t asn1_ctx;
1565
9
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1566
9
  offset = dissect_sabp_Write_Replace_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Write_Replace_Failure_PDU);
1567
9
  offset += 7; offset >>= 3;
1568
9
  return offset;
1569
9
}
1570
1
static int dissect_Kill_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1571
1
  unsigned offset = 0;
1572
1
  asn1_ctx_t asn1_ctx;
1573
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1574
1
  offset = dissect_sabp_Kill(tvb, offset, &asn1_ctx, tree, hf_sabp_Kill_PDU);
1575
1
  offset += 7; offset >>= 3;
1576
1
  return offset;
1577
1
}
1578
0
static int dissect_Kill_Complete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1579
0
  unsigned offset = 0;
1580
0
  asn1_ctx_t asn1_ctx;
1581
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1582
0
  offset = dissect_sabp_Kill_Complete(tvb, offset, &asn1_ctx, tree, hf_sabp_Kill_Complete_PDU);
1583
0
  offset += 7; offset >>= 3;
1584
0
  return offset;
1585
0
}
1586
0
static int dissect_Kill_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1587
0
  unsigned offset = 0;
1588
0
  asn1_ctx_t asn1_ctx;
1589
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1590
0
  offset = dissect_sabp_Kill_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Kill_Failure_PDU);
1591
0
  offset += 7; offset >>= 3;
1592
0
  return offset;
1593
0
}
1594
5
static int dissect_Load_Query_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1595
5
  unsigned offset = 0;
1596
5
  asn1_ctx_t asn1_ctx;
1597
5
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1598
5
  offset = dissect_sabp_Load_Query(tvb, offset, &asn1_ctx, tree, hf_sabp_Load_Query_PDU);
1599
5
  offset += 7; offset >>= 3;
1600
5
  return offset;
1601
5
}
1602
2
static int dissect_Load_Query_Complete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1603
2
  unsigned offset = 0;
1604
2
  asn1_ctx_t asn1_ctx;
1605
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1606
2
  offset = dissect_sabp_Load_Query_Complete(tvb, offset, &asn1_ctx, tree, hf_sabp_Load_Query_Complete_PDU);
1607
2
  offset += 7; offset >>= 3;
1608
2
  return offset;
1609
2
}
1610
0
static int dissect_Load_Query_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1611
0
  unsigned offset = 0;
1612
0
  asn1_ctx_t asn1_ctx;
1613
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1614
0
  offset = dissect_sabp_Load_Query_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Load_Query_Failure_PDU);
1615
0
  offset += 7; offset >>= 3;
1616
0
  return offset;
1617
0
}
1618
0
static int dissect_Message_Status_Query_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1619
0
  unsigned offset = 0;
1620
0
  asn1_ctx_t asn1_ctx;
1621
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1622
0
  offset = dissect_sabp_Message_Status_Query(tvb, offset, &asn1_ctx, tree, hf_sabp_Message_Status_Query_PDU);
1623
0
  offset += 7; offset >>= 3;
1624
0
  return offset;
1625
0
}
1626
1
static int dissect_Message_Status_Query_Complete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1627
1
  unsigned offset = 0;
1628
1
  asn1_ctx_t asn1_ctx;
1629
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1630
1
  offset = dissect_sabp_Message_Status_Query_Complete(tvb, offset, &asn1_ctx, tree, hf_sabp_Message_Status_Query_Complete_PDU);
1631
1
  offset += 7; offset >>= 3;
1632
1
  return offset;
1633
1
}
1634
0
static int dissect_Message_Status_Query_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1635
0
  unsigned offset = 0;
1636
0
  asn1_ctx_t asn1_ctx;
1637
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1638
0
  offset = dissect_sabp_Message_Status_Query_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Message_Status_Query_Failure_PDU);
1639
0
  offset += 7; offset >>= 3;
1640
0
  return offset;
1641
0
}
1642
2
static int dissect_Reset_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1643
2
  unsigned offset = 0;
1644
2
  asn1_ctx_t asn1_ctx;
1645
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1646
2
  offset = dissect_sabp_Reset(tvb, offset, &asn1_ctx, tree, hf_sabp_Reset_PDU);
1647
2
  offset += 7; offset >>= 3;
1648
2
  return offset;
1649
2
}
1650
0
static int dissect_Reset_Complete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1651
0
  unsigned offset = 0;
1652
0
  asn1_ctx_t asn1_ctx;
1653
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1654
0
  offset = dissect_sabp_Reset_Complete(tvb, offset, &asn1_ctx, tree, hf_sabp_Reset_Complete_PDU);
1655
0
  offset += 7; offset >>= 3;
1656
0
  return offset;
1657
0
}
1658
0
static int dissect_Reset_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1659
0
  unsigned offset = 0;
1660
0
  asn1_ctx_t asn1_ctx;
1661
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1662
0
  offset = dissect_sabp_Reset_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Reset_Failure_PDU);
1663
0
  offset += 7; offset >>= 3;
1664
0
  return offset;
1665
0
}
1666
2
static int dissect_Restart_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1667
2
  unsigned offset = 0;
1668
2
  asn1_ctx_t asn1_ctx;
1669
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1670
2
  offset = dissect_sabp_Restart(tvb, offset, &asn1_ctx, tree, hf_sabp_Restart_PDU);
1671
2
  offset += 7; offset >>= 3;
1672
2
  return offset;
1673
2
}
1674
0
static int dissect_Failure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1675
0
  unsigned offset = 0;
1676
0
  asn1_ctx_t asn1_ctx;
1677
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1678
0
  offset = dissect_sabp_Failure(tvb, offset, &asn1_ctx, tree, hf_sabp_Failure_PDU);
1679
0
  offset += 7; offset >>= 3;
1680
0
  return offset;
1681
0
}
1682
0
static int dissect_Error_Indication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1683
0
  unsigned offset = 0;
1684
0
  asn1_ctx_t asn1_ctx;
1685
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1686
0
  offset = dissect_sabp_Error_Indication(tvb, offset, &asn1_ctx, tree, hf_sabp_Error_Indication_PDU);
1687
0
  offset += 7; offset >>= 3;
1688
0
  return offset;
1689
0
}
1690
62
static int dissect_SABP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1691
62
  unsigned offset = 0;
1692
62
  asn1_ctx_t asn1_ctx;
1693
62
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1694
62
  offset = dissect_sabp_SABP_PDU(tvb, offset, &asn1_ctx, tree, hf_sabp_SABP_PDU_PDU);
1695
62
  offset += 7; offset >>= 3;
1696
62
  return offset;
1697
62
}
1698
1699
1700
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1701
126
{
1702
126
  return (dissector_try_uint(sabp_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
1703
126
}
1704
1705
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1706
40
{
1707
40
  return (dissector_try_uint(sabp_extension_dissector_table, ProtocolExtensionID, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
1708
40
}
1709
1710
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1711
29
{
1712
29
  return (dissector_try_uint(sabp_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
1713
29
}
1714
1715
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1716
15
{
1717
15
  return (dissector_try_uint(sabp_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
1718
15
}
1719
1720
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1721
9
{
1722
9
  return (dissector_try_uint(sabp_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
1723
9
}
1724
1725
1726
/* 3GPP TS 23.041 version 11.4.0
1727
 * 9.4.2.2.5 CB Data
1728
 */
1729
static void
1730
dissect_sabp_cb_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1731
12
{
1732
12
  proto_item *cbs_page_item;
1733
12
  proto_tree *subtree;
1734
12
  tvbuff_t *page_tvb, *unpacked_tvb;
1735
12
  int offset = 0;
1736
12
  int n;
1737
12
  uint8_t nr_pages, len, cb_inf_msg_len;
1738
1739
1740
  /* Octet 1 Number-of-Pages */
1741
12
  nr_pages = tvb_get_uint8(tvb, offset);
1742
12
  proto_tree_add_item(tree, hf_sabp_no_of_pages, tvb, offset, 1, ENC_BIG_ENDIAN);
1743
12
  offset++;
1744
  /*
1745
   * NOTE: n equal to or less than 15
1746
   */
1747
12
  if(nr_pages > 15){
1748
    /* Error */
1749
5
    return;
1750
5
  }
1751
1752
7
  for (n = 0; n < nr_pages; n++) {
1753
0
    subtree = proto_tree_add_subtree_format(tree, tvb, offset, 83, ett_sabp_cbs_page, NULL,
1754
0
                "CB page %u data",  n+1);
1755
    /* octet 2 - 83 CBS-Message-Information-Page 1  */
1756
0
    cbs_page_item = proto_tree_add_item(subtree, hf_sabp_cb_msg_inf_page, tvb, offset, 82, ENC_NA);
1757
0
    cb_inf_msg_len = tvb_get_uint8(tvb,offset+82);
1758
0
    page_tvb = tvb_new_subset_length(tvb, offset, cb_inf_msg_len);
1759
0
    unpacked_tvb = dissect_cbs_data(sms_encoding, page_tvb, subtree, pinfo, 0);
1760
0
    if (unpacked_tvb != NULL){
1761
0
      len = tvb_captured_length(unpacked_tvb);
1762
0
      if (tree != NULL){
1763
0
        proto_tree *cbs_page_subtree = proto_item_add_subtree(cbs_page_item, ett_sabp_cbs_page_content);
1764
0
        proto_tree_add_item(cbs_page_subtree, hf_sabp_cbs_page_content, unpacked_tvb, 0, len, ENC_UTF_8);
1765
0
      }
1766
0
    }
1767
1768
0
    offset = offset+82;
1769
    /* 84 CBS-Message-Information-Length 1 */
1770
0
    proto_tree_add_item(subtree, hf_sabp_cb_inf_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1771
0
    offset++;
1772
0
  }
1773
7
}
1774
1775
static int
1776
dissect_sabp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1777
62
{
1778
62
  proto_item  *sabp_item = NULL;
1779
62
  proto_tree  *sabp_tree = NULL;
1780
1781
  /* make entry in the Protocol column on summary display */
1782
62
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "SABP");
1783
1784
  /* create the sabp protocol tree */
1785
62
  sabp_item = proto_tree_add_item(tree, proto_sabp, tvb, 0, -1, ENC_NA);
1786
62
  sabp_tree = proto_item_add_subtree(sabp_item, ett_sabp);
1787
1788
62
  return dissect_SABP_PDU_PDU(tvb, pinfo, sabp_tree, NULL);
1789
62
}
1790
1791
/* Note a little bit of a hack assumes length max takes two bytes and that the length starts at byte 4 */
1792
static int
1793
dissect_sabp_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
1794
0
{
1795
0
  uint32_t type_length, msg_len;
1796
0
  unsigned tvb_length;
1797
0
  int bit_offset;
1798
0
  bool is_fragmented;
1799
0
  asn1_ctx_t asn1_ctx;
1800
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1801
1802
0
  tvb_length = tvb_reported_length(tvb);
1803
1804
0
  if (tvb_length < 5) {
1805
0
    pinfo->desegment_offset = 0;
1806
0
    pinfo->desegment_len = DESEGMENT_ONE_MORE_SEGMENT;
1807
0
    return tvb_captured_length(tvb);
1808
0
  }
1809
1810
  /* Length should be in the 3:d octet */
1811
0
  bit_offset = 24;
1812
  /* Get the length of the sabp packet. Offset in bits */
1813
0
  do {
1814
0
    bit_offset = dissect_per_length_determinant(tvb, bit_offset, &asn1_ctx, NULL, -1, &type_length, &is_fragmented);
1815
0
    bit_offset += 8*type_length;
1816
0
    msg_len = (bit_offset + 7) >> 3;
1817
0
    if (is_fragmented) {
1818
      /* Next length field will take 1 or 2 bytes; let's ask for the maximum */
1819
0
      msg_len += 2;
1820
0
    }
1821
0
    if (msg_len > tvb_length) {
1822
0
      pinfo->desegment_offset = 0;
1823
0
      pinfo->desegment_len = msg_len - tvb_length;
1824
0
      return tvb_captured_length(tvb);
1825
0
    }
1826
0
  } while (is_fragmented);
1827
1828
0
  return dissect_sabp(tvb, pinfo, tree, data);
1829
0
}
1830
1831
/*--- proto_register_sabp -------------------------------------------*/
1832
15
void proto_register_sabp(void) {
1833
1834
  /* List of fields */
1835
1836
15
  static hf_register_info hf[] = {
1837
15
    { &hf_sabp_no_of_pages,
1838
15
      { "Number-of-Pages", "sabp.no_of_pages",
1839
15
        FT_UINT8, BASE_DEC, NULL, 0,
1840
15
        NULL, HFILL }},
1841
15
    { &hf_sabp_cb_msg_inf_page,
1842
15
      { "CBS-Message-Information-Page", "sabp.cb_msg_inf_page",
1843
15
        FT_BYTES, BASE_NONE, NULL, 0,
1844
15
        NULL, HFILL }},
1845
15
    { &hf_sabp_cbs_page_content,
1846
15
      { "CBS Page Content", "sabp.cb_page_content",
1847
15
        FT_STRING, BASE_NONE, NULL, 0,
1848
15
        NULL, HFILL }},
1849
15
    { &hf_sabp_cb_inf_len,
1850
15
      { "CBS-Message-Information-Length", "sabp.cb_inf_len",
1851
15
        FT_UINT8, BASE_DEC, NULL, 0,
1852
15
        NULL, HFILL }},
1853
1854
15
    { &hf_sabp_Broadcast_Message_Content_PDU,
1855
15
      { "Broadcast-Message-Content", "sabp.Broadcast_Message_Content",
1856
15
        FT_BYTES, BASE_NONE, NULL, 0,
1857
15
        NULL, HFILL }},
1858
15
    { &hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU,
1859
15
      { "Broadcast-Message-Content-Validity-Indicator", "sabp.Broadcast_Message_Content_Validity_Indicator",
1860
15
        FT_UINT32, BASE_DEC, VALS(sabp_Broadcast_Message_Content_Validity_Indicator_vals), 0,
1861
15
        NULL, HFILL }},
1862
15
    { &hf_sabp_Category_PDU,
1863
15
      { "Category", "sabp.Category",
1864
15
        FT_UINT32, BASE_DEC, VALS(sabp_Category_vals), 0,
1865
15
        NULL, HFILL }},
1866
15
    { &hf_sabp_Cause_PDU,
1867
15
      { "Cause", "sabp.Cause",
1868
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &sabp_Cause_vals_ext, 0,
1869
15
        NULL, HFILL }},
1870
15
    { &hf_sabp_Criticality_Diagnostics_PDU,
1871
15
      { "Criticality-Diagnostics", "sabp.Criticality_Diagnostics_element",
1872
15
        FT_NONE, BASE_NONE, NULL, 0,
1873
15
        NULL, HFILL }},
1874
15
    { &hf_sabp_MessageStructure_PDU,
1875
15
      { "MessageStructure", "sabp.MessageStructure",
1876
15
        FT_UINT32, BASE_DEC, NULL, 0,
1877
15
        NULL, HFILL }},
1878
15
    { &hf_sabp_Data_Coding_Scheme_PDU,
1879
15
      { "Data-Coding-Scheme", "sabp.Data_Coding_Scheme",
1880
15
        FT_BYTES, BASE_NONE, NULL, 0,
1881
15
        NULL, HFILL }},
1882
15
    { &hf_sabp_Failure_List_PDU,
1883
15
      { "Failure-List", "sabp.Failure_List",
1884
15
        FT_UINT32, BASE_DEC, NULL, 0,
1885
15
        NULL, HFILL }},
1886
15
    { &hf_sabp_Message_Identifier_PDU,
1887
15
      { "Message-Identifier", "sabp.Message_Identifier",
1888
15
        FT_BYTES, BASE_NONE, NULL, 0,
1889
15
        NULL, HFILL }},
1890
15
    { &hf_sabp_New_Serial_Number_PDU,
1891
15
      { "New-Serial-Number", "sabp.New_Serial_Number",
1892
15
        FT_BYTES, BASE_NONE, NULL, 0,
1893
15
        NULL, HFILL }},
1894
15
    { &hf_sabp_Number_of_Broadcasts_Completed_List_PDU,
1895
15
      { "Number-of-Broadcasts-Completed-List", "sabp.Number_of_Broadcasts_Completed_List",
1896
15
        FT_UINT32, BASE_DEC, NULL, 0,
1897
15
        NULL, HFILL }},
1898
15
    { &hf_sabp_Number_of_Broadcasts_Requested_PDU,
1899
15
      { "Number-of-Broadcasts-Requested", "sabp.Number_of_Broadcasts_Requested",
1900
15
        FT_UINT32, BASE_DEC, VALS(sabp_Number_of_Broadcasts_Requested_vals), 0,
1901
15
        NULL, HFILL }},
1902
15
    { &hf_sabp_Old_Serial_Number_PDU,
1903
15
      { "Old-Serial-Number", "sabp.Old_Serial_Number",
1904
15
        FT_BYTES, BASE_NONE, NULL, 0,
1905
15
        NULL, HFILL }},
1906
15
    { &hf_sabp_Paging_ETWS_Indicator_PDU,
1907
15
      { "Paging-ETWS-Indicator", "sabp.Paging_ETWS_Indicator",
1908
15
        FT_UINT32, BASE_DEC, VALS(sabp_Paging_ETWS_Indicator_vals), 0,
1909
15
        NULL, HFILL }},
1910
15
    { &hf_sabp_Radio_Resource_Loading_List_PDU,
1911
15
      { "Radio-Resource-Loading-List", "sabp.Radio_Resource_Loading_List",
1912
15
        FT_UINT32, BASE_DEC, NULL, 0,
1913
15
        NULL, HFILL }},
1914
15
    { &hf_sabp_Recovery_Indication_PDU,
1915
15
      { "Recovery-Indication", "sabp.Recovery_Indication",
1916
15
        FT_UINT32, BASE_DEC, VALS(sabp_Recovery_Indication_vals), 0,
1917
15
        NULL, HFILL }},
1918
15
    { &hf_sabp_Repetition_Period_PDU,
1919
15
      { "Repetition-Period", "sabp.Repetition_Period",
1920
15
        FT_UINT32, BASE_DEC, NULL, 0,
1921
15
        NULL, HFILL }},
1922
15
    { &hf_sabp_Serial_Number_PDU,
1923
15
      { "Serial-Number", "sabp.Serial_Number",
1924
15
        FT_BYTES, BASE_NONE, NULL, 0,
1925
15
        NULL, HFILL }},
1926
15
    { &hf_sabp_Service_Areas_List_PDU,
1927
15
      { "Service-Areas-List", "sabp.Service_Areas_List",
1928
15
        FT_UINT32, BASE_DEC, NULL, 0,
1929
15
        NULL, HFILL }},
1930
15
    { &hf_sabp_TypeOfError_PDU,
1931
15
      { "TypeOfError", "sabp.TypeOfError",
1932
15
        FT_UINT32, BASE_DEC, VALS(sabp_TypeOfError_vals), 0,
1933
15
        NULL, HFILL }},
1934
15
    { &hf_sabp_WarningSecurityInfo_PDU,
1935
15
      { "WarningSecurityInfo", "sabp.WarningSecurityInfo",
1936
15
        FT_BYTES, BASE_NONE, NULL, 0,
1937
15
        NULL, HFILL }},
1938
15
    { &hf_sabp_Warning_Type_PDU,
1939
15
      { "Warning-Type", "sabp.Warning_Type",
1940
15
        FT_BYTES, BASE_NONE, NULL, 0,
1941
15
        NULL, HFILL }},
1942
15
    { &hf_sabp_Write_Replace_PDU,
1943
15
      { "Write-Replace", "sabp.Write_Replace_element",
1944
15
        FT_NONE, BASE_NONE, NULL, 0,
1945
15
        NULL, HFILL }},
1946
15
    { &hf_sabp_Write_Replace_Complete_PDU,
1947
15
      { "Write-Replace-Complete", "sabp.Write_Replace_Complete_element",
1948
15
        FT_NONE, BASE_NONE, NULL, 0,
1949
15
        NULL, HFILL }},
1950
15
    { &hf_sabp_Write_Replace_Failure_PDU,
1951
15
      { "Write-Replace-Failure", "sabp.Write_Replace_Failure_element",
1952
15
        FT_NONE, BASE_NONE, NULL, 0,
1953
15
        NULL, HFILL }},
1954
15
    { &hf_sabp_Kill_PDU,
1955
15
      { "Kill", "sabp.Kill_element",
1956
15
        FT_NONE, BASE_NONE, NULL, 0,
1957
15
        NULL, HFILL }},
1958
15
    { &hf_sabp_Kill_Complete_PDU,
1959
15
      { "Kill-Complete", "sabp.Kill_Complete_element",
1960
15
        FT_NONE, BASE_NONE, NULL, 0,
1961
15
        NULL, HFILL }},
1962
15
    { &hf_sabp_Kill_Failure_PDU,
1963
15
      { "Kill-Failure", "sabp.Kill_Failure_element",
1964
15
        FT_NONE, BASE_NONE, NULL, 0,
1965
15
        NULL, HFILL }},
1966
15
    { &hf_sabp_Load_Query_PDU,
1967
15
      { "Load-Query", "sabp.Load_Query_element",
1968
15
        FT_NONE, BASE_NONE, NULL, 0,
1969
15
        NULL, HFILL }},
1970
15
    { &hf_sabp_Load_Query_Complete_PDU,
1971
15
      { "Load-Query-Complete", "sabp.Load_Query_Complete_element",
1972
15
        FT_NONE, BASE_NONE, NULL, 0,
1973
15
        NULL, HFILL }},
1974
15
    { &hf_sabp_Load_Query_Failure_PDU,
1975
15
      { "Load-Query-Failure", "sabp.Load_Query_Failure_element",
1976
15
        FT_NONE, BASE_NONE, NULL, 0,
1977
15
        NULL, HFILL }},
1978
15
    { &hf_sabp_Message_Status_Query_PDU,
1979
15
      { "Message-Status-Query", "sabp.Message_Status_Query_element",
1980
15
        FT_NONE, BASE_NONE, NULL, 0,
1981
15
        NULL, HFILL }},
1982
15
    { &hf_sabp_Message_Status_Query_Complete_PDU,
1983
15
      { "Message-Status-Query-Complete", "sabp.Message_Status_Query_Complete_element",
1984
15
        FT_NONE, BASE_NONE, NULL, 0,
1985
15
        NULL, HFILL }},
1986
15
    { &hf_sabp_Message_Status_Query_Failure_PDU,
1987
15
      { "Message-Status-Query-Failure", "sabp.Message_Status_Query_Failure_element",
1988
15
        FT_NONE, BASE_NONE, NULL, 0,
1989
15
        NULL, HFILL }},
1990
15
    { &hf_sabp_Reset_PDU,
1991
15
      { "Reset", "sabp.Reset_element",
1992
15
        FT_NONE, BASE_NONE, NULL, 0,
1993
15
        NULL, HFILL }},
1994
15
    { &hf_sabp_Reset_Complete_PDU,
1995
15
      { "Reset-Complete", "sabp.Reset_Complete_element",
1996
15
        FT_NONE, BASE_NONE, NULL, 0,
1997
15
        NULL, HFILL }},
1998
15
    { &hf_sabp_Reset_Failure_PDU,
1999
15
      { "Reset-Failure", "sabp.Reset_Failure_element",
2000
15
        FT_NONE, BASE_NONE, NULL, 0,
2001
15
        NULL, HFILL }},
2002
15
    { &hf_sabp_Restart_PDU,
2003
15
      { "Restart", "sabp.Restart_element",
2004
15
        FT_NONE, BASE_NONE, NULL, 0,
2005
15
        NULL, HFILL }},
2006
15
    { &hf_sabp_Failure_PDU,
2007
15
      { "Failure", "sabp.Failure_element",
2008
15
        FT_NONE, BASE_NONE, NULL, 0,
2009
15
        NULL, HFILL }},
2010
15
    { &hf_sabp_Error_Indication_PDU,
2011
15
      { "Error-Indication", "sabp.Error_Indication_element",
2012
15
        FT_NONE, BASE_NONE, NULL, 0,
2013
15
        NULL, HFILL }},
2014
15
    { &hf_sabp_SABP_PDU_PDU,
2015
15
      { "SABP-PDU", "sabp.SABP_PDU",
2016
15
        FT_UINT32, BASE_DEC, VALS(sabp_SABP_PDU_vals), 0,
2017
15
        NULL, HFILL }},
2018
15
    { &hf_sabp_ProtocolIE_Container_item,
2019
15
      { "ProtocolIE-Field", "sabp.ProtocolIE_Field_element",
2020
15
        FT_NONE, BASE_NONE, NULL, 0,
2021
15
        NULL, HFILL }},
2022
15
    { &hf_sabp_id,
2023
15
      { "id", "sabp.id",
2024
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &sabp_ProtocolIE_ID_vals_ext, 0,
2025
15
        "ProtocolIE_ID", HFILL }},
2026
15
    { &hf_sabp_criticality,
2027
15
      { "criticality", "sabp.criticality",
2028
15
        FT_UINT32, BASE_DEC, VALS(sabp_Criticality_vals), 0,
2029
15
        NULL, HFILL }},
2030
15
    { &hf_sabp_protocolIE_Field_value,
2031
15
      { "value", "sabp.protocolIE_Field_value_element",
2032
15
        FT_NONE, BASE_NONE, NULL, 0,
2033
15
        "ProtocolIE_Field_value", HFILL }},
2034
15
    { &hf_sabp_ProtocolExtensionContainer_item,
2035
15
      { "ProtocolExtensionField", "sabp.ProtocolExtensionField_element",
2036
15
        FT_NONE, BASE_NONE, NULL, 0,
2037
15
        NULL, HFILL }},
2038
15
    { &hf_sabp_ext_id,
2039
15
      { "id", "sabp.ext_id",
2040
15
        FT_UINT32, BASE_DEC, NULL, 0,
2041
15
        "ProtocolExtensionID", HFILL }},
2042
15
    { &hf_sabp_extensionValue,
2043
15
      { "extensionValue", "sabp.extensionValue_element",
2044
15
        FT_NONE, BASE_NONE, NULL, 0,
2045
15
        NULL, HFILL }},
2046
15
    { &hf_sabp_procedureCode,
2047
15
      { "procedureCode", "sabp.procedureCode",
2048
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &sabp_ProcedureCode_vals_ext, 0,
2049
15
        NULL, HFILL }},
2050
15
    { &hf_sabp_triggeringMessage,
2051
15
      { "triggeringMessage", "sabp.triggeringMessage",
2052
15
        FT_UINT32, BASE_DEC, VALS(sabp_TriggeringMessage_vals), 0,
2053
15
        NULL, HFILL }},
2054
15
    { &hf_sabp_procedureCriticality,
2055
15
      { "procedureCriticality", "sabp.procedureCriticality",
2056
15
        FT_UINT32, BASE_DEC, VALS(sabp_Criticality_vals), 0,
2057
15
        "Criticality", HFILL }},
2058
15
    { &hf_sabp_iEsCriticalityDiagnostics,
2059
15
      { "iEsCriticalityDiagnostics", "sabp.iEsCriticalityDiagnostics",
2060
15
        FT_UINT32, BASE_DEC, NULL, 0,
2061
15
        "CriticalityDiagnostics_IE_List", HFILL }},
2062
15
    { &hf_sabp_iE_Extensions,
2063
15
      { "iE-Extensions", "sabp.iE_Extensions",
2064
15
        FT_UINT32, BASE_DEC, NULL, 0,
2065
15
        "ProtocolExtensionContainer", HFILL }},
2066
15
    { &hf_sabp_CriticalityDiagnostics_IE_List_item,
2067
15
      { "CriticalityDiagnostics-IE-List item", "sabp.CriticalityDiagnostics_IE_List_item_element",
2068
15
        FT_NONE, BASE_NONE, NULL, 0,
2069
15
        NULL, HFILL }},
2070
15
    { &hf_sabp_iECriticality,
2071
15
      { "iECriticality", "sabp.iECriticality",
2072
15
        FT_UINT32, BASE_DEC, VALS(sabp_Criticality_vals), 0,
2073
15
        "Criticality", HFILL }},
2074
15
    { &hf_sabp_iE_ID,
2075
15
      { "iE-ID", "sabp.iE_ID",
2076
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &sabp_ProtocolIE_ID_vals_ext, 0,
2077
15
        "ProtocolIE_ID", HFILL }},
2078
15
    { &hf_sabp_repetitionNumber,
2079
15
      { "repetitionNumber", "sabp.repetitionNumber",
2080
15
        FT_UINT32, BASE_DEC, NULL, 0,
2081
15
        "RepetitionNumber0", HFILL }},
2082
15
    { &hf_sabp_MessageStructure_item,
2083
15
      { "MessageStructure item", "sabp.MessageStructure_item_element",
2084
15
        FT_NONE, BASE_NONE, NULL, 0,
2085
15
        NULL, HFILL }},
2086
15
    { &hf_sabp_repetitionNumber1,
2087
15
      { "repetitionNumber", "sabp.repetitionNumber1",
2088
15
        FT_UINT32, BASE_DEC, NULL, 0,
2089
15
        "RepetitionNumber1", HFILL }},
2090
15
    { &hf_sabp_Failure_List_item,
2091
15
      { "Failure-List-Item", "sabp.Failure_List_Item_element",
2092
15
        FT_NONE, BASE_NONE, NULL, 0,
2093
15
        NULL, HFILL }},
2094
15
    { &hf_sabp_service_area_identifier,
2095
15
      { "service-area-identifier", "sabp.service_area_identifier_element",
2096
15
        FT_NONE, BASE_NONE, NULL, 0,
2097
15
        NULL, HFILL }},
2098
15
    { &hf_sabp_cause,
2099
15
      { "cause", "sabp.cause",
2100
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &sabp_Cause_vals_ext, 0,
2101
15
        NULL, HFILL }},
2102
15
    { &hf_sabp_Number_of_Broadcasts_Completed_List_item,
2103
15
      { "Number-of-Broadcasts-Completed-List-Item", "sabp.Number_of_Broadcasts_Completed_List_Item_element",
2104
15
        FT_NONE, BASE_NONE, NULL, 0,
2105
15
        NULL, HFILL }},
2106
15
    { &hf_sabp_number_of_broadcasts_completed,
2107
15
      { "number-of-broadcasts-completed", "sabp.number_of_broadcasts_completed",
2108
15
        FT_UINT32, BASE_DEC, NULL, 0,
2109
15
        "INTEGER_0_65535", HFILL }},
2110
15
    { &hf_sabp_number_of_broadcasts_completed_info,
2111
15
      { "number-of-broadcasts-completed-info", "sabp.number_of_broadcasts_completed_info",
2112
15
        FT_UINT32, BASE_DEC, VALS(sabp_Number_Of_Broadcasts_Completed_Info_vals), 0,
2113
15
        NULL, HFILL }},
2114
15
    { &hf_sabp_Radio_Resource_Loading_List_item,
2115
15
      { "Radio-Resource-Loading-List-Item", "sabp.Radio_Resource_Loading_List_Item_element",
2116
15
        FT_NONE, BASE_NONE, NULL, 0,
2117
15
        NULL, HFILL }},
2118
15
    { &hf_sabp_available_bandwidth,
2119
15
      { "available-bandwidth", "sabp.available_bandwidth",
2120
15
        FT_UINT32, BASE_DEC, NULL, 0,
2121
15
        NULL, HFILL }},
2122
15
    { &hf_sabp_pLMNidentity,
2123
15
      { "pLMNidentity", "sabp.pLMNidentity",
2124
15
        FT_BYTES, BASE_NONE, NULL, 0,
2125
15
        NULL, HFILL }},
2126
15
    { &hf_sabp_lac,
2127
15
      { "lac", "sabp.lac",
2128
15
        FT_BYTES, BASE_NONE, NULL, 0,
2129
15
        "OCTET_STRING_SIZE_2", HFILL }},
2130
15
    { &hf_sabp_sac,
2131
15
      { "sac", "sabp.sac",
2132
15
        FT_BYTES, BASE_NONE, NULL, 0,
2133
15
        "OCTET_STRING_SIZE_2", HFILL }},
2134
15
    { &hf_sabp_Service_Areas_List_item,
2135
15
      { "Service-Area-Identifier", "sabp.Service_Area_Identifier_element",
2136
15
        FT_NONE, BASE_NONE, NULL, 0,
2137
15
        NULL, HFILL }},
2138
15
    { &hf_sabp_protocolIEs,
2139
15
      { "protocolIEs", "sabp.protocolIEs",
2140
15
        FT_UINT32, BASE_DEC, NULL, 0,
2141
15
        "ProtocolIE_Container", HFILL }},
2142
15
    { &hf_sabp_protocolExtensions,
2143
15
      { "protocolExtensions", "sabp.protocolExtensions",
2144
15
        FT_UINT32, BASE_DEC, NULL, 0,
2145
15
        "ProtocolExtensionContainer", HFILL }},
2146
15
    { &hf_sabp_initiatingMessage,
2147
15
      { "initiatingMessage", "sabp.initiatingMessage_element",
2148
15
        FT_NONE, BASE_NONE, NULL, 0,
2149
15
        NULL, HFILL }},
2150
15
    { &hf_sabp_successfulOutcome,
2151
15
      { "successfulOutcome", "sabp.successfulOutcome_element",
2152
15
        FT_NONE, BASE_NONE, NULL, 0,
2153
15
        NULL, HFILL }},
2154
15
    { &hf_sabp_unsuccessfulOutcome,
2155
15
      { "unsuccessfulOutcome", "sabp.unsuccessfulOutcome_element",
2156
15
        FT_NONE, BASE_NONE, NULL, 0,
2157
15
        NULL, HFILL }},
2158
15
    { &hf_sabp_initiatingMessage_value,
2159
15
      { "value", "sabp.initiatingMessage_value_element",
2160
15
        FT_NONE, BASE_NONE, NULL, 0,
2161
15
        "InitiatingMessage_value", HFILL }},
2162
15
    { &hf_sabp_successfulOutcome_value,
2163
15
      { "value", "sabp.successfulOutcome_value_element",
2164
15
        FT_NONE, BASE_NONE, NULL, 0,
2165
15
        "SuccessfulOutcome_value", HFILL }},
2166
15
    { &hf_sabp_unsuccessfulOutcome_value,
2167
15
      { "value", "sabp.unsuccessfulOutcome_value_element",
2168
15
        FT_NONE, BASE_NONE, NULL, 0,
2169
15
        "UnsuccessfulOutcome_value", HFILL }},
2170
15
  };
2171
2172
  /* List of subtrees */
2173
15
  static int *ett[] = {
2174
15
    &ett_sabp,
2175
15
    &ett_sabp_e212,
2176
15
    &ett_sabp_cbs_data_coding,
2177
15
    &ett_sabp_bcast_msg,
2178
15
    &ett_sabp_cbs_serial_number,
2179
15
    &ett_sabp_cbs_page,
2180
15
    &ett_sabp_cbs_page_content,
2181
15
    &ett_sabp_ProtocolIE_Container,
2182
15
    &ett_sabp_ProtocolIE_Field,
2183
15
    &ett_sabp_ProtocolExtensionContainer,
2184
15
    &ett_sabp_ProtocolExtensionField,
2185
15
    &ett_sabp_Criticality_Diagnostics,
2186
15
    &ett_sabp_CriticalityDiagnostics_IE_List,
2187
15
    &ett_sabp_CriticalityDiagnostics_IE_List_item,
2188
15
    &ett_sabp_MessageStructure,
2189
15
    &ett_sabp_MessageStructure_item,
2190
15
    &ett_sabp_Failure_List,
2191
15
    &ett_sabp_Failure_List_Item,
2192
15
    &ett_sabp_Number_of_Broadcasts_Completed_List,
2193
15
    &ett_sabp_Number_of_Broadcasts_Completed_List_Item,
2194
15
    &ett_sabp_Radio_Resource_Loading_List,
2195
15
    &ett_sabp_Radio_Resource_Loading_List_Item,
2196
15
    &ett_sabp_Service_Area_Identifier,
2197
15
    &ett_sabp_Service_Areas_List,
2198
15
    &ett_sabp_Write_Replace,
2199
15
    &ett_sabp_Write_Replace_Complete,
2200
15
    &ett_sabp_Write_Replace_Failure,
2201
15
    &ett_sabp_Kill,
2202
15
    &ett_sabp_Kill_Complete,
2203
15
    &ett_sabp_Kill_Failure,
2204
15
    &ett_sabp_Load_Query,
2205
15
    &ett_sabp_Load_Query_Complete,
2206
15
    &ett_sabp_Load_Query_Failure,
2207
15
    &ett_sabp_Message_Status_Query,
2208
15
    &ett_sabp_Message_Status_Query_Complete,
2209
15
    &ett_sabp_Message_Status_Query_Failure,
2210
15
    &ett_sabp_Reset,
2211
15
    &ett_sabp_Reset_Complete,
2212
15
    &ett_sabp_Reset_Failure,
2213
15
    &ett_sabp_Restart,
2214
15
    &ett_sabp_Failure,
2215
15
    &ett_sabp_Error_Indication,
2216
15
    &ett_sabp_SABP_PDU,
2217
15
    &ett_sabp_InitiatingMessage,
2218
15
    &ett_sabp_SuccessfulOutcome,
2219
15
    &ett_sabp_UnsuccessfulOutcome,
2220
15
  };
2221
2222
2223
  /* Register protocol */
2224
15
  proto_sabp = proto_register_protocol("UTRAN IuBC interface SABP signaling", "SABP", "sabp");
2225
  /* Register fields and subtrees */
2226
15
  proto_register_field_array(proto_sabp, hf, array_length(hf));
2227
15
  proto_register_subtree_array(ett, array_length(ett));
2228
2229
  /* Register dissector */
2230
15
  sabp_handle = register_dissector("sabp", dissect_sabp, proto_sabp);
2231
15
  sabp_tcp_handle = register_dissector("sabp.tcp", dissect_sabp_tcp, proto_sabp);
2232
2233
  /* Register dissector tables */
2234
15
  sabp_ies_dissector_table = register_dissector_table("sabp.ies", "SABP-PROTOCOL-IES", proto_sabp, FT_UINT32, BASE_DEC);
2235
15
  sabp_extension_dissector_table = register_dissector_table("sabp.extension", "SABP-PROTOCOL-EXTENSION", proto_sabp, FT_UINT32, BASE_DEC);
2236
15
  sabp_proc_imsg_dissector_table = register_dissector_table("sabp.proc.imsg", "SABP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_sabp, FT_UINT32, BASE_DEC);
2237
15
  sabp_proc_sout_dissector_table = register_dissector_table("sabp.proc.sout", "SABP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_sabp, FT_UINT32, BASE_DEC);
2238
15
  sabp_proc_uout_dissector_table = register_dissector_table("sabp.proc.uout", "SABP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_sabp, FT_UINT32, BASE_DEC);
2239
15
}
2240
2241
2242
/*--- proto_reg_handoff_sabp ---------------------------------------*/
2243
void
2244
proto_reg_handoff_sabp(void)
2245
15
{
2246
15
  dissector_add_uint_with_preference("udp.port", SABP_PORT, sabp_handle);
2247
15
  dissector_add_uint_with_preference("tcp.port", SABP_PORT, sabp_tcp_handle);
2248
15
  dissector_add_uint("sctp.ppi", SABP_PAYLOAD_PROTOCOL_ID, sabp_handle);
2249
2250
15
  dissector_add_uint("sabp.ies", id_Message_Identifier, create_dissector_handle(dissect_Message_Identifier_PDU, proto_sabp));
2251
15
  dissector_add_uint("sabp.ies", id_New_Serial_Number, create_dissector_handle(dissect_New_Serial_Number_PDU, proto_sabp));
2252
15
  dissector_add_uint("sabp.ies", id_Old_Serial_Number, create_dissector_handle(dissect_Old_Serial_Number_PDU, proto_sabp));
2253
15
  dissector_add_uint("sabp.ies", id_Service_Areas_List, create_dissector_handle(dissect_Service_Areas_List_PDU, proto_sabp));
2254
15
  dissector_add_uint("sabp.ies", id_Category, create_dissector_handle(dissect_Category_PDU, proto_sabp));
2255
15
  dissector_add_uint("sabp.ies", id_Repetition_Period, create_dissector_handle(dissect_Repetition_Period_PDU, proto_sabp));
2256
15
  dissector_add_uint("sabp.ies", id_Number_of_Broadcasts_Requested, create_dissector_handle(dissect_Number_of_Broadcasts_Requested_PDU, proto_sabp));
2257
15
  dissector_add_uint("sabp.ies", id_Data_Coding_Scheme, create_dissector_handle(dissect_Data_Coding_Scheme_PDU, proto_sabp));
2258
15
  dissector_add_uint("sabp.ies", id_Broadcast_Message_Content, create_dissector_handle(dissect_Broadcast_Message_Content_PDU, proto_sabp));
2259
15
  dissector_add_uint("sabp.ies", id_Number_of_Broadcasts_Completed_List, create_dissector_handle(dissect_Number_of_Broadcasts_Completed_List_PDU, proto_sabp));
2260
15
  dissector_add_uint("sabp.ies", id_Criticality_Diagnostics, create_dissector_handle(dissect_Criticality_Diagnostics_PDU, proto_sabp));
2261
15
  dissector_add_uint("sabp.ies", id_Failure_List, create_dissector_handle(dissect_Failure_List_PDU, proto_sabp));
2262
15
  dissector_add_uint("sabp.ies", id_Radio_Resource_Loading_List, create_dissector_handle(dissect_Radio_Resource_Loading_List_PDU, proto_sabp));
2263
15
  dissector_add_uint("sabp.ies", id_Recovery_Indication, create_dissector_handle(dissect_Recovery_Indication_PDU, proto_sabp));
2264
15
  dissector_add_uint("sabp.ies", id_Serial_Number, create_dissector_handle(dissect_Serial_Number_PDU, proto_sabp));
2265
15
  dissector_add_uint("sabp.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_sabp));
2266
15
  dissector_add_uint("sabp.extension", id_MessageStructure, create_dissector_handle(dissect_MessageStructure_PDU, proto_sabp));
2267
15
  dissector_add_uint("sabp.extension", id_TypeOfError, create_dissector_handle(dissect_TypeOfError_PDU, proto_sabp));
2268
15
  dissector_add_uint("sabp.extension", id_Paging_ETWS_Indicator, create_dissector_handle(dissect_Paging_ETWS_Indicator_PDU, proto_sabp));
2269
15
  dissector_add_uint("sabp.extension", id_Warning_Type, create_dissector_handle(dissect_Warning_Type_PDU, proto_sabp));
2270
15
  dissector_add_uint("sabp.extension", id_WarningSecurityInfo, create_dissector_handle(dissect_WarningSecurityInfo_PDU, proto_sabp));
2271
15
  dissector_add_uint("sabp.extension", id_Broadcast_Message_Content_Validity_Indicator, create_dissector_handle(dissect_Broadcast_Message_Content_Validity_Indicator_PDU, proto_sabp));
2272
15
  dissector_add_uint("sabp.proc.imsg", id_Write_Replace, create_dissector_handle(dissect_Write_Replace_PDU, proto_sabp));
2273
15
  dissector_add_uint("sabp.proc.sout", id_Write_Replace, create_dissector_handle(dissect_Write_Replace_Complete_PDU, proto_sabp));
2274
15
  dissector_add_uint("sabp.proc.uout", id_Write_Replace, create_dissector_handle(dissect_Write_Replace_Failure_PDU, proto_sabp));
2275
15
  dissector_add_uint("sabp.proc.imsg", id_Kill, create_dissector_handle(dissect_Kill_PDU, proto_sabp));
2276
15
  dissector_add_uint("sabp.proc.sout", id_Kill, create_dissector_handle(dissect_Kill_Complete_PDU, proto_sabp));
2277
15
  dissector_add_uint("sabp.proc.uout", id_Kill, create_dissector_handle(dissect_Kill_Failure_PDU, proto_sabp));
2278
15
  dissector_add_uint("sabp.proc.imsg", id_Load_Status_Enquiry, create_dissector_handle(dissect_Load_Query_PDU, proto_sabp));
2279
15
  dissector_add_uint("sabp.proc.sout", id_Load_Status_Enquiry, create_dissector_handle(dissect_Load_Query_Complete_PDU, proto_sabp));
2280
15
  dissector_add_uint("sabp.proc.uout", id_Load_Status_Enquiry, create_dissector_handle(dissect_Load_Query_Failure_PDU, proto_sabp));
2281
15
  dissector_add_uint("sabp.proc.imsg", id_Message_Status_Query, create_dissector_handle(dissect_Message_Status_Query_PDU, proto_sabp));
2282
15
  dissector_add_uint("sabp.proc.sout", id_Message_Status_Query, create_dissector_handle(dissect_Message_Status_Query_Complete_PDU, proto_sabp));
2283
15
  dissector_add_uint("sabp.proc.uout", id_Message_Status_Query, create_dissector_handle(dissect_Message_Status_Query_Failure_PDU, proto_sabp));
2284
15
  dissector_add_uint("sabp.proc.imsg", id_Reset, create_dissector_handle(dissect_Reset_PDU, proto_sabp));
2285
15
  dissector_add_uint("sabp.proc.sout", id_Reset, create_dissector_handle(dissect_Reset_Complete_PDU, proto_sabp));
2286
15
  dissector_add_uint("sabp.proc.uout", id_Reset, create_dissector_handle(dissect_Reset_Failure_PDU, proto_sabp));
2287
15
  dissector_add_uint("sabp.proc.imsg", id_Restart_Indication, create_dissector_handle(dissect_Restart_PDU, proto_sabp));
2288
15
  dissector_add_uint("sabp.proc.imsg", id_Failure_Indication, create_dissector_handle(dissect_Failure_PDU, proto_sabp));
2289
15
  dissector_add_uint("sabp.proc.imsg", id_Error_Indication, create_dissector_handle(dissect_Error_Indication_PDU, proto_sabp));
2290
2291
15
}
2292
2293