Coverage Report

Created: 2025-12-27 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-lcsap.c
Line
Count
Source
1
/* Do not modify this file. Changes will be overwritten.                      */
2
/* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3
/* packet-lcsap.c                                                             */
4
/* asn2wrs.py -q -L -p lcsap -c ./lcsap.cnf -s ./packet-lcsap-template -D . -O ../.. 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
/* packet-lcsap.c
7
 * Routines for LCS-AP packet dissembly.
8
 *
9
 * Copyright (c) 2011 by Spenser Sheng <spenser.sheng@ericsson.com>
10
 *
11
 * Wireshark - Network traffic analyzer
12
 * By Gerald Combs <gerald@wireshark.org>
13
 * Copyright 1999 Gerald Combs
14
 *
15
 * SPDX-License-Identifier: GPL-2.0-or-later
16
 * References:
17
 * ETSI TS 129 171 V9.2.0 (2010-10)
18
 */
19
20
#include "config.h"
21
22
#include <math.h>
23
24
#include <epan/packet.h>
25
#include <epan/strutil.h>
26
#include <epan/asn1.h>
27
#include <epan/prefs.h>
28
#include <epan/expert.h>
29
#include <wsutil/array.h>
30
31
#include "packet-ber.h"
32
#include "packet-per.h"
33
#include "packet-e212.h"
34
#include "packet-sccp.h"
35
#include "packet-lcsap.h"
36
#include "packet-sctp.h"
37
38
#ifdef _MSC_VER
39
/* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
40
#pragma warning(disable:4146)
41
#endif
42
43
14
#define PNAME  "LCS Application Protocol"
44
14
#define PSNAME "LCSAP"
45
14
#define PFNAME "lcsap"
46
47
void proto_register_lcsap(void);
48
void proto_reg_handoff_lcsap(void);
49
50
14
#define SCTP_PORT_LCSAP 9082
51
0
#define max_No_Of_Points               15
52
1
#define max_Set                        9
53
1
#define max_GNSS_Set                   9
54
0
#define max_Add_Pos_Set                8
55
12
#define max_Cipher_Set                 16
56
6
#define maxProtocolExtensions          65535
57
64
#define maxProtocolIEs                 65535
58
59
typedef enum _ProcedureCode_enum {
60
  id_Location_Service_Request =   0,
61
  id_Connection_Oriented_Information_Transfer =   1,
62
  id_Connectionless_Information_Transfer =   2,
63
  id_Location_Abort =   3,
64
  id_Reset     =   4,
65
  id_Ciphering_Key_Data_Delivery =   5
66
} ProcedureCode_enum;
67
68
typedef enum _ProtocolIE_ID_enum {
69
  id_Accuracy_Fulfillment_Indicator =   0,
70
  id_APDU      =   1,
71
  id_Correlation_ID =   2,
72
  id_Destination_ID =   3,
73
  id_E_UTRAN_Cell_Identifier =   4,
74
  id_Include_Velocity =   5,
75
  id_IMEI      =   6,
76
  id_IMSI      =   7,
77
  id_LCS_Client_Type =   8,
78
  id_LCS_Priority =   9,
79
  id_LCS_QOS   =  10,
80
  id_LCS_Cause =  11,
81
  id_Location_Estimate =  12,
82
  id_Location_Type =  13,
83
  id_MultipleAPDUs =  14,
84
  id_Payload_Type =  15,
85
  id_Positioning_Data =  16,
86
  id_Return_Error_Request =  17,
87
  id_Return_Error_Cause =  18,
88
  id_Source_Identity =  19,
89
  id_UE_Positioning_Capability =  20,
90
  id_Velocity_Estimate =  21,
91
  id_LCS_Service_Type_ID =  22,
92
  id_Cell_Portion_ID =  23,
93
  id_Civic_Address =  24,
94
  id_Barometric_Pressure =  25,
95
  id_Additional_PositioningDataSet =  26,
96
  id_RAT_Type  =  27,
97
  id_Ciphering_Data =  28,
98
  id_Ciphering_Data_Ack =  29,
99
  id_Ciphering_Data_Error_Report =  30,
100
  id_Coverage_Level =  31,
101
  id_UE_Country_Determination_Indication =  32,
102
  id_UE_Area_Indication =  33
103
} ProtocolIE_ID_enum;
104
105
/* Initialize the protocol and registered fields */
106
static int proto_lcsap;
107
108
static int hf_lcsap_pos_method;
109
static int hf_lcsap_pos_usage;
110
static int hf_lcsap_gnss_pos_method;
111
static int hf_lcsap_gnss_id;
112
static int hf_lcsap_gnss_pos_usage;
113
static int hf_lcsap_APDU_PDU;                     /* APDU */
114
static int hf_lcsap_Accuracy_Fulfillment_Indicator_PDU;  /* Accuracy_Fulfillment_Indicator */
115
static int hf_lcsap_Additional_PositioningDataSet_PDU;  /* Additional_PositioningDataSet */
116
static int hf_lcsap_Barometric_Pressure_PDU;      /* Barometric_Pressure */
117
static int hf_lcsap_Cell_Portion_ID_PDU;          /* Cell_Portion_ID */
118
static int hf_lcsap_Ciphering_Data_PDU;           /* Ciphering_Data */
119
static int hf_lcsap_Ciphering_Data_Ack_PDU;       /* Ciphering_Data_Ack */
120
static int hf_lcsap_Ciphering_Data_Error_Report_PDU;  /* Ciphering_Data_Error_Report */
121
static int hf_lcsap_Civic_Address_PDU;            /* Civic_Address */
122
static int hf_lcsap_lcsap_Correlation_ID_PDU;     /* Correlation_ID */
123
static int hf_lcsap_E_CGI_PDU;                    /* E_CGI */
124
static int hf_lcsap_Coverage_Level_PDU;           /* Coverage_Level */
125
static int hf_lcsap_Geographical_Area_PDU;        /* Geographical_Area */
126
static int hf_lcsap_IMSI_PDU;                     /* IMSI */
127
static int hf_lcsap_IMEI_PDU;                     /* IMEI */
128
static int hf_lcsap_Include_Velocity_PDU;         /* Include_Velocity */
129
static int hf_lcsap_Location_Type_PDU;            /* Location_Type */
130
static int hf_lcsap_LCS_Cause_PDU;                /* LCS_Cause */
131
static int hf_lcsap_LCS_Client_Type_PDU;          /* LCS_Client_Type */
132
static int hf_lcsap_LCS_Priority_PDU;             /* LCS_Priority */
133
static int hf_lcsap_LCS_QoS_PDU;                  /* LCS_QoS */
134
static int hf_lcsap_LCS_Service_Type_ID_PDU;      /* LCS_Service_Type_ID */
135
static int hf_lcsap_MultipleAPDUs_PDU;            /* MultipleAPDUs */
136
static int hf_lcsap_Network_Element_PDU;          /* Network_Element */
137
static int hf_lcsap_Payload_Type_PDU;             /* Payload_Type */
138
static int hf_lcsap_lcsap_Positioning_Data_PDU;   /* Positioning_Data */
139
static int hf_lcsap_RAT_Type_PDU;                 /* RAT_Type */
140
static int hf_lcsap_Return_Error_Type_PDU;        /* Return_Error_Type */
141
static int hf_lcsap_Return_Error_Cause_PDU;       /* Return_Error_Cause */
142
static int hf_lcsap_UE_Positioning_Capability_PDU;  /* UE_Positioning_Capability */
143
static int hf_lcsap_UE_Country_Determination_Indication_PDU;  /* UE_Country_Determination_Indication */
144
static int hf_lcsap_UE_Area_Indication_PDU;       /* UE_Area_Indication */
145
static int hf_lcsap_Velocity_Estimate_PDU;        /* Velocity_Estimate */
146
static int hf_lcsap_Location_Request_PDU;         /* Location_Request */
147
static int hf_lcsap_Location_Response_PDU;        /* Location_Response */
148
static int hf_lcsap_Location_Abort_Request_PDU;   /* Location_Abort_Request */
149
static int hf_lcsap_Connection_Oriented_Information_PDU;  /* Connection_Oriented_Information */
150
static int hf_lcsap_Connectionless_Information_PDU;  /* Connectionless_Information */
151
static int hf_lcsap_Reset_Request_PDU;            /* Reset_Request */
152
static int hf_lcsap_Reset_Acknowledge_PDU;        /* Reset_Acknowledge */
153
static int hf_lcsap_Ciphering_Key_Data_PDU;       /* Ciphering_Key_Data */
154
static int hf_lcsap_Ciphering_Key_Data_Result_PDU;  /* Ciphering_Key_Data_Result */
155
static int hf_lcsap_LCS_AP_PDU_PDU;               /* LCS_AP_PDU */
156
static int hf_lcsap_ProtocolIE_Container_item;    /* ProtocolIE_Field */
157
static int hf_lcsap_id;                           /* ProtocolIE_ID */
158
static int hf_lcsap_criticality;                  /* Criticality */
159
static int hf_lcsap_ie_field_value;               /* T_ie_field_value */
160
static int hf_lcsap_ProtocolExtensionContainer_item;  /* ProtocolExtensionField */
161
static int hf_lcsap_ext_id;                       /* ProtocolExtensionID */
162
static int hf_lcsap_extensionValue;               /* T_extensionValue */
163
static int hf_lcsap_Additional_PositioningDataSet_item;  /* Additional_PositioningMethodAndUsage */
164
static int hf_lcsap_direction_Of_Altitude;        /* Direction_Of_Altitude */
165
static int hf_lcsap_altitude;                     /* Altitude */
166
static int hf_lcsap_Ciphering_Data_item;          /* Ciphering_Data_Set */
167
static int hf_lcsap_Ciphering_Data_Ack_item;      /* Ciphering_Set_ID */
168
static int hf_lcsap_Ciphering_Data_Error_Report_item;  /* Ciphering_Data_Error_Report_Contents */
169
static int hf_lcsap_ciphering_Set_ID;             /* Ciphering_Set_ID */
170
static int hf_lcsap_ciphering_Key;                /* Ciphering_Key */
171
static int hf_lcsap_c0;                           /* C0 */
172
static int hf_lcsap_sib_Types;                    /* SIB_Types */
173
static int hf_lcsap_validity_Start_Time;          /* Validity_Start_Time */
174
static int hf_lcsap_validity_Duration;            /* Validity_Duration */
175
static int hf_lcsap_tais_List;                    /* TAIs_List */
176
static int hf_lcsap_storage_Outcome;              /* Storage_Outcome */
177
static int hf_lcsap_pLMNidentity;                 /* PLMN_ID */
178
static int hf_lcsap_cell_ID;                      /* CellIdentity */
179
static int hf_lcsap_iE_Extensions;                /* ProtocolExtensionContainer */
180
static int hf_lcsap_geographical_Coordinates;     /* Geographical_Coordinates */
181
static int hf_lcsap_uncertainty_Ellipse;          /* Uncertainty_Ellipse */
182
static int hf_lcsap_confidence;                   /* Confidence */
183
static int hf_lcsap_altitude_And_Direction;       /* Altitude_And_Direction */
184
static int hf_lcsap_uncertainty_Altitude;         /* Uncertainty_Altitude */
185
static int hf_lcsap_inner_Radius;                 /* Inner_Radius */
186
static int hf_lcsap_uncertainty_Radius;           /* Uncertainty_Code */
187
static int hf_lcsap_offset_Angle;                 /* Angle */
188
static int hf_lcsap_included_Angle;               /* Angle */
189
static int hf_lcsap_macro_eNB_ID;                 /* Macro_eNB_ID */
190
static int hf_lcsap_home_eNB_ID;                  /* Home_eNB_ID */
191
static int hf_lcsap_short_macro_eNB_ID;           /* Short_Macro_eNB_ID */
192
static int hf_lcsap_long_macro_eNB_ID;            /* Long_Macro_eNB_ID */
193
static int hf_lcsap_point;                        /* Point */
194
static int hf_lcsap_point_With_Uncertainty;       /* Point_With_Uncertainty */
195
static int hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse;  /* Ellipsoid_Point_With_Uncertainty_Ellipse */
196
static int hf_lcsap_polygon;                      /* Polygon */
197
static int hf_lcsap_ellipsoid_Point_With_Altitude;  /* Ellipsoid_Point_With_Altitude */
198
static int hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid;  /* Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid */
199
static int hf_lcsap_ellipsoid_Arc;                /* Ellipsoid_Arc */
200
static int hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse;  /* High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse */
201
static int hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid;  /* High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid */
202
static int hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse;  /* High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse */
203
static int hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid;  /* High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid */
204
static int hf_lcsap_latitudeSign;                 /* LatitudeSign */
205
static int hf_lcsap_degreesLatitude;              /* DegreesLatitude */
206
static int hf_lcsap_degreesLongitude;             /* DegreesLongitude */
207
static int hf_lcsap_pLMN_ID;                      /* PLMN_ID */
208
static int hf_lcsap_eNB_ID;                       /* ENB_ID */
209
static int hf_lcsap_GNSS_Positioning_Data_Set_item;  /* GNSS_Positioning_Method_And_Usage */
210
static int hf_lcsap_high_Accuracy_Geographical_Coordinates;  /* High_Accuracy_Geographical_Coordinates */
211
static int hf_lcsap_high_Accuracy_Uncertainty_Ellipse;  /* High_Accuracy_Uncertainty_Ellipse */
212
static int hf_lcsap_high_Accuracy_Scalable_Uncertainty_Ellipse;  /* High_Accuracy_Scalable_Uncertainty_Ellipse */
213
static int hf_lcsap_high_Accuracy_Altitude;       /* High_Accuracy_Altitude */
214
static int hf_lcsap_high_Accuracy_Uncertainty_Altitude;  /* High_Accuracy_Uncertainty_Code */
215
static int hf_lcsap_vertical_Confidence;          /* Confidence */
216
static int hf_lcsap_high_Accuracy_Scalable_Uncertainty_Altitude;  /* High_Accuracy_Scalable_Uncertainty_Altitude */
217
static int hf_lcsap_high_Accuracy_DegreesLatitude;  /* High_Accuracy_DegreesLatitude */
218
static int hf_lcsap_high_Accuracy_DegreesLongitude;  /* High_Accuracy_DegreesLongitude */
219
static int hf_lcsap_high_Accuracy_Uncertainty_SemiMajor;  /* High_Accuracy_Uncertainty_Code */
220
static int hf_lcsap_high_Accuracy_Uncertainty_SemiMinor;  /* High_Accuracy_Uncertainty_Code */
221
static int hf_lcsap_orientation_Major_Axis;       /* INTEGER_0_179 */
222
static int hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMajor;  /* High_Accuracy_Extended_Uncertainty_Code */
223
static int hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMinor;  /* High_Accuracy_Extended_Uncertainty_Code */
224
static int hf_lcsap_high_Accuracy_Extended_Uncertainty_Ellipse;  /* High_Accuracy_Extended_Uncertainty_Ellipse */
225
static int hf_lcsap_high_Accuracy_Extended_Uncertainty_Altitude;  /* High_Accuracy_Extended_Uncertainty_Code */
226
static int hf_lcsap_bearing;                      /* INTEGER_0_359 */
227
static int hf_lcsap_horizontal_Speed;             /* INTEGER_0_2047 */
228
static int hf_lcsap_horizontal_Speed_And_Bearing;  /* Horizontal_Speed_And_Bearing */
229
static int hf_lcsap_vertical_Velocity;            /* Vertical_Velocity */
230
static int hf_lcsap_uncertainty_Speed;            /* INTEGER_0_255 */
231
static int hf_lcsap_horizontal_Uncertainty_Speed;  /* INTEGER_0_255 */
232
static int hf_lcsap_vertical_Uncertainty_Speed;   /* INTEGER_0_255 */
233
static int hf_lcsap_radio_Network_Layer;          /* Radio_Network_Layer_Cause */
234
static int hf_lcsap_transport_Layer;              /* Transport_Layer_Cause */
235
static int hf_lcsap_protocol;                     /* Protocol_Cause */
236
static int hf_lcsap_misc;                         /* Misc_Cause */
237
static int hf_lcsap_horizontal_Accuracy;          /* Horizontal_Accuracy */
238
static int hf_lcsap_vertical_Requested;           /* Vertical_Requested */
239
static int hf_lcsap_vertical_Accuracy;            /* Vertical_Accuracy */
240
static int hf_lcsap_response_Time;                /* Response_Time */
241
static int hf_lcsap_MultipleAPDUs_item;           /* APDU */
242
static int hf_lcsap_global_eNB_ID;                /* Global_eNB_ID */
243
static int hf_lcsap_e_SMLC_ID;                    /* E_SMLC_ID */
244
static int hf_lcsap_uncertainty_Code;             /* Uncertainty_Code */
245
static int hf_lcsap_Polygon_item;                 /* Polygon_Point */
246
static int hf_lcsap_positioning_Data_Set;         /* Positioning_Data_Set */
247
static int hf_lcsap_gNSS_Positioning_Data_Set;    /* GNSS_Positioning_Data_Set */
248
static int hf_lcsap_Positioning_Data_Set_item;    /* Positioning_Method_And_Usage */
249
static int hf_lcsap_uncertainty_SemiMajor;        /* Uncertainty_Code */
250
static int hf_lcsap_uncertainty_SemiMinor;        /* Uncertainty_Code */
251
static int hf_lcsap_orientation_Major_Axis_01;    /* Orientation_Major_Axis */
252
static int hf_lcsap_lPP;                          /* BOOLEAN */
253
static int hf_lcsap_country;                      /* Country */
254
static int hf_lcsap_international_area_indication;  /* International_Area_Indication */
255
static int hf_lcsap_horizontal_Velocity;          /* Horizontal_Velocity */
256
static int hf_lcsap_horizontal_With_Vertical_Velocity;  /* Horizontal_With_Vertical_Velocity */
257
static int hf_lcsap_horizontal_Velocity_With_Uncertainty;  /* Horizontal_Velocity_With_Uncertainty */
258
static int hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty;  /* Horizontal_With_Vertical_Velocity_And_Uncertainty */
259
static int hf_lcsap_vertical_Speed;               /* INTEGER_0_255 */
260
static int hf_lcsap_vertical_Speed_Direction;     /* Vertical_Speed_Direction */
261
static int hf_lcsap_protocolIEs;                  /* ProtocolIE_Container */
262
static int hf_lcsap_protocolExtensions;           /* ProtocolExtensionContainer */
263
static int hf_lcsap_initiatingMessage;            /* InitiatingMessage */
264
static int hf_lcsap_successfulOutcome;            /* SuccessfulOutcome */
265
static int hf_lcsap_unsuccessfulOutcome;          /* UnsuccessfulOutcome */
266
static int hf_lcsap_procedureCode;                /* ProcedureCode */
267
static int hf_lcsap_initiatingMessagevalue;       /* InitiatingMessage_value */
268
static int hf_lcsap_successfulOutcome_value;      /* SuccessfulOutcome_value */
269
static int hf_lcsap_unsuccessfulOutcome_value;    /* UnsuccessfulOutcome_value */
270
271
/* Initialize the subtree pointers */
272
static int ett_lcsap;
273
static int ett_lcsap_plmnd_id;
274
static int ett_lcsap_imsi;
275
static int ett_lcsap_civic_address;
276
277
static int ett_lcsap_ProtocolIE_Container;
278
static int ett_lcsap_ProtocolIE_Field;
279
static int ett_lcsap_ProtocolExtensionContainer;
280
static int ett_lcsap_ProtocolExtensionField;
281
static int ett_lcsap_Additional_PositioningDataSet;
282
static int ett_lcsap_Altitude_And_Direction;
283
static int ett_lcsap_Ciphering_Data;
284
static int ett_lcsap_Ciphering_Data_Ack;
285
static int ett_lcsap_Ciphering_Data_Error_Report;
286
static int ett_lcsap_Ciphering_Data_Set;
287
static int ett_lcsap_Ciphering_Data_Error_Report_Contents;
288
static int ett_lcsap_E_CGI;
289
static int ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse;
290
static int ett_lcsap_Ellipsoid_Point_With_Altitude;
291
static int ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid;
292
static int ett_lcsap_Ellipsoid_Arc;
293
static int ett_lcsap_ENB_ID;
294
static int ett_lcsap_Geographical_Area;
295
static int ett_lcsap_Geographical_Coordinates;
296
static int ett_lcsap_Global_eNB_ID;
297
static int ett_lcsap_GNSS_Positioning_Data_Set;
298
static int ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse;
299
static int ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse;
300
static int ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid;
301
static int ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid;
302
static int ett_lcsap_High_Accuracy_Geographical_Coordinates;
303
static int ett_lcsap_High_Accuracy_Uncertainty_Ellipse;
304
static int ett_lcsap_High_Accuracy_Extended_Uncertainty_Ellipse;
305
static int ett_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse;
306
static int ett_lcsap_High_Accuracy_Scalable_Uncertainty_Altitude;
307
static int ett_lcsap_Horizontal_Speed_And_Bearing;
308
static int ett_lcsap_Horizontal_Velocity;
309
static int ett_lcsap_Horizontal_With_Vertical_Velocity;
310
static int ett_lcsap_Horizontal_Velocity_With_Uncertainty;
311
static int ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty;
312
static int ett_lcsap_LCS_Cause;
313
static int ett_lcsap_LCS_QoS;
314
static int ett_lcsap_MultipleAPDUs;
315
static int ett_lcsap_Network_Element;
316
static int ett_lcsap_Point;
317
static int ett_lcsap_Point_With_Uncertainty;
318
static int ett_lcsap_Polygon;
319
static int ett_lcsap_Polygon_Point;
320
static int ett_lcsap_Positioning_Data;
321
static int ett_lcsap_Positioning_Data_Set;
322
static int ett_lcsap_Uncertainty_Ellipse;
323
static int ett_lcsap_UE_Positioning_Capability;
324
static int ett_lcsap_UE_Area_Indication;
325
static int ett_lcsap_Velocity_Estimate;
326
static int ett_lcsap_Vertical_Velocity;
327
static int ett_lcsap_Location_Request;
328
static int ett_lcsap_Location_Response;
329
static int ett_lcsap_Location_Abort_Request;
330
static int ett_lcsap_Connection_Oriented_Information;
331
static int ett_lcsap_Connectionless_Information;
332
static int ett_lcsap_Reset_Request;
333
static int ett_lcsap_Reset_Acknowledge;
334
static int ett_lcsap_Ciphering_Key_Data;
335
static int ett_lcsap_Ciphering_Key_Data_Result;
336
static int ett_lcsap_LCS_AP_PDU;
337
static int ett_lcsap_InitiatingMessage;
338
static int ett_lcsap_SuccessfulOutcome;
339
static int ett_lcsap_UnsuccessfulOutcome;
340
341
static expert_field ei_lcsap_civic_data_not_xml;
342
343
/* Global variables */
344
static uint32_t ProcedureCode;
345
static uint32_t ProtocolIE_ID;
346
static uint32_t ProtocolExtensionID;
347
static uint32_t PayloadType = -1;
348
349
/* Dissector handles */
350
static dissector_handle_t lcsap_handle;
351
static dissector_handle_t lpp_handle;
352
static dissector_handle_t lppa_handle;
353
static dissector_handle_t xml_handle;
354
355
/* Dissector tables */
356
static dissector_table_t lcsap_ies_dissector_table;
357
358
static dissector_table_t lcsap_extension_dissector_table;
359
static dissector_table_t lcsap_proc_imsg_dissector_table;
360
static dissector_table_t lcsap_proc_sout_dissector_table;
361
static dissector_table_t lcsap_proc_uout_dissector_table;
362
363
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
364
365
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
366
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
367
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
368
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
369
370
371
/* 7.4.13 Positioning Data
372
 * Coding of positioning method (bits 8-4)
373
 */
374
static const value_string lcsap_pos_method_vals[] = {
375
  { 0x00, "Cell ID" },
376
  { 0x01, "Reserved" },
377
  { 0x02, "E-CID" },
378
  { 0x03, "Reserved" },
379
  { 0x04, "OTDOA" },
380
  { 0x05, "Reserved" },
381
  { 0x06, "Reserved" },
382
  { 0x07, "Reserved" },
383
  { 0x08, "U-TDOA" },
384
  { 0x09, "Reserved" },
385
  { 0x0a, "Reserved" },
386
  { 0x0b, "Reserved" },
387
  { 0x0c, "Reserved for other location technologies" },
388
  { 0x0d, "Reserved for other location technologies" },
389
  { 0x0e, "Reserved for other location technologies" },
390
  { 0x0f, "Reserved for other location technologies" },
391
  { 0x10, "Reserved for network specific positioning methods" },
392
  { 0x11, "Reserved for network specific positioning methods" },
393
  { 0x12, "Reserved for network specific positioning methods" },
394
  { 0x13, "Reserved for network specific positioning methods" },
395
  { 0x14, "Reserved for network specific positioning methods" },
396
  { 0x15, "Reserved for network specific positioning methods" },
397
  { 0x16, "Reserved for network specific positioning methods" },
398
  { 0x17, "Reserved for network specific positioning methods" },
399
  { 0x18, "Reserved for network specific positioning methods" },
400
  { 0x19, "Reserved for network specific positioning methods" },
401
  { 0x1a, "Reserved for network specific positioning methods" },
402
  { 0x1b, "Reserved for network specific positioning methods" },
403
  { 0x1c, "Reserved for network specific positioning methods" },
404
  { 0x1d, "Reserved for network specific positioning methods" },
405
  { 0x1e, "Reserved for network specific positioning methods" },
406
  { 0x1f, "Reserved for network specific positioning methods" },
407
  { 0, NULL }
408
};
409
410
/* Coding of usage (bits 3-1)*/
411
static const value_string lcsap_pos_usage_vals[] = {
412
  { 0x00, "Attempted unsuccessfully due to failure or interruption - not used" },
413
  { 0x01, "Attempted successfully: results not used to generate location - not used." },
414
  { 0x02, "Attempted successfully: results used to verify but not generate location - not used." },
415
  { 0x03, "Attempted successfully: results used to generate location" },
416
  { 0x04, "Attempted successfully: case where UE supports multiple mobile based positioning methods and the actual method or methods used by the UE cannot be determined." },
417
  { 0x05, "Reserved" },
418
  { 0x06, "Reserved" },
419
  { 0x07, "Reserved" },
420
  { 0, NULL }
421
};
422
423
/* Coding of Method (Bits 8-7) */
424
static const value_string lcsap_gnss_pos_method_vals[] = {
425
  { 0x00, "UE-Based" },
426
  { 0x01, "UE-Assisted" },
427
  { 0x02, "Conventional" },
428
  { 0x03, "Reserved" },
429
  { 0, NULL }
430
};
431
432
/* Coding of GNSS ID (Bits 6-4) */
433
static const value_string lcsap_gnss_id_vals[] = {
434
  { 0x00, "GPS" },
435
  { 0x01, "Galileo" },
436
  { 0x02, "SBAS" },
437
  { 0x03, "Modernized GPS" },
438
  { 0x04, "QZSS" },
439
  { 0x05, "GLONASS" },
440
  { 0x06, "Reserved" },
441
  { 0x07, "Reserved" },
442
  { 0, NULL }
443
};
444
445
/* Coding of usage (bits 3- 1) */
446
static const value_string lcsap_gnss_pos_usage_vals[] = {
447
  { 0x00, "Attempted unsuccessfully due to failure or interruption" },
448
  { 0x01, "Attempted successfully: results not used to generate location" },
449
  { 0x02, "Attempted successfully: results used to verify but not generate location" },
450
  { 0x03, "Attempted successfully: results used to generate location" },
451
  { 0x04, "Attempted successfully: case where UE supports multiple mobile based positioning methods and the actual method or methods used by the UE cannot be determined." },
452
  { 0x05, "Reserved" },
453
  { 0x06, "Reserved" },
454
  { 0x07, "Reserved" },
455
  { 0, NULL }
456
};
457
458
459
460
static const value_string lcsap_Criticality_vals[] = {
461
  {   0, "reject" },
462
  {   1, "ignore" },
463
  {   2, "notify" },
464
  { 0, NULL }
465
};
466
467
468
static unsigned
469
829
dissect_lcsap_Criticality(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
470
829
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
471
829
                                     3, NULL, false, 0, NULL);
472
473
829
  return offset;
474
829
}
475
476
477
static const value_string lcsap_ProcedureCode_vals[] = {
478
  { id_Location_Service_Request, "id-Location-Service-Request" },
479
  { id_Connection_Oriented_Information_Transfer, "id-Connection-Oriented-Information-Transfer" },
480
  { id_Connectionless_Information_Transfer, "id-Connectionless-Information-Transfer" },
481
  { id_Location_Abort, "id-Location-Abort" },
482
  { id_Reset, "id-Reset" },
483
  { id_Ciphering_Key_Data_Delivery, "id-Ciphering-Key-Data-Delivery" },
484
  { 0, NULL }
485
};
486
487
488
static unsigned
489
71
dissect_lcsap_ProcedureCode(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
490
71
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
491
71
                                                            0U, 255U, &ProcedureCode, false);
492
493
494
71
  {
495
71
    uint8_t tmp = tvb_get_uint8(tvb, 0);
496
497
71
    if (tmp == 0)
498
26
      col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%sReq",
499
26
                   val_to_str_const(ProcedureCode, lcsap_ProcedureCode_vals, "unknown message"));
500
45
    else if (tmp == 32)
501
0
      col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%sResp",
502
0
                   val_to_str_const(ProcedureCode, lcsap_ProcedureCode_vals, "unknown message"));
503
45
    else
504
45
      col_set_str(actx->pinfo->cinfo, COL_INFO,
505
45
                   val_to_str_const(ProcedureCode, lcsap_ProcedureCode_vals, "unknown message"));
506
71
  }
507
508
71
  return offset;
509
71
}
510
511
512
513
static unsigned
514
21
dissect_lcsap_ProtocolExtensionID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
515
21
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
516
21
                                                            0U, 65535U, &ProtocolExtensionID, false);
517
518
21
  return offset;
519
21
}
520
521
522
static const value_string lcsap_ProtocolIE_ID_vals[] = {
523
  { id_Accuracy_Fulfillment_Indicator, "id-Accuracy-Fulfillment-Indicator" },
524
  { id_APDU, "id-APDU" },
525
  { id_Correlation_ID, "id-Correlation-ID" },
526
  { id_Destination_ID, "id-Destination-ID" },
527
  { id_E_UTRAN_Cell_Identifier, "id-E-UTRAN-Cell-Identifier" },
528
  { id_Include_Velocity, "id-Include-Velocity" },
529
  { id_IMEI, "id-IMEI" },
530
  { id_IMSI, "id-IMSI" },
531
  { id_LCS_Client_Type, "id-LCS-Client-Type" },
532
  { id_LCS_Priority, "id-LCS-Priority" },
533
  { id_LCS_QOS, "id-LCS-QOS" },
534
  { id_LCS_Cause, "id-LCS-Cause" },
535
  { id_Location_Estimate, "id-Location-Estimate" },
536
  { id_Location_Type, "id-Location-Type" },
537
  { id_MultipleAPDUs, "id-MultipleAPDUs" },
538
  { id_Payload_Type, "id-Payload-Type" },
539
  { id_Positioning_Data, "id-Positioning-Data" },
540
  { id_Return_Error_Request, "id-Return-Error-Request" },
541
  { id_Return_Error_Cause, "id-Return-Error-Cause" },
542
  { id_Source_Identity, "id-Source-Identity" },
543
  { id_UE_Positioning_Capability, "id-UE-Positioning-Capability" },
544
  { id_Velocity_Estimate, "id-Velocity-Estimate" },
545
  { id_LCS_Service_Type_ID, "id-LCS-Service-Type-ID" },
546
  { id_Cell_Portion_ID, "id-Cell-Portion-ID" },
547
  { id_Civic_Address, "id-Civic-Address" },
548
  { id_Barometric_Pressure, "id-Barometric-Pressure" },
549
  { id_Additional_PositioningDataSet, "id-Additional-PositioningDataSet" },
550
  { id_RAT_Type, "id-RAT-Type" },
551
  { id_Ciphering_Data, "id-Ciphering-Data" },
552
  { id_Ciphering_Data_Ack, "id-Ciphering-Data-Ack" },
553
  { id_Ciphering_Data_Error_Report, "id-Ciphering-Data-Error-Report" },
554
  { id_Coverage_Level, "id-Coverage-Level" },
555
  { id_UE_Country_Determination_Indication, "id-UE-Country-Determination-Indication" },
556
  { id_UE_Area_Indication, "id-UE-Area-Indication" },
557
  { 0, NULL }
558
};
559
560
561
static unsigned
562
741
dissect_lcsap_ProtocolIE_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
563
741
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
564
741
                                                            0U, 65535U, &ProtocolIE_ID, false);
565
566
741
  if (tree) {
567
738
    proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
568
738
                           val_to_str(actx->pinfo->pool, ProtocolIE_ID, VALS(lcsap_ProtocolIE_ID_vals), "unknown (%d)"));
569
738
  }
570
741
  return offset;
571
741
}
572
573
574
575
static unsigned
576
736
dissect_lcsap_T_ie_field_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
577
736
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
578
579
736
  return offset;
580
736
}
581
582
583
static const per_sequence_t ProtocolIE_Field_sequence[] = {
584
  { &hf_lcsap_id            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_ID },
585
  { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
586
  { &hf_lcsap_ie_field_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_T_ie_field_value },
587
  { NULL, 0, 0, NULL }
588
};
589
590
static unsigned
591
770
dissect_lcsap_ProtocolIE_Field(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
592
770
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
593
770
                                   ett_lcsap_ProtocolIE_Field, ProtocolIE_Field_sequence);
594
595
770
  return offset;
596
770
}
597
598
599
static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
600
  { &hf_lcsap_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Field },
601
};
602
603
static unsigned
604
64
dissect_lcsap_ProtocolIE_Container(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
605
64
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
606
64
                                                  ett_lcsap_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
607
64
                                                  0, maxProtocolIEs, false);
608
609
64
  return offset;
610
64
}
611
612
613
614
static unsigned
615
18
dissect_lcsap_T_extensionValue(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
616
18
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
617
618
18
  return offset;
619
18
}
620
621
622
static const per_sequence_t ProtocolExtensionField_sequence[] = {
623
  { &hf_lcsap_ext_id        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolExtensionID },
624
  { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
625
  { &hf_lcsap_extensionValue, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_T_extensionValue },
626
  { NULL, 0, 0, NULL }
627
};
628
629
static unsigned
630
24
dissect_lcsap_ProtocolExtensionField(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
631
24
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
632
24
                                   ett_lcsap_ProtocolExtensionField, ProtocolExtensionField_sequence);
633
634
24
  return offset;
635
24
}
636
637
638
static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
639
  { &hf_lcsap_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolExtensionField },
640
};
641
642
static unsigned
643
6
dissect_lcsap_ProtocolExtensionContainer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
644
6
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
645
6
                                                  ett_lcsap_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
646
6
                                                  1, maxProtocolExtensions, false);
647
648
6
  return offset;
649
6
}
650
651
652
653
static unsigned
654
10
dissect_lcsap_APDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
655
656
10
  tvbuff_t *parameter_tvb=NULL;
657
658
10
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
659
10
                                       NO_BOUND, NO_BOUND, false, &parameter_tvb);
660
661
662
10
  if (parameter_tvb) {
663
7
    switch (PayloadType) {
664
1
    case 0:
665
      /* LPP */
666
1
      if (lpp_handle) {
667
1
        call_dissector(lpp_handle, parameter_tvb, actx->pinfo, tree);
668
1
      }
669
1
      break;
670
2
    case 1:
671
      /* LPPa */
672
2
      if (lppa_handle) {
673
2
        call_dissector(lppa_handle, parameter_tvb, actx->pinfo, tree);
674
2
      }
675
2
      break;
676
4
    default:
677
4
      break;
678
7
    }
679
7
  }
680
8
  PayloadType = -1;
681
682
683
8
  return offset;
684
10
}
685
686
687
static const value_string lcsap_Accuracy_Fulfillment_Indicator_vals[] = {
688
  {   0, "requested-accuracy-fulfilled" },
689
  {   1, "requested-accuracy-not-fulfilled" },
690
  { 0, NULL }
691
};
692
693
694
static unsigned
695
56
dissect_lcsap_Accuracy_Fulfillment_Indicator(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
696
56
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
697
56
                                     2, NULL, true, 0, NULL);
698
699
56
  return offset;
700
56
}
701
702
703
704
static unsigned
705
0
dissect_lcsap_Additional_PositioningMethodAndUsage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
706
0
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
707
0
                                       1, 1, false, NULL);
708
709
0
  return offset;
710
0
}
711
712
713
static const per_sequence_t Additional_PositioningDataSet_sequence_of[1] = {
714
  { &hf_lcsap_Additional_PositioningDataSet_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Additional_PositioningMethodAndUsage },
715
};
716
717
static unsigned
718
0
dissect_lcsap_Additional_PositioningDataSet(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
719
0
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
720
0
                                                  ett_lcsap_Additional_PositioningDataSet, Additional_PositioningDataSet_sequence_of,
721
0
                                                  1, max_Add_Pos_Set, false);
722
723
0
  return offset;
724
0
}
725
726
727
728
static unsigned
729
0
dissect_lcsap_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
730
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
731
0
                                                            0U, 65535U, NULL, false);
732
733
0
  return offset;
734
0
}
735
736
737
static const value_string lcsap_Direction_Of_Altitude_vals[] = {
738
  {   0, "height" },
739
  {   1, "depth" },
740
  { 0, NULL }
741
};
742
743
744
static unsigned
745
0
dissect_lcsap_Direction_Of_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
746
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
747
0
                                     2, NULL, false, 0, NULL);
748
749
0
  return offset;
750
0
}
751
752
753
static const per_sequence_t Altitude_And_Direction_sequence[] = {
754
  { &hf_lcsap_direction_Of_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Direction_Of_Altitude },
755
  { &hf_lcsap_altitude      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude },
756
  { NULL, 0, 0, NULL }
757
};
758
759
static unsigned
760
0
dissect_lcsap_Altitude_And_Direction(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
761
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
762
0
                                   ett_lcsap_Altitude_And_Direction, Altitude_And_Direction_sequence);
763
764
0
  return offset;
765
0
}
766
767
768
769
static unsigned
770
0
dissect_lcsap_Angle(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
771
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
772
0
                                                            0U, 179U, NULL, false);
773
774
0
  return offset;
775
0
}
776
777
778
779
static unsigned
780
0
dissect_lcsap_Barometric_Pressure(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
781
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
782
0
                                                            30000U, 115000U, NULL, false);
783
784
0
  return offset;
785
0
}
786
787
788
789
static unsigned
790
15
dissect_lcsap_C0(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
791
15
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
792
15
                                     1, 128, false, NULL, 0, NULL, NULL);
793
794
15
  return offset;
795
15
}
796
797
798
799
static unsigned
800
22
dissect_lcsap_CellIdentity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
801
22
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
802
22
                                     28, 28, false, NULL, 0, NULL, NULL);
803
804
22
  return offset;
805
22
}
806
807
808
809
static unsigned
810
0
dissect_lcsap_Cell_Portion_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
811
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
812
0
                                                            0U, 255U, NULL, true);
813
814
0
  return offset;
815
0
}
816
817
818
819
static unsigned
820
21
dissect_lcsap_Ciphering_Set_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
821
21
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
822
21
                                                            0U, 65535U, NULL, false);
823
824
21
  return offset;
825
21
}
826
827
828
829
static unsigned
830
15
dissect_lcsap_Ciphering_Key(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
831
15
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
832
15
                                       16, 16, false, NULL);
833
834
15
  return offset;
835
15
}
836
837
838
839
static unsigned
840
15
dissect_lcsap_SIB_Types(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
841
15
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
842
15
                                       4, 4, false, NULL);
843
844
15
  return offset;
845
15
}
846
847
848
849
static unsigned
850
13
dissect_lcsap_Validity_Start_Time(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
851
13
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
852
13
                                       4, 4, false, NULL);
853
854
13
  return offset;
855
13
}
856
857
858
859
static unsigned
860
10
dissect_lcsap_Validity_Duration(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
861
10
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
862
10
                                                            0U, 65535U, NULL, false);
863
864
10
  return offset;
865
10
}
866
867
868
869
static unsigned
870
10
dissect_lcsap_TAIs_List(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
871
10
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
872
10
                                       7, 97, false, NULL);
873
874
10
  return offset;
875
10
}
876
877
878
static const per_sequence_t Ciphering_Data_Set_sequence[] = {
879
  { &hf_lcsap_ciphering_Set_ID, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Set_ID },
880
  { &hf_lcsap_ciphering_Key , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Key },
881
  { &hf_lcsap_c0            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_C0 },
882
  { &hf_lcsap_sib_Types     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_SIB_Types },
883
  { &hf_lcsap_validity_Start_Time, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Validity_Start_Time },
884
  { &hf_lcsap_validity_Duration, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Validity_Duration },
885
  { &hf_lcsap_tais_List     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_TAIs_List },
886
  { NULL, 0, 0, NULL }
887
};
888
889
static unsigned
890
15
dissect_lcsap_Ciphering_Data_Set(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
891
15
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
892
15
                                   ett_lcsap_Ciphering_Data_Set, Ciphering_Data_Set_sequence);
893
894
15
  return offset;
895
15
}
896
897
898
static const per_sequence_t Ciphering_Data_sequence_of[1] = {
899
  { &hf_lcsap_Ciphering_Data_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Data_Set },
900
};
901
902
static unsigned
903
8
dissect_lcsap_Ciphering_Data(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
904
8
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
905
8
                                                  ett_lcsap_Ciphering_Data, Ciphering_Data_sequence_of,
906
8
                                                  1, max_Cipher_Set, false);
907
908
8
  return offset;
909
8
}
910
911
912
static const per_sequence_t Ciphering_Data_Ack_sequence_of[1] = {
913
  { &hf_lcsap_Ciphering_Data_Ack_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Set_ID },
914
};
915
916
static unsigned
917
1
dissect_lcsap_Ciphering_Data_Ack(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
918
1
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
919
1
                                                  ett_lcsap_Ciphering_Data_Ack, Ciphering_Data_Ack_sequence_of,
920
1
                                                  1, max_Cipher_Set, false);
921
922
1
  return offset;
923
1
}
924
925
926
static const value_string lcsap_Storage_Outcome_vals[] = {
927
  {   0, "successful" },
928
  {   1, "failed" },
929
  { 0, NULL }
930
};
931
932
933
static unsigned
934
4
dissect_lcsap_Storage_Outcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
935
4
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
936
4
                                     2, NULL, false, 0, NULL);
937
938
4
  return offset;
939
4
}
940
941
942
static const per_sequence_t Ciphering_Data_Error_Report_Contents_sequence[] = {
943
  { &hf_lcsap_ciphering_Set_ID, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Set_ID },
944
  { &hf_lcsap_storage_Outcome, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Storage_Outcome },
945
  { NULL, 0, 0, NULL }
946
};
947
948
static unsigned
949
5
dissect_lcsap_Ciphering_Data_Error_Report_Contents(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
950
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
951
5
                                   ett_lcsap_Ciphering_Data_Error_Report_Contents, Ciphering_Data_Error_Report_Contents_sequence);
952
953
5
  return offset;
954
5
}
955
956
957
static const per_sequence_t Ciphering_Data_Error_Report_sequence_of[1] = {
958
  { &hf_lcsap_Ciphering_Data_Error_Report_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Ciphering_Data_Error_Report_Contents },
959
};
960
961
static unsigned
962
3
dissect_lcsap_Ciphering_Data_Error_Report(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
963
3
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
964
3
                                                  ett_lcsap_Ciphering_Data_Error_Report, Ciphering_Data_Error_Report_sequence_of,
965
3
                                                  1, max_Cipher_Set, false);
966
967
3
  return offset;
968
3
}
969
970
971
972
static unsigned
973
0
dissect_lcsap_Civic_Address(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
974
0
  tvbuff_t *parameter_tvb=NULL;
975
976
0
    offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
977
0
                                       NO_BOUND, NO_BOUND, false, &parameter_tvb);
978
979
0
  if (parameter_tvb && xml_handle) {
980
0
    proto_tree *subtree;
981
982
0
    subtree = proto_item_add_subtree(actx->created_item, ett_lcsap_civic_address);
983
0
    if (tvb_strncaseeql(parameter_tvb, 0, "<?xml", 5) == 0) {
984
0
      call_dissector(xml_handle, parameter_tvb, actx->pinfo, subtree);
985
0
    } else {
986
0
      proto_tree_add_expert(tree, actx->pinfo, &ei_lcsap_civic_data_not_xml, parameter_tvb, 0, -1);
987
0
    }
988
0
  }
989
990
991
992
993
994
0
  return offset;
995
0
}
996
997
998
999
static unsigned
1000
0
dissect_lcsap_Confidence(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1001
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1002
0
                                                            0U, 100U, NULL, false);
1003
1004
0
  return offset;
1005
0
}
1006
1007
1008
1009
static unsigned
1010
13
dissect_lcsap_Correlation_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1011
13
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1012
13
                                       4, 4, false, NULL);
1013
1014
13
  return offset;
1015
13
}
1016
1017
1018
1019
static unsigned
1020
2
dissect_lcsap_Country(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1021
2
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1022
2
                                       NO_BOUND, NO_BOUND, false, NULL);
1023
1024
2
  return offset;
1025
2
}
1026
1027
1028
1029
static unsigned
1030
2
dissect_lcsap_DegreesLatitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1031
2
  uint32_t degrees;
1032
1033
2
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1034
2
                                                            0U, 8388607U, &degrees, false);
1035
1036
2
  proto_item_append_text(actx->created_item, " (%.5f degrees)", (((double)degrees/8388607) * 90));
1037
1038
1039
2
  return offset;
1040
2
}
1041
1042
1043
1044
static unsigned
1045
2
dissect_lcsap_DegreesLongitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1046
2
  int32_t degrees;
1047
1048
2
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1049
2
                                                            -8388608, 8388607U, (uint32_t*)&degrees, false);
1050
1051
2
  proto_item_append_text(actx->created_item, " (%.5f degrees)", (((double)degrees/16777215) * 360));
1052
1053
1054
2
  return offset;
1055
2
}
1056
1057
1058
1059
1060
static unsigned
1061
24
dissect_lcsap_PLMN_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1062
24
  tvbuff_t *parameter_tvb=NULL;
1063
24
  proto_tree *subtree;
1064
24
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1065
24
                                       3, 3, false, &parameter_tvb);
1066
24
  if(tvb_reported_length(tvb)==0)
1067
0
    return offset;
1068
1069
24
  if (!parameter_tvb)
1070
0
    return offset;
1071
24
  subtree = proto_item_add_subtree(actx->created_item, ett_lcsap_plmnd_id);
1072
24
  dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_NONE, false);
1073
1074
24
  return offset;
1075
24
}
1076
1077
1078
static const per_sequence_t E_CGI_sequence[] = {
1079
  { &hf_lcsap_pLMNidentity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_PLMN_ID },
1080
  { &hf_lcsap_cell_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_CellIdentity },
1081
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1082
  { NULL, 0, 0, NULL }
1083
};
1084
1085
static unsigned
1086
22
dissect_lcsap_E_CGI(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1087
22
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1088
22
                                   ett_lcsap_E_CGI, E_CGI_sequence);
1089
1090
22
  return offset;
1091
22
}
1092
1093
1094
static const value_string lcsap_Coverage_Level_vals[] = {
1095
  {   0, "extendedcoverage" },
1096
  { 0, NULL }
1097
};
1098
1099
1100
static unsigned
1101
4
dissect_lcsap_Coverage_Level(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1102
4
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1103
4
                                     1, NULL, true, 0, NULL);
1104
1105
4
  return offset;
1106
4
}
1107
1108
1109
static const value_string lcsap_LatitudeSign_vals[] = {
1110
  {   0, "north" },
1111
  {   1, "south" },
1112
  { 0, NULL }
1113
};
1114
1115
1116
static unsigned
1117
2
dissect_lcsap_LatitudeSign(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1118
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1119
2
                                     2, NULL, false, 0, NULL);
1120
1121
2
  return offset;
1122
2
}
1123
1124
1125
static const per_sequence_t Geographical_Coordinates_sequence[] = {
1126
  { &hf_lcsap_latitudeSign  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_LatitudeSign },
1127
  { &hf_lcsap_degreesLatitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_DegreesLatitude },
1128
  { &hf_lcsap_degreesLongitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_DegreesLongitude },
1129
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1130
  { NULL, 0, 0, NULL }
1131
};
1132
1133
static unsigned
1134
2
dissect_lcsap_Geographical_Coordinates(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1135
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1136
2
                                   ett_lcsap_Geographical_Coordinates, Geographical_Coordinates_sequence);
1137
1138
2
  return offset;
1139
2
}
1140
1141
1142
1143
static unsigned
1144
0
dissect_lcsap_Uncertainty_Code(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1145
0
  uint32_t uncertainty_code;
1146
1147
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1148
0
                                                            0U, 127U, &uncertainty_code, false);
1149
1150
0
  proto_item_append_text(actx->created_item, " (%.1f m)", 10 * (pow(1.1, (double)uncertainty_code) - 1));
1151
1152
1153
0
  return offset;
1154
0
}
1155
1156
1157
1158
static unsigned
1159
0
dissect_lcsap_Orientation_Major_Axis(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1160
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1161
0
                                                            0U, 89U, NULL, false);
1162
1163
0
  return offset;
1164
0
}
1165
1166
1167
static const per_sequence_t Uncertainty_Ellipse_sequence[] = {
1168
  { &hf_lcsap_uncertainty_SemiMajor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
1169
  { &hf_lcsap_uncertainty_SemiMinor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
1170
  { &hf_lcsap_orientation_Major_Axis_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Orientation_Major_Axis },
1171
  { NULL, 0, 0, NULL }
1172
};
1173
1174
static unsigned
1175
0
dissect_lcsap_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1176
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1177
0
                                   ett_lcsap_Uncertainty_Ellipse, Uncertainty_Ellipse_sequence);
1178
1179
0
  return offset;
1180
0
}
1181
1182
1183
static const per_sequence_t Ellipsoid_Point_With_Uncertainty_Ellipse_sequence[] = {
1184
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1185
  { &hf_lcsap_uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Ellipse },
1186
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1187
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1188
  { NULL, 0, 0, NULL }
1189
};
1190
1191
static unsigned
1192
0
dissect_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1193
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1194
0
                                   ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse, Ellipsoid_Point_With_Uncertainty_Ellipse_sequence);
1195
1196
0
  return offset;
1197
0
}
1198
1199
1200
static const per_sequence_t Ellipsoid_Point_With_Altitude_sequence[] = {
1201
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1202
  { &hf_lcsap_altitude_And_Direction, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude_And_Direction },
1203
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1204
  { NULL, 0, 0, NULL }
1205
};
1206
1207
static unsigned
1208
0
dissect_lcsap_Ellipsoid_Point_With_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1209
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1210
0
                                   ett_lcsap_Ellipsoid_Point_With_Altitude, Ellipsoid_Point_With_Altitude_sequence);
1211
1212
0
  return offset;
1213
0
}
1214
1215
1216
1217
static unsigned
1218
0
dissect_lcsap_Uncertainty_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1219
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1220
0
                                                            0U, 127U, NULL, false);
1221
1222
0
  return offset;
1223
0
}
1224
1225
1226
static const per_sequence_t Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence[] = {
1227
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1228
  { &hf_lcsap_altitude_And_Direction, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Altitude_And_Direction },
1229
  { &hf_lcsap_uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Ellipse },
1230
  { &hf_lcsap_uncertainty_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Altitude },
1231
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1232
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1233
  { NULL, 0, 0, NULL }
1234
};
1235
1236
static unsigned
1237
0
dissect_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1238
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1239
0
                                   ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence);
1240
1241
0
  return offset;
1242
0
}
1243
1244
1245
1246
static unsigned
1247
0
dissect_lcsap_Inner_Radius(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1248
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1249
0
                                                            0U, 65535U, NULL, false);
1250
1251
0
  return offset;
1252
0
}
1253
1254
1255
static const per_sequence_t Ellipsoid_Arc_sequence[] = {
1256
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1257
  { &hf_lcsap_inner_Radius  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Inner_Radius },
1258
  { &hf_lcsap_uncertainty_Radius, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
1259
  { &hf_lcsap_offset_Angle  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Angle },
1260
  { &hf_lcsap_included_Angle, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Angle },
1261
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1262
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1263
  { NULL, 0, 0, NULL }
1264
};
1265
1266
static unsigned
1267
0
dissect_lcsap_Ellipsoid_Arc(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1268
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1269
0
                                   ett_lcsap_Ellipsoid_Arc, Ellipsoid_Arc_sequence);
1270
1271
0
  return offset;
1272
0
}
1273
1274
1275
1276
static unsigned
1277
1
dissect_lcsap_Macro_eNB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1278
1
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1279
1
                                     20, 20, false, NULL, 0, NULL, NULL);
1280
1281
1
  return offset;
1282
1
}
1283
1284
1285
1286
static unsigned
1287
0
dissect_lcsap_Home_eNB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1288
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1289
0
                                     28, 28, false, NULL, 0, NULL, NULL);
1290
1291
0
  return offset;
1292
0
}
1293
1294
1295
1296
static unsigned
1297
0
dissect_lcsap_Short_Macro_eNB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1298
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1299
0
                                     18, 18, false, NULL, 0, NULL, NULL);
1300
1301
0
  return offset;
1302
0
}
1303
1304
1305
1306
static unsigned
1307
0
dissect_lcsap_Long_Macro_eNB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1308
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1309
0
                                     21, 21, false, NULL, 0, NULL, NULL);
1310
1311
0
  return offset;
1312
0
}
1313
1314
1315
static const value_string lcsap_ENB_ID_vals[] = {
1316
  {   0, "macro-eNB-ID" },
1317
  {   1, "home-eNB-ID" },
1318
  {   2, "short-macro-eNB-ID" },
1319
  {   3, "long-macro-eNB-ID" },
1320
  { 0, NULL }
1321
};
1322
1323
static const per_choice_t ENB_ID_choice[] = {
1324
  {   0, &hf_lcsap_macro_eNB_ID  , ASN1_EXTENSION_ROOT    , dissect_lcsap_Macro_eNB_ID },
1325
  {   1, &hf_lcsap_home_eNB_ID   , ASN1_EXTENSION_ROOT    , dissect_lcsap_Home_eNB_ID },
1326
  {   2, &hf_lcsap_short_macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_Short_Macro_eNB_ID },
1327
  {   3, &hf_lcsap_long_macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_Long_Macro_eNB_ID },
1328
  { 0, NULL, 0, NULL }
1329
};
1330
1331
static unsigned
1332
1
dissect_lcsap_ENB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1333
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1334
1
                                 ett_lcsap_ENB_ID, ENB_ID_choice,
1335
1
                                 NULL);
1336
1337
1
  return offset;
1338
1
}
1339
1340
1341
1342
static unsigned
1343
0
dissect_lcsap_E_SMLC_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1344
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1345
0
                                                            0U, 255U, NULL, false);
1346
1347
0
  return offset;
1348
0
}
1349
1350
1351
static const per_sequence_t Point_sequence[] = {
1352
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1353
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1354
  { NULL, 0, 0, NULL }
1355
};
1356
1357
static unsigned
1358
2
dissect_lcsap_Point(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1359
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1360
2
                                   ett_lcsap_Point, Point_sequence);
1361
1362
2
  return offset;
1363
2
}
1364
1365
1366
static const per_sequence_t Point_With_Uncertainty_sequence[] = {
1367
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1368
  { &hf_lcsap_uncertainty_Code, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Uncertainty_Code },
1369
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1370
  { NULL, 0, 0, NULL }
1371
};
1372
1373
static unsigned
1374
0
dissect_lcsap_Point_With_Uncertainty(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1375
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1376
0
                                   ett_lcsap_Point_With_Uncertainty, Point_With_Uncertainty_sequence);
1377
1378
0
  return offset;
1379
0
}
1380
1381
1382
static const per_sequence_t Polygon_Point_sequence[] = {
1383
  { &hf_lcsap_geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Geographical_Coordinates },
1384
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1385
  { NULL, 0, 0, NULL }
1386
};
1387
1388
static unsigned
1389
0
dissect_lcsap_Polygon_Point(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1390
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1391
0
                                   ett_lcsap_Polygon_Point, Polygon_Point_sequence);
1392
1393
0
  return offset;
1394
0
}
1395
1396
1397
static const per_sequence_t Polygon_sequence_of[1] = {
1398
  { &hf_lcsap_Polygon_item  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Polygon_Point },
1399
};
1400
1401
static unsigned
1402
0
dissect_lcsap_Polygon(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1403
0
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1404
0
                                                  ett_lcsap_Polygon, Polygon_sequence_of,
1405
0
                                                  1, max_No_Of_Points, false);
1406
1407
0
  return offset;
1408
0
}
1409
1410
1411
1412
static unsigned
1413
0
dissect_lcsap_High_Accuracy_DegreesLatitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1414
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1415
0
                                                            INT32_MIN, 2147483647U, NULL, false);
1416
1417
0
  return offset;
1418
0
}
1419
1420
1421
1422
static unsigned
1423
0
dissect_lcsap_High_Accuracy_DegreesLongitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1424
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1425
0
                                                            INT32_MIN, 2147483647U, NULL, false);
1426
1427
0
  return offset;
1428
0
}
1429
1430
1431
static const per_sequence_t High_Accuracy_Geographical_Coordinates_sequence[] = {
1432
  { &hf_lcsap_high_Accuracy_DegreesLatitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_DegreesLatitude },
1433
  { &hf_lcsap_high_Accuracy_DegreesLongitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_DegreesLongitude },
1434
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1435
  { NULL, 0, 0, NULL }
1436
};
1437
1438
static unsigned
1439
0
dissect_lcsap_High_Accuracy_Geographical_Coordinates(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1440
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1441
0
                                   ett_lcsap_High_Accuracy_Geographical_Coordinates, High_Accuracy_Geographical_Coordinates_sequence);
1442
1443
0
  return offset;
1444
0
}
1445
1446
1447
1448
static unsigned
1449
0
dissect_lcsap_High_Accuracy_Uncertainty_Code(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1450
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1451
0
                                                            0U, 255U, NULL, false);
1452
1453
0
  return offset;
1454
0
}
1455
1456
1457
1458
static unsigned
1459
0
dissect_lcsap_INTEGER_0_179(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1460
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1461
0
                                                            0U, 179U, NULL, false);
1462
1463
0
  return offset;
1464
0
}
1465
1466
1467
static const per_sequence_t High_Accuracy_Uncertainty_Ellipse_sequence[] = {
1468
  { &hf_lcsap_high_Accuracy_Uncertainty_SemiMajor, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Uncertainty_Code },
1469
  { &hf_lcsap_high_Accuracy_Uncertainty_SemiMinor, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Uncertainty_Code },
1470
  { &hf_lcsap_orientation_Major_Axis, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_179 },
1471
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1472
  { NULL, 0, 0, NULL }
1473
};
1474
1475
static unsigned
1476
0
dissect_lcsap_High_Accuracy_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1477
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1478
0
                                   ett_lcsap_High_Accuracy_Uncertainty_Ellipse, High_Accuracy_Uncertainty_Ellipse_sequence);
1479
1480
0
  return offset;
1481
0
}
1482
1483
1484
static const per_sequence_t High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse_sequence[] = {
1485
  { &hf_lcsap_high_Accuracy_Geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Geographical_Coordinates },
1486
  { &hf_lcsap_high_Accuracy_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Uncertainty_Ellipse },
1487
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1488
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1489
  { NULL, 0, 0, NULL }
1490
};
1491
1492
static unsigned
1493
0
dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1494
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1495
0
                                   ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse, High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse_sequence);
1496
1497
0
  return offset;
1498
0
}
1499
1500
1501
1502
static unsigned
1503
0
dissect_lcsap_High_Accuracy_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1504
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1505
0
                                                            -64000, 1280000U, NULL, false);
1506
1507
0
  return offset;
1508
0
}
1509
1510
1511
static const per_sequence_t High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence[] = {
1512
  { &hf_lcsap_high_Accuracy_Geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Geographical_Coordinates },
1513
  { &hf_lcsap_high_Accuracy_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Altitude },
1514
  { &hf_lcsap_high_Accuracy_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Uncertainty_Ellipse },
1515
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1516
  { &hf_lcsap_high_Accuracy_Uncertainty_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Uncertainty_Code },
1517
  { &hf_lcsap_vertical_Confidence, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1518
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1519
  { NULL, 0, 0, NULL }
1520
};
1521
1522
static unsigned
1523
0
dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1524
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1525
0
                                   ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_sequence);
1526
1527
0
  return offset;
1528
0
}
1529
1530
1531
1532
static unsigned
1533
0
dissect_lcsap_High_Accuracy_Extended_Uncertainty_Code(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1534
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1535
0
                                                            0U, 255U, NULL, false);
1536
1537
0
  return offset;
1538
0
}
1539
1540
1541
static const per_sequence_t High_Accuracy_Extended_Uncertainty_Ellipse_sequence[] = {
1542
  { &hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMajor, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Extended_Uncertainty_Code },
1543
  { &hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMinor, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Extended_Uncertainty_Code },
1544
  { &hf_lcsap_orientation_Major_Axis, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_179 },
1545
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1546
  { NULL, 0, 0, NULL }
1547
};
1548
1549
static unsigned
1550
0
dissect_lcsap_High_Accuracy_Extended_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1551
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1552
0
                                   ett_lcsap_High_Accuracy_Extended_Uncertainty_Ellipse, High_Accuracy_Extended_Uncertainty_Ellipse_sequence);
1553
1554
0
  return offset;
1555
0
}
1556
1557
1558
static const value_string lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse_vals[] = {
1559
  {   0, "high-Accuracy-Uncertainty-Ellipse" },
1560
  {   1, "high-Accuracy-Extended-Uncertainty-Ellipse" },
1561
  { 0, NULL }
1562
};
1563
1564
static const per_choice_t High_Accuracy_Scalable_Uncertainty_Ellipse_choice[] = {
1565
  {   0, &hf_lcsap_high_Accuracy_Uncertainty_Ellipse, ASN1_NO_EXTENSIONS     , dissect_lcsap_High_Accuracy_Uncertainty_Ellipse },
1566
  {   1, &hf_lcsap_high_Accuracy_Extended_Uncertainty_Ellipse, ASN1_NO_EXTENSIONS     , dissect_lcsap_High_Accuracy_Extended_Uncertainty_Ellipse },
1567
  { 0, NULL, 0, NULL }
1568
};
1569
1570
static unsigned
1571
0
dissect_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1572
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1573
0
                                 ett_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse, High_Accuracy_Scalable_Uncertainty_Ellipse_choice,
1574
0
                                 NULL);
1575
1576
0
  return offset;
1577
0
}
1578
1579
1580
static const per_sequence_t High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse_sequence[] = {
1581
  { &hf_lcsap_high_Accuracy_Geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Geographical_Coordinates },
1582
  { &hf_lcsap_high_Accuracy_Scalable_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse },
1583
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1584
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1585
  { NULL, 0, 0, NULL }
1586
};
1587
1588
static unsigned
1589
0
dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1590
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1591
0
                                   ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse, High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse_sequence);
1592
1593
0
  return offset;
1594
0
}
1595
1596
1597
static const value_string lcsap_High_Accuracy_Scalable_Uncertainty_Altitude_vals[] = {
1598
  {   0, "high-Accuracy-Uncertainty-Altitude" },
1599
  {   1, "high-Accuracy-Extended-Uncertainty-Altitude" },
1600
  { 0, NULL }
1601
};
1602
1603
static const per_choice_t High_Accuracy_Scalable_Uncertainty_Altitude_choice[] = {
1604
  {   0, &hf_lcsap_high_Accuracy_Uncertainty_Altitude, ASN1_NO_EXTENSIONS     , dissect_lcsap_High_Accuracy_Uncertainty_Code },
1605
  {   1, &hf_lcsap_high_Accuracy_Extended_Uncertainty_Altitude, ASN1_NO_EXTENSIONS     , dissect_lcsap_High_Accuracy_Extended_Uncertainty_Code },
1606
  { 0, NULL, 0, NULL }
1607
};
1608
1609
static unsigned
1610
0
dissect_lcsap_High_Accuracy_Scalable_Uncertainty_Altitude(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1611
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1612
0
                                 ett_lcsap_High_Accuracy_Scalable_Uncertainty_Altitude, High_Accuracy_Scalable_Uncertainty_Altitude_choice,
1613
0
                                 NULL);
1614
1615
0
  return offset;
1616
0
}
1617
1618
1619
static const per_sequence_t High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid_sequence[] = {
1620
  { &hf_lcsap_high_Accuracy_Geographical_Coordinates, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Geographical_Coordinates },
1621
  { &hf_lcsap_high_Accuracy_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Altitude },
1622
  { &hf_lcsap_high_Accuracy_Scalable_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse },
1623
  { &hf_lcsap_confidence    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1624
  { &hf_lcsap_high_Accuracy_Scalable_Uncertainty_Altitude, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_High_Accuracy_Scalable_Uncertainty_Altitude },
1625
  { &hf_lcsap_vertical_Confidence, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Confidence },
1626
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1627
  { NULL, 0, 0, NULL }
1628
};
1629
1630
static unsigned
1631
0
dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1632
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1633
0
                                   ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid, High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid_sequence);
1634
1635
0
  return offset;
1636
0
}
1637
1638
1639
static const value_string lcsap_Geographical_Area_vals[] = {
1640
  {   0, "point" },
1641
  {   1, "point-With-Uncertainty" },
1642
  {   2, "ellipsoidPoint-With-Uncertainty-Ellipse" },
1643
  {   3, "polygon" },
1644
  {   4, "ellipsoid-Point-With-Altitude" },
1645
  {   5, "ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid" },
1646
  {   6, "ellipsoid-Arc" },
1647
  {   7, "high-Accuracy-Ellipsoid-Point-With-Uncertainty-Ellipse" },
1648
  {   8, "high-Accuracy-Ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid" },
1649
  {   9, "high-Accuracy-Ellipsoid-Point-With-Scalable-Uncertainty-Ellipse" },
1650
  {  10, "high-Accuracy-Ellipsoid-Point-With-Altitude-And-Scalable-Uncertainty-Ellipsoid" },
1651
  { 0, NULL }
1652
};
1653
1654
static const per_choice_t Geographical_Area_choice[] = {
1655
  {   0, &hf_lcsap_point         , ASN1_EXTENSION_ROOT    , dissect_lcsap_Point },
1656
  {   1, &hf_lcsap_point_With_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Point_With_Uncertainty },
1657
  {   2, &hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse },
1658
  {   3, &hf_lcsap_polygon       , ASN1_EXTENSION_ROOT    , dissect_lcsap_Polygon },
1659
  {   4, &hf_lcsap_ellipsoid_Point_With_Altitude, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Altitude },
1660
  {   5, &hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid },
1661
  {   6, &hf_lcsap_ellipsoid_Arc , ASN1_EXTENSION_ROOT    , dissect_lcsap_Ellipsoid_Arc },
1662
  {   7, &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse },
1663
  {   8, &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid },
1664
  {   9, &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse },
1665
  {  10, &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid, ASN1_NOT_EXTENSION_ROOT, dissect_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid },
1666
  { 0, NULL, 0, NULL }
1667
};
1668
1669
static unsigned
1670
2
dissect_lcsap_Geographical_Area(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1671
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1672
2
                                 ett_lcsap_Geographical_Area, Geographical_Area_choice,
1673
2
                                 NULL);
1674
1675
2
  return offset;
1676
2
}
1677
1678
1679
static const per_sequence_t Global_eNB_ID_sequence[] = {
1680
  { &hf_lcsap_pLMN_ID       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_PLMN_ID },
1681
  { &hf_lcsap_eNB_ID        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ENB_ID },
1682
  { NULL, 0, 0, NULL }
1683
};
1684
1685
static unsigned
1686
2
dissect_lcsap_Global_eNB_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1687
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1688
2
                                   ett_lcsap_Global_eNB_ID, Global_eNB_ID_sequence);
1689
1690
2
  return offset;
1691
2
}
1692
1693
1694
1695
static unsigned
1696
1
dissect_lcsap_GNSS_Positioning_Method_And_Usage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1697
1
  tvbuff_t *parameter_tvb=NULL;
1698
1699
1
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1700
1
                                       1, 1, false, &parameter_tvb);
1701
1702
1703
1
  if (!parameter_tvb)
1704
0
    return offset;
1705
1706
1
  proto_tree_add_item(tree, hf_lcsap_gnss_pos_method, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
1707
1
  proto_tree_add_item(tree, hf_lcsap_gnss_id, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
1708
1
  proto_tree_add_item(tree, hf_lcsap_gnss_pos_usage, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
1709
1710
1711
1
  return offset;
1712
1
}
1713
1714
1715
static const per_sequence_t GNSS_Positioning_Data_Set_sequence_of[1] = {
1716
  { &hf_lcsap_GNSS_Positioning_Data_Set_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_GNSS_Positioning_Method_And_Usage },
1717
};
1718
1719
static unsigned
1720
1
dissect_lcsap_GNSS_Positioning_Data_Set(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1721
1
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1722
1
                                                  ett_lcsap_GNSS_Positioning_Data_Set, GNSS_Positioning_Data_Set_sequence_of,
1723
1
                                                  1, max_GNSS_Set, false);
1724
1725
1
  return offset;
1726
1
}
1727
1728
1729
1730
static unsigned
1731
1
dissect_lcsap_Horizontal_Accuracy(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1732
1
  uint32_t uncertainty_code;
1733
1
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1734
1
                                                            0U, 127U, &uncertainty_code, false);
1735
1736
1737
1738
1
  proto_item_append_text(actx->created_item, " (%.1f m)", 10 * (pow(1.1, (double)uncertainty_code) - 1));
1739
1740
1
  return offset;
1741
1
}
1742
1743
1744
1745
static unsigned
1746
1
dissect_lcsap_INTEGER_0_359(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1747
1
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1748
1
                                                            0U, 359U, NULL, false);
1749
1750
1
  return offset;
1751
1
}
1752
1753
1754
1755
static unsigned
1756
1
dissect_lcsap_INTEGER_0_2047(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1757
1
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1758
1
                                                            0U, 2047U, NULL, false);
1759
1760
1
  return offset;
1761
1
}
1762
1763
1764
static const per_sequence_t Horizontal_Speed_And_Bearing_sequence[] = {
1765
  { &hf_lcsap_bearing       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_359 },
1766
  { &hf_lcsap_horizontal_Speed, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_2047 },
1767
  { NULL, 0, 0, NULL }
1768
};
1769
1770
static unsigned
1771
1
dissect_lcsap_Horizontal_Speed_And_Bearing(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1772
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1773
1
                                   ett_lcsap_Horizontal_Speed_And_Bearing, Horizontal_Speed_And_Bearing_sequence);
1774
1775
1
  return offset;
1776
1
}
1777
1778
1779
static const per_sequence_t Horizontal_Velocity_sequence[] = {
1780
  { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1781
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1782
  { NULL, 0, 0, NULL }
1783
};
1784
1785
static unsigned
1786
1
dissect_lcsap_Horizontal_Velocity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1787
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1788
1
                                   ett_lcsap_Horizontal_Velocity, Horizontal_Velocity_sequence);
1789
1790
1
  return offset;
1791
1
}
1792
1793
1794
1795
static unsigned
1796
0
dissect_lcsap_INTEGER_0_255(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1797
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1798
0
                                                            0U, 255U, NULL, false);
1799
1800
0
  return offset;
1801
0
}
1802
1803
1804
static const value_string lcsap_Vertical_Speed_Direction_vals[] = {
1805
  {   0, "upward" },
1806
  {   1, "downward" },
1807
  { 0, NULL }
1808
};
1809
1810
1811
static unsigned
1812
0
dissect_lcsap_Vertical_Speed_Direction(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1813
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1814
0
                                     2, NULL, false, 0, NULL);
1815
1816
0
  return offset;
1817
0
}
1818
1819
1820
static const per_sequence_t Vertical_Velocity_sequence[] = {
1821
  { &hf_lcsap_vertical_Speed, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1822
  { &hf_lcsap_vertical_Speed_Direction, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Speed_Direction },
1823
  { NULL, 0, 0, NULL }
1824
};
1825
1826
static unsigned
1827
0
dissect_lcsap_Vertical_Velocity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1828
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1829
0
                                   ett_lcsap_Vertical_Velocity, Vertical_Velocity_sequence);
1830
1831
0
  return offset;
1832
0
}
1833
1834
1835
static const per_sequence_t Horizontal_With_Vertical_Velocity_sequence[] = {
1836
  { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1837
  { &hf_lcsap_vertical_Velocity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Velocity },
1838
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1839
  { NULL, 0, 0, NULL }
1840
};
1841
1842
static unsigned
1843
0
dissect_lcsap_Horizontal_With_Vertical_Velocity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1844
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1845
0
                                   ett_lcsap_Horizontal_With_Vertical_Velocity, Horizontal_With_Vertical_Velocity_sequence);
1846
1847
0
  return offset;
1848
0
}
1849
1850
1851
static const per_sequence_t Horizontal_Velocity_With_Uncertainty_sequence[] = {
1852
  { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1853
  { &hf_lcsap_uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1854
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1855
  { NULL, 0, 0, NULL }
1856
};
1857
1858
static unsigned
1859
0
dissect_lcsap_Horizontal_Velocity_With_Uncertainty(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1860
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1861
0
                                   ett_lcsap_Horizontal_Velocity_With_Uncertainty, Horizontal_Velocity_With_Uncertainty_sequence);
1862
1863
0
  return offset;
1864
0
}
1865
1866
1867
static const per_sequence_t Horizontal_With_Vertical_Velocity_And_Uncertainty_sequence[] = {
1868
  { &hf_lcsap_horizontal_Speed_And_Bearing, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Horizontal_Speed_And_Bearing },
1869
  { &hf_lcsap_vertical_Velocity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_Vertical_Velocity },
1870
  { &hf_lcsap_horizontal_Uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1871
  { &hf_lcsap_vertical_Uncertainty_Speed, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_INTEGER_0_255 },
1872
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
1873
  { NULL, 0, 0, NULL }
1874
};
1875
1876
static unsigned
1877
0
dissect_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1878
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1879
0
                                   ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty, Horizontal_With_Vertical_Velocity_And_Uncertainty_sequence);
1880
1881
0
  return offset;
1882
0
}
1883
1884
1885
1886
static unsigned
1887
2
dissect_lcsap_IMSI(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1888
2
  tvbuff_t *imsi_tvb;
1889
2
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1890
2
                                       3, 8, false, &imsi_tvb);
1891
1892
2
  if (imsi_tvb) {
1893
2
    proto_tree *subtree;
1894
1895
2
    subtree = proto_item_add_subtree(actx->created_item, ett_lcsap_imsi);
1896
2
    dissect_e212_imsi(imsi_tvb, actx->pinfo, subtree, 0, tvb_reported_length(imsi_tvb), false);
1897
2
  }
1898
1899
1900
2
  return offset;
1901
2
}
1902
1903
1904
1905
static unsigned
1906
7
dissect_lcsap_IMEI(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1907
7
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1908
7
                                       8, 8, false, NULL);
1909
1910
7
  return offset;
1911
7
}
1912
1913
1914
static const value_string lcsap_Include_Velocity_vals[] = {
1915
  {   0, "requested" },
1916
  {   1, "not-Requested" },
1917
  { 0, NULL }
1918
};
1919
1920
1921
static unsigned
1922
4
dissect_lcsap_Include_Velocity(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1923
4
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1924
4
                                     2, NULL, true, 0, NULL);
1925
1926
4
  return offset;
1927
4
}
1928
1929
1930
static const value_string lcsap_International_Area_Indication_vals[] = {
1931
  {   0, "yes" },
1932
  { 0, NULL }
1933
};
1934
1935
1936
static unsigned
1937
2
dissect_lcsap_International_Area_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1938
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1939
2
                                     1, NULL, true, 0, NULL);
1940
1941
2
  return offset;
1942
2
}
1943
1944
1945
static const value_string lcsap_Location_Type_vals[] = {
1946
  {   0, "geographic-Information" },
1947
  {   1, "assistance-Information" },
1948
  {   2, "last-known-location" },
1949
  { 0, NULL }
1950
};
1951
1952
1953
static unsigned
1954
1
dissect_lcsap_Location_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1955
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1956
1
                                     2, NULL, true, 1, NULL);
1957
1958
1
  return offset;
1959
1
}
1960
1961
1962
static const value_string lcsap_Radio_Network_Layer_Cause_vals[] = {
1963
  {   0, "unspecified" },
1964
  { 0, NULL }
1965
};
1966
1967
1968
static unsigned
1969
1
dissect_lcsap_Radio_Network_Layer_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1970
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1971
1
                                     1, NULL, true, 0, NULL);
1972
1973
1
  return offset;
1974
1
}
1975
1976
1977
static const value_string lcsap_Transport_Layer_Cause_vals[] = {
1978
  {   0, "tranport-Resource-Unavailable" },
1979
  {   1, "unspecified" },
1980
  { 0, NULL }
1981
};
1982
1983
1984
static unsigned
1985
0
dissect_lcsap_Transport_Layer_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1986
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1987
0
                                     2, NULL, true, 0, NULL);
1988
1989
0
  return offset;
1990
0
}
1991
1992
1993
static const value_string lcsap_Protocol_Cause_vals[] = {
1994
  {   0, "transfer-Syntax-Error" },
1995
  {   1, "abstract-Syntax-Error-Reject" },
1996
  {   2, "abstract-Syntax-Error-Ignore-And-Notify" },
1997
  {   3, "message-Not-Compatible-With-Receiver-State" },
1998
  {   4, "semantic-Error" },
1999
  {   5, "unspecified" },
2000
  {   6, "abstract-Syntax-Error" },
2001
  { 0, NULL }
2002
};
2003
2004
2005
static unsigned
2006
0
dissect_lcsap_Protocol_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2007
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2008
0
                                     7, NULL, true, 0, NULL);
2009
2010
0
  return offset;
2011
0
}
2012
2013
2014
static const value_string lcsap_Misc_Cause_vals[] = {
2015
  {   0, "processing-Overload" },
2016
  {   1, "hardware-Failure" },
2017
  {   2, "o-And-M-Intervention" },
2018
  {   3, "unspecified" },
2019
  {   4, "ciphering-key-data-lost" },
2020
  { 0, NULL }
2021
};
2022
2023
2024
static unsigned
2025
1
dissect_lcsap_Misc_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2026
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2027
1
                                     4, NULL, true, 1, NULL);
2028
2029
1
  return offset;
2030
1
}
2031
2032
2033
static const value_string lcsap_LCS_Cause_vals[] = {
2034
  {   0, "radio-Network-Layer" },
2035
  {   1, "transport-Layer" },
2036
  {   2, "protocol" },
2037
  {   3, "misc" },
2038
  { 0, NULL }
2039
};
2040
2041
static const per_choice_t LCS_Cause_choice[] = {
2042
  {   0, &hf_lcsap_radio_Network_Layer, ASN1_NO_EXTENSIONS     , dissect_lcsap_Radio_Network_Layer_Cause },
2043
  {   1, &hf_lcsap_transport_Layer, ASN1_NO_EXTENSIONS     , dissect_lcsap_Transport_Layer_Cause },
2044
  {   2, &hf_lcsap_protocol      , ASN1_NO_EXTENSIONS     , dissect_lcsap_Protocol_Cause },
2045
  {   3, &hf_lcsap_misc          , ASN1_NO_EXTENSIONS     , dissect_lcsap_Misc_Cause },
2046
  { 0, NULL, 0, NULL }
2047
};
2048
2049
static unsigned
2050
2
dissect_lcsap_LCS_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2051
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2052
2
                                 ett_lcsap_LCS_Cause, LCS_Cause_choice,
2053
2
                                 NULL);
2054
2055
2
  return offset;
2056
2
}
2057
2058
2059
static const value_string lcsap_LCS_Client_Type_vals[] = {
2060
  {   0, "emergency-Services" },
2061
  {   1, "value-Added-Services" },
2062
  {   2, "pLMN-Operator-Services" },
2063
  {   3, "lawful-Intercept-Services" },
2064
  {   4, "pLMN-Operator-broadcast-Services" },
2065
  {   5, "pLMN-Operator-OM" },
2066
  {   6, "pLMN-Operator-Anonymous-Statistics" },
2067
  {   7, "pLMN-Operator-Target-MS-Service-Support" },
2068
  { 0, NULL }
2069
};
2070
2071
2072
static unsigned
2073
1
dissect_lcsap_LCS_Client_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2074
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2075
1
                                     8, NULL, true, 0, NULL);
2076
2077
1
  return offset;
2078
1
}
2079
2080
2081
2082
static unsigned
2083
5
dissect_lcsap_LCS_Priority(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2084
5
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2085
5
                                       1, 1, false, NULL);
2086
2087
5
  return offset;
2088
5
}
2089
2090
2091
static const value_string lcsap_Vertical_Requested_vals[] = {
2092
  {   0, "vertical-coordinate-Is-Not-Requested" },
2093
  {   1, "vertical-coordinate-Is-Requested" },
2094
  { 0, NULL }
2095
};
2096
2097
2098
static unsigned
2099
0
dissect_lcsap_Vertical_Requested(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2100
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2101
0
                                     2, NULL, false, 0, NULL);
2102
2103
0
  return offset;
2104
0
}
2105
2106
2107
2108
static unsigned
2109
1
dissect_lcsap_Vertical_Accuracy(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2110
1
  uint32_t vertical_uncertainty;
2111
1
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2112
1
                                                            0U, 127U, &vertical_uncertainty, false);
2113
2114
2115
2116
1
  proto_item_append_text(actx->created_item, " (%.1f m)", 45 * (pow(1.025, (double)vertical_uncertainty) - 1));
2117
2118
1
  return offset;
2119
1
}
2120
2121
2122
static const value_string lcsap_Response_Time_vals[] = {
2123
  {   0, "low-Delay" },
2124
  {   1, "delay-Tolerant" },
2125
  { 0, NULL }
2126
};
2127
2128
2129
static unsigned
2130
1
dissect_lcsap_Response_Time(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2131
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2132
1
                                     2, NULL, true, 0, NULL);
2133
2134
1
  return offset;
2135
1
}
2136
2137
2138
static const per_sequence_t LCS_QoS_sequence[] = {
2139
  { &hf_lcsap_horizontal_Accuracy, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Horizontal_Accuracy },
2140
  { &hf_lcsap_vertical_Requested, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Vertical_Requested },
2141
  { &hf_lcsap_vertical_Accuracy, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Vertical_Accuracy },
2142
  { &hf_lcsap_response_Time , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Response_Time },
2143
  { NULL, 0, 0, NULL }
2144
};
2145
2146
static unsigned
2147
1
dissect_lcsap_LCS_QoS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2148
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2149
1
                                   ett_lcsap_LCS_QoS, LCS_QoS_sequence);
2150
2151
1
  return offset;
2152
1
}
2153
2154
2155
2156
static unsigned
2157
0
dissect_lcsap_LCS_Service_Type_ID(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2158
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2159
0
                                                            0U, 127U, NULL, false);
2160
2161
0
  return offset;
2162
0
}
2163
2164
2165
static const per_sequence_t MultipleAPDUs_sequence_of[1] = {
2166
  { &hf_lcsap_MultipleAPDUs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_APDU },
2167
};
2168
2169
static unsigned
2170
0
dissect_lcsap_MultipleAPDUs(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2171
0
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2172
0
                                                  ett_lcsap_MultipleAPDUs, MultipleAPDUs_sequence_of,
2173
0
                                                  1, 3, false);
2174
2175
0
  return offset;
2176
0
}
2177
2178
2179
static const value_string lcsap_Network_Element_vals[] = {
2180
  {   0, "global-eNB-ID" },
2181
  {   1, "e-SMLC-ID" },
2182
  { 0, NULL }
2183
};
2184
2185
static const per_choice_t Network_Element_choice[] = {
2186
  {   0, &hf_lcsap_global_eNB_ID , ASN1_NO_EXTENSIONS     , dissect_lcsap_Global_eNB_ID },
2187
  {   1, &hf_lcsap_e_SMLC_ID     , ASN1_NO_EXTENSIONS     , dissect_lcsap_E_SMLC_ID },
2188
  { 0, NULL, 0, NULL }
2189
};
2190
2191
static unsigned
2192
2
dissect_lcsap_Network_Element(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2193
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2194
2
                                 ett_lcsap_Network_Element, Network_Element_choice,
2195
2
                                 NULL);
2196
2197
2
  return offset;
2198
2
}
2199
2200
2201
static const value_string lcsap_Payload_Type_vals[] = {
2202
  {   0, "lPP" },
2203
  {   1, "lPPa" },
2204
  { 0, NULL }
2205
};
2206
2207
2208
static unsigned
2209
1
dissect_lcsap_Payload_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2210
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2211
1
                                     2, &PayloadType, true, 0, NULL);
2212
2213
1
  return offset;
2214
1
}
2215
2216
2217
2218
static unsigned
2219
6
dissect_lcsap_Positioning_Method_And_Usage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2220
6
  tvbuff_t *parameter_tvb=NULL;
2221
2222
6
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2223
6
                                       1, 1, false, &parameter_tvb);
2224
2225
2226
6
  if (!parameter_tvb)
2227
0
    return offset;
2228
2229
6
  proto_tree_add_item(tree, hf_lcsap_pos_method, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
2230
6
  proto_tree_add_item(tree, hf_lcsap_pos_usage, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
2231
2232
2233
2234
6
  return offset;
2235
6
}
2236
2237
2238
static const per_sequence_t Positioning_Data_Set_sequence_of[1] = {
2239
  { &hf_lcsap_Positioning_Data_Set_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Positioning_Method_And_Usage },
2240
};
2241
2242
static unsigned
2243
1
dissect_lcsap_Positioning_Data_Set(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2244
1
  offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2245
1
                                                  ett_lcsap_Positioning_Data_Set, Positioning_Data_Set_sequence_of,
2246
1
                                                  1, max_Set, false);
2247
2248
1
  return offset;
2249
1
}
2250
2251
2252
static const per_sequence_t Positioning_Data_sequence[] = {
2253
  { &hf_lcsap_positioning_Data_Set, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_Positioning_Data_Set },
2254
  { &hf_lcsap_gNSS_Positioning_Data_Set, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_GNSS_Positioning_Data_Set },
2255
  { &hf_lcsap_iE_Extensions , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2256
  { NULL, 0, 0, NULL }
2257
};
2258
2259
static unsigned
2260
3
dissect_lcsap_Positioning_Data(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2261
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2262
3
                                   ett_lcsap_Positioning_Data, Positioning_Data_sequence);
2263
2264
3
  return offset;
2265
3
}
2266
2267
2268
static const value_string lcsap_RAT_Type_vals[] = {
2269
  {   0, "lte-wb" },
2270
  {   1, "nb-iot" },
2271
  {   2, "lte-m" },
2272
  { 0, NULL }
2273
};
2274
2275
2276
static unsigned
2277
0
dissect_lcsap_RAT_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2278
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2279
0
                                     2, NULL, true, 1, NULL);
2280
2281
0
  return offset;
2282
0
}
2283
2284
2285
static const value_string lcsap_Return_Error_Type_vals[] = {
2286
  {   0, "yes" },
2287
  {   1, "no" },
2288
  { 0, NULL }
2289
};
2290
2291
2292
static unsigned
2293
1
dissect_lcsap_Return_Error_Type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2294
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2295
1
                                     2, NULL, false, 0, NULL);
2296
2297
1
  return offset;
2298
1
}
2299
2300
2301
static const value_string lcsap_Return_Error_Cause_vals[] = {
2302
  {   0, "system-Failure" },
2303
  {   1, "protocol-Error" },
2304
  {   2, "destination-Unknown" },
2305
  {   3, "destination-Unreachable" },
2306
  {   4, "congestion" },
2307
  { 0, NULL }
2308
};
2309
2310
2311
static unsigned
2312
3
dissect_lcsap_Return_Error_Cause(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2313
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2314
3
                                     5, NULL, true, 0, NULL);
2315
2316
3
  return offset;
2317
3
}
2318
2319
2320
2321
static unsigned
2322
0
dissect_lcsap_BOOLEAN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2323
0
  offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2324
2325
0
  return offset;
2326
0
}
2327
2328
2329
static const per_sequence_t UE_Positioning_Capability_sequence[] = {
2330
  { &hf_lcsap_lPP           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_BOOLEAN },
2331
  { NULL, 0, 0, NULL }
2332
};
2333
2334
static unsigned
2335
0
dissect_lcsap_UE_Positioning_Capability(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2336
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2337
0
                                   ett_lcsap_UE_Positioning_Capability, UE_Positioning_Capability_sequence);
2338
2339
0
  return offset;
2340
0
}
2341
2342
2343
static const value_string lcsap_UE_Country_Determination_Indication_vals[] = {
2344
  {   0, "required" },
2345
  {   1, "not-required" },
2346
  { 0, NULL }
2347
};
2348
2349
2350
static unsigned
2351
1
dissect_lcsap_UE_Country_Determination_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2352
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2353
1
                                     2, NULL, true, 0, NULL);
2354
2355
1
  return offset;
2356
1
}
2357
2358
2359
static const per_sequence_t UE_Area_Indication_sequence[] = {
2360
  { &hf_lcsap_country       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Country },
2361
  { &hf_lcsap_international_area_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_International_Area_Indication },
2362
  { NULL, 0, 0, NULL }
2363
};
2364
2365
static unsigned
2366
2
dissect_lcsap_UE_Area_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2367
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2368
2
                                   ett_lcsap_UE_Area_Indication, UE_Area_Indication_sequence);
2369
2370
2
  return offset;
2371
2
}
2372
2373
2374
static const value_string lcsap_Velocity_Estimate_vals[] = {
2375
  {   0, "horizontal-Velocity" },
2376
  {   1, "horizontal-With-Vertical-Velocity" },
2377
  {   2, "horizontal-Velocity-With-Uncertainty" },
2378
  {   3, "horizontal-With-Vertical-Velocity-And-Uncertainty" },
2379
  { 0, NULL }
2380
};
2381
2382
static const per_choice_t Velocity_Estimate_choice[] = {
2383
  {   0, &hf_lcsap_horizontal_Velocity, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_Velocity },
2384
  {   1, &hf_lcsap_horizontal_With_Vertical_Velocity, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_With_Vertical_Velocity },
2385
  {   2, &hf_lcsap_horizontal_Velocity_With_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_Velocity_With_Uncertainty },
2386
  {   3, &hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty, ASN1_EXTENSION_ROOT    , dissect_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty },
2387
  { 0, NULL, 0, NULL }
2388
};
2389
2390
static unsigned
2391
1
dissect_lcsap_Velocity_Estimate(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2392
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2393
1
                                 ett_lcsap_Velocity_Estimate, Velocity_Estimate_choice,
2394
1
                                 NULL);
2395
2396
1
  return offset;
2397
1
}
2398
2399
2400
static const per_sequence_t Location_Request_sequence[] = {
2401
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2402
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2403
  { NULL, 0, 0, NULL }
2404
};
2405
2406
static unsigned
2407
27
dissect_lcsap_Location_Request(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2408
27
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2409
27
                                   ett_lcsap_Location_Request, Location_Request_sequence);
2410
2411
27
  return offset;
2412
27
}
2413
2414
2415
static const per_sequence_t Location_Response_sequence[] = {
2416
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2417
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2418
  { NULL, 0, 0, NULL }
2419
};
2420
2421
static unsigned
2422
8
dissect_lcsap_Location_Response(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2423
8
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2424
8
                                   ett_lcsap_Location_Response, Location_Response_sequence);
2425
2426
8
  return offset;
2427
8
}
2428
2429
2430
static const per_sequence_t Location_Abort_Request_sequence[] = {
2431
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2432
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2433
  { NULL, 0, 0, NULL }
2434
};
2435
2436
static unsigned
2437
0
dissect_lcsap_Location_Abort_Request(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2438
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2439
0
                                   ett_lcsap_Location_Abort_Request, Location_Abort_Request_sequence);
2440
2441
0
  return offset;
2442
0
}
2443
2444
2445
static const per_sequence_t Connection_Oriented_Information_sequence[] = {
2446
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2447
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2448
  { NULL, 0, 0, NULL }
2449
};
2450
2451
static unsigned
2452
27
dissect_lcsap_Connection_Oriented_Information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2453
27
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2454
27
                                   ett_lcsap_Connection_Oriented_Information, Connection_Oriented_Information_sequence);
2455
2456
27
  return offset;
2457
27
}
2458
2459
2460
static const per_sequence_t Connectionless_Information_sequence[] = {
2461
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2462
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2463
  { NULL, 0, 0, NULL }
2464
};
2465
2466
static unsigned
2467
1
dissect_lcsap_Connectionless_Information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2468
2469
1
  PayloadType = 1;  /* LPPa */
2470
2471
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2472
1
                                   ett_lcsap_Connectionless_Information, Connectionless_Information_sequence);
2473
2474
1
  return offset;
2475
1
}
2476
2477
2478
static const per_sequence_t Reset_Request_sequence[] = {
2479
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2480
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2481
  { NULL, 0, 0, NULL }
2482
};
2483
2484
static unsigned
2485
0
dissect_lcsap_Reset_Request(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2486
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2487
0
                                   ett_lcsap_Reset_Request, Reset_Request_sequence);
2488
2489
0
  return offset;
2490
0
}
2491
2492
2493
static const per_sequence_t Reset_Acknowledge_sequence[] = {
2494
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2495
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2496
  { NULL, 0, 0, NULL }
2497
};
2498
2499
static unsigned
2500
1
dissect_lcsap_Reset_Acknowledge(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2501
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2502
1
                                   ett_lcsap_Reset_Acknowledge, Reset_Acknowledge_sequence);
2503
2504
1
  return offset;
2505
1
}
2506
2507
2508
static const per_sequence_t Ciphering_Key_Data_sequence[] = {
2509
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2510
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2511
  { NULL, 0, 0, NULL }
2512
};
2513
2514
static unsigned
2515
0
dissect_lcsap_Ciphering_Key_Data(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2516
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2517
0
                                   ett_lcsap_Ciphering_Key_Data, Ciphering_Key_Data_sequence);
2518
2519
0
  return offset;
2520
0
}
2521
2522
2523
static const per_sequence_t Ciphering_Key_Data_Result_sequence[] = {
2524
  { &hf_lcsap_protocolIEs   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_lcsap_ProtocolIE_Container },
2525
  { &hf_lcsap_protocolExtensions, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_lcsap_ProtocolExtensionContainer },
2526
  { NULL, 0, 0, NULL }
2527
};
2528
2529
static unsigned
2530
0
dissect_lcsap_Ciphering_Key_Data_Result(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2531
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2532
0
                                   ett_lcsap_Ciphering_Key_Data_Result, Ciphering_Key_Data_Result_sequence);
2533
2534
0
  return offset;
2535
0
}
2536
2537
2538
2539
static unsigned
2540
58
dissect_lcsap_InitiatingMessage_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2541
58
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
2542
2543
58
  return offset;
2544
58
}
2545
2546
2547
static const per_sequence_t InitiatingMessage_sequence[] = {
2548
  { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
2549
  { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
2550
  { &hf_lcsap_initiatingMessagevalue, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_InitiatingMessage_value },
2551
  { NULL, 0, 0, NULL }
2552
};
2553
2554
static unsigned
2555
58
dissect_lcsap_InitiatingMessage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2556
58
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2557
58
                                   ett_lcsap_InitiatingMessage, InitiatingMessage_sequence);
2558
2559
58
  return offset;
2560
58
}
2561
2562
2563
2564
static unsigned
2565
8
dissect_lcsap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2566
8
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
2567
2568
8
  return offset;
2569
8
}
2570
2571
2572
static const per_sequence_t SuccessfulOutcome_sequence[] = {
2573
  { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
2574
  { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
2575
  { &hf_lcsap_successfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_SuccessfulOutcome_value },
2576
  { NULL, 0, 0, NULL }
2577
};
2578
2579
static unsigned
2580
8
dissect_lcsap_SuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2581
8
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2582
8
                                   ett_lcsap_SuccessfulOutcome, SuccessfulOutcome_sequence);
2583
2584
8
  return offset;
2585
8
}
2586
2587
2588
2589
static unsigned
2590
5
dissect_lcsap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2591
5
  offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
2592
2593
5
  return offset;
2594
5
}
2595
2596
2597
static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
2598
  { &hf_lcsap_procedureCode , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_ProcedureCode },
2599
  { &hf_lcsap_criticality   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_Criticality },
2600
  { &hf_lcsap_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_lcsap_UnsuccessfulOutcome_value },
2601
  { NULL, 0, 0, NULL }
2602
};
2603
2604
static unsigned
2605
5
dissect_lcsap_UnsuccessfulOutcome(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2606
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2607
5
                                   ett_lcsap_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
2608
2609
5
  return offset;
2610
5
}
2611
2612
2613
static const value_string lcsap_LCS_AP_PDU_vals[] = {
2614
  {   0, "initiatingMessage" },
2615
  {   1, "successfulOutcome" },
2616
  {   2, "unsuccessfulOutcome" },
2617
  { 0, NULL }
2618
};
2619
2620
static const per_choice_t LCS_AP_PDU_choice[] = {
2621
  {   0, &hf_lcsap_initiatingMessage, ASN1_EXTENSION_ROOT    , dissect_lcsap_InitiatingMessage },
2622
  {   1, &hf_lcsap_successfulOutcome, ASN1_EXTENSION_ROOT    , dissect_lcsap_SuccessfulOutcome },
2623
  {   2, &hf_lcsap_unsuccessfulOutcome, ASN1_EXTENSION_ROOT    , dissect_lcsap_UnsuccessfulOutcome },
2624
  { 0, NULL, 0, NULL }
2625
};
2626
2627
static unsigned
2628
72
dissect_lcsap_LCS_AP_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2629
72
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2630
72
                                 ett_lcsap_LCS_AP_PDU, LCS_AP_PDU_choice,
2631
72
                                 NULL);
2632
2633
72
  return offset;
2634
72
}
2635
2636
/*--- PDUs ---*/
2637
2638
10
static int dissect_APDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2639
10
  unsigned offset = 0;
2640
10
  asn1_ctx_t asn1_ctx;
2641
10
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2642
10
  offset = dissect_lcsap_APDU(tvb, offset, &asn1_ctx, tree, hf_lcsap_APDU_PDU);
2643
10
  offset += 7; offset >>= 3;
2644
10
  return offset;
2645
10
}
2646
56
static int dissect_Accuracy_Fulfillment_Indicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2647
56
  unsigned offset = 0;
2648
56
  asn1_ctx_t asn1_ctx;
2649
56
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2650
56
  offset = dissect_lcsap_Accuracy_Fulfillment_Indicator(tvb, offset, &asn1_ctx, tree, hf_lcsap_Accuracy_Fulfillment_Indicator_PDU);
2651
56
  offset += 7; offset >>= 3;
2652
56
  return offset;
2653
56
}
2654
0
static int dissect_Additional_PositioningDataSet_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2655
0
  unsigned offset = 0;
2656
0
  asn1_ctx_t asn1_ctx;
2657
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2658
0
  offset = dissect_lcsap_Additional_PositioningDataSet(tvb, offset, &asn1_ctx, tree, hf_lcsap_Additional_PositioningDataSet_PDU);
2659
0
  offset += 7; offset >>= 3;
2660
0
  return offset;
2661
0
}
2662
0
static int dissect_Barometric_Pressure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2663
0
  unsigned offset = 0;
2664
0
  asn1_ctx_t asn1_ctx;
2665
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2666
0
  offset = dissect_lcsap_Barometric_Pressure(tvb, offset, &asn1_ctx, tree, hf_lcsap_Barometric_Pressure_PDU);
2667
0
  offset += 7; offset >>= 3;
2668
0
  return offset;
2669
0
}
2670
0
static int dissect_Cell_Portion_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2671
0
  unsigned offset = 0;
2672
0
  asn1_ctx_t asn1_ctx;
2673
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2674
0
  offset = dissect_lcsap_Cell_Portion_ID(tvb, offset, &asn1_ctx, tree, hf_lcsap_Cell_Portion_ID_PDU);
2675
0
  offset += 7; offset >>= 3;
2676
0
  return offset;
2677
0
}
2678
8
static int dissect_Ciphering_Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2679
8
  unsigned offset = 0;
2680
8
  asn1_ctx_t asn1_ctx;
2681
8
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2682
8
  offset = dissect_lcsap_Ciphering_Data(tvb, offset, &asn1_ctx, tree, hf_lcsap_Ciphering_Data_PDU);
2683
8
  offset += 7; offset >>= 3;
2684
8
  return offset;
2685
8
}
2686
1
static int dissect_Ciphering_Data_Ack_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2687
1
  unsigned offset = 0;
2688
1
  asn1_ctx_t asn1_ctx;
2689
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2690
1
  offset = dissect_lcsap_Ciphering_Data_Ack(tvb, offset, &asn1_ctx, tree, hf_lcsap_Ciphering_Data_Ack_PDU);
2691
1
  offset += 7; offset >>= 3;
2692
1
  return offset;
2693
1
}
2694
3
static int dissect_Ciphering_Data_Error_Report_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2695
3
  unsigned offset = 0;
2696
3
  asn1_ctx_t asn1_ctx;
2697
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2698
3
  offset = dissect_lcsap_Ciphering_Data_Error_Report(tvb, offset, &asn1_ctx, tree, hf_lcsap_Ciphering_Data_Error_Report_PDU);
2699
3
  offset += 7; offset >>= 3;
2700
3
  return offset;
2701
3
}
2702
0
static int dissect_Civic_Address_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2703
0
  unsigned offset = 0;
2704
0
  asn1_ctx_t asn1_ctx;
2705
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2706
0
  offset = dissect_lcsap_Civic_Address(tvb, offset, &asn1_ctx, tree, hf_lcsap_Civic_Address_PDU);
2707
0
  offset += 7; offset >>= 3;
2708
0
  return offset;
2709
0
}
2710
13
int dissect_lcsap_Correlation_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2711
13
  unsigned offset = 0;
2712
13
  asn1_ctx_t asn1_ctx;
2713
13
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2714
13
  offset = dissect_lcsap_Correlation_ID(tvb, offset, &asn1_ctx, tree, hf_lcsap_lcsap_Correlation_ID_PDU);
2715
13
  offset += 7; offset >>= 3;
2716
13
  return offset;
2717
13
}
2718
22
static int dissect_E_CGI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2719
22
  unsigned offset = 0;
2720
22
  asn1_ctx_t asn1_ctx;
2721
22
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2722
22
  offset = dissect_lcsap_E_CGI(tvb, offset, &asn1_ctx, tree, hf_lcsap_E_CGI_PDU);
2723
22
  offset += 7; offset >>= 3;
2724
22
  return offset;
2725
22
}
2726
4
static int dissect_Coverage_Level_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2727
4
  unsigned offset = 0;
2728
4
  asn1_ctx_t asn1_ctx;
2729
4
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2730
4
  offset = dissect_lcsap_Coverage_Level(tvb, offset, &asn1_ctx, tree, hf_lcsap_Coverage_Level_PDU);
2731
4
  offset += 7; offset >>= 3;
2732
4
  return offset;
2733
4
}
2734
2
static int dissect_Geographical_Area_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2735
2
  unsigned offset = 0;
2736
2
  asn1_ctx_t asn1_ctx;
2737
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2738
2
  offset = dissect_lcsap_Geographical_Area(tvb, offset, &asn1_ctx, tree, hf_lcsap_Geographical_Area_PDU);
2739
2
  offset += 7; offset >>= 3;
2740
2
  return offset;
2741
2
}
2742
2
static int dissect_IMSI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2743
2
  unsigned offset = 0;
2744
2
  asn1_ctx_t asn1_ctx;
2745
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2746
2
  offset = dissect_lcsap_IMSI(tvb, offset, &asn1_ctx, tree, hf_lcsap_IMSI_PDU);
2747
2
  offset += 7; offset >>= 3;
2748
2
  return offset;
2749
2
}
2750
7
static int dissect_IMEI_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2751
7
  unsigned offset = 0;
2752
7
  asn1_ctx_t asn1_ctx;
2753
7
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2754
7
  offset = dissect_lcsap_IMEI(tvb, offset, &asn1_ctx, tree, hf_lcsap_IMEI_PDU);
2755
7
  offset += 7; offset >>= 3;
2756
7
  return offset;
2757
7
}
2758
4
static int dissect_Include_Velocity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2759
4
  unsigned offset = 0;
2760
4
  asn1_ctx_t asn1_ctx;
2761
4
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2762
4
  offset = dissect_lcsap_Include_Velocity(tvb, offset, &asn1_ctx, tree, hf_lcsap_Include_Velocity_PDU);
2763
4
  offset += 7; offset >>= 3;
2764
4
  return offset;
2765
4
}
2766
1
static int dissect_Location_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2767
1
  unsigned offset = 0;
2768
1
  asn1_ctx_t asn1_ctx;
2769
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2770
1
  offset = dissect_lcsap_Location_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Type_PDU);
2771
1
  offset += 7; offset >>= 3;
2772
1
  return offset;
2773
1
}
2774
2
static int dissect_LCS_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2775
2
  unsigned offset = 0;
2776
2
  asn1_ctx_t asn1_ctx;
2777
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2778
2
  offset = dissect_lcsap_LCS_Cause(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Cause_PDU);
2779
2
  offset += 7; offset >>= 3;
2780
2
  return offset;
2781
2
}
2782
1
static int dissect_LCS_Client_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2783
1
  unsigned offset = 0;
2784
1
  asn1_ctx_t asn1_ctx;
2785
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2786
1
  offset = dissect_lcsap_LCS_Client_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Client_Type_PDU);
2787
1
  offset += 7; offset >>= 3;
2788
1
  return offset;
2789
1
}
2790
5
static int dissect_LCS_Priority_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2791
5
  unsigned offset = 0;
2792
5
  asn1_ctx_t asn1_ctx;
2793
5
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2794
5
  offset = dissect_lcsap_LCS_Priority(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Priority_PDU);
2795
5
  offset += 7; offset >>= 3;
2796
5
  return offset;
2797
5
}
2798
1
static int dissect_LCS_QoS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2799
1
  unsigned offset = 0;
2800
1
  asn1_ctx_t asn1_ctx;
2801
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2802
1
  offset = dissect_lcsap_LCS_QoS(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_QoS_PDU);
2803
1
  offset += 7; offset >>= 3;
2804
1
  return offset;
2805
1
}
2806
0
static int dissect_LCS_Service_Type_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2807
0
  unsigned offset = 0;
2808
0
  asn1_ctx_t asn1_ctx;
2809
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2810
0
  offset = dissect_lcsap_LCS_Service_Type_ID(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_Service_Type_ID_PDU);
2811
0
  offset += 7; offset >>= 3;
2812
0
  return offset;
2813
0
}
2814
0
static int dissect_MultipleAPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2815
0
  unsigned offset = 0;
2816
0
  asn1_ctx_t asn1_ctx;
2817
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2818
0
  offset = dissect_lcsap_MultipleAPDUs(tvb, offset, &asn1_ctx, tree, hf_lcsap_MultipleAPDUs_PDU);
2819
0
  offset += 7; offset >>= 3;
2820
0
  return offset;
2821
0
}
2822
2
static int dissect_Network_Element_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2823
2
  unsigned offset = 0;
2824
2
  asn1_ctx_t asn1_ctx;
2825
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2826
2
  offset = dissect_lcsap_Network_Element(tvb, offset, &asn1_ctx, tree, hf_lcsap_Network_Element_PDU);
2827
2
  offset += 7; offset >>= 3;
2828
2
  return offset;
2829
2
}
2830
1
static int dissect_Payload_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2831
1
  unsigned offset = 0;
2832
1
  asn1_ctx_t asn1_ctx;
2833
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2834
1
  offset = dissect_lcsap_Payload_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Payload_Type_PDU);
2835
1
  offset += 7; offset >>= 3;
2836
1
  return offset;
2837
1
}
2838
3
int dissect_lcsap_Positioning_Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2839
3
  unsigned offset = 0;
2840
3
  asn1_ctx_t asn1_ctx;
2841
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2842
3
  offset = dissect_lcsap_Positioning_Data(tvb, offset, &asn1_ctx, tree, hf_lcsap_lcsap_Positioning_Data_PDU);
2843
3
  offset += 7; offset >>= 3;
2844
3
  return offset;
2845
3
}
2846
0
static int dissect_RAT_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2847
0
  unsigned offset = 0;
2848
0
  asn1_ctx_t asn1_ctx;
2849
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2850
0
  offset = dissect_lcsap_RAT_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_RAT_Type_PDU);
2851
0
  offset += 7; offset >>= 3;
2852
0
  return offset;
2853
0
}
2854
1
static int dissect_Return_Error_Type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2855
1
  unsigned offset = 0;
2856
1
  asn1_ctx_t asn1_ctx;
2857
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2858
1
  offset = dissect_lcsap_Return_Error_Type(tvb, offset, &asn1_ctx, tree, hf_lcsap_Return_Error_Type_PDU);
2859
1
  offset += 7; offset >>= 3;
2860
1
  return offset;
2861
1
}
2862
3
static int dissect_Return_Error_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2863
3
  unsigned offset = 0;
2864
3
  asn1_ctx_t asn1_ctx;
2865
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2866
3
  offset = dissect_lcsap_Return_Error_Cause(tvb, offset, &asn1_ctx, tree, hf_lcsap_Return_Error_Cause_PDU);
2867
3
  offset += 7; offset >>= 3;
2868
3
  return offset;
2869
3
}
2870
0
static int dissect_UE_Positioning_Capability_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2871
0
  unsigned offset = 0;
2872
0
  asn1_ctx_t asn1_ctx;
2873
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2874
0
  offset = dissect_lcsap_UE_Positioning_Capability(tvb, offset, &asn1_ctx, tree, hf_lcsap_UE_Positioning_Capability_PDU);
2875
0
  offset += 7; offset >>= 3;
2876
0
  return offset;
2877
0
}
2878
1
static int dissect_UE_Country_Determination_Indication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2879
1
  unsigned offset = 0;
2880
1
  asn1_ctx_t asn1_ctx;
2881
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2882
1
  offset = dissect_lcsap_UE_Country_Determination_Indication(tvb, offset, &asn1_ctx, tree, hf_lcsap_UE_Country_Determination_Indication_PDU);
2883
1
  offset += 7; offset >>= 3;
2884
1
  return offset;
2885
1
}
2886
2
static int dissect_UE_Area_Indication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2887
2
  unsigned offset = 0;
2888
2
  asn1_ctx_t asn1_ctx;
2889
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2890
2
  offset = dissect_lcsap_UE_Area_Indication(tvb, offset, &asn1_ctx, tree, hf_lcsap_UE_Area_Indication_PDU);
2891
2
  offset += 7; offset >>= 3;
2892
2
  return offset;
2893
2
}
2894
1
static int dissect_Velocity_Estimate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2895
1
  unsigned offset = 0;
2896
1
  asn1_ctx_t asn1_ctx;
2897
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2898
1
  offset = dissect_lcsap_Velocity_Estimate(tvb, offset, &asn1_ctx, tree, hf_lcsap_Velocity_Estimate_PDU);
2899
1
  offset += 7; offset >>= 3;
2900
1
  return offset;
2901
1
}
2902
27
static int dissect_Location_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2903
27
  unsigned offset = 0;
2904
27
  asn1_ctx_t asn1_ctx;
2905
27
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2906
27
  offset = dissect_lcsap_Location_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Request_PDU);
2907
27
  offset += 7; offset >>= 3;
2908
27
  return offset;
2909
27
}
2910
8
static int dissect_Location_Response_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2911
8
  unsigned offset = 0;
2912
8
  asn1_ctx_t asn1_ctx;
2913
8
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2914
8
  offset = dissect_lcsap_Location_Response(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Response_PDU);
2915
8
  offset += 7; offset >>= 3;
2916
8
  return offset;
2917
8
}
2918
0
static int dissect_Location_Abort_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2919
0
  unsigned offset = 0;
2920
0
  asn1_ctx_t asn1_ctx;
2921
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2922
0
  offset = dissect_lcsap_Location_Abort_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Location_Abort_Request_PDU);
2923
0
  offset += 7; offset >>= 3;
2924
0
  return offset;
2925
0
}
2926
27
static int dissect_Connection_Oriented_Information_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2927
27
  unsigned offset = 0;
2928
27
  asn1_ctx_t asn1_ctx;
2929
27
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2930
27
  offset = dissect_lcsap_Connection_Oriented_Information(tvb, offset, &asn1_ctx, tree, hf_lcsap_Connection_Oriented_Information_PDU);
2931
27
  offset += 7; offset >>= 3;
2932
27
  return offset;
2933
27
}
2934
1
static int dissect_Connectionless_Information_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2935
1
  unsigned offset = 0;
2936
1
  asn1_ctx_t asn1_ctx;
2937
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2938
1
  offset = dissect_lcsap_Connectionless_Information(tvb, offset, &asn1_ctx, tree, hf_lcsap_Connectionless_Information_PDU);
2939
1
  offset += 7; offset >>= 3;
2940
1
  return offset;
2941
1
}
2942
0
static int dissect_Reset_Request_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2943
0
  unsigned offset = 0;
2944
0
  asn1_ctx_t asn1_ctx;
2945
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2946
0
  offset = dissect_lcsap_Reset_Request(tvb, offset, &asn1_ctx, tree, hf_lcsap_Reset_Request_PDU);
2947
0
  offset += 7; offset >>= 3;
2948
0
  return offset;
2949
0
}
2950
1
static int dissect_Reset_Acknowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2951
1
  unsigned offset = 0;
2952
1
  asn1_ctx_t asn1_ctx;
2953
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2954
1
  offset = dissect_lcsap_Reset_Acknowledge(tvb, offset, &asn1_ctx, tree, hf_lcsap_Reset_Acknowledge_PDU);
2955
1
  offset += 7; offset >>= 3;
2956
1
  return offset;
2957
1
}
2958
0
static int dissect_Ciphering_Key_Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2959
0
  unsigned offset = 0;
2960
0
  asn1_ctx_t asn1_ctx;
2961
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2962
0
  offset = dissect_lcsap_Ciphering_Key_Data(tvb, offset, &asn1_ctx, tree, hf_lcsap_Ciphering_Key_Data_PDU);
2963
0
  offset += 7; offset >>= 3;
2964
0
  return offset;
2965
0
}
2966
0
static int dissect_Ciphering_Key_Data_Result_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2967
0
  unsigned offset = 0;
2968
0
  asn1_ctx_t asn1_ctx;
2969
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2970
0
  offset = dissect_lcsap_Ciphering_Key_Data_Result(tvb, offset, &asn1_ctx, tree, hf_lcsap_Ciphering_Key_Data_Result_PDU);
2971
0
  offset += 7; offset >>= 3;
2972
0
  return offset;
2973
0
}
2974
72
static int dissect_LCS_AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2975
72
  unsigned offset = 0;
2976
72
  asn1_ctx_t asn1_ctx;
2977
72
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2978
72
  offset = dissect_lcsap_LCS_AP_PDU(tvb, offset, &asn1_ctx, tree, hf_lcsap_LCS_AP_PDU_PDU);
2979
72
  offset += 7; offset >>= 3;
2980
72
  return offset;
2981
72
}
2982
2983
2984
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2985
394
{
2986
394
  return (dissector_try_uint(lcsap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
2987
394
}
2988
2989
2990
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2991
9
{
2992
9
  return (dissector_try_uint(lcsap_extension_dissector_table, ProtocolExtensionID, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
2993
9
}
2994
2995
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2996
57
{
2997
57
  return (dissector_try_uint(lcsap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
2998
57
}
2999
3000
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
3001
8
{
3002
8
  return (dissector_try_uint(lcsap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
3003
8
}
3004
3005
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
3006
5
{
3007
5
  return (dissector_try_uint(lcsap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0;
3008
5
}
3009
3010
3011
static int
3012
dissect_lcsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
3013
72
{
3014
72
  proto_item  *lcsap_item = NULL;
3015
72
  proto_tree  *lcsap_tree = NULL;
3016
3017
  /* make entry in the Protocol column on summary display */
3018
72
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "LCSAP");
3019
3020
  /* create the lcsap protocol tree */
3021
72
  lcsap_item = proto_tree_add_item(tree, proto_lcsap, tvb, 0, -1, ENC_NA);
3022
72
  lcsap_tree = proto_item_add_subtree(lcsap_item, ett_lcsap);
3023
3024
72
  dissect_LCS_AP_PDU_PDU(tvb, pinfo, lcsap_tree, NULL);
3025
72
  return tvb_captured_length(tvb);
3026
72
}
3027
3028
/*--- proto_reg_handoff_lcsap ---------------------------------------*/
3029
void
3030
proto_reg_handoff_lcsap(void)
3031
14
{
3032
14
  lpp_handle = find_dissector_add_dependency("lpp", proto_lcsap);
3033
14
  lppa_handle = find_dissector_add_dependency("lppa", proto_lcsap);
3034
14
  xml_handle = find_dissector_add_dependency("xml", proto_lcsap);
3035
14
  dissector_add_uint_with_preference("sctp.port", SCTP_PORT_LCSAP, lcsap_handle);
3036
14
  dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID,   lcsap_handle);
3037
14
  dissector_add_uint("lcsap.ies", id_Accuracy_Fulfillment_Indicator, create_dissector_handle(dissect_Accuracy_Fulfillment_Indicator_PDU, proto_lcsap));
3038
14
  dissector_add_uint("lcsap.ies", id_APDU, create_dissector_handle(dissect_APDU_PDU, proto_lcsap));
3039
14
  dissector_add_uint("lcsap.ies", id_Correlation_ID, create_dissector_handle(dissect_lcsap_Correlation_ID_PDU, proto_lcsap));
3040
14
  dissector_add_uint("lcsap.ies", id_Destination_ID, create_dissector_handle(dissect_Network_Element_PDU, proto_lcsap));
3041
14
  dissector_add_uint("lcsap.ies", id_E_UTRAN_Cell_Identifier, create_dissector_handle(dissect_E_CGI_PDU, proto_lcsap));
3042
14
  dissector_add_uint("lcsap.ies", id_Include_Velocity, create_dissector_handle(dissect_Include_Velocity_PDU, proto_lcsap));
3043
14
  dissector_add_uint("lcsap.ies", id_IMEI, create_dissector_handle(dissect_IMEI_PDU, proto_lcsap));
3044
14
  dissector_add_uint("lcsap.ies", id_IMSI, create_dissector_handle(dissect_IMSI_PDU, proto_lcsap));
3045
14
  dissector_add_uint("lcsap.ies", id_LCS_Client_Type, create_dissector_handle(dissect_LCS_Client_Type_PDU, proto_lcsap));
3046
14
  dissector_add_uint("lcsap.ies", id_LCS_Priority, create_dissector_handle(dissect_LCS_Priority_PDU, proto_lcsap));
3047
14
  dissector_add_uint("lcsap.ies", id_LCS_QOS, create_dissector_handle(dissect_LCS_QoS_PDU, proto_lcsap));
3048
14
  dissector_add_uint("lcsap.ies", id_LCS_Cause, create_dissector_handle(dissect_LCS_Cause_PDU, proto_lcsap));
3049
14
  dissector_add_uint("lcsap.ies", id_Location_Estimate, create_dissector_handle(dissect_Geographical_Area_PDU, proto_lcsap));
3050
14
  dissector_add_uint("lcsap.ies", id_Location_Type, create_dissector_handle(dissect_Location_Type_PDU, proto_lcsap));
3051
14
  dissector_add_uint("lcsap.ies", id_MultipleAPDUs, create_dissector_handle(dissect_MultipleAPDUs_PDU, proto_lcsap));
3052
14
  dissector_add_uint("lcsap.ies", id_Payload_Type, create_dissector_handle(dissect_Payload_Type_PDU, proto_lcsap));
3053
14
  dissector_add_uint("lcsap.ies", id_Positioning_Data, create_dissector_handle(dissect_lcsap_Positioning_Data_PDU, proto_lcsap));
3054
14
  dissector_add_uint("lcsap.ies", id_Return_Error_Request, create_dissector_handle(dissect_Return_Error_Type_PDU, proto_lcsap));
3055
14
  dissector_add_uint("lcsap.ies", id_Return_Error_Cause, create_dissector_handle(dissect_Return_Error_Cause_PDU, proto_lcsap));
3056
14
  dissector_add_uint("lcsap.ies", id_Source_Identity, create_dissector_handle(dissect_Network_Element_PDU, proto_lcsap));
3057
14
  dissector_add_uint("lcsap.ies", id_UE_Positioning_Capability, create_dissector_handle(dissect_UE_Positioning_Capability_PDU, proto_lcsap));
3058
14
  dissector_add_uint("lcsap.ies", id_Velocity_Estimate, create_dissector_handle(dissect_Velocity_Estimate_PDU, proto_lcsap));
3059
14
  dissector_add_uint("lcsap.extension", id_Barometric_Pressure, create_dissector_handle(dissect_Barometric_Pressure_PDU, proto_lcsap));
3060
14
  dissector_add_uint("lcsap.extension", id_Additional_PositioningDataSet, create_dissector_handle(dissect_Additional_PositioningDataSet_PDU, proto_lcsap));
3061
14
  dissector_add_uint("lcsap.ies", id_RAT_Type, create_dissector_handle(dissect_RAT_Type_PDU, proto_lcsap));
3062
14
  dissector_add_uint("lcsap.ies", id_Ciphering_Data, create_dissector_handle(dissect_Ciphering_Data_PDU, proto_lcsap));
3063
14
  dissector_add_uint("lcsap.ies", id_Ciphering_Data_Ack, create_dissector_handle(dissect_Ciphering_Data_Ack_PDU, proto_lcsap));
3064
14
  dissector_add_uint("lcsap.ies", id_Ciphering_Data_Error_Report, create_dissector_handle(dissect_Ciphering_Data_Error_Report_PDU, proto_lcsap));
3065
14
  dissector_add_uint("lcsap.ies", id_Coverage_Level, create_dissector_handle(dissect_Coverage_Level_PDU, proto_lcsap));
3066
14
  dissector_add_uint("lcsap.ies", id_UE_Country_Determination_Indication, create_dissector_handle(dissect_UE_Country_Determination_Indication_PDU, proto_lcsap));
3067
14
  dissector_add_uint("lcsap.ies", id_UE_Area_Indication, create_dissector_handle(dissect_UE_Area_Indication_PDU, proto_lcsap));
3068
14
  dissector_add_uint("lcsap.extension", id_LCS_Service_Type_ID, create_dissector_handle(dissect_LCS_Service_Type_ID_PDU, proto_lcsap));
3069
14
  dissector_add_uint("lcsap.extension", id_Cell_Portion_ID, create_dissector_handle(dissect_Cell_Portion_ID_PDU, proto_lcsap));
3070
14
  dissector_add_uint("lcsap.extension", id_Civic_Address, create_dissector_handle(dissect_Civic_Address_PDU, proto_lcsap));
3071
14
  dissector_add_uint("lcsap.extension", id_E_UTRAN_Cell_Identifier, create_dissector_handle(dissect_E_CGI_PDU, proto_lcsap));
3072
14
  dissector_add_uint("lcsap.proc.imsg", id_Location_Service_Request, create_dissector_handle(dissect_Location_Request_PDU, proto_lcsap));
3073
14
  dissector_add_uint("lcsap.proc.sout", id_Location_Service_Request, create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
3074
14
  dissector_add_uint("lcsap.proc.uout", id_Location_Service_Request, create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
3075
14
  dissector_add_uint("lcsap.proc.imsg", id_Connection_Oriented_Information_Transfer, create_dissector_handle(dissect_Connection_Oriented_Information_PDU, proto_lcsap));
3076
14
  dissector_add_uint("lcsap.proc.imsg", id_Connectionless_Information_Transfer, create_dissector_handle(dissect_Connectionless_Information_PDU, proto_lcsap));
3077
14
  dissector_add_uint("lcsap.proc.uout", id_Connectionless_Information_Transfer, create_dissector_handle(dissect_Connectionless_Information_PDU, proto_lcsap));
3078
14
  dissector_add_uint("lcsap.proc.imsg", id_Location_Abort, create_dissector_handle(dissect_Location_Abort_Request_PDU, proto_lcsap));
3079
14
  dissector_add_uint("lcsap.proc.sout", id_Location_Abort, create_dissector_handle(dissect_Location_Response_PDU, proto_lcsap));
3080
14
  dissector_add_uint("lcsap.proc.imsg", id_Reset, create_dissector_handle(dissect_Reset_Request_PDU, proto_lcsap));
3081
14
  dissector_add_uint("lcsap.proc.sout", id_Reset, create_dissector_handle(dissect_Reset_Acknowledge_PDU, proto_lcsap));
3082
14
  dissector_add_uint("lcsap.proc.imsg", id_Ciphering_Key_Data_Delivery, create_dissector_handle(dissect_Ciphering_Key_Data_PDU, proto_lcsap));
3083
14
  dissector_add_uint("lcsap.proc.sout", id_Ciphering_Key_Data_Delivery, create_dissector_handle(dissect_Ciphering_Key_Data_Result_PDU, proto_lcsap));
3084
14
  dissector_add_uint("lcsap.proc.uout", id_Ciphering_Key_Data_Delivery, create_dissector_handle(dissect_Ciphering_Key_Data_Result_PDU, proto_lcsap));
3085
3086
3087
14
}
3088
3089
/*--- proto_register_lcsap -------------------------------------------*/
3090
14
void proto_register_lcsap(void) {
3091
3092
  /* List of fields */
3093
14
  static hf_register_info hf[] = {
3094
      /* 7.4.13 Positioning Data */
3095
14
      { &hf_lcsap_pos_method,
3096
14
        { "Positioning Method", "lcsap.pos_method",
3097
14
          FT_UINT8, BASE_DEC, VALS(lcsap_pos_method_vals), 0xf8,
3098
14
          NULL, HFILL }
3099
14
      },
3100
14
      { &hf_lcsap_pos_usage,
3101
14
        { "Positioning usage", "lcsap.pos_usage",
3102
14
          FT_UINT8, BASE_DEC, VALS(lcsap_pos_usage_vals), 0x07,
3103
14
          NULL, HFILL }
3104
14
      },
3105
14
      { &hf_lcsap_gnss_pos_method,
3106
14
        { "GNSS Positioning Method", "lcsap.gnss_pos_method",
3107
14
          FT_UINT8, BASE_DEC, VALS(lcsap_gnss_pos_method_vals), 0xc0,
3108
14
          NULL, HFILL }
3109
14
      },
3110
14
      { &hf_lcsap_gnss_id,
3111
14
        { "GNSS ID", "lcsap.gnss_id",
3112
14
          FT_UINT8, BASE_DEC, VALS(lcsap_gnss_id_vals), 0x38,
3113
14
          NULL, HFILL }
3114
14
      },
3115
14
      { &hf_lcsap_gnss_pos_usage,
3116
14
        { "GNSS Positioning usage", "lcsap.gnss_pos_usage",
3117
14
          FT_UINT8, BASE_DEC, VALS(lcsap_gnss_pos_usage_vals), 0x07,
3118
14
          NULL, HFILL }
3119
14
      },
3120
3121
14
    { &hf_lcsap_APDU_PDU,
3122
14
      { "APDU", "lcsap.APDU",
3123
14
        FT_BYTES, BASE_NONE, NULL, 0,
3124
14
        NULL, HFILL }},
3125
14
    { &hf_lcsap_Accuracy_Fulfillment_Indicator_PDU,
3126
14
      { "Accuracy-Fulfillment-Indicator", "lcsap.Accuracy_Fulfillment_Indicator",
3127
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Accuracy_Fulfillment_Indicator_vals), 0,
3128
14
        NULL, HFILL }},
3129
14
    { &hf_lcsap_Additional_PositioningDataSet_PDU,
3130
14
      { "Additional-PositioningDataSet", "lcsap.Additional_PositioningDataSet",
3131
14
        FT_UINT32, BASE_DEC, NULL, 0,
3132
14
        NULL, HFILL }},
3133
14
    { &hf_lcsap_Barometric_Pressure_PDU,
3134
14
      { "Barometric-Pressure", "lcsap.Barometric_Pressure",
3135
14
        FT_UINT32, BASE_DEC, NULL, 0,
3136
14
        NULL, HFILL }},
3137
14
    { &hf_lcsap_Cell_Portion_ID_PDU,
3138
14
      { "Cell-Portion-ID", "lcsap.Cell_Portion_ID",
3139
14
        FT_UINT32, BASE_DEC, NULL, 0,
3140
14
        NULL, HFILL }},
3141
14
    { &hf_lcsap_Ciphering_Data_PDU,
3142
14
      { "Ciphering-Data", "lcsap.Ciphering_Data",
3143
14
        FT_UINT32, BASE_DEC, NULL, 0,
3144
14
        NULL, HFILL }},
3145
14
    { &hf_lcsap_Ciphering_Data_Ack_PDU,
3146
14
      { "Ciphering-Data-Ack", "lcsap.Ciphering_Data_Ack",
3147
14
        FT_UINT32, BASE_DEC, NULL, 0,
3148
14
        NULL, HFILL }},
3149
14
    { &hf_lcsap_Ciphering_Data_Error_Report_PDU,
3150
14
      { "Ciphering-Data-Error-Report", "lcsap.Ciphering_Data_Error_Report",
3151
14
        FT_UINT32, BASE_DEC, NULL, 0,
3152
14
        NULL, HFILL }},
3153
14
    { &hf_lcsap_Civic_Address_PDU,
3154
14
      { "Civic-Address", "lcsap.Civic_Address",
3155
14
        FT_BYTES, BASE_NONE, NULL, 0,
3156
14
        NULL, HFILL }},
3157
14
    { &hf_lcsap_lcsap_Correlation_ID_PDU,
3158
14
      { "Correlation-ID", "lcsap.Correlation_ID",
3159
14
        FT_BYTES, BASE_NONE, NULL, 0,
3160
14
        NULL, HFILL }},
3161
14
    { &hf_lcsap_E_CGI_PDU,
3162
14
      { "E-CGI", "lcsap.E_CGI_element",
3163
14
        FT_NONE, BASE_NONE, NULL, 0,
3164
14
        NULL, HFILL }},
3165
14
    { &hf_lcsap_Coverage_Level_PDU,
3166
14
      { "Coverage-Level", "lcsap.Coverage_Level",
3167
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Coverage_Level_vals), 0,
3168
14
        NULL, HFILL }},
3169
14
    { &hf_lcsap_Geographical_Area_PDU,
3170
14
      { "Geographical-Area", "lcsap.Geographical_Area",
3171
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Geographical_Area_vals), 0,
3172
14
        NULL, HFILL }},
3173
14
    { &hf_lcsap_IMSI_PDU,
3174
14
      { "IMSI", "lcsap.IMSI",
3175
14
        FT_BYTES, BASE_NONE, NULL, 0,
3176
14
        NULL, HFILL }},
3177
14
    { &hf_lcsap_IMEI_PDU,
3178
14
      { "IMEI", "lcsap.IMEI",
3179
14
        FT_BYTES, BASE_NONE, NULL, 0,
3180
14
        NULL, HFILL }},
3181
14
    { &hf_lcsap_Include_Velocity_PDU,
3182
14
      { "Include-Velocity", "lcsap.Include_Velocity",
3183
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Include_Velocity_vals), 0,
3184
14
        NULL, HFILL }},
3185
14
    { &hf_lcsap_Location_Type_PDU,
3186
14
      { "Location-Type", "lcsap.Location_Type",
3187
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Location_Type_vals), 0,
3188
14
        NULL, HFILL }},
3189
14
    { &hf_lcsap_LCS_Cause_PDU,
3190
14
      { "LCS-Cause", "lcsap.LCS_Cause",
3191
14
        FT_UINT32, BASE_DEC, VALS(lcsap_LCS_Cause_vals), 0,
3192
14
        NULL, HFILL }},
3193
14
    { &hf_lcsap_LCS_Client_Type_PDU,
3194
14
      { "LCS-Client-Type", "lcsap.LCS_Client_Type",
3195
14
        FT_UINT32, BASE_DEC, VALS(lcsap_LCS_Client_Type_vals), 0,
3196
14
        NULL, HFILL }},
3197
14
    { &hf_lcsap_LCS_Priority_PDU,
3198
14
      { "LCS-Priority", "lcsap.LCS_Priority",
3199
14
        FT_BYTES, BASE_NONE, NULL, 0,
3200
14
        NULL, HFILL }},
3201
14
    { &hf_lcsap_LCS_QoS_PDU,
3202
14
      { "LCS-QoS", "lcsap.LCS_QoS_element",
3203
14
        FT_NONE, BASE_NONE, NULL, 0,
3204
14
        NULL, HFILL }},
3205
14
    { &hf_lcsap_LCS_Service_Type_ID_PDU,
3206
14
      { "LCS-Service-Type-ID", "lcsap.LCS_Service_Type_ID",
3207
14
        FT_UINT32, BASE_DEC, NULL, 0,
3208
14
        NULL, HFILL }},
3209
14
    { &hf_lcsap_MultipleAPDUs_PDU,
3210
14
      { "MultipleAPDUs", "lcsap.MultipleAPDUs",
3211
14
        FT_UINT32, BASE_DEC, NULL, 0,
3212
14
        NULL, HFILL }},
3213
14
    { &hf_lcsap_Network_Element_PDU,
3214
14
      { "Network-Element", "lcsap.Network_Element",
3215
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Network_Element_vals), 0,
3216
14
        NULL, HFILL }},
3217
14
    { &hf_lcsap_Payload_Type_PDU,
3218
14
      { "Payload-Type", "lcsap.Payload_Type",
3219
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Payload_Type_vals), 0,
3220
14
        NULL, HFILL }},
3221
14
    { &hf_lcsap_lcsap_Positioning_Data_PDU,
3222
14
      { "Positioning-Data", "lcsap.Positioning_Data_element",
3223
14
        FT_NONE, BASE_NONE, NULL, 0,
3224
14
        NULL, HFILL }},
3225
14
    { &hf_lcsap_RAT_Type_PDU,
3226
14
      { "RAT-Type", "lcsap.RAT_Type",
3227
14
        FT_UINT32, BASE_DEC, VALS(lcsap_RAT_Type_vals), 0,
3228
14
        NULL, HFILL }},
3229
14
    { &hf_lcsap_Return_Error_Type_PDU,
3230
14
      { "Return-Error-Type", "lcsap.Return_Error_Type",
3231
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Return_Error_Type_vals), 0,
3232
14
        NULL, HFILL }},
3233
14
    { &hf_lcsap_Return_Error_Cause_PDU,
3234
14
      { "Return-Error-Cause", "lcsap.Return_Error_Cause",
3235
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Return_Error_Cause_vals), 0,
3236
14
        NULL, HFILL }},
3237
14
    { &hf_lcsap_UE_Positioning_Capability_PDU,
3238
14
      { "UE-Positioning-Capability", "lcsap.UE_Positioning_Capability_element",
3239
14
        FT_NONE, BASE_NONE, NULL, 0,
3240
14
        NULL, HFILL }},
3241
14
    { &hf_lcsap_UE_Country_Determination_Indication_PDU,
3242
14
      { "UE-Country-Determination-Indication", "lcsap.UE_Country_Determination_Indication",
3243
14
        FT_UINT32, BASE_DEC, VALS(lcsap_UE_Country_Determination_Indication_vals), 0,
3244
14
        NULL, HFILL }},
3245
14
    { &hf_lcsap_UE_Area_Indication_PDU,
3246
14
      { "UE-Area-Indication", "lcsap.UE_Area_Indication_element",
3247
14
        FT_NONE, BASE_NONE, NULL, 0,
3248
14
        NULL, HFILL }},
3249
14
    { &hf_lcsap_Velocity_Estimate_PDU,
3250
14
      { "Velocity-Estimate", "lcsap.Velocity_Estimate",
3251
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Velocity_Estimate_vals), 0,
3252
14
        NULL, HFILL }},
3253
14
    { &hf_lcsap_Location_Request_PDU,
3254
14
      { "Location-Request", "lcsap.Location_Request_element",
3255
14
        FT_NONE, BASE_NONE, NULL, 0,
3256
14
        NULL, HFILL }},
3257
14
    { &hf_lcsap_Location_Response_PDU,
3258
14
      { "Location-Response", "lcsap.Location_Response_element",
3259
14
        FT_NONE, BASE_NONE, NULL, 0,
3260
14
        NULL, HFILL }},
3261
14
    { &hf_lcsap_Location_Abort_Request_PDU,
3262
14
      { "Location-Abort-Request", "lcsap.Location_Abort_Request_element",
3263
14
        FT_NONE, BASE_NONE, NULL, 0,
3264
14
        NULL, HFILL }},
3265
14
    { &hf_lcsap_Connection_Oriented_Information_PDU,
3266
14
      { "Connection-Oriented-Information", "lcsap.Connection_Oriented_Information_element",
3267
14
        FT_NONE, BASE_NONE, NULL, 0,
3268
14
        NULL, HFILL }},
3269
14
    { &hf_lcsap_Connectionless_Information_PDU,
3270
14
      { "Connectionless-Information", "lcsap.Connectionless_Information_element",
3271
14
        FT_NONE, BASE_NONE, NULL, 0,
3272
14
        NULL, HFILL }},
3273
14
    { &hf_lcsap_Reset_Request_PDU,
3274
14
      { "Reset-Request", "lcsap.Reset_Request_element",
3275
14
        FT_NONE, BASE_NONE, NULL, 0,
3276
14
        NULL, HFILL }},
3277
14
    { &hf_lcsap_Reset_Acknowledge_PDU,
3278
14
      { "Reset-Acknowledge", "lcsap.Reset_Acknowledge_element",
3279
14
        FT_NONE, BASE_NONE, NULL, 0,
3280
14
        NULL, HFILL }},
3281
14
    { &hf_lcsap_Ciphering_Key_Data_PDU,
3282
14
      { "Ciphering-Key-Data", "lcsap.Ciphering_Key_Data_element",
3283
14
        FT_NONE, BASE_NONE, NULL, 0,
3284
14
        NULL, HFILL }},
3285
14
    { &hf_lcsap_Ciphering_Key_Data_Result_PDU,
3286
14
      { "Ciphering-Key-Data-Result", "lcsap.Ciphering_Key_Data_Result_element",
3287
14
        FT_NONE, BASE_NONE, NULL, 0,
3288
14
        NULL, HFILL }},
3289
14
    { &hf_lcsap_LCS_AP_PDU_PDU,
3290
14
      { "LCS-AP-PDU", "lcsap.LCS_AP_PDU",
3291
14
        FT_UINT32, BASE_DEC, VALS(lcsap_LCS_AP_PDU_vals), 0,
3292
14
        NULL, HFILL }},
3293
14
    { &hf_lcsap_ProtocolIE_Container_item,
3294
14
      { "ProtocolIE-Field", "lcsap.ProtocolIE_Field_element",
3295
14
        FT_NONE, BASE_NONE, NULL, 0,
3296
14
        NULL, HFILL }},
3297
14
    { &hf_lcsap_id,
3298
14
      { "id", "lcsap.id",
3299
14
        FT_UINT32, BASE_DEC, VALS(lcsap_ProtocolIE_ID_vals), 0,
3300
14
        "ProtocolIE_ID", HFILL }},
3301
14
    { &hf_lcsap_criticality,
3302
14
      { "criticality", "lcsap.criticality",
3303
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Criticality_vals), 0,
3304
14
        NULL, HFILL }},
3305
14
    { &hf_lcsap_ie_field_value,
3306
14
      { "value", "lcsap.ie_field_value_element",
3307
14
        FT_NONE, BASE_NONE, NULL, 0,
3308
14
        "T_ie_field_value", HFILL }},
3309
14
    { &hf_lcsap_ProtocolExtensionContainer_item,
3310
14
      { "ProtocolExtensionField", "lcsap.ProtocolExtensionField_element",
3311
14
        FT_NONE, BASE_NONE, NULL, 0,
3312
14
        NULL, HFILL }},
3313
14
    { &hf_lcsap_ext_id,
3314
14
      { "id", "lcsap.ext_id",
3315
14
        FT_UINT8, BASE_DEC, VALS(lcsap_ProtocolIE_ID_vals), 0,
3316
14
        "ProtocolExtensionID", HFILL }},
3317
14
    { &hf_lcsap_extensionValue,
3318
14
      { "extensionValue", "lcsap.extensionValue_element",
3319
14
        FT_NONE, BASE_NONE, NULL, 0,
3320
14
        NULL, HFILL }},
3321
14
    { &hf_lcsap_Additional_PositioningDataSet_item,
3322
14
      { "Additional-PositioningMethodAndUsage", "lcsap.Additional_PositioningMethodAndUsage",
3323
14
        FT_BYTES, BASE_NONE, NULL, 0,
3324
14
        NULL, HFILL }},
3325
14
    { &hf_lcsap_direction_Of_Altitude,
3326
14
      { "direction-Of-Altitude", "lcsap.direction_Of_Altitude",
3327
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Direction_Of_Altitude_vals), 0,
3328
14
        NULL, HFILL }},
3329
14
    { &hf_lcsap_altitude,
3330
14
      { "altitude", "lcsap.altitude",
3331
14
        FT_UINT32, BASE_DEC, NULL, 0,
3332
14
        NULL, HFILL }},
3333
14
    { &hf_lcsap_Ciphering_Data_item,
3334
14
      { "Ciphering-Data-Set", "lcsap.Ciphering_Data_Set_element",
3335
14
        FT_NONE, BASE_NONE, NULL, 0,
3336
14
        NULL, HFILL }},
3337
14
    { &hf_lcsap_Ciphering_Data_Ack_item,
3338
14
      { "Ciphering-Set-ID", "lcsap.Ciphering_Set_ID",
3339
14
        FT_UINT32, BASE_DEC, NULL, 0,
3340
14
        NULL, HFILL }},
3341
14
    { &hf_lcsap_Ciphering_Data_Error_Report_item,
3342
14
      { "Ciphering-Data-Error-Report-Contents", "lcsap.Ciphering_Data_Error_Report_Contents_element",
3343
14
        FT_NONE, BASE_NONE, NULL, 0,
3344
14
        NULL, HFILL }},
3345
14
    { &hf_lcsap_ciphering_Set_ID,
3346
14
      { "ciphering-Set-ID", "lcsap.ciphering_Set_ID",
3347
14
        FT_UINT32, BASE_DEC, NULL, 0,
3348
14
        NULL, HFILL }},
3349
14
    { &hf_lcsap_ciphering_Key,
3350
14
      { "ciphering-Key", "lcsap.ciphering_Key",
3351
14
        FT_BYTES, BASE_NONE, NULL, 0,
3352
14
        NULL, HFILL }},
3353
14
    { &hf_lcsap_c0,
3354
14
      { "c0", "lcsap.c0",
3355
14
        FT_BYTES, BASE_NONE, NULL, 0,
3356
14
        NULL, HFILL }},
3357
14
    { &hf_lcsap_sib_Types,
3358
14
      { "sib-Types", "lcsap.sib_Types",
3359
14
        FT_BYTES, BASE_NONE, NULL, 0,
3360
14
        NULL, HFILL }},
3361
14
    { &hf_lcsap_validity_Start_Time,
3362
14
      { "validity-Start-Time", "lcsap.validity_Start_Time",
3363
14
        FT_BYTES, BASE_NONE, NULL, 0,
3364
14
        NULL, HFILL }},
3365
14
    { &hf_lcsap_validity_Duration,
3366
14
      { "validity-Duration", "lcsap.validity_Duration",
3367
14
        FT_UINT32, BASE_DEC, NULL, 0,
3368
14
        NULL, HFILL }},
3369
14
    { &hf_lcsap_tais_List,
3370
14
      { "tais-List", "lcsap.tais_List",
3371
14
        FT_BYTES, BASE_NONE, NULL, 0,
3372
14
        NULL, HFILL }},
3373
14
    { &hf_lcsap_storage_Outcome,
3374
14
      { "storage-Outcome", "lcsap.storage_Outcome",
3375
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Storage_Outcome_vals), 0,
3376
14
        NULL, HFILL }},
3377
14
    { &hf_lcsap_pLMNidentity,
3378
14
      { "pLMNidentity", "lcsap.pLMNidentity",
3379
14
        FT_BYTES, BASE_NONE, NULL, 0,
3380
14
        "PLMN_ID", HFILL }},
3381
14
    { &hf_lcsap_cell_ID,
3382
14
      { "cell-ID", "lcsap.cell_ID",
3383
14
        FT_BYTES, BASE_NONE, NULL, 0,
3384
14
        "CellIdentity", HFILL }},
3385
14
    { &hf_lcsap_iE_Extensions,
3386
14
      { "iE-Extensions", "lcsap.iE_Extensions",
3387
14
        FT_UINT32, BASE_DEC, NULL, 0,
3388
14
        "ProtocolExtensionContainer", HFILL }},
3389
14
    { &hf_lcsap_geographical_Coordinates,
3390
14
      { "geographical-Coordinates", "lcsap.geographical_Coordinates_element",
3391
14
        FT_NONE, BASE_NONE, NULL, 0,
3392
14
        NULL, HFILL }},
3393
14
    { &hf_lcsap_uncertainty_Ellipse,
3394
14
      { "uncertainty-Ellipse", "lcsap.uncertainty_Ellipse_element",
3395
14
        FT_NONE, BASE_NONE, NULL, 0,
3396
14
        NULL, HFILL }},
3397
14
    { &hf_lcsap_confidence,
3398
14
      { "confidence", "lcsap.confidence",
3399
14
        FT_UINT32, BASE_DEC, NULL, 0,
3400
14
        NULL, HFILL }},
3401
14
    { &hf_lcsap_altitude_And_Direction,
3402
14
      { "altitude-And-Direction", "lcsap.altitude_And_Direction_element",
3403
14
        FT_NONE, BASE_NONE, NULL, 0,
3404
14
        NULL, HFILL }},
3405
14
    { &hf_lcsap_uncertainty_Altitude,
3406
14
      { "uncertainty-Altitude", "lcsap.uncertainty_Altitude",
3407
14
        FT_UINT32, BASE_DEC, NULL, 0,
3408
14
        NULL, HFILL }},
3409
14
    { &hf_lcsap_inner_Radius,
3410
14
      { "inner-Radius", "lcsap.inner_Radius",
3411
14
        FT_UINT32, BASE_DEC, NULL, 0,
3412
14
        NULL, HFILL }},
3413
14
    { &hf_lcsap_uncertainty_Radius,
3414
14
      { "uncertainty-Radius", "lcsap.uncertainty_Radius",
3415
14
        FT_UINT32, BASE_DEC, NULL, 0,
3416
14
        "Uncertainty_Code", HFILL }},
3417
14
    { &hf_lcsap_offset_Angle,
3418
14
      { "offset-Angle", "lcsap.offset_Angle",
3419
14
        FT_UINT32, BASE_DEC, NULL, 0,
3420
14
        "Angle", HFILL }},
3421
14
    { &hf_lcsap_included_Angle,
3422
14
      { "included-Angle", "lcsap.included_Angle",
3423
14
        FT_UINT32, BASE_DEC, NULL, 0,
3424
14
        "Angle", HFILL }},
3425
14
    { &hf_lcsap_macro_eNB_ID,
3426
14
      { "macro-eNB-ID", "lcsap.macro_eNB_ID",
3427
14
        FT_BYTES, BASE_NONE, NULL, 0,
3428
14
        NULL, HFILL }},
3429
14
    { &hf_lcsap_home_eNB_ID,
3430
14
      { "home-eNB-ID", "lcsap.home_eNB_ID",
3431
14
        FT_BYTES, BASE_NONE, NULL, 0,
3432
14
        NULL, HFILL }},
3433
14
    { &hf_lcsap_short_macro_eNB_ID,
3434
14
      { "short-macro-eNB-ID", "lcsap.short_macro_eNB_ID",
3435
14
        FT_BYTES, BASE_NONE, NULL, 0,
3436
14
        NULL, HFILL }},
3437
14
    { &hf_lcsap_long_macro_eNB_ID,
3438
14
      { "long-macro-eNB-ID", "lcsap.long_macro_eNB_ID",
3439
14
        FT_BYTES, BASE_NONE, NULL, 0,
3440
14
        NULL, HFILL }},
3441
14
    { &hf_lcsap_point,
3442
14
      { "point", "lcsap.point_element",
3443
14
        FT_NONE, BASE_NONE, NULL, 0,
3444
14
        NULL, HFILL }},
3445
14
    { &hf_lcsap_point_With_Uncertainty,
3446
14
      { "point-With-Uncertainty", "lcsap.point_With_Uncertainty_element",
3447
14
        FT_NONE, BASE_NONE, NULL, 0,
3448
14
        NULL, HFILL }},
3449
14
    { &hf_lcsap_ellipsoidPoint_With_Uncertainty_Ellipse,
3450
14
      { "ellipsoidPoint-With-Uncertainty-Ellipse", "lcsap.ellipsoidPoint_With_Uncertainty_Ellipse_element",
3451
14
        FT_NONE, BASE_NONE, NULL, 0,
3452
14
        "Ellipsoid_Point_With_Uncertainty_Ellipse", HFILL }},
3453
14
    { &hf_lcsap_polygon,
3454
14
      { "polygon", "lcsap.polygon",
3455
14
        FT_UINT32, BASE_DEC, NULL, 0,
3456
14
        NULL, HFILL }},
3457
14
    { &hf_lcsap_ellipsoid_Point_With_Altitude,
3458
14
      { "ellipsoid-Point-With-Altitude", "lcsap.ellipsoid_Point_With_Altitude_element",
3459
14
        FT_NONE, BASE_NONE, NULL, 0,
3460
14
        NULL, HFILL }},
3461
14
    { &hf_lcsap_ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
3462
14
      { "ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid", "lcsap.ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_element",
3463
14
        FT_NONE, BASE_NONE, NULL, 0,
3464
14
        NULL, HFILL }},
3465
14
    { &hf_lcsap_ellipsoid_Arc,
3466
14
      { "ellipsoid-Arc", "lcsap.ellipsoid_Arc_element",
3467
14
        FT_NONE, BASE_NONE, NULL, 0,
3468
14
        NULL, HFILL }},
3469
14
    { &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse,
3470
14
      { "high-Accuracy-Ellipsoid-Point-With-Uncertainty-Ellipse", "lcsap.high_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse_element",
3471
14
        FT_NONE, BASE_NONE, NULL, 0,
3472
14
        NULL, HFILL }},
3473
14
    { &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
3474
14
      { "high-Accuracy-Ellipsoid-Point-With-Altitude-And-Uncertainty-Ellipsoid", "lcsap.high_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid_element",
3475
14
        FT_NONE, BASE_NONE, NULL, 0,
3476
14
        NULL, HFILL }},
3477
14
    { &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse,
3478
14
      { "high-Accuracy-Ellipsoid-Point-With-Scalable-Uncertainty-Ellipse", "lcsap.high_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse_element",
3479
14
        FT_NONE, BASE_NONE, NULL, 0,
3480
14
        NULL, HFILL }},
3481
14
    { &hf_lcsap_high_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid,
3482
14
      { "high-Accuracy-Ellipsoid-Point-With-Altitude-And-Scalable-Uncertainty-Ellipsoid", "lcsap.high_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid_element",
3483
14
        FT_NONE, BASE_NONE, NULL, 0,
3484
14
        NULL, HFILL }},
3485
14
    { &hf_lcsap_latitudeSign,
3486
14
      { "latitudeSign", "lcsap.latitudeSign",
3487
14
        FT_UINT32, BASE_DEC, VALS(lcsap_LatitudeSign_vals), 0,
3488
14
        NULL, HFILL }},
3489
14
    { &hf_lcsap_degreesLatitude,
3490
14
      { "degreesLatitude", "lcsap.degreesLatitude",
3491
14
        FT_UINT32, BASE_DEC, NULL, 0,
3492
14
        NULL, HFILL }},
3493
14
    { &hf_lcsap_degreesLongitude,
3494
14
      { "degreesLongitude", "lcsap.degreesLongitude",
3495
14
        FT_INT32, BASE_DEC, NULL, 0,
3496
14
        NULL, HFILL }},
3497
14
    { &hf_lcsap_pLMN_ID,
3498
14
      { "pLMN-ID", "lcsap.pLMN_ID",
3499
14
        FT_BYTES, BASE_NONE, NULL, 0,
3500
14
        NULL, HFILL }},
3501
14
    { &hf_lcsap_eNB_ID,
3502
14
      { "eNB-ID", "lcsap.eNB_ID",
3503
14
        FT_UINT32, BASE_DEC, VALS(lcsap_ENB_ID_vals), 0,
3504
14
        NULL, HFILL }},
3505
14
    { &hf_lcsap_GNSS_Positioning_Data_Set_item,
3506
14
      { "GNSS-Positioning-Method-And-Usage", "lcsap.GNSS_Positioning_Method_And_Usage",
3507
14
        FT_BYTES, BASE_NONE, NULL, 0,
3508
14
        NULL, HFILL }},
3509
14
    { &hf_lcsap_high_Accuracy_Geographical_Coordinates,
3510
14
      { "high-Accuracy-Geographical-Coordinates", "lcsap.high_Accuracy_Geographical_Coordinates_element",
3511
14
        FT_NONE, BASE_NONE, NULL, 0,
3512
14
        NULL, HFILL }},
3513
14
    { &hf_lcsap_high_Accuracy_Uncertainty_Ellipse,
3514
14
      { "high-Accuracy-Uncertainty-Ellipse", "lcsap.high_Accuracy_Uncertainty_Ellipse_element",
3515
14
        FT_NONE, BASE_NONE, NULL, 0,
3516
14
        NULL, HFILL }},
3517
14
    { &hf_lcsap_high_Accuracy_Scalable_Uncertainty_Ellipse,
3518
14
      { "high-Accuracy-Scalable-Uncertainty-Ellipse", "lcsap.high_Accuracy_Scalable_Uncertainty_Ellipse",
3519
14
        FT_UINT32, BASE_DEC, VALS(lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse_vals), 0,
3520
14
        NULL, HFILL }},
3521
14
    { &hf_lcsap_high_Accuracy_Altitude,
3522
14
      { "high-Accuracy-Altitude", "lcsap.high_Accuracy_Altitude",
3523
14
        FT_INT32, BASE_DEC, NULL, 0,
3524
14
        NULL, HFILL }},
3525
14
    { &hf_lcsap_high_Accuracy_Uncertainty_Altitude,
3526
14
      { "high-Accuracy-Uncertainty-Altitude", "lcsap.high_Accuracy_Uncertainty_Altitude",
3527
14
        FT_UINT32, BASE_DEC, NULL, 0,
3528
14
        "High_Accuracy_Uncertainty_Code", HFILL }},
3529
14
    { &hf_lcsap_vertical_Confidence,
3530
14
      { "vertical-Confidence", "lcsap.vertical_Confidence",
3531
14
        FT_UINT32, BASE_DEC, NULL, 0,
3532
14
        "Confidence", HFILL }},
3533
14
    { &hf_lcsap_high_Accuracy_Scalable_Uncertainty_Altitude,
3534
14
      { "high-Accuracy-Scalable-Uncertainty-Altitude", "lcsap.high_Accuracy_Scalable_Uncertainty_Altitude",
3535
14
        FT_UINT32, BASE_DEC, VALS(lcsap_High_Accuracy_Scalable_Uncertainty_Altitude_vals), 0,
3536
14
        NULL, HFILL }},
3537
14
    { &hf_lcsap_high_Accuracy_DegreesLatitude,
3538
14
      { "high-Accuracy-DegreesLatitude", "lcsap.high_Accuracy_DegreesLatitude",
3539
14
        FT_INT32, BASE_DEC, NULL, 0,
3540
14
        NULL, HFILL }},
3541
14
    { &hf_lcsap_high_Accuracy_DegreesLongitude,
3542
14
      { "high-Accuracy-DegreesLongitude", "lcsap.high_Accuracy_DegreesLongitude",
3543
14
        FT_INT32, BASE_DEC, NULL, 0,
3544
14
        NULL, HFILL }},
3545
14
    { &hf_lcsap_high_Accuracy_Uncertainty_SemiMajor,
3546
14
      { "high-Accuracy-Uncertainty-SemiMajor", "lcsap.high_Accuracy_Uncertainty_SemiMajor",
3547
14
        FT_UINT32, BASE_DEC, NULL, 0,
3548
14
        "High_Accuracy_Uncertainty_Code", HFILL }},
3549
14
    { &hf_lcsap_high_Accuracy_Uncertainty_SemiMinor,
3550
14
      { "high-Accuracy-Uncertainty-SemiMinor", "lcsap.high_Accuracy_Uncertainty_SemiMinor",
3551
14
        FT_UINT32, BASE_DEC, NULL, 0,
3552
14
        "High_Accuracy_Uncertainty_Code", HFILL }},
3553
14
    { &hf_lcsap_orientation_Major_Axis,
3554
14
      { "orientation-Major-Axis", "lcsap.orientation_Major_Axis",
3555
14
        FT_UINT32, BASE_DEC, NULL, 0,
3556
14
        "INTEGER_0_179", HFILL }},
3557
14
    { &hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMajor,
3558
14
      { "high-Accuracy-Extended-Uncertainty-SemiMajor", "lcsap.high_Accuracy_Extended_Uncertainty_SemiMajor",
3559
14
        FT_UINT32, BASE_DEC, NULL, 0,
3560
14
        "High_Accuracy_Extended_Uncertainty_Code", HFILL }},
3561
14
    { &hf_lcsap_high_Accuracy_Extended_Uncertainty_SemiMinor,
3562
14
      { "high-Accuracy-Extended-Uncertainty-SemiMinor", "lcsap.high_Accuracy_Extended_Uncertainty_SemiMinor",
3563
14
        FT_UINT32, BASE_DEC, NULL, 0,
3564
14
        "High_Accuracy_Extended_Uncertainty_Code", HFILL }},
3565
14
    { &hf_lcsap_high_Accuracy_Extended_Uncertainty_Ellipse,
3566
14
      { "high-Accuracy-Extended-Uncertainty-Ellipse", "lcsap.high_Accuracy_Extended_Uncertainty_Ellipse_element",
3567
14
        FT_NONE, BASE_NONE, NULL, 0,
3568
14
        NULL, HFILL }},
3569
14
    { &hf_lcsap_high_Accuracy_Extended_Uncertainty_Altitude,
3570
14
      { "high-Accuracy-Extended-Uncertainty-Altitude", "lcsap.high_Accuracy_Extended_Uncertainty_Altitude",
3571
14
        FT_UINT32, BASE_DEC, NULL, 0,
3572
14
        "High_Accuracy_Extended_Uncertainty_Code", HFILL }},
3573
14
    { &hf_lcsap_bearing,
3574
14
      { "bearing", "lcsap.bearing",
3575
14
        FT_UINT32, BASE_DEC, NULL, 0,
3576
14
        "INTEGER_0_359", HFILL }},
3577
14
    { &hf_lcsap_horizontal_Speed,
3578
14
      { "horizontal-Speed", "lcsap.horizontal_Speed",
3579
14
        FT_UINT32, BASE_DEC, NULL, 0,
3580
14
        "INTEGER_0_2047", HFILL }},
3581
14
    { &hf_lcsap_horizontal_Speed_And_Bearing,
3582
14
      { "horizontal-Speed-And-Bearing", "lcsap.horizontal_Speed_And_Bearing_element",
3583
14
        FT_NONE, BASE_NONE, NULL, 0,
3584
14
        NULL, HFILL }},
3585
14
    { &hf_lcsap_vertical_Velocity,
3586
14
      { "vertical-Velocity", "lcsap.vertical_Velocity_element",
3587
14
        FT_NONE, BASE_NONE, NULL, 0,
3588
14
        NULL, HFILL }},
3589
14
    { &hf_lcsap_uncertainty_Speed,
3590
14
      { "uncertainty-Speed", "lcsap.uncertainty_Speed",
3591
14
        FT_UINT32, BASE_DEC, NULL, 0,
3592
14
        "INTEGER_0_255", HFILL }},
3593
14
    { &hf_lcsap_horizontal_Uncertainty_Speed,
3594
14
      { "horizontal-Uncertainty-Speed", "lcsap.horizontal_Uncertainty_Speed",
3595
14
        FT_UINT32, BASE_DEC, NULL, 0,
3596
14
        "INTEGER_0_255", HFILL }},
3597
14
    { &hf_lcsap_vertical_Uncertainty_Speed,
3598
14
      { "vertical-Uncertainty-Speed", "lcsap.vertical_Uncertainty_Speed",
3599
14
        FT_UINT32, BASE_DEC, NULL, 0,
3600
14
        "INTEGER_0_255", HFILL }},
3601
14
    { &hf_lcsap_radio_Network_Layer,
3602
14
      { "radio-Network-Layer", "lcsap.radio_Network_Layer",
3603
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Radio_Network_Layer_Cause_vals), 0,
3604
14
        "Radio_Network_Layer_Cause", HFILL }},
3605
14
    { &hf_lcsap_transport_Layer,
3606
14
      { "transport-Layer", "lcsap.transport_Layer",
3607
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Transport_Layer_Cause_vals), 0,
3608
14
        "Transport_Layer_Cause", HFILL }},
3609
14
    { &hf_lcsap_protocol,
3610
14
      { "protocol", "lcsap.protocol",
3611
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Protocol_Cause_vals), 0,
3612
14
        "Protocol_Cause", HFILL }},
3613
14
    { &hf_lcsap_misc,
3614
14
      { "misc", "lcsap.misc",
3615
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Misc_Cause_vals), 0,
3616
14
        "Misc_Cause", HFILL }},
3617
14
    { &hf_lcsap_horizontal_Accuracy,
3618
14
      { "horizontal-Accuracy", "lcsap.horizontal_Accuracy",
3619
14
        FT_UINT32, BASE_DEC, NULL, 0,
3620
14
        NULL, HFILL }},
3621
14
    { &hf_lcsap_vertical_Requested,
3622
14
      { "vertical-Requested", "lcsap.vertical_Requested",
3623
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Vertical_Requested_vals), 0,
3624
14
        NULL, HFILL }},
3625
14
    { &hf_lcsap_vertical_Accuracy,
3626
14
      { "vertical-Accuracy", "lcsap.vertical_Accuracy",
3627
14
        FT_UINT32, BASE_DEC, NULL, 0,
3628
14
        NULL, HFILL }},
3629
14
    { &hf_lcsap_response_Time,
3630
14
      { "response-Time", "lcsap.response_Time",
3631
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Response_Time_vals), 0,
3632
14
        NULL, HFILL }},
3633
14
    { &hf_lcsap_MultipleAPDUs_item,
3634
14
      { "APDU", "lcsap.APDU",
3635
14
        FT_BYTES, BASE_NONE, NULL, 0,
3636
14
        NULL, HFILL }},
3637
14
    { &hf_lcsap_global_eNB_ID,
3638
14
      { "global-eNB-ID", "lcsap.global_eNB_ID_element",
3639
14
        FT_NONE, BASE_NONE, NULL, 0,
3640
14
        NULL, HFILL }},
3641
14
    { &hf_lcsap_e_SMLC_ID,
3642
14
      { "e-SMLC-ID", "lcsap.e_SMLC_ID",
3643
14
        FT_UINT32, BASE_DEC, NULL, 0,
3644
14
        NULL, HFILL }},
3645
14
    { &hf_lcsap_uncertainty_Code,
3646
14
      { "uncertainty-Code", "lcsap.uncertainty_Code",
3647
14
        FT_UINT32, BASE_DEC, NULL, 0,
3648
14
        NULL, HFILL }},
3649
14
    { &hf_lcsap_Polygon_item,
3650
14
      { "Polygon-Point", "lcsap.Polygon_Point_element",
3651
14
        FT_NONE, BASE_NONE, NULL, 0,
3652
14
        NULL, HFILL }},
3653
14
    { &hf_lcsap_positioning_Data_Set,
3654
14
      { "positioning-Data-Set", "lcsap.positioning_Data_Set",
3655
14
        FT_UINT32, BASE_DEC, NULL, 0,
3656
14
        NULL, HFILL }},
3657
14
    { &hf_lcsap_gNSS_Positioning_Data_Set,
3658
14
      { "gNSS-Positioning-Data-Set", "lcsap.gNSS_Positioning_Data_Set",
3659
14
        FT_UINT32, BASE_DEC, NULL, 0,
3660
14
        NULL, HFILL }},
3661
14
    { &hf_lcsap_Positioning_Data_Set_item,
3662
14
      { "Positioning-Method-And-Usage", "lcsap.Positioning_Method_And_Usage",
3663
14
        FT_BYTES, BASE_NONE, NULL, 0,
3664
14
        NULL, HFILL }},
3665
14
    { &hf_lcsap_uncertainty_SemiMajor,
3666
14
      { "uncertainty-SemiMajor", "lcsap.uncertainty_SemiMajor",
3667
14
        FT_UINT32, BASE_DEC, NULL, 0,
3668
14
        "Uncertainty_Code", HFILL }},
3669
14
    { &hf_lcsap_uncertainty_SemiMinor,
3670
14
      { "uncertainty-SemiMinor", "lcsap.uncertainty_SemiMinor",
3671
14
        FT_UINT32, BASE_DEC, NULL, 0,
3672
14
        "Uncertainty_Code", HFILL }},
3673
14
    { &hf_lcsap_orientation_Major_Axis_01,
3674
14
      { "orientation-Major-Axis", "lcsap.orientation_Major_Axis",
3675
14
        FT_UINT32, BASE_DEC, NULL, 0,
3676
14
        NULL, HFILL }},
3677
14
    { &hf_lcsap_lPP,
3678
14
      { "lPP", "lcsap.lPP",
3679
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
3680
14
        "BOOLEAN", HFILL }},
3681
14
    { &hf_lcsap_country,
3682
14
      { "country", "lcsap.country",
3683
14
        FT_BYTES, BASE_NONE, NULL, 0,
3684
14
        NULL, HFILL }},
3685
14
    { &hf_lcsap_international_area_indication,
3686
14
      { "international-area-indication", "lcsap.international_area_indication",
3687
14
        FT_UINT32, BASE_DEC, VALS(lcsap_International_Area_Indication_vals), 0,
3688
14
        NULL, HFILL }},
3689
14
    { &hf_lcsap_horizontal_Velocity,
3690
14
      { "horizontal-Velocity", "lcsap.horizontal_Velocity_element",
3691
14
        FT_NONE, BASE_NONE, NULL, 0,
3692
14
        NULL, HFILL }},
3693
14
    { &hf_lcsap_horizontal_With_Vertical_Velocity,
3694
14
      { "horizontal-With-Vertical-Velocity", "lcsap.horizontal_With_Vertical_Velocity_element",
3695
14
        FT_NONE, BASE_NONE, NULL, 0,
3696
14
        NULL, HFILL }},
3697
14
    { &hf_lcsap_horizontal_Velocity_With_Uncertainty,
3698
14
      { "horizontal-Velocity-With-Uncertainty", "lcsap.horizontal_Velocity_With_Uncertainty_element",
3699
14
        FT_NONE, BASE_NONE, NULL, 0,
3700
14
        NULL, HFILL }},
3701
14
    { &hf_lcsap_horizontal_With_Vertical_Velocity_And_Uncertainty,
3702
14
      { "horizontal-With-Vertical-Velocity-And-Uncertainty", "lcsap.horizontal_With_Vertical_Velocity_And_Uncertainty_element",
3703
14
        FT_NONE, BASE_NONE, NULL, 0,
3704
14
        NULL, HFILL }},
3705
14
    { &hf_lcsap_vertical_Speed,
3706
14
      { "vertical-Speed", "lcsap.vertical_Speed",
3707
14
        FT_UINT32, BASE_DEC, NULL, 0,
3708
14
        "INTEGER_0_255", HFILL }},
3709
14
    { &hf_lcsap_vertical_Speed_Direction,
3710
14
      { "vertical-Speed-Direction", "lcsap.vertical_Speed_Direction",
3711
14
        FT_UINT32, BASE_DEC, VALS(lcsap_Vertical_Speed_Direction_vals), 0,
3712
14
        NULL, HFILL }},
3713
14
    { &hf_lcsap_protocolIEs,
3714
14
      { "protocolIEs", "lcsap.protocolIEs",
3715
14
        FT_UINT32, BASE_DEC, NULL, 0,
3716
14
        "ProtocolIE_Container", HFILL }},
3717
14
    { &hf_lcsap_protocolExtensions,
3718
14
      { "protocolExtensions", "lcsap.protocolExtensions",
3719
14
        FT_UINT32, BASE_DEC, NULL, 0,
3720
14
        "ProtocolExtensionContainer", HFILL }},
3721
14
    { &hf_lcsap_initiatingMessage,
3722
14
      { "initiatingMessage", "lcsap.initiatingMessage_element",
3723
14
        FT_NONE, BASE_NONE, NULL, 0,
3724
14
        NULL, HFILL }},
3725
14
    { &hf_lcsap_successfulOutcome,
3726
14
      { "successfulOutcome", "lcsap.successfulOutcome_element",
3727
14
        FT_NONE, BASE_NONE, NULL, 0,
3728
14
        NULL, HFILL }},
3729
14
    { &hf_lcsap_unsuccessfulOutcome,
3730
14
      { "unsuccessfulOutcome", "lcsap.unsuccessfulOutcome_element",
3731
14
        FT_NONE, BASE_NONE, NULL, 0,
3732
14
        NULL, HFILL }},
3733
14
    { &hf_lcsap_procedureCode,
3734
14
      { "procedureCode", "lcsap.procedureCode",
3735
14
        FT_UINT32, BASE_DEC, VALS(lcsap_ProcedureCode_vals), 0,
3736
14
        NULL, HFILL }},
3737
14
    { &hf_lcsap_initiatingMessagevalue,
3738
14
      { "value", "lcsap.initiatingMessagevalue_element",
3739
14
        FT_NONE, BASE_NONE, NULL, 0,
3740
14
        "InitiatingMessage_value", HFILL }},
3741
14
    { &hf_lcsap_successfulOutcome_value,
3742
14
      { "value", "lcsap.successfulOutcome_value_element",
3743
14
        FT_NONE, BASE_NONE, NULL, 0,
3744
14
        "SuccessfulOutcome_value", HFILL }},
3745
14
    { &hf_lcsap_unsuccessfulOutcome_value,
3746
14
      { "value", "lcsap.unsuccessfulOutcome_value_element",
3747
14
        FT_NONE, BASE_NONE, NULL, 0,
3748
14
        "UnsuccessfulOutcome_value", HFILL }},
3749
14
  };
3750
3751
  /* List of subtrees */
3752
14
  static int *ett[] = {
3753
14
    &ett_lcsap,
3754
14
    &ett_lcsap_plmnd_id,
3755
14
    &ett_lcsap_imsi,
3756
14
    &ett_lcsap_civic_address,
3757
14
    &ett_lcsap_ProtocolIE_Container,
3758
14
    &ett_lcsap_ProtocolIE_Field,
3759
14
    &ett_lcsap_ProtocolExtensionContainer,
3760
14
    &ett_lcsap_ProtocolExtensionField,
3761
14
    &ett_lcsap_Additional_PositioningDataSet,
3762
14
    &ett_lcsap_Altitude_And_Direction,
3763
14
    &ett_lcsap_Ciphering_Data,
3764
14
    &ett_lcsap_Ciphering_Data_Ack,
3765
14
    &ett_lcsap_Ciphering_Data_Error_Report,
3766
14
    &ett_lcsap_Ciphering_Data_Set,
3767
14
    &ett_lcsap_Ciphering_Data_Error_Report_Contents,
3768
14
    &ett_lcsap_E_CGI,
3769
14
    &ett_lcsap_Ellipsoid_Point_With_Uncertainty_Ellipse,
3770
14
    &ett_lcsap_Ellipsoid_Point_With_Altitude,
3771
14
    &ett_lcsap_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
3772
14
    &ett_lcsap_Ellipsoid_Arc,
3773
14
    &ett_lcsap_ENB_ID,
3774
14
    &ett_lcsap_Geographical_Area,
3775
14
    &ett_lcsap_Geographical_Coordinates,
3776
14
    &ett_lcsap_Global_eNB_ID,
3777
14
    &ett_lcsap_GNSS_Positioning_Data_Set,
3778
14
    &ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Uncertainty_Ellipse,
3779
14
    &ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Scalable_Uncertainty_Ellipse,
3780
14
    &ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Uncertainty_Ellipsoid,
3781
14
    &ett_lcsap_High_Accuracy_Ellipsoid_Point_With_Altitude_And_Scalable_Uncertainty_Ellipsoid,
3782
14
    &ett_lcsap_High_Accuracy_Geographical_Coordinates,
3783
14
    &ett_lcsap_High_Accuracy_Uncertainty_Ellipse,
3784
14
    &ett_lcsap_High_Accuracy_Extended_Uncertainty_Ellipse,
3785
14
    &ett_lcsap_High_Accuracy_Scalable_Uncertainty_Ellipse,
3786
14
    &ett_lcsap_High_Accuracy_Scalable_Uncertainty_Altitude,
3787
14
    &ett_lcsap_Horizontal_Speed_And_Bearing,
3788
14
    &ett_lcsap_Horizontal_Velocity,
3789
14
    &ett_lcsap_Horizontal_With_Vertical_Velocity,
3790
14
    &ett_lcsap_Horizontal_Velocity_With_Uncertainty,
3791
14
    &ett_lcsap_Horizontal_With_Vertical_Velocity_And_Uncertainty,
3792
14
    &ett_lcsap_LCS_Cause,
3793
14
    &ett_lcsap_LCS_QoS,
3794
14
    &ett_lcsap_MultipleAPDUs,
3795
14
    &ett_lcsap_Network_Element,
3796
14
    &ett_lcsap_Point,
3797
14
    &ett_lcsap_Point_With_Uncertainty,
3798
14
    &ett_lcsap_Polygon,
3799
14
    &ett_lcsap_Polygon_Point,
3800
14
    &ett_lcsap_Positioning_Data,
3801
14
    &ett_lcsap_Positioning_Data_Set,
3802
14
    &ett_lcsap_Uncertainty_Ellipse,
3803
14
    &ett_lcsap_UE_Positioning_Capability,
3804
14
    &ett_lcsap_UE_Area_Indication,
3805
14
    &ett_lcsap_Velocity_Estimate,
3806
14
    &ett_lcsap_Vertical_Velocity,
3807
14
    &ett_lcsap_Location_Request,
3808
14
    &ett_lcsap_Location_Response,
3809
14
    &ett_lcsap_Location_Abort_Request,
3810
14
    &ett_lcsap_Connection_Oriented_Information,
3811
14
    &ett_lcsap_Connectionless_Information,
3812
14
    &ett_lcsap_Reset_Request,
3813
14
    &ett_lcsap_Reset_Acknowledge,
3814
14
    &ett_lcsap_Ciphering_Key_Data,
3815
14
    &ett_lcsap_Ciphering_Key_Data_Result,
3816
14
    &ett_lcsap_LCS_AP_PDU,
3817
14
    &ett_lcsap_InitiatingMessage,
3818
14
    &ett_lcsap_SuccessfulOutcome,
3819
14
    &ett_lcsap_UnsuccessfulOutcome,
3820
14
 };
3821
3822
  /* module_t *lcsap_module; */
3823
14
  expert_module_t *expert_lcsap;
3824
3825
14
  static ei_register_info ei[] = {
3826
14
      { &ei_lcsap_civic_data_not_xml,
3827
14
      { "lcsap.civic_data_not_xml", PI_PROTOCOL, PI_ERROR, "Should contain a UTF-8 encoded PIDF - LO XML document as defined in IETF RFC 4119", EXPFILL } },
3828
14
  };
3829
3830
3831
  /* Register protocol */
3832
14
  proto_lcsap = proto_register_protocol(PNAME, PSNAME, PFNAME);
3833
3834
  /* Register fields and subtrees */
3835
14
  proto_register_field_array(proto_lcsap, hf, array_length(hf));
3836
14
  proto_register_subtree_array(ett, array_length(ett));
3837
14
  lcsap_handle = register_dissector("lcsap", dissect_lcsap, proto_lcsap);
3838
3839
  /* Register dissector tables */
3840
14
  lcsap_ies_dissector_table = register_dissector_table("lcsap.ies", "LCS-AP-PROTOCOL-IES", proto_lcsap, FT_UINT32, BASE_DEC);
3841
3842
14
  expert_lcsap = expert_register_protocol(proto_lcsap);
3843
14
  expert_register_field_array(expert_lcsap, ei, array_length(ei));
3844
3845
14
  lcsap_extension_dissector_table = register_dissector_table("lcsap.extension", "LCS-AP-PROTOCOL-EXTENSION", proto_lcsap, FT_UINT32, BASE_DEC);
3846
14
  lcsap_proc_imsg_dissector_table = register_dissector_table("lcsap.proc.imsg", "LCS-AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_lcsap, FT_UINT32, BASE_DEC);
3847
14
  lcsap_proc_sout_dissector_table = register_dissector_table("lcsap.proc.sout", "LCS-AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_lcsap, FT_UINT32, BASE_DEC);
3848
14
  lcsap_proc_uout_dissector_table = register_dissector_table("lcsap.proc.uout", "LCS-AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_lcsap, FT_UINT32, BASE_DEC);
3849
3850
  /* lcsap_module = prefs_register_protocol(proto_lcsap, NULL); */
3851
3852
14
}
3853
3854
/*
3855
 * Editor modelines
3856
 *
3857
 * Local Variables:
3858
 * c-basic-offset: 2
3859
 * tab-width: 8
3860
 * indent-tabs-mode: nil
3861
 * End:
3862
 *
3863
 * ex: set shiftwidth=2 tabstop=8 expandtab:
3864
 * :indentSize=2:tabSize=8:noTabs=true:
3865
 */