1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -q -L -p 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 */
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>
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
16 * Ref: 3GPP TS 25.419 version V9.0.0 (2009-12)
21 #include <epan/packet.h>
23 #include <epan/asn1.h>
24 #include <wsutil/array.h>
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 <epan/sctpppids.h>
32 #include "packet-cell_broadcast.h"
34 #define PNAME "UTRAN IuBC interface SABP signaling"
38 #define maxNrOfErrors 256
39 #define maxnoofSAI 65535
40 #define maxProtocolExtensions 65535
41 #define maxProtocolIEs 65535
42 #define maxNrOfLevels 256
44 typedef enum _ProcedureCode_enum
{
47 id_Load_Status_Enquiry
= 2,
48 id_Message_Status_Query
= 3,
49 id_Restart_Indication
= 4,
51 id_Failure_Indication
= 6,
52 id_Error_Indication
= 7
55 typedef enum _ProtocolIE_ID_enum
{
56 id_Broadcast_Message_Content
= 0,
59 id_Criticality_Diagnostics
= 3,
60 id_Data_Coding_Scheme
= 4,
62 id_Message_Identifier
= 6,
63 id_New_Serial_Number
= 7,
64 id_Number_of_Broadcasts_Completed_List
= 8,
65 id_Number_of_Broadcasts_Requested
= 9,
66 id_Old_Serial_Number
= 10,
67 id_Radio_Resource_Loading_List
= 11,
68 id_Recovery_Indication
= 12,
69 id_Repetition_Period
= 13,
70 id_Serial_Number
= 14,
71 id_Service_Areas_List
= 15,
72 id_MessageStructure
= 16,
74 id_Paging_ETWS_Indicator
= 18,
76 id_WarningSecurityInfo
= 20,
77 id_Broadcast_Message_Content_Validity_Indicator
= 21
80 void proto_register_sabp(void);
81 void proto_reg_handoff_sabp(void);
83 /* Initialize the protocol and registered fields */
84 static int proto_sabp
;
86 static int hf_sabp_no_of_pages
;
87 static int hf_sabp_cb_inf_len
;
88 static int hf_sabp_cb_msg_inf_page
;
89 static int hf_sabp_cbs_page_content
;
90 static int hf_sabp_Broadcast_Message_Content_PDU
; /* Broadcast_Message_Content */
91 static int hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU
; /* Broadcast_Message_Content_Validity_Indicator */
92 static int hf_sabp_Category_PDU
; /* Category */
93 static int hf_sabp_Cause_PDU
; /* Cause */
94 static int hf_sabp_Criticality_Diagnostics_PDU
; /* Criticality_Diagnostics */
95 static int hf_sabp_MessageStructure_PDU
; /* MessageStructure */
96 static int hf_sabp_Data_Coding_Scheme_PDU
; /* Data_Coding_Scheme */
97 static int hf_sabp_Failure_List_PDU
; /* Failure_List */
98 static int hf_sabp_Message_Identifier_PDU
; /* Message_Identifier */
99 static int hf_sabp_New_Serial_Number_PDU
; /* New_Serial_Number */
100 static int hf_sabp_Number_of_Broadcasts_Completed_List_PDU
; /* Number_of_Broadcasts_Completed_List */
101 static int hf_sabp_Number_of_Broadcasts_Requested_PDU
; /* Number_of_Broadcasts_Requested */
102 static int hf_sabp_Old_Serial_Number_PDU
; /* Old_Serial_Number */
103 static int hf_sabp_Paging_ETWS_Indicator_PDU
; /* Paging_ETWS_Indicator */
104 static int hf_sabp_Radio_Resource_Loading_List_PDU
; /* Radio_Resource_Loading_List */
105 static int hf_sabp_Recovery_Indication_PDU
; /* Recovery_Indication */
106 static int hf_sabp_Repetition_Period_PDU
; /* Repetition_Period */
107 static int hf_sabp_Serial_Number_PDU
; /* Serial_Number */
108 static int hf_sabp_Service_Areas_List_PDU
; /* Service_Areas_List */
109 static int hf_sabp_TypeOfError_PDU
; /* TypeOfError */
110 static int hf_sabp_WarningSecurityInfo_PDU
; /* WarningSecurityInfo */
111 static int hf_sabp_Warning_Type_PDU
; /* Warning_Type */
112 static int hf_sabp_Write_Replace_PDU
; /* Write_Replace */
113 static int hf_sabp_Write_Replace_Complete_PDU
; /* Write_Replace_Complete */
114 static int hf_sabp_Write_Replace_Failure_PDU
; /* Write_Replace_Failure */
115 static int hf_sabp_Kill_PDU
; /* Kill */
116 static int hf_sabp_Kill_Complete_PDU
; /* Kill_Complete */
117 static int hf_sabp_Kill_Failure_PDU
; /* Kill_Failure */
118 static int hf_sabp_Load_Query_PDU
; /* Load_Query */
119 static int hf_sabp_Load_Query_Complete_PDU
; /* Load_Query_Complete */
120 static int hf_sabp_Load_Query_Failure_PDU
; /* Load_Query_Failure */
121 static int hf_sabp_Message_Status_Query_PDU
; /* Message_Status_Query */
122 static int hf_sabp_Message_Status_Query_Complete_PDU
; /* Message_Status_Query_Complete */
123 static int hf_sabp_Message_Status_Query_Failure_PDU
; /* Message_Status_Query_Failure */
124 static int hf_sabp_Reset_PDU
; /* Reset */
125 static int hf_sabp_Reset_Complete_PDU
; /* Reset_Complete */
126 static int hf_sabp_Reset_Failure_PDU
; /* Reset_Failure */
127 static int hf_sabp_Restart_PDU
; /* Restart */
128 static int hf_sabp_Failure_PDU
; /* Failure */
129 static int hf_sabp_Error_Indication_PDU
; /* Error_Indication */
130 static int hf_sabp_SABP_PDU_PDU
; /* SABP_PDU */
131 static int hf_sabp_ProtocolIE_Container_item
; /* ProtocolIE_Field */
132 static int hf_sabp_id
; /* ProtocolIE_ID */
133 static int hf_sabp_criticality
; /* Criticality */
134 static int hf_sabp_protocolIE_Field_value
; /* ProtocolIE_Field_value */
135 static int hf_sabp_ProtocolExtensionContainer_item
; /* ProtocolExtensionField */
136 static int hf_sabp_ext_id
; /* ProtocolExtensionID */
137 static int hf_sabp_extensionValue
; /* T_extensionValue */
138 static int hf_sabp_procedureCode
; /* ProcedureCode */
139 static int hf_sabp_triggeringMessage
; /* TriggeringMessage */
140 static int hf_sabp_procedureCriticality
; /* Criticality */
141 static int hf_sabp_iEsCriticalityDiagnostics
; /* CriticalityDiagnostics_IE_List */
142 static int hf_sabp_iE_Extensions
; /* ProtocolExtensionContainer */
143 static int hf_sabp_CriticalityDiagnostics_IE_List_item
; /* CriticalityDiagnostics_IE_List_item */
144 static int hf_sabp_iECriticality
; /* Criticality */
145 static int hf_sabp_iE_ID
; /* ProtocolIE_ID */
146 static int hf_sabp_repetitionNumber
; /* RepetitionNumber0 */
147 static int hf_sabp_MessageStructure_item
; /* MessageStructure_item */
148 static int hf_sabp_repetitionNumber1
; /* RepetitionNumber1 */
149 static int hf_sabp_Failure_List_item
; /* Failure_List_Item */
150 static int hf_sabp_service_area_identifier
; /* Service_Area_Identifier */
151 static int hf_sabp_cause
; /* Cause */
152 static int hf_sabp_Number_of_Broadcasts_Completed_List_item
; /* Number_of_Broadcasts_Completed_List_Item */
153 static int hf_sabp_number_of_broadcasts_completed
; /* INTEGER_0_65535 */
154 static int hf_sabp_number_of_broadcasts_completed_info
; /* Number_Of_Broadcasts_Completed_Info */
155 static int hf_sabp_Radio_Resource_Loading_List_item
; /* Radio_Resource_Loading_List_Item */
156 static int hf_sabp_available_bandwidth
; /* Available_Bandwidth */
157 static int hf_sabp_pLMNidentity
; /* T_pLMNidentity */
158 static int hf_sabp_lac
; /* OCTET_STRING_SIZE_2 */
159 static int hf_sabp_sac
; /* OCTET_STRING_SIZE_2 */
160 static int hf_sabp_Service_Areas_List_item
; /* Service_Area_Identifier */
161 static int hf_sabp_protocolIEs
; /* ProtocolIE_Container */
162 static int hf_sabp_protocolExtensions
; /* ProtocolExtensionContainer */
163 static int hf_sabp_initiatingMessage
; /* InitiatingMessage */
164 static int hf_sabp_successfulOutcome
; /* SuccessfulOutcome */
165 static int hf_sabp_unsuccessfulOutcome
; /* UnsuccessfulOutcome */
166 static int hf_sabp_initiatingMessage_value
; /* InitiatingMessage_value */
167 static int hf_sabp_successfulOutcome_value
; /* SuccessfulOutcome_value */
168 static int hf_sabp_unsuccessfulOutcome_value
; /* UnsuccessfulOutcome_value */
170 /* Initialize the subtree pointers */
172 static int ett_sabp_e212
;
173 static int ett_sabp_cbs_data_coding
;
174 static int ett_sabp_bcast_msg
;
175 static int ett_sabp_cbs_serial_number
;
176 static int ett_sabp_cbs_new_serial_number
;
177 static int ett_sabp_cbs_page
;
178 static int ett_sabp_cbs_page_content
;
180 static int ett_sabp_ProtocolIE_Container
;
181 static int ett_sabp_ProtocolIE_Field
;
182 static int ett_sabp_ProtocolExtensionContainer
;
183 static int ett_sabp_ProtocolExtensionField
;
184 static int ett_sabp_Criticality_Diagnostics
;
185 static int ett_sabp_CriticalityDiagnostics_IE_List
;
186 static int ett_sabp_CriticalityDiagnostics_IE_List_item
;
187 static int ett_sabp_MessageStructure
;
188 static int ett_sabp_MessageStructure_item
;
189 static int ett_sabp_Failure_List
;
190 static int ett_sabp_Failure_List_Item
;
191 static int ett_sabp_Number_of_Broadcasts_Completed_List
;
192 static int ett_sabp_Number_of_Broadcasts_Completed_List_Item
;
193 static int ett_sabp_Radio_Resource_Loading_List
;
194 static int ett_sabp_Radio_Resource_Loading_List_Item
;
195 static int ett_sabp_Service_Area_Identifier
;
196 static int ett_sabp_Service_Areas_List
;
197 static int ett_sabp_Write_Replace
;
198 static int ett_sabp_Write_Replace_Complete
;
199 static int ett_sabp_Write_Replace_Failure
;
200 static int ett_sabp_Kill
;
201 static int ett_sabp_Kill_Complete
;
202 static int ett_sabp_Kill_Failure
;
203 static int ett_sabp_Load_Query
;
204 static int ett_sabp_Load_Query_Complete
;
205 static int ett_sabp_Load_Query_Failure
;
206 static int ett_sabp_Message_Status_Query
;
207 static int ett_sabp_Message_Status_Query_Complete
;
208 static int ett_sabp_Message_Status_Query_Failure
;
209 static int ett_sabp_Reset
;
210 static int ett_sabp_Reset_Complete
;
211 static int ett_sabp_Reset_Failure
;
212 static int ett_sabp_Restart
;
213 static int ett_sabp_Failure
;
214 static int ett_sabp_Error_Indication
;
215 static int ett_sabp_SABP_PDU
;
216 static int ett_sabp_InitiatingMessage
;
217 static int ett_sabp_SuccessfulOutcome
;
218 static int ett_sabp_UnsuccessfulOutcome
;
220 /* Global variables */
221 static uint32_t ProcedureCode
;
222 static uint32_t ProtocolIE_ID
;
223 static uint32_t ProtocolExtensionID
;
224 static uint8_t sms_encoding
;
226 #define SABP_PORT 3452
228 /* Dissector tables */
229 static dissector_table_t sabp_ies_dissector_table
;
230 static dissector_table_t sabp_extension_dissector_table
;
231 static dissector_table_t sabp_proc_imsg_dissector_table
;
232 static dissector_table_t sabp_proc_sout_dissector_table
;
233 static dissector_table_t sabp_proc_uout_dissector_table
;
235 static dissector_handle_t sabp_handle
;
236 static dissector_handle_t sabp_tcp_handle
;
238 static int dissect_ProtocolIEFieldValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
239 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
240 static int dissect_InitiatingMessageValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
241 static int dissect_SuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
242 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *);
243 static void dissect_sabp_cb_data(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
);
246 static const value_string sabp_Criticality_vals
[] = {
255 dissect_sabp_Criticality(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
256 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
257 3, NULL
, false, 0, NULL
);
263 static const value_string sabp_ProcedureCode_vals
[] = {
264 { id_Write_Replace
, "id-Write-Replace" },
265 { id_Kill
, "id-Kill" },
266 { id_Load_Status_Enquiry
, "id-Load-Status-Enquiry" },
267 { id_Message_Status_Query
, "id-Message-Status-Query" },
268 { id_Restart_Indication
, "id-Restart-Indication" },
269 { id_Reset
, "id-Reset" },
270 { id_Failure_Indication
, "id-Failure-Indication" },
271 { id_Error_Indication
, "id-Error-Indication" },
275 static value_string_ext sabp_ProcedureCode_vals_ext
= VALUE_STRING_EXT_INIT(sabp_ProcedureCode_vals
);
279 dissect_sabp_ProcedureCode(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
280 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
281 0U, 255U, &ProcedureCode
, false);
283 col_add_fstr(actx
->pinfo
->cinfo
, COL_INFO
, "%s ",
284 val_to_str_ext_const(ProcedureCode
, &sabp_ProcedureCode_vals_ext
,
292 dissect_sabp_ProtocolExtensionID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
293 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
294 0U, 65535U, &ProtocolExtensionID
, false);
300 static const value_string sabp_ProtocolIE_ID_vals
[] = {
301 { id_Broadcast_Message_Content
, "id-Broadcast-Message-Content" },
302 { id_Category
, "id-Category" },
303 { id_Cause
, "id-Cause" },
304 { id_Criticality_Diagnostics
, "id-Criticality-Diagnostics" },
305 { id_Data_Coding_Scheme
, "id-Data-Coding-Scheme" },
306 { id_Failure_List
, "id-Failure-List" },
307 { id_Message_Identifier
, "id-Message-Identifier" },
308 { id_New_Serial_Number
, "id-New-Serial-Number" },
309 { id_Number_of_Broadcasts_Completed_List
, "id-Number-of-Broadcasts-Completed-List" },
310 { id_Number_of_Broadcasts_Requested
, "id-Number-of-Broadcasts-Requested" },
311 { id_Old_Serial_Number
, "id-Old-Serial-Number" },
312 { id_Radio_Resource_Loading_List
, "id-Radio-Resource-Loading-List" },
313 { id_Recovery_Indication
, "id-Recovery-Indication" },
314 { id_Repetition_Period
, "id-Repetition-Period" },
315 { id_Serial_Number
, "id-Serial-Number" },
316 { id_Service_Areas_List
, "id-Service-Areas-List" },
317 { id_MessageStructure
, "id-MessageStructure" },
318 { id_TypeOfError
, "id-TypeOfError" },
319 { id_Paging_ETWS_Indicator
, "id-Paging-ETWS-Indicator" },
320 { id_Warning_Type
, "id-Warning-Type" },
321 { id_WarningSecurityInfo
, "id-WarningSecurityInfo" },
322 { id_Broadcast_Message_Content_Validity_Indicator
, "id-Broadcast-Message-Content-Validity-Indicator" },
326 static value_string_ext sabp_ProtocolIE_ID_vals_ext
= VALUE_STRING_EXT_INIT(sabp_ProtocolIE_ID_vals
);
330 dissect_sabp_ProtocolIE_ID(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
331 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
332 0U, 65535U, &ProtocolIE_ID
, false);
335 proto_item_append_text(proto_item_get_parent_nth(actx
->created_item
, 2), ": %s",
336 val_to_str_ext(ProtocolIE_ID
, &sabp_ProtocolIE_ID_vals_ext
, "unknown (%d)"));
342 static const value_string sabp_TriggeringMessage_vals
[] = {
343 { 0, "initiating-message" },
344 { 1, "successful-outcome" },
345 { 2, "unsuccessful-outcome" },
352 dissect_sabp_TriggeringMessage(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
353 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
354 4, NULL
, false, 0, NULL
);
362 dissect_sabp_ProtocolIE_Field_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
363 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_ProtocolIEFieldValue
);
369 static const per_sequence_t ProtocolIE_Field_sequence
[] = {
370 { &hf_sabp_id
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_ID
},
371 { &hf_sabp_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
372 { &hf_sabp_protocolIE_Field_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Field_value
},
377 dissect_sabp_ProtocolIE_Field(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
378 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
379 ett_sabp_ProtocolIE_Field
, ProtocolIE_Field_sequence
);
385 static const per_sequence_t ProtocolIE_Container_sequence_of
[1] = {
386 { &hf_sabp_ProtocolIE_Container_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Field
},
390 dissect_sabp_ProtocolIE_Container(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
391 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
392 ett_sabp_ProtocolIE_Container
, ProtocolIE_Container_sequence_of
,
393 0, maxProtocolIEs
, false);
401 dissect_sabp_T_extensionValue(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
402 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_ProtocolExtensionFieldExtensionValue
);
408 static const per_sequence_t ProtocolExtensionField_sequence
[] = {
409 { &hf_sabp_ext_id
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolExtensionID
},
410 { &hf_sabp_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
411 { &hf_sabp_extensionValue
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_T_extensionValue
},
416 dissect_sabp_ProtocolExtensionField(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
417 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
418 ett_sabp_ProtocolExtensionField
, ProtocolExtensionField_sequence
);
424 static const per_sequence_t ProtocolExtensionContainer_sequence_of
[1] = {
425 { &hf_sabp_ProtocolExtensionContainer_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolExtensionField
},
429 dissect_sabp_ProtocolExtensionContainer(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
430 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
431 ett_sabp_ProtocolExtensionContainer
, ProtocolExtensionContainer_sequence_of
,
432 1, maxProtocolExtensions
, false);
440 dissect_sabp_Available_Bandwidth(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
441 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
442 0U, 20480U, NULL
, false);
450 dissect_sabp_Broadcast_Message_Content(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
451 tvbuff_t
*parameter_tvb
=NULL
;
453 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
454 1, 9968, false, NULL
, 0, ¶meter_tvb
, NULL
);
458 dissect_sabp_cb_data(parameter_tvb
, actx
->pinfo
, tree
);
464 static const value_string sabp_Broadcast_Message_Content_Validity_Indicator_vals
[] = {
465 { 0, "broadcast-Message-Content-not-valid" },
471 dissect_sabp_Broadcast_Message_Content_Validity_Indicator(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
472 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
473 1, NULL
, true, 0, NULL
);
479 static const value_string sabp_Category_vals
[] = {
480 { 0, "high-priority" },
481 { 1, "background-priority" },
482 { 2, "normal-priority" },
483 { 3, "default-priority" },
489 dissect_sabp_Category(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
490 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
491 4, NULL
, true, 0, NULL
);
497 static const value_string sabp_Cause_vals
[] = {
498 { 0, "parameter-not-recognised" },
499 { 1, "parameter-value-invalid" },
500 { 2, "valid-CN-message-not-identified" },
501 { 3, "service-area-identity-not-valid" },
502 { 4, "unrecognised-message" },
503 { 5, "missing-mandatory-element" },
504 { 6, "rNC-capacity-exceeded" },
505 { 7, "rNC-memory-exceeded" },
506 { 8, "service-area-broadcast-not-supported" },
507 { 9, "service-area-broadcast-not-operational" },
508 { 10, "message-reference-already-used" },
509 { 11, "unspecifed-error" },
510 { 12, "transfer-syntax-error" },
511 { 13, "semantic-error" },
512 { 14, "message-not-compatible-with-receiver-state" },
513 { 15, "abstract-syntax-error-reject" },
514 { 16, "abstract-syntax-error-ignore-and-notify" },
515 { 17, "abstract-syntax-error-falsely-constructed-message" },
519 static value_string_ext sabp_Cause_vals_ext
= VALUE_STRING_EXT_INIT(sabp_Cause_vals
);
523 dissect_sabp_Cause(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
524 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
525 0U, 255U, NULL
, false);
533 dissect_sabp_RepetitionNumber0(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
534 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
535 0U, 255U, NULL
, false);
541 static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence
[] = {
542 { &hf_sabp_iECriticality
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
543 { &hf_sabp_iE_ID
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_ID
},
544 { &hf_sabp_repetitionNumber
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_RepetitionNumber0
},
545 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
550 dissect_sabp_CriticalityDiagnostics_IE_List_item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
551 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
552 ett_sabp_CriticalityDiagnostics_IE_List_item
, CriticalityDiagnostics_IE_List_item_sequence
);
558 static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of
[1] = {
559 { &hf_sabp_CriticalityDiagnostics_IE_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_CriticalityDiagnostics_IE_List_item
},
563 dissect_sabp_CriticalityDiagnostics_IE_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
564 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
565 ett_sabp_CriticalityDiagnostics_IE_List
, CriticalityDiagnostics_IE_List_sequence_of
,
566 1, maxNrOfErrors
, false);
572 static const per_sequence_t Criticality_Diagnostics_sequence
[] = {
573 { &hf_sabp_procedureCode
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProcedureCode
},
574 { &hf_sabp_triggeringMessage
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_TriggeringMessage
},
575 { &hf_sabp_procedureCriticality
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_Criticality
},
576 { &hf_sabp_iEsCriticalityDiagnostics
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_CriticalityDiagnostics_IE_List
},
577 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
582 dissect_sabp_Criticality_Diagnostics(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
583 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
584 ett_sabp_Criticality_Diagnostics
, Criticality_Diagnostics_sequence
);
592 dissect_sabp_RepetitionNumber1(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
593 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
594 1U, 256U, NULL
, false);
600 static const per_sequence_t MessageStructure_item_sequence
[] = {
601 { &hf_sabp_iE_ID
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_ID
},
602 { &hf_sabp_repetitionNumber1
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_RepetitionNumber1
},
603 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
608 dissect_sabp_MessageStructure_item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
609 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
610 ett_sabp_MessageStructure_item
, MessageStructure_item_sequence
);
616 static const per_sequence_t MessageStructure_sequence_of
[1] = {
617 { &hf_sabp_MessageStructure_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_MessageStructure_item
},
621 dissect_sabp_MessageStructure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
622 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
623 ett_sabp_MessageStructure
, MessageStructure_sequence_of
,
624 1, maxNrOfLevels
, false);
632 dissect_sabp_Data_Coding_Scheme(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
633 tvbuff_t
*parameter_tvb
=NULL
;
636 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
637 8, 8, false, NULL
, 0, ¶meter_tvb
, NULL
);
642 subtree
= proto_item_add_subtree(actx
->created_item
, ett_sabp_cbs_data_coding
);
643 sms_encoding
= dissect_cbs_data_coding_scheme(parameter_tvb
, actx
->pinfo
, subtree
, 0);
652 dissect_sabp_T_pLMNidentity(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
653 tvbuff_t
*parameter_tvb
=NULL
;
656 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
657 3, 3, false, ¶meter_tvb
);
661 subtree
= proto_item_add_subtree(actx
->created_item
, ett_sabp_e212
);
662 dissect_e212_mcc_mnc(parameter_tvb
, actx
->pinfo
, subtree
, 0, E212_SAI
, false);
671 dissect_sabp_OCTET_STRING_SIZE_2(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
672 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
679 static const per_sequence_t Service_Area_Identifier_sequence
[] = {
680 { &hf_sabp_pLMNidentity
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_T_pLMNidentity
},
681 { &hf_sabp_lac
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_OCTET_STRING_SIZE_2
},
682 { &hf_sabp_sac
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_OCTET_STRING_SIZE_2
},
687 dissect_sabp_Service_Area_Identifier(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
688 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
689 ett_sabp_Service_Area_Identifier
, Service_Area_Identifier_sequence
);
695 static const per_sequence_t Failure_List_Item_sequence
[] = {
696 { &hf_sabp_service_area_identifier
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Service_Area_Identifier
},
697 { &hf_sabp_cause
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Cause
},
698 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
703 dissect_sabp_Failure_List_Item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
704 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
705 ett_sabp_Failure_List_Item
, Failure_List_Item_sequence
);
711 static const per_sequence_t Failure_List_sequence_of
[1] = {
712 { &hf_sabp_Failure_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Failure_List_Item
},
716 dissect_sabp_Failure_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
717 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
718 ett_sabp_Failure_List
, Failure_List_sequence_of
,
719 1, maxnoofSAI
, false);
727 dissect_sabp_Message_Identifier(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
728 tvbuff_t
*parameter_tvb
=NULL
;
730 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
731 16, 16, false, NULL
, 0, ¶meter_tvb
, NULL
);
735 dissect_cbs_message_identifier(parameter_tvb
, tree
, 0);
744 dissect_sabp_Serial_Number(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
745 tvbuff_t
*parameter_tvb
=NULL
;
748 offset
= dissect_per_bit_string(tvb
, offset
, actx
, tree
, hf_index
,
749 16, 16, false, NULL
, 0, ¶meter_tvb
, NULL
);
753 subtree
= proto_item_add_subtree(actx
->created_item
, ett_sabp_cbs_serial_number
);
754 dissect_cbs_serial_number(parameter_tvb
, subtree
, 0);
763 dissect_sabp_New_Serial_Number(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
764 tvbuff_t
*parameter_tvb
=NULL
;
767 offset
= dissect_sabp_Serial_Number(tvb
, offset
, actx
, tree
, hf_index
);
771 subtree
= proto_item_add_subtree(actx
->created_item
, ett_sabp_cbs_new_serial_number
);
772 dissect_cbs_serial_number(parameter_tvb
, subtree
, 0);
781 dissect_sabp_INTEGER_0_65535(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
782 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
783 0U, 65535U, NULL
, false);
789 static const value_string sabp_Number_Of_Broadcasts_Completed_Info_vals
[] = {
797 dissect_sabp_Number_Of_Broadcasts_Completed_Info(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
798 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
799 2, NULL
, true, 0, NULL
);
805 static const per_sequence_t Number_of_Broadcasts_Completed_List_Item_sequence
[] = {
806 { &hf_sabp_service_area_identifier
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Service_Area_Identifier
},
807 { &hf_sabp_number_of_broadcasts_completed
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_INTEGER_0_65535
},
808 { &hf_sabp_number_of_broadcasts_completed_info
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_Number_Of_Broadcasts_Completed_Info
},
809 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
814 dissect_sabp_Number_of_Broadcasts_Completed_List_Item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
815 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
816 ett_sabp_Number_of_Broadcasts_Completed_List_Item
, Number_of_Broadcasts_Completed_List_Item_sequence
);
822 static const per_sequence_t Number_of_Broadcasts_Completed_List_sequence_of
[1] = {
823 { &hf_sabp_Number_of_Broadcasts_Completed_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Number_of_Broadcasts_Completed_List_Item
},
827 dissect_sabp_Number_of_Broadcasts_Completed_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
828 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
829 ett_sabp_Number_of_Broadcasts_Completed_List
, Number_of_Broadcasts_Completed_List_sequence_of
,
830 1, maxnoofSAI
, false);
836 static const value_string sabp_Number_of_Broadcasts_Requested_vals
[] = {
837 { 0, "broadcast-indefinitely" },
843 dissect_sabp_Number_of_Broadcasts_Requested(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
844 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
845 0U, 65535U, NULL
, false);
853 dissect_sabp_Old_Serial_Number(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
854 offset
= dissect_sabp_Serial_Number(tvb
, offset
, actx
, tree
, hf_index
);
860 static const value_string sabp_Paging_ETWS_Indicator_vals
[] = {
867 dissect_sabp_Paging_ETWS_Indicator(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
868 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
869 1, NULL
, true, 0, NULL
);
875 static const per_sequence_t Radio_Resource_Loading_List_Item_sequence
[] = {
876 { &hf_sabp_service_area_identifier
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Service_Area_Identifier
},
877 { &hf_sabp_available_bandwidth
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_Available_Bandwidth
},
878 { &hf_sabp_iE_Extensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
883 dissect_sabp_Radio_Resource_Loading_List_Item(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
884 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
885 ett_sabp_Radio_Resource_Loading_List_Item
, Radio_Resource_Loading_List_Item_sequence
);
891 static const per_sequence_t Radio_Resource_Loading_List_sequence_of
[1] = {
892 { &hf_sabp_Radio_Resource_Loading_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Radio_Resource_Loading_List_Item
},
896 dissect_sabp_Radio_Resource_Loading_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
897 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
898 ett_sabp_Radio_Resource_Loading_List
, Radio_Resource_Loading_List_sequence_of
,
899 1, maxnoofSAI
, false);
905 static const value_string sabp_Recovery_Indication_vals
[] = {
907 { 1, "data-available" },
913 dissect_sabp_Recovery_Indication(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
914 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
915 2, NULL
, false, 0, NULL
);
923 dissect_sabp_Repetition_Period(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
924 offset
= dissect_per_constrained_integer(tvb
, offset
, actx
, tree
, hf_index
,
925 1U, 4096U, NULL
, false);
931 static const per_sequence_t Service_Areas_List_sequence_of
[1] = {
932 { &hf_sabp_Service_Areas_List_item
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Service_Area_Identifier
},
936 dissect_sabp_Service_Areas_List(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
937 offset
= dissect_per_constrained_sequence_of(tvb
, offset
, actx
, tree
, hf_index
,
938 ett_sabp_Service_Areas_List
, Service_Areas_List_sequence_of
,
939 1, maxnoofSAI
, false);
945 static const value_string sabp_TypeOfError_vals
[] = {
946 { 0, "not-understood" },
953 dissect_sabp_TypeOfError(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
954 offset
= dissect_per_enumerated(tvb
, offset
, actx
, tree
, hf_index
,
955 2, NULL
, true, 0, NULL
);
963 dissect_sabp_WarningSecurityInfo(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
964 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
965 50, 50, false, NULL
);
973 dissect_sabp_Warning_Type(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
974 offset
= dissect_per_octet_string(tvb
, offset
, actx
, tree
, hf_index
,
981 static const per_sequence_t Write_Replace_sequence
[] = {
982 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
983 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
988 dissect_sabp_Write_Replace(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
989 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
990 ett_sabp_Write_Replace
, Write_Replace_sequence
);
996 static const per_sequence_t Write_Replace_Complete_sequence
[] = {
997 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
998 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1003 dissect_sabp_Write_Replace_Complete(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1004 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1005 ett_sabp_Write_Replace_Complete
, Write_Replace_Complete_sequence
);
1011 static const per_sequence_t Write_Replace_Failure_sequence
[] = {
1012 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1013 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1014 { NULL
, 0, 0, NULL
}
1018 dissect_sabp_Write_Replace_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1019 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1020 ett_sabp_Write_Replace_Failure
, Write_Replace_Failure_sequence
);
1026 static const per_sequence_t Kill_sequence
[] = {
1027 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1028 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1029 { NULL
, 0, 0, NULL
}
1033 dissect_sabp_Kill(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1034 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1035 ett_sabp_Kill
, Kill_sequence
);
1041 static const per_sequence_t Kill_Complete_sequence
[] = {
1042 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1043 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1044 { NULL
, 0, 0, NULL
}
1048 dissect_sabp_Kill_Complete(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1049 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1050 ett_sabp_Kill_Complete
, Kill_Complete_sequence
);
1056 static const per_sequence_t Kill_Failure_sequence
[] = {
1057 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1058 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1059 { NULL
, 0, 0, NULL
}
1063 dissect_sabp_Kill_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1064 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1065 ett_sabp_Kill_Failure
, Kill_Failure_sequence
);
1071 static const per_sequence_t Load_Query_sequence
[] = {
1072 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1073 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1074 { NULL
, 0, 0, NULL
}
1078 dissect_sabp_Load_Query(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1079 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1080 ett_sabp_Load_Query
, Load_Query_sequence
);
1086 static const per_sequence_t Load_Query_Complete_sequence
[] = {
1087 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1088 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1089 { NULL
, 0, 0, NULL
}
1093 dissect_sabp_Load_Query_Complete(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1094 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1095 ett_sabp_Load_Query_Complete
, Load_Query_Complete_sequence
);
1101 static const per_sequence_t Load_Query_Failure_sequence
[] = {
1102 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1103 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1104 { NULL
, 0, 0, NULL
}
1108 dissect_sabp_Load_Query_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1109 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1110 ett_sabp_Load_Query_Failure
, Load_Query_Failure_sequence
);
1116 static const per_sequence_t Message_Status_Query_sequence
[] = {
1117 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1118 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1119 { NULL
, 0, 0, NULL
}
1123 dissect_sabp_Message_Status_Query(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1124 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1125 ett_sabp_Message_Status_Query
, Message_Status_Query_sequence
);
1131 static const per_sequence_t Message_Status_Query_Complete_sequence
[] = {
1132 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1133 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1134 { NULL
, 0, 0, NULL
}
1138 dissect_sabp_Message_Status_Query_Complete(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1139 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1140 ett_sabp_Message_Status_Query_Complete
, Message_Status_Query_Complete_sequence
);
1146 static const per_sequence_t Message_Status_Query_Failure_sequence
[] = {
1147 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1148 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1149 { NULL
, 0, 0, NULL
}
1153 dissect_sabp_Message_Status_Query_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1154 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1155 ett_sabp_Message_Status_Query_Failure
, Message_Status_Query_Failure_sequence
);
1161 static const per_sequence_t Reset_sequence
[] = {
1162 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1163 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1164 { NULL
, 0, 0, NULL
}
1168 dissect_sabp_Reset(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1169 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1170 ett_sabp_Reset
, Reset_sequence
);
1176 static const per_sequence_t Reset_Complete_sequence
[] = {
1177 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1178 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1179 { NULL
, 0, 0, NULL
}
1183 dissect_sabp_Reset_Complete(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1184 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1185 ett_sabp_Reset_Complete
, Reset_Complete_sequence
);
1191 static const per_sequence_t Reset_Failure_sequence
[] = {
1192 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1193 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1194 { NULL
, 0, 0, NULL
}
1198 dissect_sabp_Reset_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1199 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1200 ett_sabp_Reset_Failure
, Reset_Failure_sequence
);
1206 static const per_sequence_t Restart_sequence
[] = {
1207 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1208 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1209 { NULL
, 0, 0, NULL
}
1213 dissect_sabp_Restart(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1214 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1215 ett_sabp_Restart
, Restart_sequence
);
1221 static const per_sequence_t Failure_sequence
[] = {
1222 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1223 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1224 { NULL
, 0, 0, NULL
}
1228 dissect_sabp_Failure(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1229 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1230 ett_sabp_Failure
, Failure_sequence
);
1236 static const per_sequence_t Error_Indication_sequence
[] = {
1237 { &hf_sabp_protocolIEs
, ASN1_EXTENSION_ROOT
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProtocolIE_Container
},
1238 { &hf_sabp_protocolExtensions
, ASN1_EXTENSION_ROOT
, ASN1_OPTIONAL
, dissect_sabp_ProtocolExtensionContainer
},
1239 { NULL
, 0, 0, NULL
}
1243 dissect_sabp_Error_Indication(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1244 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1245 ett_sabp_Error_Indication
, Error_Indication_sequence
);
1253 dissect_sabp_InitiatingMessage_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1254 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_InitiatingMessageValue
);
1260 static const per_sequence_t InitiatingMessage_sequence
[] = {
1261 { &hf_sabp_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProcedureCode
},
1262 { &hf_sabp_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
1263 { &hf_sabp_initiatingMessage_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_InitiatingMessage_value
},
1264 { NULL
, 0, 0, NULL
}
1268 dissect_sabp_InitiatingMessage(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1269 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1270 ett_sabp_InitiatingMessage
, InitiatingMessage_sequence
);
1278 dissect_sabp_SuccessfulOutcome_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1279 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_SuccessfulOutcomeValue
);
1285 static const per_sequence_t SuccessfulOutcome_sequence
[] = {
1286 { &hf_sabp_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProcedureCode
},
1287 { &hf_sabp_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
1288 { &hf_sabp_successfulOutcome_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_SuccessfulOutcome_value
},
1289 { NULL
, 0, 0, NULL
}
1293 dissect_sabp_SuccessfulOutcome(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1294 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1295 ett_sabp_SuccessfulOutcome
, SuccessfulOutcome_sequence
);
1303 dissect_sabp_UnsuccessfulOutcome_value(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1304 offset
= dissect_per_open_type_pdu_new(tvb
, offset
, actx
, tree
, hf_index
, dissect_UnsuccessfulOutcomeValue
);
1310 static const per_sequence_t UnsuccessfulOutcome_sequence
[] = {
1311 { &hf_sabp_procedureCode
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_ProcedureCode
},
1312 { &hf_sabp_criticality
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_Criticality
},
1313 { &hf_sabp_unsuccessfulOutcome_value
, ASN1_NO_EXTENSIONS
, ASN1_NOT_OPTIONAL
, dissect_sabp_UnsuccessfulOutcome_value
},
1314 { NULL
, 0, 0, NULL
}
1318 dissect_sabp_UnsuccessfulOutcome(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1319 offset
= dissect_per_sequence(tvb
, offset
, actx
, tree
, hf_index
,
1320 ett_sabp_UnsuccessfulOutcome
, UnsuccessfulOutcome_sequence
);
1326 static const value_string sabp_SABP_PDU_vals
[] = {
1327 { 0, "initiatingMessage" },
1328 { 1, "successfulOutcome" },
1329 { 2, "unsuccessfulOutcome" },
1333 static const per_choice_t SABP_PDU_choice
[] = {
1334 { 0, &hf_sabp_initiatingMessage
, ASN1_EXTENSION_ROOT
, dissect_sabp_InitiatingMessage
},
1335 { 1, &hf_sabp_successfulOutcome
, ASN1_EXTENSION_ROOT
, dissect_sabp_SuccessfulOutcome
},
1336 { 2, &hf_sabp_unsuccessfulOutcome
, ASN1_EXTENSION_ROOT
, dissect_sabp_UnsuccessfulOutcome
},
1337 { 0, NULL
, 0, NULL
}
1341 dissect_sabp_SABP_PDU(tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1342 offset
= dissect_per_choice(tvb
, offset
, actx
, tree
, hf_index
,
1343 ett_sabp_SABP_PDU
, SABP_PDU_choice
,
1351 static int dissect_Broadcast_Message_Content_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1353 asn1_ctx_t asn1_ctx
;
1354 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1355 offset
= dissect_sabp_Broadcast_Message_Content(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Broadcast_Message_Content_PDU
);
1356 offset
+= 7; offset
>>= 3;
1359 static int dissect_Broadcast_Message_Content_Validity_Indicator_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1361 asn1_ctx_t asn1_ctx
;
1362 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1363 offset
= dissect_sabp_Broadcast_Message_Content_Validity_Indicator(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU
);
1364 offset
+= 7; offset
>>= 3;
1367 static int dissect_Category_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1369 asn1_ctx_t asn1_ctx
;
1370 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1371 offset
= dissect_sabp_Category(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Category_PDU
);
1372 offset
+= 7; offset
>>= 3;
1375 static int dissect_Cause_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1377 asn1_ctx_t asn1_ctx
;
1378 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1379 offset
= dissect_sabp_Cause(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Cause_PDU
);
1380 offset
+= 7; offset
>>= 3;
1383 static int dissect_Criticality_Diagnostics_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1385 asn1_ctx_t asn1_ctx
;
1386 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1387 offset
= dissect_sabp_Criticality_Diagnostics(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Criticality_Diagnostics_PDU
);
1388 offset
+= 7; offset
>>= 3;
1391 static int dissect_MessageStructure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1393 asn1_ctx_t asn1_ctx
;
1394 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1395 offset
= dissect_sabp_MessageStructure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_MessageStructure_PDU
);
1396 offset
+= 7; offset
>>= 3;
1399 static int dissect_Data_Coding_Scheme_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1401 asn1_ctx_t asn1_ctx
;
1402 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1403 offset
= dissect_sabp_Data_Coding_Scheme(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Data_Coding_Scheme_PDU
);
1404 offset
+= 7; offset
>>= 3;
1407 static int dissect_Failure_List_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1409 asn1_ctx_t asn1_ctx
;
1410 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1411 offset
= dissect_sabp_Failure_List(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Failure_List_PDU
);
1412 offset
+= 7; offset
>>= 3;
1415 static int dissect_Message_Identifier_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1417 asn1_ctx_t asn1_ctx
;
1418 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1419 offset
= dissect_sabp_Message_Identifier(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Message_Identifier_PDU
);
1420 offset
+= 7; offset
>>= 3;
1423 static int dissect_New_Serial_Number_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1425 asn1_ctx_t asn1_ctx
;
1426 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1427 offset
= dissect_sabp_New_Serial_Number(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_New_Serial_Number_PDU
);
1428 offset
+= 7; offset
>>= 3;
1431 static int dissect_Number_of_Broadcasts_Completed_List_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1433 asn1_ctx_t asn1_ctx
;
1434 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1435 offset
= dissect_sabp_Number_of_Broadcasts_Completed_List(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Number_of_Broadcasts_Completed_List_PDU
);
1436 offset
+= 7; offset
>>= 3;
1439 static int dissect_Number_of_Broadcasts_Requested_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1441 asn1_ctx_t asn1_ctx
;
1442 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1443 offset
= dissect_sabp_Number_of_Broadcasts_Requested(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Number_of_Broadcasts_Requested_PDU
);
1444 offset
+= 7; offset
>>= 3;
1447 static int dissect_Old_Serial_Number_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1449 asn1_ctx_t asn1_ctx
;
1450 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1451 offset
= dissect_sabp_Old_Serial_Number(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Old_Serial_Number_PDU
);
1452 offset
+= 7; offset
>>= 3;
1455 static int dissect_Paging_ETWS_Indicator_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1457 asn1_ctx_t asn1_ctx
;
1458 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1459 offset
= dissect_sabp_Paging_ETWS_Indicator(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Paging_ETWS_Indicator_PDU
);
1460 offset
+= 7; offset
>>= 3;
1463 static int dissect_Radio_Resource_Loading_List_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1465 asn1_ctx_t asn1_ctx
;
1466 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1467 offset
= dissect_sabp_Radio_Resource_Loading_List(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Radio_Resource_Loading_List_PDU
);
1468 offset
+= 7; offset
>>= 3;
1471 static int dissect_Recovery_Indication_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1473 asn1_ctx_t asn1_ctx
;
1474 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1475 offset
= dissect_sabp_Recovery_Indication(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Recovery_Indication_PDU
);
1476 offset
+= 7; offset
>>= 3;
1479 static int dissect_Repetition_Period_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1481 asn1_ctx_t asn1_ctx
;
1482 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1483 offset
= dissect_sabp_Repetition_Period(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Repetition_Period_PDU
);
1484 offset
+= 7; offset
>>= 3;
1487 static int dissect_Serial_Number_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1489 asn1_ctx_t asn1_ctx
;
1490 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1491 offset
= dissect_sabp_Serial_Number(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Serial_Number_PDU
);
1492 offset
+= 7; offset
>>= 3;
1495 static int dissect_Service_Areas_List_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1497 asn1_ctx_t asn1_ctx
;
1498 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1499 offset
= dissect_sabp_Service_Areas_List(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Service_Areas_List_PDU
);
1500 offset
+= 7; offset
>>= 3;
1503 static int dissect_TypeOfError_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1505 asn1_ctx_t asn1_ctx
;
1506 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1507 offset
= dissect_sabp_TypeOfError(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_TypeOfError_PDU
);
1508 offset
+= 7; offset
>>= 3;
1511 static int dissect_WarningSecurityInfo_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1513 asn1_ctx_t asn1_ctx
;
1514 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1515 offset
= dissect_sabp_WarningSecurityInfo(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_WarningSecurityInfo_PDU
);
1516 offset
+= 7; offset
>>= 3;
1519 static int dissect_Warning_Type_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1521 asn1_ctx_t asn1_ctx
;
1522 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1523 offset
= dissect_sabp_Warning_Type(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Warning_Type_PDU
);
1524 offset
+= 7; offset
>>= 3;
1527 static int dissect_Write_Replace_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1529 asn1_ctx_t asn1_ctx
;
1530 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1531 offset
= dissect_sabp_Write_Replace(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Write_Replace_PDU
);
1532 offset
+= 7; offset
>>= 3;
1535 static int dissect_Write_Replace_Complete_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1537 asn1_ctx_t asn1_ctx
;
1538 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1539 offset
= dissect_sabp_Write_Replace_Complete(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Write_Replace_Complete_PDU
);
1540 offset
+= 7; offset
>>= 3;
1543 static int dissect_Write_Replace_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1545 asn1_ctx_t asn1_ctx
;
1546 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1547 offset
= dissect_sabp_Write_Replace_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Write_Replace_Failure_PDU
);
1548 offset
+= 7; offset
>>= 3;
1551 static int dissect_Kill_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1553 asn1_ctx_t asn1_ctx
;
1554 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1555 offset
= dissect_sabp_Kill(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Kill_PDU
);
1556 offset
+= 7; offset
>>= 3;
1559 static int dissect_Kill_Complete_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1561 asn1_ctx_t asn1_ctx
;
1562 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1563 offset
= dissect_sabp_Kill_Complete(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Kill_Complete_PDU
);
1564 offset
+= 7; offset
>>= 3;
1567 static int dissect_Kill_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1569 asn1_ctx_t asn1_ctx
;
1570 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1571 offset
= dissect_sabp_Kill_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Kill_Failure_PDU
);
1572 offset
+= 7; offset
>>= 3;
1575 static int dissect_Load_Query_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1577 asn1_ctx_t asn1_ctx
;
1578 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1579 offset
= dissect_sabp_Load_Query(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Load_Query_PDU
);
1580 offset
+= 7; offset
>>= 3;
1583 static int dissect_Load_Query_Complete_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1585 asn1_ctx_t asn1_ctx
;
1586 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1587 offset
= dissect_sabp_Load_Query_Complete(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Load_Query_Complete_PDU
);
1588 offset
+= 7; offset
>>= 3;
1591 static int dissect_Load_Query_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1593 asn1_ctx_t asn1_ctx
;
1594 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1595 offset
= dissect_sabp_Load_Query_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Load_Query_Failure_PDU
);
1596 offset
+= 7; offset
>>= 3;
1599 static int dissect_Message_Status_Query_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1601 asn1_ctx_t asn1_ctx
;
1602 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1603 offset
= dissect_sabp_Message_Status_Query(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Message_Status_Query_PDU
);
1604 offset
+= 7; offset
>>= 3;
1607 static int dissect_Message_Status_Query_Complete_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1609 asn1_ctx_t asn1_ctx
;
1610 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1611 offset
= dissect_sabp_Message_Status_Query_Complete(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Message_Status_Query_Complete_PDU
);
1612 offset
+= 7; offset
>>= 3;
1615 static int dissect_Message_Status_Query_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1617 asn1_ctx_t asn1_ctx
;
1618 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1619 offset
= dissect_sabp_Message_Status_Query_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Message_Status_Query_Failure_PDU
);
1620 offset
+= 7; offset
>>= 3;
1623 static int dissect_Reset_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1625 asn1_ctx_t asn1_ctx
;
1626 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1627 offset
= dissect_sabp_Reset(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Reset_PDU
);
1628 offset
+= 7; offset
>>= 3;
1631 static int dissect_Reset_Complete_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1633 asn1_ctx_t asn1_ctx
;
1634 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1635 offset
= dissect_sabp_Reset_Complete(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Reset_Complete_PDU
);
1636 offset
+= 7; offset
>>= 3;
1639 static int dissect_Reset_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1641 asn1_ctx_t asn1_ctx
;
1642 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1643 offset
= dissect_sabp_Reset_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Reset_Failure_PDU
);
1644 offset
+= 7; offset
>>= 3;
1647 static int dissect_Restart_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1649 asn1_ctx_t asn1_ctx
;
1650 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1651 offset
= dissect_sabp_Restart(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Restart_PDU
);
1652 offset
+= 7; offset
>>= 3;
1655 static int dissect_Failure_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1657 asn1_ctx_t asn1_ctx
;
1658 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1659 offset
= dissect_sabp_Failure(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Failure_PDU
);
1660 offset
+= 7; offset
>>= 3;
1663 static int dissect_Error_Indication_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1665 asn1_ctx_t asn1_ctx
;
1666 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1667 offset
= dissect_sabp_Error_Indication(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_Error_Indication_PDU
);
1668 offset
+= 7; offset
>>= 3;
1671 static int dissect_SABP_PDU_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1673 asn1_ctx_t asn1_ctx
;
1674 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1675 offset
= dissect_sabp_SABP_PDU(tvb
, offset
, &asn1_ctx
, tree
, hf_sabp_SABP_PDU_PDU
);
1676 offset
+= 7; offset
>>= 3;
1681 static int dissect_ProtocolIEFieldValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1683 return (dissector_try_uint(sabp_ies_dissector_table
, ProtocolIE_ID
, tvb
, pinfo
, tree
)) ? tvb_captured_length(tvb
) : 0;
1686 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1688 return (dissector_try_uint(sabp_extension_dissector_table
, ProtocolExtensionID
, tvb
, pinfo
, tree
)) ? tvb_captured_length(tvb
) : 0;
1691 static int dissect_InitiatingMessageValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1693 return (dissector_try_uint(sabp_proc_imsg_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
)) ? tvb_captured_length(tvb
) : 0;
1696 static int dissect_SuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1698 return (dissector_try_uint(sabp_proc_sout_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
)) ? tvb_captured_length(tvb
) : 0;
1701 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1703 return (dissector_try_uint(sabp_proc_uout_dissector_table
, ProcedureCode
, tvb
, pinfo
, tree
)) ? tvb_captured_length(tvb
) : 0;
1707 /* 3GPP TS 23.041 version 11.4.0
1711 dissect_sabp_cb_data(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
)
1713 proto_item
*cbs_page_item
;
1714 proto_tree
*subtree
;
1715 tvbuff_t
*page_tvb
, *unpacked_tvb
;
1718 uint8_t nr_pages
, len
, cb_inf_msg_len
;
1721 /* Octet 1 Number-of-Pages */
1722 nr_pages
= tvb_get_uint8(tvb
, offset
);
1723 proto_tree_add_item(tree
, hf_sabp_no_of_pages
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1726 * NOTE: n equal to or less than 15
1732 for (n
= 0; n
< nr_pages
; n
++) {
1733 subtree
= proto_tree_add_subtree_format(tree
, tvb
, offset
, 83, ett_sabp_cbs_page
, NULL
,
1734 "CB page %u data", n
+1);
1735 /* octet 2 - 83 CBS-Message-Information-Page 1 */
1736 cbs_page_item
= proto_tree_add_item(subtree
, hf_sabp_cb_msg_inf_page
, tvb
, offset
, 82, ENC_NA
);
1737 cb_inf_msg_len
= tvb_get_uint8(tvb
,offset
+82);
1738 page_tvb
= tvb_new_subset_length(tvb
, offset
, cb_inf_msg_len
);
1739 unpacked_tvb
= dissect_cbs_data(sms_encoding
, page_tvb
, subtree
, pinfo
, 0);
1740 len
= tvb_captured_length(unpacked_tvb
);
1741 if (unpacked_tvb
!= NULL
){
1743 proto_tree
*cbs_page_subtree
= proto_item_add_subtree(cbs_page_item
, ett_sabp_cbs_page_content
);
1744 proto_tree_add_item(cbs_page_subtree
, hf_sabp_cbs_page_content
, unpacked_tvb
, 0, len
, ENC_UTF_8
);
1749 /* 84 CBS-Message-Information-Length 1 */
1750 proto_tree_add_item(subtree
, hf_sabp_cb_inf_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1756 dissect_sabp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1758 proto_item
*sabp_item
= NULL
;
1759 proto_tree
*sabp_tree
= NULL
;
1761 /* make entry in the Protocol column on summary display */
1762 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, PSNAME
);
1764 /* create the sabp protocol tree */
1765 sabp_item
= proto_tree_add_item(tree
, proto_sabp
, tvb
, 0, -1, ENC_NA
);
1766 sabp_tree
= proto_item_add_subtree(sabp_item
, ett_sabp
);
1768 return dissect_SABP_PDU_PDU(tvb
, pinfo
, sabp_tree
, NULL
);
1771 /* Note a little bit of a hack assumes length max takes two bytes and that the length starts at byte 4 */
1773 dissect_sabp_tcp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
1775 uint32_t type_length
, msg_len
;
1776 unsigned tvb_length
;
1779 asn1_ctx_t asn1_ctx
;
1780 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_PER
, true, pinfo
);
1782 tvb_length
= tvb_reported_length(tvb
);
1784 if (tvb_length
< 5) {
1785 pinfo
->desegment_offset
= 0;
1786 pinfo
->desegment_len
= DESEGMENT_ONE_MORE_SEGMENT
;
1787 return tvb_captured_length(tvb
);
1790 /* Length should be in the 3:d octet */
1792 /* Get the length of the sabp packet. Offset in bits */
1794 bit_offset
= dissect_per_length_determinant(tvb
, bit_offset
, &asn1_ctx
, NULL
, -1, &type_length
, &is_fragmented
);
1795 bit_offset
+= 8*type_length
;
1796 msg_len
= (bit_offset
+ 7) >> 3;
1797 if (is_fragmented
) {
1798 /* Next length field will take 1 or 2 bytes; let's ask for the maximum */
1801 if (msg_len
> tvb_length
) {
1802 pinfo
->desegment_offset
= 0;
1803 pinfo
->desegment_len
= msg_len
- tvb_length
;
1804 return tvb_captured_length(tvb
);
1806 } while (is_fragmented
);
1808 return dissect_sabp(tvb
, pinfo
, tree
, data
);
1811 /*--- proto_register_sabp -------------------------------------------*/
1812 void proto_register_sabp(void) {
1814 /* List of fields */
1816 static hf_register_info hf
[] = {
1817 { &hf_sabp_no_of_pages
,
1818 { "Number-of-Pages", "sabp.no_of_pages",
1819 FT_UINT8
, BASE_DEC
, NULL
, 0,
1821 { &hf_sabp_cb_msg_inf_page
,
1822 { "CBS-Message-Information-Page", "sabp.cb_msg_inf_page",
1823 FT_BYTES
, BASE_NONE
, NULL
, 0,
1825 { &hf_sabp_cbs_page_content
,
1826 { "CBS Page Content", "sabp.cb_page_content",
1827 FT_STRING
, BASE_NONE
, NULL
, 0,
1829 { &hf_sabp_cb_inf_len
,
1830 { "CBS-Message-Information-Length", "sabp.cb_inf_len",
1831 FT_UINT8
, BASE_DEC
, NULL
, 0,
1834 { &hf_sabp_Broadcast_Message_Content_PDU
,
1835 { "Broadcast-Message-Content", "sabp.Broadcast_Message_Content",
1836 FT_BYTES
, BASE_NONE
, NULL
, 0,
1838 { &hf_sabp_Broadcast_Message_Content_Validity_Indicator_PDU
,
1839 { "Broadcast-Message-Content-Validity-Indicator", "sabp.Broadcast_Message_Content_Validity_Indicator",
1840 FT_UINT32
, BASE_DEC
, VALS(sabp_Broadcast_Message_Content_Validity_Indicator_vals
), 0,
1842 { &hf_sabp_Category_PDU
,
1843 { "Category", "sabp.Category",
1844 FT_UINT32
, BASE_DEC
, VALS(sabp_Category_vals
), 0,
1846 { &hf_sabp_Cause_PDU
,
1847 { "Cause", "sabp.Cause",
1848 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &sabp_Cause_vals_ext
, 0,
1850 { &hf_sabp_Criticality_Diagnostics_PDU
,
1851 { "Criticality-Diagnostics", "sabp.Criticality_Diagnostics_element",
1852 FT_NONE
, BASE_NONE
, NULL
, 0,
1854 { &hf_sabp_MessageStructure_PDU
,
1855 { "MessageStructure", "sabp.MessageStructure",
1856 FT_UINT32
, BASE_DEC
, NULL
, 0,
1858 { &hf_sabp_Data_Coding_Scheme_PDU
,
1859 { "Data-Coding-Scheme", "sabp.Data_Coding_Scheme",
1860 FT_BYTES
, BASE_NONE
, NULL
, 0,
1862 { &hf_sabp_Failure_List_PDU
,
1863 { "Failure-List", "sabp.Failure_List",
1864 FT_UINT32
, BASE_DEC
, NULL
, 0,
1866 { &hf_sabp_Message_Identifier_PDU
,
1867 { "Message-Identifier", "sabp.Message_Identifier",
1868 FT_BYTES
, BASE_NONE
, NULL
, 0,
1870 { &hf_sabp_New_Serial_Number_PDU
,
1871 { "New-Serial-Number", "sabp.New_Serial_Number",
1872 FT_BYTES
, BASE_NONE
, NULL
, 0,
1874 { &hf_sabp_Number_of_Broadcasts_Completed_List_PDU
,
1875 { "Number-of-Broadcasts-Completed-List", "sabp.Number_of_Broadcasts_Completed_List",
1876 FT_UINT32
, BASE_DEC
, NULL
, 0,
1878 { &hf_sabp_Number_of_Broadcasts_Requested_PDU
,
1879 { "Number-of-Broadcasts-Requested", "sabp.Number_of_Broadcasts_Requested",
1880 FT_UINT32
, BASE_DEC
, VALS(sabp_Number_of_Broadcasts_Requested_vals
), 0,
1882 { &hf_sabp_Old_Serial_Number_PDU
,
1883 { "Old-Serial-Number", "sabp.Old_Serial_Number",
1884 FT_BYTES
, BASE_NONE
, NULL
, 0,
1886 { &hf_sabp_Paging_ETWS_Indicator_PDU
,
1887 { "Paging-ETWS-Indicator", "sabp.Paging_ETWS_Indicator",
1888 FT_UINT32
, BASE_DEC
, VALS(sabp_Paging_ETWS_Indicator_vals
), 0,
1890 { &hf_sabp_Radio_Resource_Loading_List_PDU
,
1891 { "Radio-Resource-Loading-List", "sabp.Radio_Resource_Loading_List",
1892 FT_UINT32
, BASE_DEC
, NULL
, 0,
1894 { &hf_sabp_Recovery_Indication_PDU
,
1895 { "Recovery-Indication", "sabp.Recovery_Indication",
1896 FT_UINT32
, BASE_DEC
, VALS(sabp_Recovery_Indication_vals
), 0,
1898 { &hf_sabp_Repetition_Period_PDU
,
1899 { "Repetition-Period", "sabp.Repetition_Period",
1900 FT_UINT32
, BASE_DEC
, NULL
, 0,
1902 { &hf_sabp_Serial_Number_PDU
,
1903 { "Serial-Number", "sabp.Serial_Number",
1904 FT_BYTES
, BASE_NONE
, NULL
, 0,
1906 { &hf_sabp_Service_Areas_List_PDU
,
1907 { "Service-Areas-List", "sabp.Service_Areas_List",
1908 FT_UINT32
, BASE_DEC
, NULL
, 0,
1910 { &hf_sabp_TypeOfError_PDU
,
1911 { "TypeOfError", "sabp.TypeOfError",
1912 FT_UINT32
, BASE_DEC
, VALS(sabp_TypeOfError_vals
), 0,
1914 { &hf_sabp_WarningSecurityInfo_PDU
,
1915 { "WarningSecurityInfo", "sabp.WarningSecurityInfo",
1916 FT_BYTES
, BASE_NONE
, NULL
, 0,
1918 { &hf_sabp_Warning_Type_PDU
,
1919 { "Warning-Type", "sabp.Warning_Type",
1920 FT_BYTES
, BASE_NONE
, NULL
, 0,
1922 { &hf_sabp_Write_Replace_PDU
,
1923 { "Write-Replace", "sabp.Write_Replace_element",
1924 FT_NONE
, BASE_NONE
, NULL
, 0,
1926 { &hf_sabp_Write_Replace_Complete_PDU
,
1927 { "Write-Replace-Complete", "sabp.Write_Replace_Complete_element",
1928 FT_NONE
, BASE_NONE
, NULL
, 0,
1930 { &hf_sabp_Write_Replace_Failure_PDU
,
1931 { "Write-Replace-Failure", "sabp.Write_Replace_Failure_element",
1932 FT_NONE
, BASE_NONE
, NULL
, 0,
1934 { &hf_sabp_Kill_PDU
,
1935 { "Kill", "sabp.Kill_element",
1936 FT_NONE
, BASE_NONE
, NULL
, 0,
1938 { &hf_sabp_Kill_Complete_PDU
,
1939 { "Kill-Complete", "sabp.Kill_Complete_element",
1940 FT_NONE
, BASE_NONE
, NULL
, 0,
1942 { &hf_sabp_Kill_Failure_PDU
,
1943 { "Kill-Failure", "sabp.Kill_Failure_element",
1944 FT_NONE
, BASE_NONE
, NULL
, 0,
1946 { &hf_sabp_Load_Query_PDU
,
1947 { "Load-Query", "sabp.Load_Query_element",
1948 FT_NONE
, BASE_NONE
, NULL
, 0,
1950 { &hf_sabp_Load_Query_Complete_PDU
,
1951 { "Load-Query-Complete", "sabp.Load_Query_Complete_element",
1952 FT_NONE
, BASE_NONE
, NULL
, 0,
1954 { &hf_sabp_Load_Query_Failure_PDU
,
1955 { "Load-Query-Failure", "sabp.Load_Query_Failure_element",
1956 FT_NONE
, BASE_NONE
, NULL
, 0,
1958 { &hf_sabp_Message_Status_Query_PDU
,
1959 { "Message-Status-Query", "sabp.Message_Status_Query_element",
1960 FT_NONE
, BASE_NONE
, NULL
, 0,
1962 { &hf_sabp_Message_Status_Query_Complete_PDU
,
1963 { "Message-Status-Query-Complete", "sabp.Message_Status_Query_Complete_element",
1964 FT_NONE
, BASE_NONE
, NULL
, 0,
1966 { &hf_sabp_Message_Status_Query_Failure_PDU
,
1967 { "Message-Status-Query-Failure", "sabp.Message_Status_Query_Failure_element",
1968 FT_NONE
, BASE_NONE
, NULL
, 0,
1970 { &hf_sabp_Reset_PDU
,
1971 { "Reset", "sabp.Reset_element",
1972 FT_NONE
, BASE_NONE
, NULL
, 0,
1974 { &hf_sabp_Reset_Complete_PDU
,
1975 { "Reset-Complete", "sabp.Reset_Complete_element",
1976 FT_NONE
, BASE_NONE
, NULL
, 0,
1978 { &hf_sabp_Reset_Failure_PDU
,
1979 { "Reset-Failure", "sabp.Reset_Failure_element",
1980 FT_NONE
, BASE_NONE
, NULL
, 0,
1982 { &hf_sabp_Restart_PDU
,
1983 { "Restart", "sabp.Restart_element",
1984 FT_NONE
, BASE_NONE
, NULL
, 0,
1986 { &hf_sabp_Failure_PDU
,
1987 { "Failure", "sabp.Failure_element",
1988 FT_NONE
, BASE_NONE
, NULL
, 0,
1990 { &hf_sabp_Error_Indication_PDU
,
1991 { "Error-Indication", "sabp.Error_Indication_element",
1992 FT_NONE
, BASE_NONE
, NULL
, 0,
1994 { &hf_sabp_SABP_PDU_PDU
,
1995 { "SABP-PDU", "sabp.SABP_PDU",
1996 FT_UINT32
, BASE_DEC
, VALS(sabp_SABP_PDU_vals
), 0,
1998 { &hf_sabp_ProtocolIE_Container_item
,
1999 { "ProtocolIE-Field", "sabp.ProtocolIE_Field_element",
2000 FT_NONE
, BASE_NONE
, NULL
, 0,
2004 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &sabp_ProtocolIE_ID_vals_ext
, 0,
2005 "ProtocolIE_ID", HFILL
}},
2006 { &hf_sabp_criticality
,
2007 { "criticality", "sabp.criticality",
2008 FT_UINT32
, BASE_DEC
, VALS(sabp_Criticality_vals
), 0,
2010 { &hf_sabp_protocolIE_Field_value
,
2011 { "value", "sabp.protocolIE_Field_value_element",
2012 FT_NONE
, BASE_NONE
, NULL
, 0,
2013 "ProtocolIE_Field_value", HFILL
}},
2014 { &hf_sabp_ProtocolExtensionContainer_item
,
2015 { "ProtocolExtensionField", "sabp.ProtocolExtensionField_element",
2016 FT_NONE
, BASE_NONE
, NULL
, 0,
2019 { "id", "sabp.ext_id",
2020 FT_UINT32
, BASE_DEC
, NULL
, 0,
2021 "ProtocolExtensionID", HFILL
}},
2022 { &hf_sabp_extensionValue
,
2023 { "extensionValue", "sabp.extensionValue_element",
2024 FT_NONE
, BASE_NONE
, NULL
, 0,
2026 { &hf_sabp_procedureCode
,
2027 { "procedureCode", "sabp.procedureCode",
2028 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &sabp_ProcedureCode_vals_ext
, 0,
2030 { &hf_sabp_triggeringMessage
,
2031 { "triggeringMessage", "sabp.triggeringMessage",
2032 FT_UINT32
, BASE_DEC
, VALS(sabp_TriggeringMessage_vals
), 0,
2034 { &hf_sabp_procedureCriticality
,
2035 { "procedureCriticality", "sabp.procedureCriticality",
2036 FT_UINT32
, BASE_DEC
, VALS(sabp_Criticality_vals
), 0,
2037 "Criticality", HFILL
}},
2038 { &hf_sabp_iEsCriticalityDiagnostics
,
2039 { "iEsCriticalityDiagnostics", "sabp.iEsCriticalityDiagnostics",
2040 FT_UINT32
, BASE_DEC
, NULL
, 0,
2041 "CriticalityDiagnostics_IE_List", HFILL
}},
2042 { &hf_sabp_iE_Extensions
,
2043 { "iE-Extensions", "sabp.iE_Extensions",
2044 FT_UINT32
, BASE_DEC
, NULL
, 0,
2045 "ProtocolExtensionContainer", HFILL
}},
2046 { &hf_sabp_CriticalityDiagnostics_IE_List_item
,
2047 { "CriticalityDiagnostics-IE-List item", "sabp.CriticalityDiagnostics_IE_List_item_element",
2048 FT_NONE
, BASE_NONE
, NULL
, 0,
2050 { &hf_sabp_iECriticality
,
2051 { "iECriticality", "sabp.iECriticality",
2052 FT_UINT32
, BASE_DEC
, VALS(sabp_Criticality_vals
), 0,
2053 "Criticality", HFILL
}},
2055 { "iE-ID", "sabp.iE_ID",
2056 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &sabp_ProtocolIE_ID_vals_ext
, 0,
2057 "ProtocolIE_ID", HFILL
}},
2058 { &hf_sabp_repetitionNumber
,
2059 { "repetitionNumber", "sabp.repetitionNumber",
2060 FT_UINT32
, BASE_DEC
, NULL
, 0,
2061 "RepetitionNumber0", HFILL
}},
2062 { &hf_sabp_MessageStructure_item
,
2063 { "MessageStructure item", "sabp.MessageStructure_item_element",
2064 FT_NONE
, BASE_NONE
, NULL
, 0,
2066 { &hf_sabp_repetitionNumber1
,
2067 { "repetitionNumber", "sabp.repetitionNumber1",
2068 FT_UINT32
, BASE_DEC
, NULL
, 0,
2069 "RepetitionNumber1", HFILL
}},
2070 { &hf_sabp_Failure_List_item
,
2071 { "Failure-List-Item", "sabp.Failure_List_Item_element",
2072 FT_NONE
, BASE_NONE
, NULL
, 0,
2074 { &hf_sabp_service_area_identifier
,
2075 { "service-area-identifier", "sabp.service_area_identifier_element",
2076 FT_NONE
, BASE_NONE
, NULL
, 0,
2079 { "cause", "sabp.cause",
2080 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &sabp_Cause_vals_ext
, 0,
2082 { &hf_sabp_Number_of_Broadcasts_Completed_List_item
,
2083 { "Number-of-Broadcasts-Completed-List-Item", "sabp.Number_of_Broadcasts_Completed_List_Item_element",
2084 FT_NONE
, BASE_NONE
, NULL
, 0,
2086 { &hf_sabp_number_of_broadcasts_completed
,
2087 { "number-of-broadcasts-completed", "sabp.number_of_broadcasts_completed",
2088 FT_UINT32
, BASE_DEC
, NULL
, 0,
2089 "INTEGER_0_65535", HFILL
}},
2090 { &hf_sabp_number_of_broadcasts_completed_info
,
2091 { "number-of-broadcasts-completed-info", "sabp.number_of_broadcasts_completed_info",
2092 FT_UINT32
, BASE_DEC
, VALS(sabp_Number_Of_Broadcasts_Completed_Info_vals
), 0,
2094 { &hf_sabp_Radio_Resource_Loading_List_item
,
2095 { "Radio-Resource-Loading-List-Item", "sabp.Radio_Resource_Loading_List_Item_element",
2096 FT_NONE
, BASE_NONE
, NULL
, 0,
2098 { &hf_sabp_available_bandwidth
,
2099 { "available-bandwidth", "sabp.available_bandwidth",
2100 FT_UINT32
, BASE_DEC
, NULL
, 0,
2102 { &hf_sabp_pLMNidentity
,
2103 { "pLMNidentity", "sabp.pLMNidentity",
2104 FT_BYTES
, BASE_NONE
, NULL
, 0,
2107 { "lac", "sabp.lac",
2108 FT_BYTES
, BASE_NONE
, NULL
, 0,
2109 "OCTET_STRING_SIZE_2", HFILL
}},
2111 { "sac", "sabp.sac",
2112 FT_BYTES
, BASE_NONE
, NULL
, 0,
2113 "OCTET_STRING_SIZE_2", HFILL
}},
2114 { &hf_sabp_Service_Areas_List_item
,
2115 { "Service-Area-Identifier", "sabp.Service_Area_Identifier_element",
2116 FT_NONE
, BASE_NONE
, NULL
, 0,
2118 { &hf_sabp_protocolIEs
,
2119 { "protocolIEs", "sabp.protocolIEs",
2120 FT_UINT32
, BASE_DEC
, NULL
, 0,
2121 "ProtocolIE_Container", HFILL
}},
2122 { &hf_sabp_protocolExtensions
,
2123 { "protocolExtensions", "sabp.protocolExtensions",
2124 FT_UINT32
, BASE_DEC
, NULL
, 0,
2125 "ProtocolExtensionContainer", HFILL
}},
2126 { &hf_sabp_initiatingMessage
,
2127 { "initiatingMessage", "sabp.initiatingMessage_element",
2128 FT_NONE
, BASE_NONE
, NULL
, 0,
2130 { &hf_sabp_successfulOutcome
,
2131 { "successfulOutcome", "sabp.successfulOutcome_element",
2132 FT_NONE
, BASE_NONE
, NULL
, 0,
2134 { &hf_sabp_unsuccessfulOutcome
,
2135 { "unsuccessfulOutcome", "sabp.unsuccessfulOutcome_element",
2136 FT_NONE
, BASE_NONE
, NULL
, 0,
2138 { &hf_sabp_initiatingMessage_value
,
2139 { "value", "sabp.initiatingMessage_value_element",
2140 FT_NONE
, BASE_NONE
, NULL
, 0,
2141 "InitiatingMessage_value", HFILL
}},
2142 { &hf_sabp_successfulOutcome_value
,
2143 { "value", "sabp.successfulOutcome_value_element",
2144 FT_NONE
, BASE_NONE
, NULL
, 0,
2145 "SuccessfulOutcome_value", HFILL
}},
2146 { &hf_sabp_unsuccessfulOutcome_value
,
2147 { "value", "sabp.unsuccessfulOutcome_value_element",
2148 FT_NONE
, BASE_NONE
, NULL
, 0,
2149 "UnsuccessfulOutcome_value", HFILL
}},
2152 /* List of subtrees */
2153 static int *ett
[] = {
2156 &ett_sabp_cbs_data_coding
,
2157 &ett_sabp_bcast_msg
,
2158 &ett_sabp_cbs_serial_number
,
2159 &ett_sabp_cbs_new_serial_number
,
2161 &ett_sabp_cbs_page_content
,
2162 &ett_sabp_ProtocolIE_Container
,
2163 &ett_sabp_ProtocolIE_Field
,
2164 &ett_sabp_ProtocolExtensionContainer
,
2165 &ett_sabp_ProtocolExtensionField
,
2166 &ett_sabp_Criticality_Diagnostics
,
2167 &ett_sabp_CriticalityDiagnostics_IE_List
,
2168 &ett_sabp_CriticalityDiagnostics_IE_List_item
,
2169 &ett_sabp_MessageStructure
,
2170 &ett_sabp_MessageStructure_item
,
2171 &ett_sabp_Failure_List
,
2172 &ett_sabp_Failure_List_Item
,
2173 &ett_sabp_Number_of_Broadcasts_Completed_List
,
2174 &ett_sabp_Number_of_Broadcasts_Completed_List_Item
,
2175 &ett_sabp_Radio_Resource_Loading_List
,
2176 &ett_sabp_Radio_Resource_Loading_List_Item
,
2177 &ett_sabp_Service_Area_Identifier
,
2178 &ett_sabp_Service_Areas_List
,
2179 &ett_sabp_Write_Replace
,
2180 &ett_sabp_Write_Replace_Complete
,
2181 &ett_sabp_Write_Replace_Failure
,
2183 &ett_sabp_Kill_Complete
,
2184 &ett_sabp_Kill_Failure
,
2185 &ett_sabp_Load_Query
,
2186 &ett_sabp_Load_Query_Complete
,
2187 &ett_sabp_Load_Query_Failure
,
2188 &ett_sabp_Message_Status_Query
,
2189 &ett_sabp_Message_Status_Query_Complete
,
2190 &ett_sabp_Message_Status_Query_Failure
,
2192 &ett_sabp_Reset_Complete
,
2193 &ett_sabp_Reset_Failure
,
2196 &ett_sabp_Error_Indication
,
2198 &ett_sabp_InitiatingMessage
,
2199 &ett_sabp_SuccessfulOutcome
,
2200 &ett_sabp_UnsuccessfulOutcome
,
2204 /* Register protocol */
2205 proto_sabp
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
2206 /* Register fields and subtrees */
2207 proto_register_field_array(proto_sabp
, hf
, array_length(hf
));
2208 proto_register_subtree_array(ett
, array_length(ett
));
2210 /* Register dissector */
2211 sabp_handle
= register_dissector("sabp", dissect_sabp
, proto_sabp
);
2212 sabp_tcp_handle
= register_dissector("sabp.tcp", dissect_sabp_tcp
, proto_sabp
);
2214 /* Register dissector tables */
2215 sabp_ies_dissector_table
= register_dissector_table("sabp.ies", "SABP-PROTOCOL-IES", proto_sabp
, FT_UINT32
, BASE_DEC
);
2216 sabp_extension_dissector_table
= register_dissector_table("sabp.extension", "SABP-PROTOCOL-EXTENSION", proto_sabp
, FT_UINT32
, BASE_DEC
);
2217 sabp_proc_imsg_dissector_table
= register_dissector_table("sabp.proc.imsg", "SABP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_sabp
, FT_UINT32
, BASE_DEC
);
2218 sabp_proc_sout_dissector_table
= register_dissector_table("sabp.proc.sout", "SABP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_sabp
, FT_UINT32
, BASE_DEC
);
2219 sabp_proc_uout_dissector_table
= register_dissector_table("sabp.proc.uout", "SABP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_sabp
, FT_UINT32
, BASE_DEC
);
2223 /*--- proto_reg_handoff_sabp ---------------------------------------*/
2225 proto_reg_handoff_sabp(void)
2227 dissector_add_uint_with_preference("udp.port", SABP_PORT
, sabp_handle
);
2228 dissector_add_uint_with_preference("tcp.port", SABP_PORT
, sabp_tcp_handle
);
2229 dissector_add_uint("sctp.ppi", SABP_PAYLOAD_PROTOCOL_ID
, sabp_handle
);
2231 dissector_add_uint("sabp.ies", id_Message_Identifier
, create_dissector_handle(dissect_Message_Identifier_PDU
, proto_sabp
));
2232 dissector_add_uint("sabp.ies", id_New_Serial_Number
, create_dissector_handle(dissect_New_Serial_Number_PDU
, proto_sabp
));
2233 dissector_add_uint("sabp.ies", id_Old_Serial_Number
, create_dissector_handle(dissect_Old_Serial_Number_PDU
, proto_sabp
));
2234 dissector_add_uint("sabp.ies", id_Service_Areas_List
, create_dissector_handle(dissect_Service_Areas_List_PDU
, proto_sabp
));
2235 dissector_add_uint("sabp.ies", id_Category
, create_dissector_handle(dissect_Category_PDU
, proto_sabp
));
2236 dissector_add_uint("sabp.ies", id_Repetition_Period
, create_dissector_handle(dissect_Repetition_Period_PDU
, proto_sabp
));
2237 dissector_add_uint("sabp.ies", id_Number_of_Broadcasts_Requested
, create_dissector_handle(dissect_Number_of_Broadcasts_Requested_PDU
, proto_sabp
));
2238 dissector_add_uint("sabp.ies", id_Data_Coding_Scheme
, create_dissector_handle(dissect_Data_Coding_Scheme_PDU
, proto_sabp
));
2239 dissector_add_uint("sabp.ies", id_Broadcast_Message_Content
, create_dissector_handle(dissect_Broadcast_Message_Content_PDU
, proto_sabp
));
2240 dissector_add_uint("sabp.ies", id_Number_of_Broadcasts_Completed_List
, create_dissector_handle(dissect_Number_of_Broadcasts_Completed_List_PDU
, proto_sabp
));
2241 dissector_add_uint("sabp.ies", id_Criticality_Diagnostics
, create_dissector_handle(dissect_Criticality_Diagnostics_PDU
, proto_sabp
));
2242 dissector_add_uint("sabp.ies", id_Failure_List
, create_dissector_handle(dissect_Failure_List_PDU
, proto_sabp
));
2243 dissector_add_uint("sabp.ies", id_Radio_Resource_Loading_List
, create_dissector_handle(dissect_Radio_Resource_Loading_List_PDU
, proto_sabp
));
2244 dissector_add_uint("sabp.ies", id_Recovery_Indication
, create_dissector_handle(dissect_Recovery_Indication_PDU
, proto_sabp
));
2245 dissector_add_uint("sabp.ies", id_Serial_Number
, create_dissector_handle(dissect_Serial_Number_PDU
, proto_sabp
));
2246 dissector_add_uint("sabp.ies", id_Cause
, create_dissector_handle(dissect_Cause_PDU
, proto_sabp
));
2247 dissector_add_uint("sabp.extension", id_MessageStructure
, create_dissector_handle(dissect_MessageStructure_PDU
, proto_sabp
));
2248 dissector_add_uint("sabp.extension", id_TypeOfError
, create_dissector_handle(dissect_TypeOfError_PDU
, proto_sabp
));
2249 dissector_add_uint("sabp.extension", id_Paging_ETWS_Indicator
, create_dissector_handle(dissect_Paging_ETWS_Indicator_PDU
, proto_sabp
));
2250 dissector_add_uint("sabp.extension", id_Warning_Type
, create_dissector_handle(dissect_Warning_Type_PDU
, proto_sabp
));
2251 dissector_add_uint("sabp.extension", id_WarningSecurityInfo
, create_dissector_handle(dissect_WarningSecurityInfo_PDU
, proto_sabp
));
2252 dissector_add_uint("sabp.extension", id_Broadcast_Message_Content_Validity_Indicator
, create_dissector_handle(dissect_Broadcast_Message_Content_Validity_Indicator_PDU
, proto_sabp
));
2253 dissector_add_uint("sabp.proc.imsg", id_Write_Replace
, create_dissector_handle(dissect_Write_Replace_PDU
, proto_sabp
));
2254 dissector_add_uint("sabp.proc.sout", id_Write_Replace
, create_dissector_handle(dissect_Write_Replace_Complete_PDU
, proto_sabp
));
2255 dissector_add_uint("sabp.proc.uout", id_Write_Replace
, create_dissector_handle(dissect_Write_Replace_Failure_PDU
, proto_sabp
));
2256 dissector_add_uint("sabp.proc.imsg", id_Kill
, create_dissector_handle(dissect_Kill_PDU
, proto_sabp
));
2257 dissector_add_uint("sabp.proc.sout", id_Kill
, create_dissector_handle(dissect_Kill_Complete_PDU
, proto_sabp
));
2258 dissector_add_uint("sabp.proc.uout", id_Kill
, create_dissector_handle(dissect_Kill_Failure_PDU
, proto_sabp
));
2259 dissector_add_uint("sabp.proc.imsg", id_Load_Status_Enquiry
, create_dissector_handle(dissect_Load_Query_PDU
, proto_sabp
));
2260 dissector_add_uint("sabp.proc.sout", id_Load_Status_Enquiry
, create_dissector_handle(dissect_Load_Query_Complete_PDU
, proto_sabp
));
2261 dissector_add_uint("sabp.proc.uout", id_Load_Status_Enquiry
, create_dissector_handle(dissect_Load_Query_Failure_PDU
, proto_sabp
));
2262 dissector_add_uint("sabp.proc.imsg", id_Message_Status_Query
, create_dissector_handle(dissect_Message_Status_Query_PDU
, proto_sabp
));
2263 dissector_add_uint("sabp.proc.sout", id_Message_Status_Query
, create_dissector_handle(dissect_Message_Status_Query_Complete_PDU
, proto_sabp
));
2264 dissector_add_uint("sabp.proc.uout", id_Message_Status_Query
, create_dissector_handle(dissect_Message_Status_Query_Failure_PDU
, proto_sabp
));
2265 dissector_add_uint("sabp.proc.imsg", id_Reset
, create_dissector_handle(dissect_Reset_PDU
, proto_sabp
));
2266 dissector_add_uint("sabp.proc.sout", id_Reset
, create_dissector_handle(dissect_Reset_Complete_PDU
, proto_sabp
));
2267 dissector_add_uint("sabp.proc.uout", id_Reset
, create_dissector_handle(dissect_Reset_Failure_PDU
, proto_sabp
));
2268 dissector_add_uint("sabp.proc.imsg", id_Restart_Indication
, create_dissector_handle(dissect_Restart_PDU
, proto_sabp
));
2269 dissector_add_uint("sabp.proc.imsg", id_Failure_Indication
, create_dissector_handle(dissect_Failure_PDU
, proto_sabp
));
2270 dissector_add_uint("sabp.proc.imsg", id_Error_Indication
, create_dissector_handle(dissect_Error_Indication_PDU
, proto_sabp
));