228983c13358c835fa2b864942e74c3bcd4a8456
[metze/wireshark/wip.git] / epan / dissectors / packet-lcsap.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-lcsap.c                                                             */
4 /* ../../tools/asn2wrs.py -p lcsap -c ./lcsap.cnf -s ./packet-lcsap-template -D . -O ../../epan/dissectors LCS-AP-CommonDataTypes.asn LCS-AP-Constants.asn LCS-AP-Containers.asn LCS-AP-IEs.asn LCS-AP-PDU-Contents.asn LCS-AP-PDU-Descriptions.asn */
5
6 /* Input file: packet-lcsap-template.c */
7
8 #line 1 "../../asn1/lcsap/packet-lcsap-template.c"
9 /* packet-lcsap.c
10  * Routines for LCS-AP packet dissembly.
11  *
12  * Copyright (c) 2011 by Spenser Sheng <spenser.sheng@ericsson.com>
13  *
14  * $Id: packet-lcsap.c 28770 2011-06-18 21:30:42Z stig  Spenser Sheng$
15  *
16  * Wireshark - Network traffic analyzer
17  * By Gerald Combs <gerald@wireshark.org>
18  * Copyright 1999 Gerald Combs
19  *
20  * This program is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU General Public License
22  * as published by the Free Software Foundation; either version 2
23  * of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with this program; if not, write to the Free Software
32  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
33  * References:
34  * ETSI TS 129 171 V9.2.0 (2010-10)
35  */
36
37 #ifdef HAVE_CONFIG_H
38 # include "config.h"
39 #endif
40
41 #include <glib.h>
42 #include <epan/packet.h>
43
44 #include <stdio.h>
45 #include <string.h>
46 #include <ctype.h>
47 #include <epan/strutil.h>
48 #include <epan/asn1.h>
49 #include <epan/prefs.h>
50 #include <epan/sctpppids.h>
51
52 #include "packet-ber.h"
53 #include "packet-per.h"
54 #include "packet-e212.h"
55 #include "packet-sccp.h"
56
57 #ifdef _MSC_VER
58 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
59 #pragma warning(disable:4146)
60 #endif
61
62 #define PNAME  "LCS Application Protocol"
63 #define PSNAME "LCSAP"
64 #define PFNAME "lcsap"
65
66 static dissector_handle_t lpp_handle;
67 static dissector_handle_t lppa_handle;
68
69 #define SCTP_PORT_LCSAP 9082
70
71 /*--- Included file: packet-lcsap-val.h ---*/
72 #line 1 "../../asn1/lcsap/packet-lcsap-val.h"
73 #define max_No_Of_Points               15
74 #define max_Set                        9
75 #define max_GNSS_Set                   9
76 #define maxProtocolExtensions          65535
77 #define maxProtocolIEs                 65535
78
79 typedef enum _ProcedureCode_enum {
80   id_Location_Service_Request =   0,
81   id_Connection_Oriented_Information_Transfer =   1,
82   id_Connectionless_Information_Transfer =   2,
83   id_Location_Abort =   3,
84   id_Reset     =   4
85 } ProcedureCode_enum;
86
87 typedef enum _ProtocolIE_ID_enum {
88   id_Accuracy_Fulfillment_Indicator =   0,
89   id_APDU      =   1,
90   id_Correlation_ID =   2,
91   id_Destination_ID =   3,
92   id_E_UTRAN_Cell_Identifier =   4,
93   id_Include_Velocity =   5,
94   id_IMEI      =   6,
95   id_IMSI      =   7,
96   id_LCS_Client_Type =   8,
97   id_LCS_Priority =   9,
98   id_LCS_QOS   =  10,
99   id_LCS_Cause =  11,
100   id_Location_Estimate =  12,
101   id_Location_Type =  13,
102   id_MultipleAPDUs =  14,
103   id_Payload_Type =  15,
104   id_Positioning_Data =  16,
105   id_Return_Error_Request =  17,
106   id_Return_Error_Cause =  18,
107   id_Source_Identity =  19,
108   id_UE_Positioning_Capability =  20,
109   id_Velocity_Estimate =  21
110 } ProtocolIE_ID_enum;
111
112 /*--- End of included file: packet-lcsap-val.h ---*/
113 #line 63 "../../asn1/lcsap/packet-lcsap-template.c"
114 /* Strcture to hold ProcedureCode */
115 struct pro_code {
116         guint8 code;
117 } _pro_code;
118
119 /* Initialize the protocol and registered fields */
120 static int proto_lcsap  =   -1;
121
122 /*--- Included file: packet-lcsap-hf.c ---*/
123 #line 1 "../../asn1/lcsap/packet-lcsap-hf.c"
124 static int hf_lcsap_APDU_PDU = -1;                /* APDU */
125 static int hf_lcsap_Accuracy_Fulfillment_Indicator_PDU = -1;  /* Accuracy_Fulfillment_Indicator */
126 static int hf_lcsap_lcsap_Correlation_ID_PDU = -1;  /* Correlation_ID */
127 static int hf_lcsap_E_CGI_PDU = -1;               /* E_CGI */
128 static int hf_lcsap_Geographical_Area_PDU = -1;   /* Geographical_Area */
129 static int hf_lcsap_IMSI_PDU = -1;                /* IMSI */
130 static int hf_lcsap_IMEI_PDU = -1;                /* IMEI */
131 static int hf_lcsap_Include_Velocity_PDU = -1;    /* Include_Velocity */
132 static int hf_lcsap_Location_Type_PDU = -1;       /* Location_Type */
133 static int hf_lcsap_LCS_Cause_PDU = -1;           /* LCS_Cause */
134 static int hf_lcsap_LCS_Client_Type_PDU = -1;     /* LCS_Client_Type */
135 static int hf_lcsap_LCS_Priority_PDU = -1;        /* LCS_Priority */
136 static int hf_lcsap_LCS_QoS_PDU = -1;             /* LCS_QoS */
137 static int hf_lcsap_MultipleAPDUs_PDU = -1;       /* MultipleAPDUs */
138 static int hf_lcsap_Network_Element_PDU = -1;     /* Network_Element */
139 static int hf_lcsap_Payload_Type_PDU = -1;        /* Payload_Type */
140 static int hf_lcsap_Positioning_Data_PDU = -1;    /* Positioning_Data */
141 static int hf_lcsap_Return_Error_Type_PDU = -1;   /* Return_Error_Type */
142 static int hf_lcsap_Return_Error_Cause_PDU = -1;  /* Return_Error_Cause */
143 static int hf_lcsap_UE_Positioning_Capability_PDU = -1;  /* UE_Positioning_Capability */
144 static int hf_lcsap_Velocity_Estimate_PDU = -1;   /* Velocity_Estimate */
145 static int hf_lcsap_Location_Request_PDU = -1;    /* Location_Request */
146 static int hf_lcsap_Location_Response_PDU = -1;   /* Location_Response */
147 static int hf_lcsap_Location_Abort_Request_PDU = -1;  /* Location_Abort_Request */
148 static int hf_lcsap_Connection_Oriented_Information_PDU = -1;  /* Connection_Oriented_Information */
149 static int hf_lcsap_Connectionless_Information_PDU = -1;  /* Connectionless_Information */
150 static int hf_lcsap_Reset_Request_PDU = -1;       /* Reset_Request */
151 static int hf_lcsap_Reset_Acknowledge_PDU = -1;   /* Reset_Acknowledge */
152 static int hf_lcsap_LCS_AP_PDU_PDU = -1;          /* LCS_AP_PDU */
153 static int hf_lcsap_ProtocolIE_Container_item = -1;  /* ProtocolIE_Field */
154 static int hf_lcsap_ieid = -1;                    /* ProtocolIE_ID */
155 static int hf_lcsap_criticality = -1;             /* Criticality */
156 static int hf_lcsap_ie_field_value = -1;          /* T_ie_field_value */
157 static int hf_lcsap_ProtocolExtensionContainer_item = -1;  /* ProtocolExtensionField */
158 static int hf_lcsap_extid = -1;                   /* ProtocolExtensionID */
159 static int hf_lcsap_extensionValue = -1;          /* T_extensionValue */
160 static int hf_lcsap_direction_Of_Altitude = -1;   /* Direction_Of_Altitude */
161 static int hf_lcsap_altitude = -1;                /* Altitude */
162 static int hf_lcsap_pLMNidentity = -1;            /* PLMN_ID */
163 static int hf_lcsap_cell_ID = -1;                 /* CellIdentity */
164 static int hf_lcsap_iE_Extensions = -1;           /* ProtocolExtensionContainer */
165 static int hf_lcsap_geographical_Coordinates = -1;  /* Geographical_Coordinates */
166 static int hf_lcsap_uncertainty_Ellipse = -1;     /* Uncertainty_Ellipse */
167 static int hf_lcsap_confidence = -1;              /* Confidence */
168 static int hf_lcsap_altitude_And_Direction = -1;  /* Altitude_And_Direction */
169 static int hf_lcsap_uncertainty_Altitude = -1;    /* Uncertainty_Altitude */
170 static int hf_lcsap_inner_Radius = -1;            /* Inner_Radius */
171 static int hf_lcsap_uncertainty_Radius = -1;      /* Uncertainty_Code */
172 static int hf_lcsap_offset_Angle = -1;            /* Angle */
173 static int hf_lcsap_included_Angle = -1;          /* Angle */
174 static int hf_lcsap_macro_eNB_ID = -1;            /* Macro_eNB_ID */
175 static int hf_lcsap_home_eNB_ID = -1;             /* Home_eNB_ID */
176 static int hf_lcsap_point = -1;                   /* Point */
177 static int hf_lcsap_point_With_Uncertainty = -1;  /* Point_With_Uncertainty */
178 static int hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse = -1;  /* Ellipsoid_Point_With_Uncertainty_Ellipse */
179 static int hf_lcsap_polygon = -1;                 /* Polygon */
180 static int hf_lcsap_ellipsoid_Point_With_Altitude = -1;  /* Ellipsoid_Point_With_Altitude */
181 static int hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid = -1;  /* Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid */
182 static int hf_lcsap_ellipsoid_Arc = -1;           /* Ellipsoid_Arc */
183 static int hf_lcsap_latitudeSign = -1;            /* LatitudeSign */
184 static int hf_lcsap_degreesLatitude = -1;         /* DegreesLatitude */
185 static int hf_lcsap_degreesLongitude = -1;        /* DegreesLongitude */
186 static int hf_lcsap_pLMN_ID = -1;                 /* PLMN_ID */
187 static int hf_lcsap_eNB_ID = -1;                  /* ENB_ID */
188 static int hf_lcsap_GNSS_Positioning_Data_Set_item = -1;  /* GNSS_Positioning_Method_And_Usage */
189 static int hf_lcsap_bearing = -1;                 /* Bearing */
190 static int hf_lcsap_horizontal_Speed = -1;        /* INTEGER_0_2047 */
191 static int hf_lcsap_horizontal_Speed_And_Bearing = -1;  /* Horizontal_Speed_And_Bearing */
192 static int hf_lcsap_vertical_Velocity = -1;       /* Vertical_Velocity */
193 static int hf_lcsap_uncertainty_Speed = -1;       /* INTEGER_0_255 */
194 static int hf_lcsap_horizontal_Uncertainty_Speed = -1;  /* INTEGER_0_255 */
195 static int hf_lcsap_vertical_Uncertainty_Speed = -1;  /* INTEGER_0_255 */
196 static int hf_lcsap_radio_Network_Layer = -1;     /* Radio_Network_Layer_Cause */
197 static int hf_lcsap_transport_Layer = -1;         /* Transport_Layer_Cause */
198 static int hf_lcsap_protocol = -1;                /* Protocol_Cause */
199 static int hf_lcsap_misc = -1;                    /* Misc_Cause */
200 static int hf_lcsap_horizontal_Accuracy = -1;     /* Horizontal_Accuracy */
201 static int hf_lcsap_vertical_Requested = -1;      /* Vertical_Requested */
202 static int hf_lcsap_vertical_Accuracy = -1;       /* Vertical_Accuracy */
203 static int hf_lcsap_response_Time = -1;           /* Response_Time */
204 static int hf_lcsap_MultipleAPDUs_item = -1;      /* APDU */
205 static int hf_lcsap_global_eNB_ID = -1;           /* Global_eNB_ID */
206 static int hf_lcsap_e_SMLC_ID = -1;               /* E_SMLC_ID */
207 static int hf_lcsap_uncertainty_Code = -1;        /* Uncertainty_Code */
208 static int hf_lcsap_Polygon_item = -1;            /* Polygon_Point */
209 static int hf_lcsap_positioning_Data_Set = -1;    /* Positioning_Data_Set */
210 static int hf_lcsap_gNSS_Positioning_Data_Set = -1;  /* GNSS_Positioning_Data_Set */
211 static int hf_lcsap_Positioning_Data_Set_item = -1;  /* Positioning_Method_And_Usage */
212 static int hf_lcsap_uncertainty_SemiMajor = -1;   /* Uncertainty_Code */
213 static int hf_lcsap_uncertainty_SemiMinor = -1;   /* Uncertainty_Code */
214 static int hf_lcsap_orientation_Major_Axis = -1;  /* Orientation_Major_Axis */
215 static int hf_lcsap_lPP = -1;                     /* BOOLEAN */
216 static int hf_lcsap_horizontal_Velocity = -1;     /* Horizontal_Velocity */
217 static int hf_lcsap_horizontal_With_Vertical_Velocity = -1;  /* Horizontal_With_Vertical_Velocity */
218 static int hf_lcsap_horizontal_Velocity_With_Uncertainty = -1;  /* Horizontal_Velocity_With_Uncertainty */
219 static int hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty = -1;  /* Horizontal_With_Vertical_Velocity_And_Uncertainty */
220 static int hf_lcsap_vertical_Speed = -1;          /* INTEGER_0_255 */
221 static int hf_lcsap_vertical_Speed_Direction = -1;  /* Vertical_Speed_Direction */
222 static int hf_lcsap_protocolIEs = -1;             /* ProtocolIE_Container */
223 static int hf_lcsap_protocolExtensions = -1;      /* ProtocolExtensionContainer */
224 static int hf_lcsap_initiatingMessage = -1;       /* InitiatingMessage */
225 static int hf_lcsap_successfulOutcome = -1;       /* SuccessfulOutcome */
226 static int hf_lcsap_unsuccessfulOutcome = -1;     /* UnsuccessfulOutcome */
227 static int hf_lcsap_procedureCode = -1;           /* ProcedureCode */
228 static int hf_lcsap_initiatingMessagevalue = -1;  /* InitiatingMessage_value */
229 static int hf_lcsap_successfulOutcome_value = -1;  /* SuccessfulOutcome_value */
230 static int hf_lcsap_unsuccessfulOutcome_value = -1;  /* UnsuccessfulOutcome_value */
231
232 /*--- End of included file: packet-lcsap-hf.c ---*/
233 #line 71 "../../asn1/lcsap/packet-lcsap-template.c"
234
235 /* Initialize the subtree pointers */
236 static int ett_lcsap = -1;
237
238
239 /*--- Included file: packet-lcsap-ett.c ---*/
240 #line 1 "../../asn1/lcsap/packet-lcsap-ett.c"
241 static gint ett_lcsap_ProtocolIE_Container = -1;
242 static gint ett_lcsap_ProtocolIE_Field = -1;
243 static gint ett_lcsap_ProtocolExtensionContainer = -1;
244 static gint ett_lcsap_ProtocolExtensionField = -1;
245 static gint ett_lcsap_Altitude_And_Direction = -1;
246 static gint ett_lcsap_E_CGI = -1;
247 static gint ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse = -1;
248 static gint ett_lcsap_Ellipsoid_Point_With_Altitude = -1;
249 static gint ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid = -1;
250 static gint ett_lcsap_Ellipsoid_Arc = -1;
251 static gint ett_lcsap_ENB_ID = -1;
252 static gint ett_lcsap_Geographical_Area = -1;
253 static gint ett_lcsap_Geographical_Coordinates = -1;
254 static gint ett_lcsap_Global_eNB_ID = -1;
255 static gint ett_lcsap_GNSS_Positioning_Data_Set = -1;
256 static gint ett_lcsap_Horizontal_Speed_And_Bearing = -1;
257 static gint ett_lcsap_Horizontal_Velocity = -1;
258 static gint ett_lcsap_Horizontal_With_Vertical_Velocity = -1;
259 static gint ett_lcsap_Horizontal_Velocity_With_Uncertainty = -1;
260 static gint ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty = -1;
261 static gint ett_lcsap_LCS_Cause = -1;
262 static gint ett_lcsap_LCS_QoS = -1;
263 static gint ett_lcsap_MultipleAPDUs = -1;
264 static gint ett_lcsap_Network_Element = -1;
265 static gint ett_lcsap_Point = -1;
266 static gint ett_lcsap_Point_With_Uncertainty = -1;
267 static gint ett_lcsap_Polygon = -1;
268 static gint ett_lcsap_Polygon_Point = -1;
269 static gint ett_lcsap_Positioning_Data = -1;
270 static gint ett_lcsap_Positioning_Data_Set = -1;
271 static gint ett_lcsap_Uncertainty_Ellipse = -1;
272 static gint ett_lcsap_UE_Positioning_Capability = -1;
273 static gint ett_lcsap_Velocity_Estimate = -1;
274 static gint ett_lcsap_Vertical_Velocity = -1;
275 static gint ett_lcsap_Location_Request = -1;
276 static gint ett_lcsap_Location_Response = -1;
277 static gint ett_lcsap_Location_Abort_Request = -1;
278 static gint ett_lcsap_Connection_Oriented_Information = -1;
279 static gint ett_lcsap_Connectionless_Information = -1;
280 static gint ett_lcsap_Reset_Request = -1;
281 static gint ett_lcsap_Reset_Acknowledge = -1;
282 static gint ett_lcsap_LCS_AP_PDU = -1;
283 static gint ett_lcsap_InitiatingMessage = -1;
284 static gint ett_lcsap_SuccessfulOutcome = -1;
285 static gint ett_lcsap_UnsuccessfulOutcome = -1;
286
287 /*--- End of included file: packet-lcsap-ett.c ---*/
288 #line 76 "../../asn1/lcsap/packet-lcsap-template.c"
289
290 /* Global variables */
291 static guint32 ProcedureCode;
292 static guint32 ProtocolIE_ID;
293 static guint32 ProtocolExtensionID;
294 static guint32 PayloadType = -1;
295 static guint gbl_lcsapSctpPort=SCTP_PORT_LCSAP;
296
297 /* Dissector tables */
298 static dissector_table_t lcsap_ies_dissector_table;
299
300 static dissector_table_t lcsap_extension_dissector_table;
301 static dissector_table_t lcsap_proc_imsg_dissector_table;
302 static dissector_table_t lcsap_proc_sout_dissector_table;
303 static dissector_table_t lcsap_proc_uout_dissector_table;
304
305 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
306
307 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
308 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
309 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
310 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
311
312
313 /*--- Included file: packet-lcsap-fn.c ---*/
314 #line 1 "../../asn1/lcsap/packet-lcsap-fn.c"
315
316 static const value_string lcsap_Criticality_vals[] = {
317   {   0, "reject" },
318   {   1, "ignore" },
319   {   2, "notify" },
320   { 0, NULL }
321 };
322
323
324 static int
325 dissect_lcsap_Criticality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
326   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
327                                      3, NULL, FALSE, 0, NULL);
328
329   return offset;
330 }
331
332
333 static const value_string lcsap_ProcedureCode_vals[] = {
334   { id_Location_Service_Request, "id-Location-Service-Request" },
335   { id_Connection_Oriented_Information_Transfer, "id-Connection-Oriented-Information-Transfer" },
336   { id_Connectionless_Information_Transfer, "id-Connectionless-Information-Transfer" },
337   { id_Location_Abort, "id-Location-Abort" },
338   { id_Reset, "id-Reset" },
339   { 0, NULL }
340 };
341
342
343 static int
344 dissect_lcsap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
345   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
346                                                             0U, 255U, &ProcedureCode, FALSE);
347
348 #line 93 "../../asn1/lcsap/lcsap.cnf"
349
350         if (check_col(actx->pinfo->cinfo, COL_INFO))
351         {
352                 guint8 tmp = tvb_get_guint8(tvb, 0);
353                         
354                 if(tmp == 0)
355                                 
356                 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%sReq",
357                            val_to_str(ProcedureCode, lcsap_ProcedureCode_vals,
358                                 "unknown message"));
359
360                 else if(tmp == 32)
361                         col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%sResp",
362                                   val_to_str(ProcedureCode, lcsap_ProcedureCode_vals,
363                                     "unknown message"));
364                         else
365                                 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s",
366                                   val_to_str(ProcedureCode, lcsap_ProcedureCode_vals,   
367                                     "unknown message"));
368  
369         }
370
371         if (ProcedureCode != 0) 
372         {
373                 
374                 _pro_code.code = ProcedureCode;
375  
376                 actx->pinfo->private_data = &_pro_code;
377    
378         }
379
380   return offset;
381 }
382
383
384
385 static int
386 dissect_lcsap_ProtocolExtensionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
387   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
388                                                             0U, 65535U, &ProtocolExtensionID, FALSE);
389
390   return offset;
391 }
392
393
394 static const value_string lcsap_ProtocolIE_ID_vals[] = {
395   { id_Accuracy_Fulfillment_Indicator, "id-Accuracy-Fulfillment-Indicator" },
396   { id_APDU, "id-APDU" },
397   { id_Correlation_ID, "id-Correlation-ID" },
398   { id_Destination_ID, "id-Destination-ID" },
399   { id_E_UTRAN_Cell_Identifier, "id-E-UTRAN-Cell-Identifier" },
400   { id_Include_Velocity, "id-Include-Velocity" },
401   { id_IMEI, "id-IMEI" },
402   { id_IMSI, "id-IMSI" },
403   { id_LCS_Client_Type, "id-LCS-Client-Type" },
404   { id_LCS_Priority, "id-LCS-Priority" },
405   { id_LCS_QOS, "id-LCS-QOS" },
406   { id_LCS_Cause, "id-LCS-Cause" },
407   { id_Location_Estimate, "id-Location-Estimate" },
408   { id_Location_Type, "id-Location-Type" },
409   { id_MultipleAPDUs, "id-MultipleAPDUs" },
410   { id_Payload_Type, "id-Payload-Type" },
411   { id_Positioning_Data, "id-Positioning-Data" },
412   { id_Return_Error_Request, "id-Return-Error-Request" },
413   { id_Return_Error_Cause, "id-Return-Error-Cause" },
414   { id_Source_Identity, "id-Source-Identity" },
415   { id_UE_Positioning_Capability, "id-UE-Positioning-Capability" },
416   { id_Velocity_Estimate, "id-Velocity-Estimate" },
417   { 0, NULL }
418 };
419
420
421 static int
422 dissect_lcsap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
423   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
424                                                             0U, 65535U, &ProtocolIE_ID, FALSE);
425
426 #line 53 "../../asn1/lcsap/lcsap.cnf"
427   if (tree) {
428     proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(lcsap_ProtocolIE_ID_vals), "unknown (%d)"));
429   }
430
431   return offset;
432 }
433
434
435
436 static int
437 dissect_lcsap_T_ie_field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
438   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
439
440   return offset;
441 }
442
443
444 static const per_sequence_t ProtocolIE_Field_sequence[] = {
445   { &hf_lcsap_ieid          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_ID },
446   { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
447   { &hf_lcsap_ie_field_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_T_ie_field_value },
448   { NULL, 0, 0, NULL }
449 };
450
451 static int
452 dissect_lcsap_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
453   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
454                                    ett_lcsap_ProtocolIE_Field, ProtocolIE_Field_sequence);
455
456   return offset;
457 }
458
459
460 static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
461   { &hf_lcsap_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Field },
462 };
463
464 static int
465 dissect_lcsap_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
466   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
467                                                   ett_lcsap_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
468                                                   0, maxProtocolIEs, FALSE);
469
470   return offset;
471 }
472
473
474
475 static int
476 dissect_lcsap_T_extensionValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
477   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
478
479   return offset;
480 }
481
482
483 static const per_sequence_t ProtocolExtensionField_sequence[] = {
484   { &hf_lcsap_extid         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolExtensionID },
485   { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
486   { &hf_lcsap_extensionValue, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_T_extensionValue },
487   { NULL, 0, 0, NULL }
488 };
489
490 static int
491 dissect_lcsap_ProtocolExtensionField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
492   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
493                                    ett_lcsap_ProtocolExtensionField, ProtocolExtensionField_sequence);
494
495   return offset;
496 }
497
498
499 static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
500   { &hf_lcsap_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolExtensionField },
501 };
502
503 static int
504 dissect_lcsap_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
505   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
506                                                   ett_lcsap_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
507                                                   1, maxProtocolExtensions, FALSE);
508
509   return offset;
510 }
511
512
513
514 static int
515 dissect_lcsap_APDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
516 #line 66 "../../asn1/lcsap/lcsap.cnf"
517
518   tvbuff_t *parameter_tvb=NULL;
519   
520   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
521                                        NO_BOUND, NO_BOUND, FALSE, &parameter_tvb);
522
523
524   if (parameter_tvb) {
525     switch (PayloadType) {
526     case 0:
527       /* LPP */
528       if (lpp_handle) {
529         call_dissector(lpp_handle, parameter_tvb, actx->pinfo, tree);
530       }
531       break;
532     case 1:
533       /* LPPa */
534       if (lppa_handle) {
535         call_dissector(lppa_handle, parameter_tvb, actx->pinfo, tree);
536       }
537       break;
538     default:
539       break;
540     }
541   }
542   PayloadType = -1;
543
544
545
546   return offset;
547 }
548
549
550 static const value_string lcsap_Accuracy_Fulfillment_Indicator_vals[] = {
551   {   0, "requested-accuracy-fulfilled" },
552   {   1, "requested-accuracy-not-fulfilled" },
553   { 0, NULL }
554 };
555
556
557 static int
558 dissect_lcsap_Accuracy_Fulfillment_Indicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
559   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
560                                      2, NULL, TRUE, 0, NULL);
561
562   return offset;
563 }
564
565
566
567 static int
568 dissect_lcsap_Altitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
569   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
570                                                             1U, 65535U, NULL, FALSE);
571
572   return offset;
573 }
574
575
576 static const value_string lcsap_Direction_Of_Altitude_vals[] = {
577   {   0, "height" },
578   {   1, "depth" },
579   { 0, NULL }
580 };
581
582
583 static int
584 dissect_lcsap_Direction_Of_Altitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
585   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
586                                      2, NULL, FALSE, 0, NULL);
587
588   return offset;
589 }
590
591
592 static const per_sequence_t Altitude_And_Direction_sequence[] = {
593   { &hf_lcsap_direction_Of_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Direction_Of_Altitude },
594   { &hf_lcsap_altitude      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude },
595   { NULL, 0, 0, NULL }
596 };
597
598 static int
599 dissect_lcsap_Altitude_And_Direction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
600   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
601                                    ett_lcsap_Altitude_And_Direction, Altitude_And_Direction_sequence);
602
603   return offset;
604 }
605
606
607
608 static int
609 dissect_lcsap_Angle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
610   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
611                                                             0U, 179U, NULL, FALSE);
612
613   return offset;
614 }
615
616
617
618 static int
619 dissect_lcsap_Bearing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
620   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
621                                                             0U, 359U, NULL, FALSE);
622
623   return offset;
624 }
625
626
627
628 static int
629 dissect_lcsap_CellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
630   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
631                                      28, 28, FALSE, NULL);
632
633   return offset;
634 }
635
636
637
638 static int
639 dissect_lcsap_Confidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
640   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
641                                                             0U, 100U, NULL, FALSE);
642
643   return offset;
644 }
645
646
647
648 static int
649 dissect_lcsap_Correlation_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
650   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
651                                        4, 4, FALSE, NULL);
652
653   return offset;
654 }
655
656
657
658 static int
659 dissect_lcsap_DegreesLatitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
660   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
661                                                             0U, 8388607U, NULL, FALSE);
662
663   return offset;
664 }
665
666
667
668 static int
669 dissect_lcsap_DegreesLongitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
670   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
671                                                             -8388608, 8388607U, NULL, FALSE);
672
673   return offset;
674 }
675
676
677
678
679 static int
680 dissect_lcsap_PLMN_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
681 #line 164 "../../asn1/lcsap/lcsap.cnf"
682   tvbuff_t *parameter_tvb=NULL;
683   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
684                                        3, 3, FALSE, &parameter_tvb);
685         if(tvb_length(tvb)==0) 
686                 return offset;
687                 
688         if (!parameter_tvb)
689                 return offset;
690         dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, tree, 0, FALSE);
691
692
693   return offset;
694 }
695
696
697 static const per_sequence_t E_CGI_sequence[] = {
698   { &hf_lcsap_pLMNidentity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_PLMN_ID },
699   { &hf_lcsap_cell_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_CellIdentity },
700   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
701   { NULL, 0, 0, NULL }
702 };
703
704 static int
705 dissect_lcsap_E_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
706   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
707                                    ett_lcsap_E_CGI, E_CGI_sequence);
708
709   return offset;
710 }
711
712
713 static const value_string lcsap_LatitudeSign_vals[] = {
714   {   0, "north" },
715   {   1, "south" },
716   { 0, NULL }
717 };
718
719
720 static int
721 dissect_lcsap_LatitudeSign(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
722   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
723                                      2, NULL, FALSE, 0, NULL);
724
725   return offset;
726 }
727
728
729 static const per_sequence_t Geographical_Coordinates_sequence[] = {
730   { &hf_lcsap_latitudeSign  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_LatitudeSign },
731   { &hf_lcsap_degreesLatitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_DegreesLatitude },
732   { &hf_lcsap_degreesLongitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_DegreesLongitude },
733   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
734   { NULL, 0, 0, NULL }
735 };
736
737 static int
738 dissect_lcsap_Geographical_Coordinates(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
740                                    ett_lcsap_Geographical_Coordinates, Geographical_Coordinates_sequence);
741
742   return offset;
743 }
744
745
746
747 static int
748 dissect_lcsap_Uncertainty_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
749   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
750                                                             0U, 127U, NULL, FALSE);
751
752   return offset;
753 }
754
755
756
757 static int
758 dissect_lcsap_Orientation_Major_Axis(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
759   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
760                                                             0U, 89U, NULL, FALSE);
761
762   return offset;
763 }
764
765
766 static const per_sequence_t Uncertainty_Ellipse_sequence[] = {
767   { &hf_lcsap_uncertainty_SemiMajor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
768   { &hf_lcsap_uncertainty_SemiMinor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
769   { &hf_lcsap_orientation_Major_Axis, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Orientation_Major_Axis },
770   { NULL, 0, 0, NULL }
771 };
772
773 static int
774 dissect_lcsap_Uncertainty_Ellipse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
775   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
776                                    ett_lcsap_Uncertainty_Ellipse, Uncertainty_Ellipse_sequence);
777
778   return offset;
779 }
780
781
782 static const per_sequence_t Ellipsoid_Point_With_Uncertainty_Ellipse_sequence[] = {
783   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
784   { &hf_lcsap_uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Ellipse },
785   { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
786   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
787   { NULL, 0, 0, NULL }
788 };
789
790 static int
791 dissect_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
792   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
793                                    ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse, Ellipsoid_Point_With_Uncertainty_Ellipse_sequence);
794
795   return offset;
796 }
797
798
799 static const per_sequence_t Ellipsoid_Point_With_Altitude_sequence[] = {
800   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
801   { &hf_lcsap_altitude_And_Direction, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude_And_Direction },
802   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
803   { NULL, 0, 0, NULL }
804 };
805
806 static int
807 dissect_lcsap_Ellipsoid_Point_With_Altitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
808   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
809                                    ett_lcsap_Ellipsoid_Point_With_Altitude, Ellipsoid_Point_With_Altitude_sequence);
810
811   return offset;
812 }
813
814
815
816 static int
817 dissect_lcsap_Uncertainty_Altitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
818   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
819                                                             0U, 127U, NULL, FALSE);
820
821   return offset;
822 }
823
824
825 static const per_sequence_t Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence[] = {
826   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
827   { &hf_lcsap_altitude_And_Direction, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude_And_Direction },
828   { &hf_lcsap_uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Ellipse },
829   { &hf_lcsap_uncertainty_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Altitude },
830   { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
831   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
832   { NULL, 0, 0, NULL }
833 };
834
835 static int
836 dissect_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
837   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
838                                    ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence);
839
840   return offset;
841 }
842
843
844
845 static int
846 dissect_lcsap_Inner_Radius(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
847   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
848                                                             0U, 65535U, NULL, FALSE);
849
850   return offset;
851 }
852
853
854 static const per_sequence_t Ellipsoid_Arc_sequence[] = {
855   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
856   { &hf_lcsap_inner_Radius  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Inner_Radius },
857   { &hf_lcsap_uncertainty_Radius, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
858   { &hf_lcsap_offset_Angle  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Angle },
859   { &hf_lcsap_included_Angle, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Angle },
860   { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
861   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
862   { NULL, 0, 0, NULL }
863 };
864
865 static int
866 dissect_lcsap_Ellipsoid_Arc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
867   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
868                                    ett_lcsap_Ellipsoid_Arc, Ellipsoid_Arc_sequence);
869
870   return offset;
871 }
872
873
874
875 static int
876 dissect_lcsap_Macro_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
877   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
878                                      20, 20, FALSE, NULL);
879
880   return offset;
881 }
882
883
884
885 static int
886 dissect_lcsap_Home_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
887   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
888                                      28, 28, FALSE, NULL);
889
890   return offset;
891 }
892
893
894 static const value_string lcsap_ENB_ID_vals[] = {
895   {   0, "macro-eNB-ID" },
896   {   1, "home-eNB-ID" },
897   { 0, NULL }
898 };
899
900 static const per_choice_t ENB_ID_choice[] = {
901   {   0, &hf_lcsap_macro_eNB_ID  , ASN1_EXTENSION_ROOT    , dissect_lcsap_Macro_eNB_ID },
902   {   1, &hf_lcsap_home_eNB_ID   , ASN1_EXTENSION_ROOT    , dissect_lcsap_Home_eNB_ID },
903   { 0, NULL, 0, NULL }
904 };
905
906 static int
907 dissect_lcsap_ENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
908   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
909                                  ett_lcsap_ENB_ID, ENB_ID_choice,
910                                  NULL);
911
912   return offset;
913 }
914
915
916
917 static int
918 dissect_lcsap_E_SMLC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
919   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
920                                                             0U, 255U, NULL, FALSE);
921
922   return offset;
923 }
924
925
926 static const per_sequence_t Point_sequence[] = {
927   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
928   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
929   { NULL, 0, 0, NULL }
930 };
931
932 static int
933 dissect_lcsap_Point(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
934   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
935                                    ett_lcsap_Point, Point_sequence);
936
937   return offset;
938 }
939
940
941 static const per_sequence_t Point_With_Uncertainty_sequence[] = {
942   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
943   { &hf_lcsap_uncertainty_Code, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
944   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
945   { NULL, 0, 0, NULL }
946 };
947
948 static int
949 dissect_lcsap_Point_With_Uncertainty(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_lcsap_Point_With_Uncertainty, Point_With_Uncertainty_sequence);
952
953   return offset;
954 }
955
956
957 static const per_sequence_t Polygon_Point_sequence[] = {
958   { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
959   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
960   { NULL, 0, 0, NULL }
961 };
962
963 static int
964 dissect_lcsap_Polygon_Point(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_lcsap_Polygon_Point, Polygon_Point_sequence);
967
968   return offset;
969 }
970
971
972 static const per_sequence_t Polygon_sequence_of[1] = {
973   { &hf_lcsap_Polygon_item  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Polygon_Point },
974 };
975
976 static int
977 dissect_lcsap_Polygon(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
978   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
979                                                   ett_lcsap_Polygon, Polygon_sequence_of,
980                                                   1, max_No_Of_Points, FALSE);
981
982   return offset;
983 }
984
985
986 static const value_string lcsap_Geographical_Area_vals[] = {
987   {   0, "point" },
988   {   1, "point-With-Uncertainty" },
989   {   2, "ellipsoidPoint-With-Uncertainty-Ellipse" },
990   {   3, "polygon" },
991   {   4, "ellipsoid-Point-With-Altitude" },
992   {   5, "ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid" },
993   {   6, "ellipsoid-Arc" },
994   { 0, NULL }
995 };
996
997 static const per_choice_t Geographical_Area_choice[] = {
998   {   0, &hf_lcsap_point         , ASN1_EXTENSION_ROOT    , dissect_lcsap_Point },
999   {   1, &hf_lcsap_point_With_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Point_With_Uncertainty },
1000   {   2, &hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse },
1001   {   3, &hf_lcsap_polygon       , ASN1_EXTENSION_ROOT    , dissect_lcsap_Polygon },
1002   {   4, &hf_lcsap_ellipsoid_Point_With_Altitude, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Altitude },
1003   {   5, &hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid },
1004   {   6, &hf_lcsap_ellipsoid_Arc , ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Arc },
1005   { 0, NULL, 0, NULL }
1006 };
1007
1008 static int
1009 dissect_lcsap_Geographical_Area(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1010   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1011                                  ett_lcsap_Geographical_Area, Geographical_Area_choice,
1012                                  NULL);
1013
1014   return offset;
1015 }
1016
1017
1018 static const per_sequence_t Global_eNB_ID_sequence[] = {
1019   { &hf_lcsap_pLMN_ID       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_PLMN_ID },
1020   { &hf_lcsap_eNB_ID        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ENB_ID },
1021   { NULL, 0, 0, NULL }
1022 };
1023
1024 static int
1025 dissect_lcsap_Global_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1026   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1027                                    ett_lcsap_Global_eNB_ID, Global_eNB_ID_sequence);
1028
1029   return offset;
1030 }
1031
1032
1033
1034 static int
1035 dissect_lcsap_GNSS_Positioning_Method_And_Usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1036   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1037                                        1, 1, FALSE, NULL);
1038
1039   return offset;
1040 }
1041
1042
1043 static const per_sequence_t GNSS_Positioning_Data_Set_sequence_of[1] = {
1044   { &hf_lcsap_GNSS_Positioning_Data_Set_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_GNSS_Positioning_Method_And_Usage },
1045 };
1046
1047 static int
1048 dissect_lcsap_GNSS_Positioning_Data_Set(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1049   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1050                                                   ett_lcsap_GNSS_Positioning_Data_Set, GNSS_Positioning_Data_Set_sequence_of,
1051                                                   1, max_GNSS_Set, FALSE);
1052
1053   return offset;
1054 }
1055
1056
1057
1058 static int
1059 dissect_lcsap_Horizontal_Accuracy(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1060   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1061                                                             0U, 127U, NULL, FALSE);
1062
1063   return offset;
1064 }
1065
1066
1067
1068 static int
1069 dissect_lcsap_INTEGER_0_2047(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1070   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1071                                                             0U, 2047U, NULL, FALSE);
1072
1073   return offset;
1074 }
1075
1076
1077 static const per_sequence_t Horizontal_Speed_And_Bearing_sequence[] = {
1078   { &hf_lcsap_bearing       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Bearing },
1079   { &hf_lcsap_horizontal_Speed, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_2047 },
1080   { NULL, 0, 0, NULL }
1081 };
1082
1083 static int
1084 dissect_lcsap_Horizontal_Speed_And_Bearing(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_lcsap_Horizontal_Speed_And_Bearing, Horizontal_Speed_And_Bearing_sequence);
1087
1088   return offset;
1089 }
1090
1091
1092 static const per_sequence_t Horizontal_Velocity_sequence[] = {
1093   { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1094   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1095   { NULL, 0, 0, NULL }
1096 };
1097
1098 static int
1099 dissect_lcsap_Horizontal_Velocity(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_lcsap_Horizontal_Velocity, Horizontal_Velocity_sequence);
1102
1103   return offset;
1104 }
1105
1106
1107
1108 static int
1109 dissect_lcsap_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1110   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1111                                                             0U, 255U, NULL, FALSE);
1112
1113   return offset;
1114 }
1115
1116
1117 static const value_string lcsap_Vertical_Speed_Direction_vals[] = {
1118   {   0, "upward" },
1119   {   1, "downward" },
1120   { 0, NULL }
1121 };
1122
1123
1124 static int
1125 dissect_lcsap_Vertical_Speed_Direction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1126   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1127                                      2, NULL, FALSE, 0, NULL);
1128
1129   return offset;
1130 }
1131
1132
1133 static const per_sequence_t Vertical_Velocity_sequence[] = {
1134   { &hf_lcsap_vertical_Speed, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1135   { &hf_lcsap_vertical_Speed_Direction, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Speed_Direction },
1136   { NULL, 0, 0, NULL }
1137 };
1138
1139 static int
1140 dissect_lcsap_Vertical_Velocity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1141   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1142                                    ett_lcsap_Vertical_Velocity, Vertical_Velocity_sequence);
1143
1144   return offset;
1145 }
1146
1147
1148 static const per_sequence_t Horizontal_With_Vertical_Velocity_sequence[] = {
1149   { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1150   { &hf_lcsap_vertical_Velocity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Velocity },
1151   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1152   { NULL, 0, 0, NULL }
1153 };
1154
1155 static int
1156 dissect_lcsap_Horizontal_With_Vertical_Velocity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1157   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1158                                    ett_lcsap_Horizontal_With_Vertical_Velocity, Horizontal_With_Vertical_Velocity_sequence);
1159
1160   return offset;
1161 }
1162
1163
1164 static const per_sequence_t Horizontal_Velocity_With_Uncertainty_sequence[] = {
1165   { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1166   { &hf_lcsap_uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1167   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1168   { NULL, 0, 0, NULL }
1169 };
1170
1171 static int
1172 dissect_lcsap_Horizontal_Velocity_With_Uncertainty(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1173   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1174                                    ett_lcsap_Horizontal_Velocity_With_Uncertainty, Horizontal_Velocity_With_Uncertainty_sequence);
1175
1176   return offset;
1177 }
1178
1179
1180 static const per_sequence_t Horizontal_With_Vertical_Velocity_And_Uncertainty_sequence[] = {
1181   { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1182   { &hf_lcsap_vertical_Velocity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Velocity },
1183   { &hf_lcsap_horizontal_Uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1184   { &hf_lcsap_vertical_Uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1185   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1186   { NULL, 0, 0, NULL }
1187 };
1188
1189 static int
1190 dissect_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1191   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1192                                    ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty, Horizontal_With_Vertical_Velocity_And_Uncertainty_sequence);
1193
1194   return offset;
1195 }
1196
1197
1198
1199 static int
1200 dissect_lcsap_IMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1201   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1202                                        3, 8, FALSE, NULL);
1203
1204   return offset;
1205 }
1206
1207
1208
1209 static int
1210 dissect_lcsap_IMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1211   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1212                                        8, 8, FALSE, NULL);
1213
1214   return offset;
1215 }
1216
1217
1218 static const value_string lcsap_Include_Velocity_vals[] = {
1219   {   0, "requested" },
1220   {   1, "not-Requested" },
1221   { 0, NULL }
1222 };
1223
1224
1225 static int
1226 dissect_lcsap_Include_Velocity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1227   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1228                                      2, NULL, TRUE, 0, NULL);
1229
1230   return offset;
1231 }
1232
1233
1234 static const value_string lcsap_Location_Type_vals[] = {
1235   {   0, "geographic-Information" },
1236   {   1, "assistance-Information" },
1237   { 0, NULL }
1238 };
1239
1240
1241 static int
1242 dissect_lcsap_Location_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1243   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1244                                      2, NULL, TRUE, 0, NULL);
1245
1246   return offset;
1247 }
1248
1249
1250 static const value_string lcsap_Radio_Network_Layer_Cause_vals[] = {
1251   {   0, "unspecified" },
1252   { 0, NULL }
1253 };
1254
1255
1256 static int
1257 dissect_lcsap_Radio_Network_Layer_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1258   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1259                                      1, NULL, TRUE, 0, NULL);
1260
1261   return offset;
1262 }
1263
1264
1265 static const value_string lcsap_Transport_Layer_Cause_vals[] = {
1266   {   0, "tranport-Resource-Unavailable" },
1267   {   1, "unspecified" },
1268   { 0, NULL }
1269 };
1270
1271
1272 static int
1273 dissect_lcsap_Transport_Layer_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1274   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1275                                      2, NULL, TRUE, 0, NULL);
1276
1277   return offset;
1278 }
1279
1280
1281 static const value_string lcsap_Protocol_Cause_vals[] = {
1282   {   0, "transfer-Syntax-Error" },
1283   {   1, "abstract-Syntax-Error-Reject" },
1284   {   2, "abstract-Syntax-Error-Ignore-And-Notify" },
1285   {   3, "message-Not-Compatible-With-Receiver-State" },
1286   {   4, "semantic-Error" },
1287   {   5, "unspecified" },
1288   {   6, "abstract-Syntax-Error" },
1289   { 0, NULL }
1290 };
1291
1292
1293 static int
1294 dissect_lcsap_Protocol_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1295   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1296                                      7, NULL, TRUE, 0, NULL);
1297
1298   return offset;
1299 }
1300
1301
1302 static const value_string lcsap_Misc_Cause_vals[] = {
1303   {   0, "processing-Overload" },
1304   {   1, "hardware-Failure" },
1305   {   2, "o-And-M-Intervention" },
1306   {   3, "unspecified" },
1307   { 0, NULL }
1308 };
1309
1310
1311 static int
1312 dissect_lcsap_Misc_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1313   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1314                                      4, NULL, TRUE, 0, NULL);
1315
1316   return offset;
1317 }
1318
1319
1320 static const value_string lcsap_LCS_Cause_vals[] = {
1321   {   0, "radio-Network-Layer" },
1322   {   1, "transport-Layer" },
1323   {   2, "protocol" },
1324   {   3, "misc" },
1325   { 0, NULL }
1326 };
1327
1328 static const per_choice_t LCS_Cause_choice[] = {
1329   {   0, &hf_lcsap_radio_Network_Layer, ASN1_NO_EXTENSIONS     , dissect_lcsap_Radio_Network_Layer_Cause },
1330   {   1, &hf_lcsap_transport_Layer, ASN1_NO_EXTENSIONS     , dissect_lcsap_Transport_Layer_Cause },
1331   {   2, &hf_lcsap_protocol      , ASN1_NO_EXTENSIONS     , dissect_lcsap_Protocol_Cause },
1332   {   3, &hf_lcsap_misc          , ASN1_NO_EXTENSIONS     , dissect_lcsap_Misc_Cause },
1333   { 0, NULL, 0, NULL }
1334 };
1335
1336 static int
1337 dissect_lcsap_LCS_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1338   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1339                                  ett_lcsap_LCS_Cause, LCS_Cause_choice,
1340                                  NULL);
1341
1342   return offset;
1343 }
1344
1345
1346 static const value_string lcsap_LCS_Client_Type_vals[] = {
1347   {   0, "emergency-Services" },
1348   {   1, "value-Added-Services" },
1349   {   2, "pLMN-Operator-Services" },
1350   {   3, "lawful-Intercept-Services" },
1351   {   4, "pLMN-Operator-broadcast-Services" },
1352   {   5, "pLMN-Operator-OM" },
1353   {   6, "pLMN-Operator-Anonymous-Statistics" },
1354   {   7, "pLMN-Operator-Target-MS-Service-Support" },
1355   { 0, NULL }
1356 };
1357
1358
1359 static int
1360 dissect_lcsap_LCS_Client_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1361   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1362                                      8, NULL, TRUE, 0, NULL);
1363
1364   return offset;
1365 }
1366
1367
1368
1369 static int
1370 dissect_lcsap_LCS_Priority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1371   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1372                                        1, 1, FALSE, NULL);
1373
1374   return offset;
1375 }
1376
1377
1378 static const value_string lcsap_Vertical_Requested_vals[] = {
1379   {   0, "vertical-coordinate-Is-Not-Requested" },
1380   {   1, "vertical-coordinate-Is-Requested" },
1381   { 0, NULL }
1382 };
1383
1384
1385 static int
1386 dissect_lcsap_Vertical_Requested(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1387   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1388                                      2, NULL, FALSE, 0, NULL);
1389
1390   return offset;
1391 }
1392
1393
1394
1395 static int
1396 dissect_lcsap_Vertical_Accuracy(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1397   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1398                                                             0U, 127U, NULL, FALSE);
1399
1400   return offset;
1401 }
1402
1403
1404 static const value_string lcsap_Response_Time_vals[] = {
1405   {   0, "low-Delay" },
1406   {   1, "delay-Tolerant" },
1407   { 0, NULL }
1408 };
1409
1410
1411 static int
1412 dissect_lcsap_Response_Time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1413   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1414                                      2, NULL, TRUE, 0, NULL);
1415
1416   return offset;
1417 }
1418
1419
1420 static const per_sequence_t LCS_QoS_sequence[] = {
1421   { &hf_lcsap_horizontal_Accuracy, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Horizontal_Accuracy },
1422   { &hf_lcsap_vertical_Requested, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Vertical_Requested },
1423   { &hf_lcsap_vertical_Accuracy, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Vertical_Accuracy },
1424   { &hf_lcsap_response_Time , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Response_Time },
1425   { NULL, 0, 0, NULL }
1426 };
1427
1428 static int
1429 dissect_lcsap_LCS_QoS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1430   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1431                                    ett_lcsap_LCS_QoS, LCS_QoS_sequence);
1432
1433   return offset;
1434 }
1435
1436
1437 static const per_sequence_t MultipleAPDUs_sequence_of[1] = {
1438   { &hf_lcsap_MultipleAPDUs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_APDU },
1439 };
1440
1441 static int
1442 dissect_lcsap_MultipleAPDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1443   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1444                                                   ett_lcsap_MultipleAPDUs, MultipleAPDUs_sequence_of,
1445                                                   1, 3, FALSE);
1446
1447   return offset;
1448 }
1449
1450
1451 static const value_string lcsap_Network_Element_vals[] = {
1452   {   0, "global-eNB-ID" },
1453   {   1, "e-SMLC-ID" },
1454   { 0, NULL }
1455 };
1456
1457 static const per_choice_t Network_Element_choice[] = {
1458   {   0, &hf_lcsap_global_eNB_ID , ASN1_NO_EXTENSIONS     , dissect_lcsap_Global_eNB_ID },
1459   {   1, &hf_lcsap_e_SMLC_ID     , ASN1_NO_EXTENSIONS     , dissect_lcsap_E_SMLC_ID },
1460   { 0, NULL, 0, NULL }
1461 };
1462
1463 static int
1464 dissect_lcsap_Network_Element(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1465   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1466                                  ett_lcsap_Network_Element, Network_Element_choice,
1467                                  NULL);
1468
1469   return offset;
1470 }
1471
1472
1473 static const value_string lcsap_Payload_Type_vals[] = {
1474   {   0, "lPP" },
1475   {   1, "lPPa" },
1476   { 0, NULL }
1477 };
1478
1479
1480 static int
1481 dissect_lcsap_Payload_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1482   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1483                                      2, &PayloadType, TRUE, 0, NULL);
1484
1485   return offset;
1486 }
1487
1488
1489
1490 static int
1491 dissect_lcsap_Positioning_Method_And_Usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1492   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1493                                        1, 1, FALSE, NULL);
1494
1495   return offset;
1496 }
1497
1498
1499 static const per_sequence_t Positioning_Data_Set_sequence_of[1] = {
1500   { &hf_lcsap_Positioning_Data_Set_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Positioning_Method_And_Usage },
1501 };
1502
1503 static int
1504 dissect_lcsap_Positioning_Data_Set(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1505   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1506                                                   ett_lcsap_Positioning_Data_Set, Positioning_Data_Set_sequence_of,
1507                                                   1, max_Set, FALSE);
1508
1509   return offset;
1510 }
1511
1512
1513 static const per_sequence_t Positioning_Data_sequence[] = {
1514   { &hf_lcsap_positioning_Data_Set, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Positioning_Data_Set },
1515   { &hf_lcsap_gNSS_Positioning_Data_Set, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_GNSS_Positioning_Data_Set },
1516   { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1517   { NULL, 0, 0, NULL }
1518 };
1519
1520 static int
1521 dissect_lcsap_Positioning_Data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1522   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1523                                    ett_lcsap_Positioning_Data, Positioning_Data_sequence);
1524
1525   return offset;
1526 }
1527
1528
1529 static const value_string lcsap_Return_Error_Type_vals[] = {
1530   {   0, "yes" },
1531   {   1, "no" },
1532   { 0, NULL }
1533 };
1534
1535
1536 static int
1537 dissect_lcsap_Return_Error_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1538   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1539                                      2, NULL, FALSE, 0, NULL);
1540
1541   return offset;
1542 }
1543
1544
1545 static const value_string lcsap_Return_Error_Cause_vals[] = {
1546   {   0, "system-Failure" },
1547   {   1, "protocol-Error" },
1548   {   2, "destination-Unknown" },
1549   {   3, "destination-Unreachable" },
1550   {   4, "congestion" },
1551   { 0, NULL }
1552 };
1553
1554
1555 static int
1556 dissect_lcsap_Return_Error_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1557   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1558                                      5, NULL, TRUE, 0, NULL);
1559
1560   return offset;
1561 }
1562
1563
1564
1565 static int
1566 dissect_lcsap_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1567   offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
1568
1569   return offset;
1570 }
1571
1572
1573 static const per_sequence_t UE_Positioning_Capability_sequence[] = {
1574   { &hf_lcsap_lPP           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_BOOLEAN },
1575   { NULL, 0, 0, NULL }
1576 };
1577
1578 static int
1579 dissect_lcsap_UE_Positioning_Capability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1580   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1581                                    ett_lcsap_UE_Positioning_Capability, UE_Positioning_Capability_sequence);
1582
1583   return offset;
1584 }
1585
1586
1587 static const value_string lcsap_Velocity_Estimate_vals[] = {
1588   {   0, "horizontal-Velocity" },
1589   {   1, "horizontal-With-Vertical-Velocity" },
1590   {   2, "horizontal-Velocity-With-Uncertainty" },
1591   {   3, "horizontal-With-Vertical-Velocity-And-Uncertainty" },
1592   { 0, NULL }
1593 };
1594
1595 static const per_choice_t Velocity_Estimate_choice[] = {
1596   {   0, &hf_lcsap_horizontal_Velocity, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_Velocity },
1597   {   1, &hf_lcsap_horizontal_With_Vertical_Velocity, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_With_Vertical_Velocity },
1598   {   2, &hf_lcsap_horizontal_Velocity_With_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_Velocity_With_Uncertainty },
1599   {   3, &hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty },
1600   { 0, NULL, 0, NULL }
1601 };
1602
1603 static int
1604 dissect_lcsap_Velocity_Estimate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1605   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1606                                  ett_lcsap_Velocity_Estimate, Velocity_Estimate_choice,
1607                                  NULL);
1608
1609   return offset;
1610 }
1611
1612
1613 static const per_sequence_t Location_Request_sequence[] = {
1614   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1615   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1616   { NULL, 0, 0, NULL }
1617 };
1618
1619 static int
1620 dissect_lcsap_Location_Request(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1621   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1622                                    ett_lcsap_Location_Request, Location_Request_sequence);
1623
1624   return offset;
1625 }
1626
1627
1628 static const per_sequence_t Location_Response_sequence[] = {
1629   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1630   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1631   { NULL, 0, 0, NULL }
1632 };
1633
1634 static int
1635 dissect_lcsap_Location_Response(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1636   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1637                                    ett_lcsap_Location_Response, Location_Response_sequence);
1638
1639   return offset;
1640 }
1641
1642
1643 static const per_sequence_t Location_Abort_Request_sequence[] = {
1644   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1645   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1646   { NULL, 0, 0, NULL }
1647 };
1648
1649 static int
1650 dissect_lcsap_Location_Abort_Request(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1651   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1652                                    ett_lcsap_Location_Abort_Request, Location_Abort_Request_sequence);
1653
1654   return offset;
1655 }
1656
1657
1658 static const per_sequence_t Connection_Oriented_Information_sequence[] = {
1659   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1660   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1661   { NULL, 0, 0, NULL }
1662 };
1663
1664 static int
1665 dissect_lcsap_Connection_Oriented_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1666   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1667                                    ett_lcsap_Connection_Oriented_Information, Connection_Oriented_Information_sequence);
1668
1669   return offset;
1670 }
1671
1672
1673 static const per_sequence_t Connectionless_Information_sequence[] = {
1674   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1675   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1676   { NULL, 0, 0, NULL }
1677 };
1678
1679 static int
1680 dissect_lcsap_Connectionless_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1681   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1682                                    ett_lcsap_Connectionless_Information, Connectionless_Information_sequence);
1683
1684   return offset;
1685 }
1686
1687
1688 static const per_sequence_t Reset_Request_sequence[] = {
1689   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1690   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1691   { NULL, 0, 0, NULL }
1692 };
1693
1694 static int
1695 dissect_lcsap_Reset_Request(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1696   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1697                                    ett_lcsap_Reset_Request, Reset_Request_sequence);
1698
1699   return offset;
1700 }
1701
1702
1703 static const per_sequence_t Reset_Acknowledge_sequence[] = {
1704   { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
1705   { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1706   { NULL, 0, 0, NULL }
1707 };
1708
1709 static int
1710 dissect_lcsap_Reset_Acknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1711   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1712                                    ett_lcsap_Reset_Acknowledge, Reset_Acknowledge_sequence);
1713
1714   return offset;
1715 }
1716
1717
1718
1719 static int
1720 dissect_lcsap_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1721   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
1722
1723   return offset;
1724 }
1725
1726
1727 static const per_sequence_t InitiatingMessage_sequence[] = {
1728   { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
1729   { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
1730   { &hf_lcsap_initiatingMessagevalue, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_InitiatingMessage_value },
1731   { NULL, 0, 0, NULL }
1732 };
1733
1734 static int
1735 dissect_lcsap_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1736   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1737                                    ett_lcsap_InitiatingMessage, InitiatingMessage_sequence);
1738
1739   return offset;
1740 }
1741
1742
1743
1744 static int
1745 dissect_lcsap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1746   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
1747
1748   return offset;
1749 }
1750
1751
1752 static const per_sequence_t SuccessfulOutcome_sequence[] = {
1753   { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
1754   { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
1755   { &hf_lcsap_successfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_SuccessfulOutcome_value },
1756   { NULL, 0, 0, NULL }
1757 };
1758
1759 static int
1760 dissect_lcsap_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1761   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1762                                    ett_lcsap_SuccessfulOutcome, SuccessfulOutcome_sequence);
1763
1764   return offset;
1765 }
1766
1767
1768
1769 static int
1770 dissect_lcsap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1771   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
1772
1773   return offset;
1774 }
1775
1776
1777 static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
1778   { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
1779   { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
1780   { &hf_lcsap_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_UnsuccessfulOutcome_value },
1781   { NULL, 0, 0, NULL }
1782 };
1783
1784 static int
1785 dissect_lcsap_UnsuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1786   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1787                                    ett_lcsap_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
1788
1789   return offset;
1790 }
1791
1792
1793 static const value_string lcsap_LCS_AP_PDU_vals[] = {
1794   {   0, "initiatingMessage" },
1795   {   1, "successfulOutcome" },
1796   {   2, "unsuccessfulOutcome" },
1797   { 0, NULL }
1798 };
1799
1800 static const per_choice_t LCS_AP_PDU_choice[] = {
1801   {   0, &hf_lcsap_initiatingMessage, ASN1_EXTENSION_ROOT    , dissect_lcsap_InitiatingMessage },
1802   {   1, &hf_lcsap_successfulOutcome, ASN1_EXTENSION_ROOT    , dissect_lcsap_SuccessfulOutcome },
1803   {   2, &hf_lcsap_unsuccessfulOutcome, ASN1_EXTENSION_ROOT    , dissect_lcsap_UnsuccessfulOutcome },
1804   { 0, NULL, 0, NULL }
1805 };
1806
1807 static int
1808 dissect_lcsap_LCS_AP_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1809   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1810                                  ett_lcsap_LCS_AP_PDU, LCS_AP_PDU_choice,
1811                                  NULL);
1812
1813   return offset;
1814 }
1815
1816 /*--- PDUs ---*/
1817
1818 static int dissect_APDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1819   int offset = 0;
1820   asn1_ctx_t asn1_ctx;
1821   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1822   offset = dissect_lcsap_APDU(tvb, offset, &asn1_ctx, tree, hf_lcsap_APDU_PDU);
1823   offset += 7; offset >>= 3;
1824   return offset;
1825 }
1826 static int dissect_Accuracy_Fulfillment_Indicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1827   int offset = 0;
1828   asn1_ctx_t asn1_ctx;
1829   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1830   offset = dissect_lcsap_Accuracy_Fulfillment_Indicator(tvb, offset, &asn1_ctx, tree, hf_lcsap_Accuracy_Fulfillment_Indicator_PDU);
1831   offset += 7; offset >>= 3;
1832   return offset;
1833 }
1834 int dissect_lcsap_Correlation_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1835   int offset = 0;
1836   asn1_ctx_t asn1_ctx;
1837   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1838   offset = dissect_lcsap_Correlation_ID(tvb, offset, &asn1_ctx, tree, hf_lcsap_lcsap_Correlation_ID_PDU);
1839   offset += 7; offset >>= 3;
1840   return offset;
1841 }
1842 static int dissect_E_CGI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1843   int offset = 0;
1844   asn1_ctx_t asn1_ctx;
1845   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1846   offset = dissect_lcsap_E_CGI(tvb, offset, &asn1_ctx, tree, hf_lcsap_E_CGI_PDU);
1847   offset += 7; offset >>= 3;
1848   return offset;
1849 }
1850 static int dissect_Geographical_Area_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1851   int offset = 0;
1852   asn1_ctx_t asn1_ctx;
1853   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1854   offset = dissect_lcsap_Geographical_Area(tvb, offset, &asn1_ctx, tree, hf_lcsap_Geographical_Area_PDU);
1855   offset += 7; offset >>= 3;
1856   return offset;
1857 }
1858 static int dissect_IMSI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1859   int offset = 0;
1860   asn1_ctx_t asn1_ctx;
1861   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1862   offset = dissect_lcsap_IMSI(tvb, offset, &asn1_ctx, tree, hf_lcsap_IMSI_PDU);
1863   offset += 7; offset >>= 3;
1864   return offset;
1865 }
1866 static int dissect_IMEI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1867   int offset = 0;
1868   asn1_ctx_t asn1_ctx;
1869   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1870   offset = dissect_lcsap_IMEI(tvb, offset, &asn1_ctx, tree, hf_lcsap_IMEI_PDU);
1871   offset += 7; offset >>= 3;
1872   return offset;
1873 }
1874 static int dissect_Include_Velocity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1875   int offset = 0;
1876   asn1_ctx_t asn1_ctx;
1877   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1878   offset = dissect_lcsap_Include_Velocity(tvb, offset, &asn1_ctx, tree, hf_lcsap_Include_Velocity_PDU);
1879   offset += 7; offset >>= 3;
1880   return offset;
1881 }
1882 static int dissect_Location_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1883   int offset = 0;
1884   asn1_ctx_t asn1_ctx;
1885   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1886   offset = dissect_lcsap_Location_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Type_PDU);
1887   offset += 7; offset >>= 3;
1888   return offset;
1889 }
1890 static int dissect_LCS_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1891   int offset = 0;
1892   asn1_ctx_t asn1_ctx;
1893   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1894   offset = dissect_lcsap_LCS_Cause(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Cause_PDU);
1895   offset += 7; offset >>= 3;
1896   return offset;
1897 }
1898 static int dissect_LCS_Client_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1899   int offset = 0;
1900   asn1_ctx_t asn1_ctx;
1901   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1902   offset = dissect_lcsap_LCS_Client_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Client_Type_PDU);
1903   offset += 7; offset >>= 3;
1904   return offset;
1905 }
1906 static int dissect_LCS_Priority_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1907   int offset = 0;
1908   asn1_ctx_t asn1_ctx;
1909   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1910   offset = dissect_lcsap_LCS_Priority(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Priority_PDU);
1911   offset += 7; offset >>= 3;
1912   return offset;
1913 }
1914 static int dissect_LCS_QoS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1915   int offset = 0;
1916   asn1_ctx_t asn1_ctx;
1917   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1918   offset = dissect_lcsap_LCS_QoS(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_QoS_PDU);
1919   offset += 7; offset >>= 3;
1920   return offset;
1921 }
1922 static int dissect_MultipleAPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1923   int offset = 0;
1924   asn1_ctx_t asn1_ctx;
1925   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1926   offset = dissect_lcsap_MultipleAPDUs(tvb, offset, &asn1_ctx, tree, hf_lcsap_MultipleAPDUs_PDU);
1927   offset += 7; offset >>= 3;
1928   return offset;
1929 }
1930 static int dissect_Network_Element_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1931   int offset = 0;
1932   asn1_ctx_t asn1_ctx;
1933   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1934   offset = dissect_lcsap_Network_Element(tvb, offset, &asn1_ctx, tree, hf_lcsap_Network_Element_PDU);
1935   offset += 7; offset >>= 3;
1936   return offset;
1937 }
1938 static int dissect_Payload_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1939   int offset = 0;
1940   asn1_ctx_t asn1_ctx;
1941   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1942   offset = dissect_lcsap_Payload_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Payload_Type_PDU);
1943   offset += 7; offset >>= 3;
1944   return offset;
1945 }
1946 static int dissect_Positioning_Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1947   int offset = 0;
1948   asn1_ctx_t asn1_ctx;
1949   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1950   offset = dissect_lcsap_Positioning_Data(tvb, offset, &asn1_ctx, tree, hf_lcsap_Positioning_Data_PDU);
1951   offset += 7; offset >>= 3;
1952   return offset;
1953 }
1954 static int dissect_Return_Error_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1955   int offset = 0;
1956   asn1_ctx_t asn1_ctx;
1957   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1958   offset = dissect_lcsap_Return_Error_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Return_Error_Type_PDU);
1959   offset += 7; offset >>= 3;
1960   return offset;
1961 }
1962 static int dissect_Return_Error_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1963   int offset = 0;
1964   asn1_ctx_t asn1_ctx;
1965   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1966   offset = dissect_lcsap_Return_Error_Cause(tvb, offset, &asn1_ctx, tree, hf_lcsap_Return_Error_Cause_PDU);
1967   offset += 7; offset >>= 3;
1968   return offset;
1969 }
1970 static int dissect_UE_Positioning_Capability_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1971   int offset = 0;
1972   asn1_ctx_t asn1_ctx;
1973   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1974   offset = dissect_lcsap_UE_Positioning_Capability(tvb, offset, &asn1_ctx, tree, hf_lcsap_UE_Positioning_Capability_PDU);
1975   offset += 7; offset >>= 3;
1976   return offset;
1977 }
1978 static int dissect_Velocity_Estimate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1979   int offset = 0;
1980   asn1_ctx_t asn1_ctx;
1981   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1982   offset = dissect_lcsap_Velocity_Estimate(tvb, offset, &asn1_ctx, tree, hf_lcsap_Velocity_Estimate_PDU);
1983   offset += 7; offset >>= 3;
1984   return offset;
1985 }
1986 static int dissect_Location_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1987   int offset = 0;
1988   asn1_ctx_t asn1_ctx;
1989   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1990   offset = dissect_lcsap_Location_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Request_PDU);
1991   offset += 7; offset >>= 3;
1992   return offset;
1993 }
1994 static int dissect_Location_Response_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1995   int offset = 0;
1996   asn1_ctx_t asn1_ctx;
1997   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1998   offset = dissect_lcsap_Location_Response(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Response_PDU);
1999   offset += 7; offset >>= 3;
2000   return offset;
2001 }
2002 static int dissect_Location_Abort_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2003   int offset = 0;
2004   asn1_ctx_t asn1_ctx;
2005   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2006   offset = dissect_lcsap_Location_Abort_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Abort_Request_PDU);
2007   offset += 7; offset >>= 3;
2008   return offset;
2009 }
2010 static int dissect_Connection_Oriented_Information_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2011   int offset = 0;
2012   asn1_ctx_t asn1_ctx;
2013   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2014   offset = dissect_lcsap_Connection_Oriented_Information(tvb, offset, &asn1_ctx, tree, hf_lcsap_Connection_Oriented_Information_PDU);
2015   offset += 7; offset >>= 3;
2016   return offset;
2017 }
2018 static int dissect_Connectionless_Information_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2019   int offset = 0;
2020   asn1_ctx_t asn1_ctx;
2021   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2022   offset = dissect_lcsap_Connectionless_Information(tvb, offset, &asn1_ctx, tree, hf_lcsap_Connectionless_Information_PDU);
2023   offset += 7; offset >>= 3;
2024   return offset;
2025 }
2026 static int dissect_Reset_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2027   int offset = 0;
2028   asn1_ctx_t asn1_ctx;
2029   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2030   offset = dissect_lcsap_Reset_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Reset_Request_PDU);
2031   offset += 7; offset >>= 3;
2032   return offset;
2033 }
2034 static int dissect_Reset_Acknowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2035   int offset = 0;
2036   asn1_ctx_t asn1_ctx;
2037   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2038   offset = dissect_lcsap_Reset_Acknowledge(tvb, offset, &asn1_ctx, tree, hf_lcsap_Reset_Acknowledge_PDU);
2039   offset += 7; offset >>= 3;
2040   return offset;
2041 }
2042 static int dissect_LCS_AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2043   int offset = 0;
2044   asn1_ctx_t asn1_ctx;
2045   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
2046   offset = dissect_lcsap_LCS_AP_PDU(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_AP_PDU_PDU);
2047   offset += 7; offset >>= 3;
2048   return offset;
2049 }
2050
2051
2052 /*--- End of included file: packet-lcsap-fn.c ---*/
2053 #line 100 "../../asn1/lcsap/packet-lcsap-template.c"
2054
2055 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2056 {
2057   return (dissector_try_uint(lcsap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0;
2058 }
2059
2060
2061 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2062 {
2063   return (dissector_try_uint(lcsap_extension_dissector_table, ProtocolExtensionID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0;
2064 }
2065
2066 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2067 {
2068   return (dissector_try_uint(lcsap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_length(tvb) : 0;
2069 }
2070
2071 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2072 {
2073   return (dissector_try_uint(lcsap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_length(tvb) : 0;
2074 }
2075
2076 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2077 {
2078   return (dissector_try_uint(lcsap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_length(tvb) : 0;
2079 }
2080
2081
2082 static void
2083 dissect_lcsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2084 {
2085         proto_item      *lcsap_item = NULL;
2086         proto_tree      *lcsap_tree = NULL;
2087
2088         /* make entry in the Protocol column on summary display */
2089         if (check_col(pinfo->cinfo, COL_PROTOCOL))
2090                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "LCSAP");
2091
2092         /* create the lcsap protocol tree */
2093         lcsap_item = proto_tree_add_item(tree, proto_lcsap, tvb, 0, -1, ENC_NA);
2094         lcsap_tree = proto_item_add_subtree(lcsap_item, ett_lcsap);
2095
2096         dissect_LCS_AP_PDU_PDU(tvb, pinfo, lcsap_tree);
2097 }
2098
2099 /*--- proto_reg_handoff_lcsap ---------------------------------------*/
2100 void
2101 proto_reg_handoff_lcsap(void)
2102 {
2103         static gboolean Initialized=FALSE;
2104         static dissector_handle_t lcsap_handle;
2105         static guint SctpPort;
2106
2107         if (!Initialized) {
2108                 lcsap_handle = find_dissector("lcsap");
2109                 lpp_handle = find_dissector("lpp");
2110                 lppa_handle = find_dissector("lppa");
2111                 dissector_add_handle("sctp.port", lcsap_handle);   /* for "decode-as"  */
2112                 dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID,   lcsap_handle);
2113                 Initialized=TRUE;
2114
2115 /*--- Included file: packet-lcsap-dis-tab.c ---*/
2116 #line 1 "../../asn1/lcsap/packet-lcsap-dis-tab.c"
2117   dissector_add_uint("lcsap.ies", id_Accuracy_Fulfillment_Indicator, new_create_dissector_handle(dissect_Accuracy_Fulfillment_Indicator_PDU, proto_lcsap));
2118   dissector_add_uint("lcsap.ies", id_APDU, new_create_dissector_handle(dissect_APDU_PDU, proto_lcsap));
2119   dissector_add_uint("lcsap.ies", id_Correlation_ID, new_create_dissector_handle(dissect_lcsap_Correlation_ID_PDU, proto_lcsap));
2120   dissector_add_uint("lcsap.ies", id_Destination_ID, new_create_dissector_handle(dissect_Network_Element_PDU, proto_lcsap));
2121   dissector_add_uint("lcsap.ies", id_E_UTRAN_Cell_Identifier, new_create_dissector_handle(dissect_E_CGI_PDU, proto_lcsap));
2122   dissector_add_uint("lcsap.ies", id_Include_Velocity, new_create_dissector_handle(dissect_Include_Velocity_PDU, proto_lcsap));
2123   dissector_add_uint("lcsap.ies", id_IMEI, new_create_dissector_handle(dissect_IMEI_PDU, proto_lcsap));
2124   dissector_add_uint("lcsap.ies", id_IMSI, new_create_dissector_handle(dissect_IMSI_PDU, proto_lcsap));
2125   dissector_add_uint("lcsap.ies", id_LCS_Client_Type, new_create_dissector_handle(dissect_LCS_Client_Type_PDU, proto_lcsap));
2126   dissector_add_uint("lcsap.ies", id_LCS_Priority, new_create_dissector_handle(dissect_LCS_Priority_PDU, proto_lcsap));
2127   dissector_add_uint("lcsap.ies", id_LCS_QOS, new_create_dissector_handle(dissect_LCS_QoS_PDU, proto_lcsap));
2128   dissector_add_uint("lcsap.ies", id_LCS_Cause, new_create_dissector_handle(dissect_LCS_Cause_PDU, proto_lcsap));
2129   dissector_add_uint("lcsap.ies", id_Location_Estimate, new_create_dissector_handle(dissect_Geographical_Area_PDU, proto_lcsap));
2130   dissector_add_uint("lcsap.ies", id_Location_Type, new_create_dissector_handle(dissect_Location_Type_PDU, proto_lcsap));
2131   dissector_add_uint("lcsap.ies", id_MultipleAPDUs, new_create_dissector_handle(dissect_MultipleAPDUs_PDU, proto_lcsap));
2132   dissector_add_uint("lcsap.ies", id_Payload_Type, new_create_dissector_handle(dissect_Payload_Type_PDU, proto_lcsap));
2133   dissector_add_uint("lcsap.ies", id_Positioning_Data, new_create_dissector_handle(dissect_Positioning_Data_PDU, proto_lcsap));
2134   dissector_add_uint("lcsap.ies", id_Return_Error_Request, new_create_dissector_handle(dissect_Return_Error_Type_PDU, proto_lcsap));
2135   dissector_add_uint("lcsap.ies", id_Return_Error_Cause, new_create_dissector_handle(dissect_Return_Error_Cause_PDU, proto_lcsap));
2136   dissector_add_uint("lcsap.ies", id_Source_Identity, new_create_dissector_handle(dissect_Network_Element_PDU, proto_lcsap));
2137   dissector_add_uint("lcsap.ies", id_UE_Positioning_Capability, new_create_dissector_handle(dissect_UE_Positioning_Capability_PDU, proto_lcsap));
2138   dissector_add_uint("lcsap.ies", id_Velocity_Estimate, new_create_dissector_handle(dissect_Velocity_Estimate_PDU, proto_lcsap));
2139   dissector_add_uint("lcsap.proc.imsg", id_Location_Service_Request, new_create_dissector_handle(dissect_Location_Request_PDU, proto_lcsap));
2140   dissector_add_uint("lcsap.proc.sout", id_Location_Service_Request, new_create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
2141   dissector_add_uint("lcsap.proc.uout", id_Location_Service_Request, new_create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
2142   dissector_add_uint("lcsap.proc.imsg", id_Connection_Oriented_Information_Transfer, new_create_dissector_handle(dissect_Connection_Oriented_Information_PDU, proto_lcsap));
2143   dissector_add_uint("lcsap.proc.imsg", id_Connectionless_Information_Transfer, new_create_dissector_handle(dissect_Connectionless_Information_PDU, proto_lcsap));
2144   dissector_add_uint("lcsap.proc.uout", id_Connectionless_Information_Transfer, new_create_dissector_handle(dissect_Connectionless_Information_PDU, proto_lcsap));
2145   dissector_add_uint("lcsap.proc.imsg", id_Location_Abort, new_create_dissector_handle(dissect_Location_Abort_Request_PDU, proto_lcsap));
2146   dissector_add_uint("lcsap.proc.sout", id_Location_Abort, new_create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
2147   dissector_add_uint("lcsap.proc.imsg", id_Reset, new_create_dissector_handle(dissect_Reset_Request_PDU, proto_lcsap));
2148   dissector_add_uint("lcsap.proc.sout", id_Reset, new_create_dissector_handle(dissect_Reset_Acknowledge_PDU, proto_lcsap));
2149
2150
2151 /*--- End of included file: packet-lcsap-dis-tab.c ---*/
2152 #line 161 "../../asn1/lcsap/packet-lcsap-template.c"
2153         } else {
2154                 if (SctpPort != 0) {
2155                         dissector_delete_uint("sctp.port", SctpPort, lcsap_handle);
2156                 }
2157         }
2158
2159         SctpPort=gbl_lcsapSctpPort;
2160         if (SctpPort != 0) {
2161                 dissector_add_uint("sctp.port", SctpPort, lcsap_handle);
2162         }
2163 }
2164
2165 /*--- proto_register_lcsap -------------------------------------------*/
2166 void proto_register_lcsap(void) {
2167
2168   /* List of fields */
2169   static hf_register_info hf[] = {
2170
2171 /*--- Included file: packet-lcsap-hfarr.c ---*/
2172 #line 1 "../../asn1/lcsap/packet-lcsap-hfarr.c"
2173     { &hf_lcsap_APDU_PDU,
2174       { "APDU", "lcsap.APDU",
2175         FT_BYTES, BASE_NONE, NULL, 0,
2176         NULL, HFILL }},
2177     { &hf_lcsap_Accuracy_Fulfillment_Indicator_PDU,
2178       { "Accuracy-Fulfillment-Indicator", "lcsap.Accuracy_Fulfillment_Indicator",
2179         FT_UINT32, BASE_DEC, VALS(lcsap_Accuracy_Fulfillment_Indicator_vals), 0,
2180         NULL, HFILL }},
2181     { &hf_lcsap_lcsap_Correlation_ID_PDU,
2182       { "Correlation-ID", "lcsap.Correlation_ID",
2183         FT_BYTES, BASE_NONE, NULL, 0,
2184         NULL, HFILL }},
2185     { &hf_lcsap_E_CGI_PDU,
2186       { "E-CGI", "lcsap.E_CGI",
2187         FT_NONE, BASE_NONE, NULL, 0,
2188         NULL, HFILL }},
2189     { &hf_lcsap_Geographical_Area_PDU,
2190       { "Geographical-Area", "lcsap.Geographical_Area",
2191         FT_UINT32, BASE_DEC, VALS(lcsap_Geographical_Area_vals), 0,
2192         NULL, HFILL }},
2193     { &hf_lcsap_IMSI_PDU,
2194       { "IMSI", "lcsap.IMSI",
2195         FT_BYTES, BASE_NONE, NULL, 0,
2196         NULL, HFILL }},
2197     { &hf_lcsap_IMEI_PDU,
2198       { "IMEI", "lcsap.IMEI",
2199         FT_BYTES, BASE_NONE, NULL, 0,
2200         NULL, HFILL }},
2201     { &hf_lcsap_Include_Velocity_PDU,
2202       { "Include-Velocity", "lcsap.Include_Velocity",
2203         FT_UINT32, BASE_DEC, VALS(lcsap_Include_Velocity_vals), 0,
2204         NULL, HFILL }},
2205     { &hf_lcsap_Location_Type_PDU,
2206       { "Location-Type", "lcsap.Location_Type",
2207         FT_UINT32, BASE_DEC, VALS(lcsap_Location_Type_vals), 0,
2208         NULL, HFILL }},
2209     { &hf_lcsap_LCS_Cause_PDU,
2210       { "LCS-Cause", "lcsap.LCS_Cause",
2211         FT_UINT32, BASE_DEC, VALS(lcsap_LCS_Cause_vals), 0,
2212         NULL, HFILL }},
2213     { &hf_lcsap_LCS_Client_Type_PDU,
2214       { "LCS-Client-Type", "lcsap.LCS_Client_Type",
2215         FT_UINT32, BASE_DEC, VALS(lcsap_LCS_Client_Type_vals), 0,
2216         NULL, HFILL }},
2217     { &hf_lcsap_LCS_Priority_PDU,
2218       { "LCS-Priority", "lcsap.LCS_Priority",
2219         FT_BYTES, BASE_NONE, NULL, 0,
2220         NULL, HFILL }},
2221     { &hf_lcsap_LCS_QoS_PDU,
2222       { "LCS-QoS", "lcsap.LCS_QoS",
2223         FT_NONE, BASE_NONE, NULL, 0,
2224         NULL, HFILL }},
2225     { &hf_lcsap_MultipleAPDUs_PDU,
2226       { "MultipleAPDUs", "lcsap.MultipleAPDUs",
2227         FT_UINT32, BASE_DEC, NULL, 0,
2228         NULL, HFILL }},
2229     { &hf_lcsap_Network_Element_PDU,
2230       { "Network-Element", "lcsap.Network_Element",
2231         FT_UINT32, BASE_DEC, VALS(lcsap_Network_Element_vals), 0,
2232         NULL, HFILL }},
2233     { &hf_lcsap_Payload_Type_PDU,
2234       { "Payload-Type", "lcsap.Payload_Type",
2235         FT_UINT32, BASE_DEC, VALS(lcsap_Payload_Type_vals), 0,
2236         NULL, HFILL }},
2237     { &hf_lcsap_Positioning_Data_PDU,
2238       { "Positioning-Data", "lcsap.Positioning_Data",
2239         FT_NONE, BASE_NONE, NULL, 0,
2240         NULL, HFILL }},
2241     { &hf_lcsap_Return_Error_Type_PDU,
2242       { "Return-Error-Type", "lcsap.Return_Error_Type",
2243         FT_UINT32, BASE_DEC, VALS(lcsap_Return_Error_Type_vals), 0,
2244         NULL, HFILL }},
2245     { &hf_lcsap_Return_Error_Cause_PDU,
2246       { "Return-Error-Cause", "lcsap.Return_Error_Cause",
2247         FT_UINT32, BASE_DEC, VALS(lcsap_Return_Error_Cause_vals), 0,
2248         NULL, HFILL }},
2249     { &hf_lcsap_UE_Positioning_Capability_PDU,
2250       { "UE-Positioning-Capability", "lcsap.UE_Positioning_Capability",
2251         FT_NONE, BASE_NONE, NULL, 0,
2252         NULL, HFILL }},
2253     { &hf_lcsap_Velocity_Estimate_PDU,
2254       { "Velocity-Estimate", "lcsap.Velocity_Estimate",
2255         FT_UINT32, BASE_DEC, VALS(lcsap_Velocity_Estimate_vals), 0,
2256         NULL, HFILL }},
2257     { &hf_lcsap_Location_Request_PDU,
2258       { "Location-Request", "lcsap.Location_Request",
2259         FT_NONE, BASE_NONE, NULL, 0,
2260         NULL, HFILL }},
2261     { &hf_lcsap_Location_Response_PDU,
2262       { "Location-Response", "lcsap.Location_Response",
2263         FT_NONE, BASE_NONE, NULL, 0,
2264         NULL, HFILL }},
2265     { &hf_lcsap_Location_Abort_Request_PDU,
2266       { "Location-Abort-Request", "lcsap.Location_Abort_Request",
2267         FT_NONE, BASE_NONE, NULL, 0,
2268         NULL, HFILL }},
2269     { &hf_lcsap_Connection_Oriented_Information_PDU,
2270       { "Connection-Oriented-Information", "lcsap.Connection_Oriented_Information",
2271         FT_NONE, BASE_NONE, NULL, 0,
2272         NULL, HFILL }},
2273     { &hf_lcsap_Connectionless_Information_PDU,
2274       { "Connectionless-Information", "lcsap.Connectionless_Information",
2275         FT_NONE, BASE_NONE, NULL, 0,
2276         NULL, HFILL }},
2277     { &hf_lcsap_Reset_Request_PDU,
2278       { "Reset-Request", "lcsap.Reset_Request",
2279         FT_NONE, BASE_NONE, NULL, 0,
2280         NULL, HFILL }},
2281     { &hf_lcsap_Reset_Acknowledge_PDU,
2282       { "Reset-Acknowledge", "lcsap.Reset_Acknowledge",
2283         FT_NONE, BASE_NONE, NULL, 0,
2284         NULL, HFILL }},
2285     { &hf_lcsap_LCS_AP_PDU_PDU,
2286       { "LCS-AP-PDU", "lcsap.LCS_AP_PDU",
2287         FT_UINT32, BASE_DEC, VALS(lcsap_LCS_AP_PDU_vals), 0,
2288         NULL, HFILL }},
2289     { &hf_lcsap_ProtocolIE_Container_item,
2290       { "ProtocolIE-Field", "lcsap.ProtocolIE_Field",
2291         FT_NONE, BASE_NONE, NULL, 0,
2292         NULL, HFILL }},
2293     { &hf_lcsap_ieid,
2294       { "ieid", "lcsap.ieid",
2295         FT_UINT32, BASE_DEC, VALS(lcsap_ProtocolIE_ID_vals), 0,
2296         "ProtocolIE_ID", HFILL }},
2297     { &hf_lcsap_criticality,
2298       { "criticality", "lcsap.criticality",
2299         FT_UINT32, BASE_DEC, VALS(lcsap_Criticality_vals), 0,
2300         NULL, HFILL }},
2301     { &hf_lcsap_ie_field_value,
2302       { "value", "lcsap.value",
2303         FT_NONE, BASE_NONE, NULL, 0,
2304         "T_ie_field_value", HFILL }},
2305     { &hf_lcsap_ProtocolExtensionContainer_item,
2306       { "ProtocolExtensionField", "lcsap.ProtocolExtensionField",
2307         FT_NONE, BASE_NONE, NULL, 0,
2308         NULL, HFILL }},
2309     { &hf_lcsap_extid,
2310       { "extid", "lcsap.extid",
2311         FT_UINT8, BASE_DEC, VALS(lcsap_ProtocolIE_ID_vals), 0,
2312         "ProtocolExtensionID", HFILL }},
2313     { &hf_lcsap_extensionValue,
2314       { "extensionValue", "lcsap.extensionValue",
2315         FT_NONE, BASE_NONE, NULL, 0,
2316         NULL, HFILL }},
2317     { &hf_lcsap_direction_Of_Altitude,
2318       { "direction-Of-Altitude", "lcsap.direction_Of_Altitude",
2319         FT_UINT32, BASE_DEC, VALS(lcsap_Direction_Of_Altitude_vals), 0,
2320         NULL, HFILL }},
2321     { &hf_lcsap_altitude,
2322       { "altitude", "lcsap.altitude",
2323         FT_UINT32, BASE_DEC, NULL, 0,
2324         NULL, HFILL }},
2325     { &hf_lcsap_pLMNidentity,
2326       { "pLMNidentity", "lcsap.pLMNidentity",
2327         FT_BYTES, BASE_NONE, NULL, 0,
2328         "PLMN_ID", HFILL }},
2329     { &hf_lcsap_cell_ID,
2330       { "cell-ID", "lcsap.cell_ID",
2331         FT_BYTES, BASE_NONE, NULL, 0,
2332         "CellIdentity", HFILL }},
2333     { &hf_lcsap_iE_Extensions,
2334       { "iE-Extensions", "lcsap.iE_Extensions",
2335         FT_UINT32, BASE_DEC, NULL, 0,
2336         "ProtocolExtensionContainer", HFILL }},
2337     { &hf_lcsap_geographical_Coordinates,
2338       { "geographical-Coordinates", "lcsap.geographical_Coordinates",
2339         FT_NONE, BASE_NONE, NULL, 0,
2340         NULL, HFILL }},
2341     { &hf_lcsap_uncertainty_Ellipse,
2342       { "uncertainty-Ellipse", "lcsap.uncertainty_Ellipse",
2343         FT_NONE, BASE_NONE, NULL, 0,
2344         NULL, HFILL }},
2345     { &hf_lcsap_confidence,
2346       { "confidence", "lcsap.confidence",
2347         FT_UINT32, BASE_DEC, NULL, 0,
2348         NULL, HFILL }},
2349     { &hf_lcsap_altitude_And_Direction,
2350       { "altitude-And-Direction", "lcsap.altitude_And_Direction",
2351         FT_NONE, BASE_NONE, NULL, 0,
2352         NULL, HFILL }},
2353     { &hf_lcsap_uncertainty_Altitude,
2354       { "uncertainty-Altitude", "lcsap.uncertainty_Altitude",
2355         FT_UINT32, BASE_DEC, NULL, 0,
2356         NULL, HFILL }},
2357     { &hf_lcsap_inner_Radius,
2358       { "inner-Radius", "lcsap.inner_Radius",
2359         FT_UINT32, BASE_DEC, NULL, 0,
2360         NULL, HFILL }},
2361     { &hf_lcsap_uncertainty_Radius,
2362       { "uncertainty-Radius", "lcsap.uncertainty_Radius",
2363         FT_UINT32, BASE_DEC, NULL, 0,
2364         "Uncertainty_Code", HFILL }},
2365     { &hf_lcsap_offset_Angle,
2366       { "offset-Angle", "lcsap.offset_Angle",
2367         FT_UINT32, BASE_DEC, NULL, 0,
2368         "Angle", HFILL }},
2369     { &hf_lcsap_included_Angle,
2370       { "included-Angle", "lcsap.included_Angle",
2371         FT_UINT32, BASE_DEC, NULL, 0,
2372         "Angle", HFILL }},
2373     { &hf_lcsap_macro_eNB_ID,
2374       { "macro-eNB-ID", "lcsap.macro_eNB_ID",
2375         FT_BYTES, BASE_NONE, NULL, 0,
2376         NULL, HFILL }},
2377     { &hf_lcsap_home_eNB_ID,
2378       { "home-eNB-ID", "lcsap.home_eNB_ID",
2379         FT_BYTES, BASE_NONE, NULL, 0,
2380         NULL, HFILL }},
2381     { &hf_lcsap_point,
2382       { "point", "lcsap.point",
2383         FT_NONE, BASE_NONE, NULL, 0,
2384         NULL, HFILL }},
2385     { &hf_lcsap_point_With_Uncertainty,
2386       { "point-With-Uncertainty", "lcsap.point_With_Uncertainty",
2387         FT_NONE, BASE_NONE, NULL, 0,
2388         NULL, HFILL }},
2389     { &hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse,
2390       { "ellipsoidPoint-With-Uncertainty-Ellipse", "lcsap.ellipsoidPoint_With_Uncertainty_Ellipse",
2391         FT_NONE, BASE_NONE, NULL, 0,
2392         "Ellipsoid_Point_With_Uncertainty_Ellipse", HFILL }},
2393     { &hf_lcsap_polygon,
2394       { "polygon", "lcsap.polygon",
2395         FT_UINT32, BASE_DEC, NULL, 0,
2396         NULL, HFILL }},
2397     { &hf_lcsap_ellipsoid_Point_With_Altitude,
2398       { "ellipsoid-Point-With-Altitude", "lcsap.ellipsoid_Point_With_Altitude",
2399         FT_NONE, BASE_NONE, NULL, 0,
2400         NULL, HFILL }},
2401     { &hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
2402       { "ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid", "lcsap.ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid",
2403         FT_NONE, BASE_NONE, NULL, 0,
2404         NULL, HFILL }},
2405     { &hf_lcsap_ellipsoid_Arc,
2406       { "ellipsoid-Arc", "lcsap.ellipsoid_Arc",
2407         FT_NONE, BASE_NONE, NULL, 0,
2408         NULL, HFILL }},
2409     { &hf_lcsap_latitudeSign,
2410       { "latitudeSign", "lcsap.latitudeSign",
2411         FT_UINT32, BASE_DEC, VALS(lcsap_LatitudeSign_vals), 0,
2412         NULL, HFILL }},
2413     { &hf_lcsap_degreesLatitude,
2414       { "degreesLatitude", "lcsap.degreesLatitude",
2415         FT_UINT32, BASE_DEC, NULL, 0,
2416         NULL, HFILL }},
2417     { &hf_lcsap_degreesLongitude,
2418       { "degreesLongitude", "lcsap.degreesLongitude",
2419         FT_INT32, BASE_DEC, NULL, 0,
2420         NULL, HFILL }},
2421     { &hf_lcsap_pLMN_ID,
2422       { "pLMN-ID", "lcsap.pLMN_ID",
2423         FT_BYTES, BASE_NONE, NULL, 0,
2424         NULL, HFILL }},
2425     { &hf_lcsap_eNB_ID,
2426       { "eNB-ID", "lcsap.eNB_ID",
2427         FT_UINT32, BASE_DEC, VALS(lcsap_ENB_ID_vals), 0,
2428         NULL, HFILL }},
2429     { &hf_lcsap_GNSS_Positioning_Data_Set_item,
2430       { "GNSS-Positioning-Method-And-Usage", "lcsap.GNSS_Positioning_Method_And_Usage",
2431         FT_BYTES, BASE_NONE, NULL, 0,
2432         NULL, HFILL }},
2433     { &hf_lcsap_bearing,
2434       { "bearing", "lcsap.bearing",
2435         FT_UINT32, BASE_DEC, NULL, 0,
2436         NULL, HFILL }},
2437     { &hf_lcsap_horizontal_Speed,
2438       { "horizontal-Speed", "lcsap.horizontal_Speed",
2439         FT_UINT32, BASE_DEC, NULL, 0,
2440         "INTEGER_0_2047", HFILL }},
2441     { &hf_lcsap_horizontal_Speed_And_Bearing,
2442       { "horizontal-Speed-And-Bearing", "lcsap.horizontal_Speed_And_Bearing",
2443         FT_NONE, BASE_NONE, NULL, 0,
2444         NULL, HFILL }},
2445     { &hf_lcsap_vertical_Velocity,
2446       { "vertical-Velocity", "lcsap.vertical_Velocity",
2447         FT_NONE, BASE_NONE, NULL, 0,
2448         NULL, HFILL }},
2449     { &hf_lcsap_uncertainty_Speed,
2450       { "uncertainty-Speed", "lcsap.uncertainty_Speed",
2451         FT_UINT32, BASE_DEC, NULL, 0,
2452         "INTEGER_0_255", HFILL }},
2453     { &hf_lcsap_horizontal_Uncertainty_Speed,
2454       { "horizontal-Uncertainty-Speed", "lcsap.horizontal_Uncertainty_Speed",
2455         FT_UINT32, BASE_DEC, NULL, 0,
2456         "INTEGER_0_255", HFILL }},
2457     { &hf_lcsap_vertical_Uncertainty_Speed,
2458       { "vertical-Uncertainty-Speed", "lcsap.vertical_Uncertainty_Speed",
2459         FT_UINT32, BASE_DEC, NULL, 0,
2460         "INTEGER_0_255", HFILL }},
2461     { &hf_lcsap_radio_Network_Layer,
2462       { "radio-Network-Layer", "lcsap.radio_Network_Layer",
2463         FT_UINT32, BASE_DEC, VALS(lcsap_Radio_Network_Layer_Cause_vals), 0,
2464         "Radio_Network_Layer_Cause", HFILL }},
2465     { &hf_lcsap_transport_Layer,
2466       { "transport-Layer", "lcsap.transport_Layer",
2467         FT_UINT32, BASE_DEC, VALS(lcsap_Transport_Layer_Cause_vals), 0,
2468         "Transport_Layer_Cause", HFILL }},
2469     { &hf_lcsap_protocol,
2470       { "protocol", "lcsap.protocol",
2471         FT_UINT32, BASE_DEC, VALS(lcsap_Protocol_Cause_vals), 0,
2472         "Protocol_Cause", HFILL }},
2473     { &hf_lcsap_misc,
2474       { "misc", "lcsap.misc",
2475         FT_UINT32, BASE_DEC, VALS(lcsap_Misc_Cause_vals), 0,
2476         "Misc_Cause", HFILL }},
2477     { &hf_lcsap_horizontal_Accuracy,
2478       { "horizontal-Accuracy", "lcsap.horizontal_Accuracy",
2479         FT_UINT32, BASE_DEC, NULL, 0,
2480         NULL, HFILL }},
2481     { &hf_lcsap_vertical_Requested,
2482       { "vertical-Requested", "lcsap.vertical_Requested",
2483         FT_UINT32, BASE_DEC, VALS(lcsap_Vertical_Requested_vals), 0,
2484         NULL, HFILL }},
2485     { &hf_lcsap_vertical_Accuracy,
2486       { "vertical-Accuracy", "lcsap.vertical_Accuracy",
2487         FT_UINT32, BASE_DEC, NULL, 0,
2488         NULL, HFILL }},
2489     { &hf_lcsap_response_Time,
2490       { "response-Time", "lcsap.response_Time",
2491         FT_UINT32, BASE_DEC, VALS(lcsap_Response_Time_vals), 0,
2492         NULL, HFILL }},
2493     { &hf_lcsap_MultipleAPDUs_item,
2494       { "APDU", "lcsap.APDU",
2495         FT_BYTES, BASE_NONE, NULL, 0,
2496         NULL, HFILL }},
2497     { &hf_lcsap_global_eNB_ID,
2498       { "global-eNB-ID", "lcsap.global_eNB_ID",
2499         FT_NONE, BASE_NONE, NULL, 0,
2500         NULL, HFILL }},
2501     { &hf_lcsap_e_SMLC_ID,
2502       { "e-SMLC-ID", "lcsap.e_SMLC_ID",
2503         FT_UINT32, BASE_DEC, NULL, 0,
2504         NULL, HFILL }},
2505     { &hf_lcsap_uncertainty_Code,
2506       { "uncertainty-Code", "lcsap.uncertainty_Code",
2507         FT_UINT32, BASE_DEC, NULL, 0,
2508         NULL, HFILL }},
2509     { &hf_lcsap_Polygon_item,
2510       { "Polygon-Point", "lcsap.Polygon_Point",
2511         FT_NONE, BASE_NONE, NULL, 0,
2512         NULL, HFILL }},
2513     { &hf_lcsap_positioning_Data_Set,
2514       { "positioning-Data-Set", "lcsap.positioning_Data_Set",
2515         FT_UINT32, BASE_DEC, NULL, 0,
2516         NULL, HFILL }},
2517     { &hf_lcsap_gNSS_Positioning_Data_Set,
2518       { "gNSS-Positioning-Data-Set", "lcsap.gNSS_Positioning_Data_Set",
2519         FT_UINT32, BASE_DEC, NULL, 0,
2520         NULL, HFILL }},
2521     { &hf_lcsap_Positioning_Data_Set_item,
2522       { "Positioning-Method-And-Usage", "lcsap.Positioning_Method_And_Usage",
2523         FT_BYTES, BASE_NONE, NULL, 0,
2524         NULL, HFILL }},
2525     { &hf_lcsap_uncertainty_SemiMajor,
2526       { "uncertainty-SemiMajor", "lcsap.uncertainty_SemiMajor",
2527         FT_UINT32, BASE_DEC, NULL, 0,
2528         "Uncertainty_Code", HFILL }},
2529     { &hf_lcsap_uncertainty_SemiMinor,
2530       { "uncertainty-SemiMinor", "lcsap.uncertainty_SemiMinor",
2531         FT_UINT32, BASE_DEC, NULL, 0,
2532         "Uncertainty_Code", HFILL }},
2533     { &hf_lcsap_orientation_Major_Axis,
2534       { "orientation-Major-Axis", "lcsap.orientation_Major_Axis",
2535         FT_UINT32, BASE_DEC, NULL, 0,
2536         NULL, HFILL }},
2537     { &hf_lcsap_lPP,
2538       { "lPP", "lcsap.lPP",
2539         FT_BOOLEAN, BASE_NONE, NULL, 0,
2540         "BOOLEAN", HFILL }},
2541     { &hf_lcsap_horizontal_Velocity,
2542       { "horizontal-Velocity", "lcsap.horizontal_Velocity",
2543         FT_NONE, BASE_NONE, NULL, 0,
2544         NULL, HFILL }},
2545     { &hf_lcsap_horizontal_With_Vertical_Velocity,
2546       { "horizontal-With-Vertical-Velocity", "lcsap.horizontal_With_Vertical_Velocity",
2547         FT_NONE, BASE_NONE, NULL, 0,
2548         NULL, HFILL }},
2549     { &hf_lcsap_horizontal_Velocity_With_Uncertainty,
2550       { "horizontal-Velocity-With-Uncertainty", "lcsap.horizontal_Velocity_With_Uncertainty",
2551         FT_NONE, BASE_NONE, NULL, 0,
2552         NULL, HFILL }},
2553     { &hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty,
2554       { "horizontal-With-Vertical-Velocity-And-Uncertainty", "lcsap.horizontal_With_Vertical_Velocity_And_Uncertainty",
2555         FT_NONE, BASE_NONE, NULL, 0,
2556         NULL, HFILL }},
2557     { &hf_lcsap_vertical_Speed,
2558       { "vertical-Speed", "lcsap.vertical_Speed",
2559         FT_UINT32, BASE_DEC, NULL, 0,
2560         "INTEGER_0_255", HFILL }},
2561     { &hf_lcsap_vertical_Speed_Direction,
2562       { "vertical-Speed-Direction", "lcsap.vertical_Speed_Direction",
2563         FT_UINT32, BASE_DEC, VALS(lcsap_Vertical_Speed_Direction_vals), 0,
2564         NULL, HFILL }},
2565     { &hf_lcsap_protocolIEs,
2566       { "protocolIEs", "lcsap.protocolIEs",
2567         FT_UINT32, BASE_DEC, NULL, 0,
2568         "ProtocolIE_Container", HFILL }},
2569     { &hf_lcsap_protocolExtensions,
2570       { "protocolExtensions", "lcsap.protocolExtensions",
2571         FT_UINT32, BASE_DEC, NULL, 0,
2572         "ProtocolExtensionContainer", HFILL }},
2573     { &hf_lcsap_initiatingMessage,
2574       { "initiatingMessage", "lcsap.initiatingMessage",
2575         FT_NONE, BASE_NONE, NULL, 0,
2576         NULL, HFILL }},
2577     { &hf_lcsap_successfulOutcome,
2578       { "successfulOutcome", "lcsap.successfulOutcome",
2579         FT_NONE, BASE_NONE, NULL, 0,
2580         NULL, HFILL }},
2581     { &hf_lcsap_unsuccessfulOutcome,
2582       { "unsuccessfulOutcome", "lcsap.unsuccessfulOutcome",
2583         FT_NONE, BASE_NONE, NULL, 0,
2584         NULL, HFILL }},
2585     { &hf_lcsap_procedureCode,
2586       { "procedureCode", "lcsap.procedureCode",
2587         FT_UINT32, BASE_DEC, VALS(lcsap_ProcedureCode_vals), 0,
2588         NULL, HFILL }},
2589     { &hf_lcsap_initiatingMessagevalue,
2590       { "value", "lcsap.value",
2591         FT_NONE, BASE_NONE, NULL, 0,
2592         "InitiatingMessage_value", HFILL }},
2593     { &hf_lcsap_successfulOutcome_value,
2594       { "value", "lcsap.value",
2595         FT_NONE, BASE_NONE, NULL, 0,
2596         "SuccessfulOutcome_value", HFILL }},
2597     { &hf_lcsap_unsuccessfulOutcome_value,
2598       { "value", "lcsap.value",
2599         FT_NONE, BASE_NONE, NULL, 0,
2600         "UnsuccessfulOutcome_value", HFILL }},
2601
2602 /*--- End of included file: packet-lcsap-hfarr.c ---*/
2603 #line 179 "../../asn1/lcsap/packet-lcsap-template.c"
2604   };
2605
2606   /* List of subtrees */
2607   static gint *ett[] = {
2608                   &ett_lcsap,
2609
2610 /*--- Included file: packet-lcsap-ettarr.c ---*/
2611 #line 1 "../../asn1/lcsap/packet-lcsap-ettarr.c"
2612     &ett_lcsap_ProtocolIE_Container,
2613     &ett_lcsap_ProtocolIE_Field,
2614     &ett_lcsap_ProtocolExtensionContainer,
2615     &ett_lcsap_ProtocolExtensionField,
2616     &ett_lcsap_Altitude_And_Direction,
2617     &ett_lcsap_E_CGI,
2618     &ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse,
2619     &ett_lcsap_Ellipsoid_Point_With_Altitude,
2620     &ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
2621     &ett_lcsap_Ellipsoid_Arc,
2622     &ett_lcsap_ENB_ID,
2623     &ett_lcsap_Geographical_Area,
2624     &ett_lcsap_Geographical_Coordinates,
2625     &ett_lcsap_Global_eNB_ID,
2626     &ett_lcsap_GNSS_Positioning_Data_Set,
2627     &ett_lcsap_Horizontal_Speed_And_Bearing,
2628     &ett_lcsap_Horizontal_Velocity,
2629     &ett_lcsap_Horizontal_With_Vertical_Velocity,
2630     &ett_lcsap_Horizontal_Velocity_With_Uncertainty,
2631     &ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty,
2632     &ett_lcsap_LCS_Cause,
2633     &ett_lcsap_LCS_QoS,
2634     &ett_lcsap_MultipleAPDUs,
2635     &ett_lcsap_Network_Element,
2636     &ett_lcsap_Point,
2637     &ett_lcsap_Point_With_Uncertainty,
2638     &ett_lcsap_Polygon,
2639     &ett_lcsap_Polygon_Point,
2640     &ett_lcsap_Positioning_Data,
2641     &ett_lcsap_Positioning_Data_Set,
2642     &ett_lcsap_Uncertainty_Ellipse,
2643     &ett_lcsap_UE_Positioning_Capability,
2644     &ett_lcsap_Velocity_Estimate,
2645     &ett_lcsap_Vertical_Velocity,
2646     &ett_lcsap_Location_Request,
2647     &ett_lcsap_Location_Response,
2648     &ett_lcsap_Location_Abort_Request,
2649     &ett_lcsap_Connection_Oriented_Information,
2650     &ett_lcsap_Connectionless_Information,
2651     &ett_lcsap_Reset_Request,
2652     &ett_lcsap_Reset_Acknowledge,
2653     &ett_lcsap_LCS_AP_PDU,
2654     &ett_lcsap_InitiatingMessage,
2655     &ett_lcsap_SuccessfulOutcome,
2656     &ett_lcsap_UnsuccessfulOutcome,
2657
2658 /*--- End of included file: packet-lcsap-ettarr.c ---*/
2659 #line 185 "../../asn1/lcsap/packet-lcsap-template.c"
2660  };
2661
2662   module_t *lcsap_module;
2663
2664   /* Register protocol */
2665   proto_lcsap = proto_register_protocol(PNAME, PSNAME, PFNAME);
2666
2667   /* Register fields and subtrees */
2668   proto_register_field_array(proto_lcsap, hf, array_length(hf));
2669   proto_register_subtree_array(ett, array_length(ett));
2670   register_dissector("lcsap", dissect_lcsap, proto_lcsap);
2671
2672   /* Register dissector tables */
2673   lcsap_ies_dissector_table = register_dissector_table("lcsap.ies", "LCS-AP-PROTOCOL-IES", FT_UINT32, BASE_DEC);
2674
2675
2676   lcsap_extension_dissector_table = register_dissector_table("lcsap.extension", "LCS-AP-PROTOCOL-EXTENSION", FT_UINT32, BASE_DEC);
2677   lcsap_proc_imsg_dissector_table = register_dissector_table("lcsap.proc.imsg", "LCS-AP-ELEMENTARY-PROCEDURE InitiatingMessage", FT_UINT32, BASE_DEC);
2678   lcsap_proc_sout_dissector_table = register_dissector_table("lcsap.proc.sout", "LCS-AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", FT_UINT32, BASE_DEC);
2679   lcsap_proc_uout_dissector_table = register_dissector_table("lcsap.proc.uout", "LCS-AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", FT_UINT32, BASE_DEC);
2680
2681   /* Register configuration options for ports */
2682   lcsap_module = prefs_register_protocol(proto_lcsap, proto_reg_handoff_lcsap);
2683
2684   prefs_register_uint_preference(lcsap_module, "sctp.port",
2685                                  "LCSAP SCTP Port",
2686                                  "Set the SCTP port for LCSAP messages",
2687                                  10,
2688                                  &gbl_lcsapSctpPort);
2689
2690 }
2691
2692