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