#include <string.h> and/or #include <stdio.h> not needed.
[obnox/wireshark/wip.git] / epan / dissectors / packet-x2ap.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-x2ap.c                                                              */
4 /* ../../tools/asn2wrs.py -p x2ap -c ./x2ap.cnf -s ./packet-x2ap-template -D . X2AP-CommonDataTypes.asn X2AP-Constants.asn X2AP-Containers.asn X2AP-IEs.asn X2AP-PDU-Contents.asn X2AP-PDU-Descriptions.asn */
5
6 /* Input file: packet-x2ap-template.c */
7
8 #line 1 "packet-x2ap-template.c"
9 /* packet-x2ap.c
10  * Routines for dissecting Evolved Universal Terrestrial Radio Access Network (EUTRAN);
11  * X2 Application Protocol (X2AP);
12  * 3GPP TS 36.423 packet dissection
13  * Copyright 2007-2008, Anders Broman <anders.broman@ericsson.com>
14  *
15  * $Id$
16  *
17  * Wireshark - Network traffic analyzer
18  * By Gerald Combs <gerald@wireshark.org>
19  * Copyright 1998 Gerald Combs
20  *
21  * This program is free software; you can redistribute it and/or
22  * modify it under the terms of the GNU General Public License
23  * as published by the Free Software Foundation; either version 2
24  * of the License, or (at your option) any later version.
25  *
26  * This program is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with this program; if not, write to the Free Software
33  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
34  *
35  * Ref: 
36  * 3GPP TS 36.423 V8.0.0 (2007-12)
37  */
38
39 #ifdef HAVE_CONFIG_H
40 # include "config.h"
41 #endif
42
43 #include <glib.h>
44 #include <epan/packet.h>
45
46 #include <epan/asn1.h>
47 #include <epan/prefs.h>
48 #include <epan/sctpppids.h>
49
50 #include "packet-per.h"
51 #include "packet-e212.h"
52 #include "packet-frame.h"
53 #include "packet-lte-rrc.h"
54
55 #ifdef _MSC_VER
56 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
57 #pragma warning(disable:4146)
58 #endif
59
60 #define PNAME  "EUTRAN X2 Application Protocol (X2AP)"
61 #define PSNAME "X2AP"
62 #define PFNAME "x2ap"
63
64 /* Dissector will use SCTP PPID 27 or SCTP port. IANA assigned port = 36422 */
65 #define SCTP_PORT_X2AP  36422
66
67
68 /*--- Included file: packet-x2ap-val.h ---*/
69 #line 1 "packet-x2ap-val.h"
70 #define maxPrivateIEs                  65535
71 #define maxProtocolExtensions          65535
72 #define maxProtocolIEs                 65535
73 #define maxEARFCN                      65535
74 #define maxInterfaces                  16
75 #define maxCellineNB                   256
76 #define maxnoofBearers                 256
77 #define maxNrOfErrors                  256
78 #define maxnoofPDCP_SN                 16
79 #define maxnoofEPLMNs                  15
80 #define maxnoofEPLMNsPlusOne           16
81 #define maxnoofForbLACs                4096
82 #define maxnoofForbTACs                4096
83 #define maxnoofBPLMNs                  6
84 #define maxnoofNeighbours              512
85 #define maxnoofPRBs                    110
86 #define maxPools                       16
87 #define maxnoofCells                   16
88
89 typedef enum _ProcedureCode_enum {
90   id_handoverPreparation =   0,
91   id_handoverCancel =   1,
92   id_loadIndication =   2,
93   id_errorIndication =   3,
94   id_snStatusTransfer =   4,
95   id_uEContextRelease =   5,
96   id_x2Setup   =   6,
97   id_reset     =   7,
98   id_eNBConfigurationUpdate =   8,
99   id_resourceStatusReportingInitiation =   9,
100   id_resourceStatusReporting =  10,
101   id_privateMessage =  11,
102   id_mobilitySettingsChange =  12,
103   id_rLFIndication =  13,
104   id_handoverReport =  14
105 } ProcedureCode_enum;
106
107 typedef enum _ProtocolIE_ID_enum {
108   id_E_RABs_Admitted_Item =   0,
109   id_E_RABs_Admitted_List =   1,
110   id_E_RAB_Item =   2,
111   id_E_RABs_NotAdmitted_List =   3,
112   id_E_RABs_ToBeSetup_Item =   4,
113   id_Cause     =   5,
114   id_CellInformation =   6,
115   id_CellInformation_Item =   7,
116   id_New_eNB_UE_X2AP_ID =   9,
117   id_Old_eNB_UE_X2AP_ID =  10,
118   id_TargetCell_ID =  11,
119   id_TargeteNBtoSource_eNBTransparentContainer =  12,
120   id_TraceActivation =  13,
121   id_UE_ContextInformation =  14,
122   id_UE_HistoryInformation =  15,
123   id_UE_X2AP_ID =  16,
124   id_CriticalityDiagnostics =  17,
125   id_E_RABs_SubjectToStatusTransfer_List =  18,
126   id_E_RABs_SubjectToStatusTransfer_Item =  19,
127   id_ServedCells =  20,
128   id_GlobalENB_ID =  21,
129   id_TimeToWait =  22,
130   id_GUMMEI_ID =  23,
131   id_GUGroupIDList =  24,
132   id_ServedCellsToAdd =  25,
133   id_ServedCellsToModify =  26,
134   id_ServedCellsToDelete =  27,
135   id_Registration_Request =  28,
136   id_CellToReport =  29,
137   id_ReportingPeriodicity =  30,
138   id_CellToReport_Item =  31,
139   id_CellMeasurementResult =  32,
140   id_CellMeasurementResult_Item =  33,
141   id_GUGroupIDToAddList =  34,
142   id_GUGroupIDToDeleteList =  35,
143   id_SRVCCOperationPossible =  36,
144   id_Measurement_ID =  37,
145   id_ReportCharacteristics =  38,
146   id_ENB1_Measurement_ID =  39,
147   id_ENB2_Measurement_ID =  40,
148   id_Number_of_Antennaports =  41,
149   id_CompositeAvailableCapacityGroup =  42,
150   id_ENB1_Cell_ID =  43,
151   id_ENB2_Cell_ID =  44,
152   id_ENB2_Proposed_Mobility_Parameters =  45,
153   id_ENB1_Mobility_Parameters =  46,
154   id_ENB2_Mobility_Parameters_Modification_Range =  47,
155   id_FailureCellPCI =  48,
156   id_Re_establishmentCellECGI =  49,
157   id_FailureCellCRNTI =  50,
158   id_ShortMAC_I =  51,
159   id_SourceCellECGI =  52,
160   id_FailureCellECGI =  53,
161   id_HandoverReportType =  54,
162   id_PRACH_Configuration =  55
163 } ProtocolIE_ID_enum;
164
165 /*--- End of included file: packet-x2ap-val.h ---*/
166 #line 60 "packet-x2ap-template.c"
167
168 /* Initialize the protocol and registered fields */
169 static int proto_x2ap = -1;
170 static int hf_x2ap_transportLayerAddressIPv4 = -1;
171 static int hf_x2ap_transportLayerAddressIPv6 = -1;
172
173 /*--- Included file: packet-x2ap-hf.c ---*/
174 #line 1 "packet-x2ap-hf.c"
175 static int hf_x2ap_Cause_PDU = -1;                /* Cause */
176 static int hf_x2ap_CompositeAvailableCapacityGroup_PDU = -1;  /* CompositeAvailableCapacityGroup */
177 static int hf_x2ap_CriticalityDiagnostics_PDU = -1;  /* CriticalityDiagnostics */
178 static int hf_x2ap_CRNTI_PDU = -1;                /* CRNTI */
179 static int hf_x2ap_ECGI_PDU = -1;                 /* ECGI */
180 static int hf_x2ap_E_RAB_List_PDU = -1;           /* E_RAB_List */
181 static int hf_x2ap_E_RAB_Item_PDU = -1;           /* E_RAB_Item */
182 static int hf_x2ap_GlobalENB_ID_PDU = -1;         /* GlobalENB_ID */
183 static int hf_x2ap_GUGroupIDList_PDU = -1;        /* GUGroupIDList */
184 static int hf_x2ap_GUMMEI_PDU = -1;               /* GUMMEI */
185 static int hf_x2ap_HandoverReportType_PDU = -1;   /* HandoverReportType */
186 static int hf_x2ap_Measurement_ID_PDU = -1;       /* Measurement_ID */
187 static int hf_x2ap_MobilityParametersModificationRange_PDU = -1;  /* MobilityParametersModificationRange */
188 static int hf_x2ap_MobilityParametersInformation_PDU = -1;  /* MobilityParametersInformation */
189 static int hf_x2ap_Number_of_Antennaports_PDU = -1;  /* Number_of_Antennaports */
190 static int hf_x2ap_PCI_PDU = -1;                  /* PCI */
191 static int hf_x2ap_PRACH_Configuration_PDU = -1;  /* PRACH_Configuration */
192 static int hf_x2ap_Registration_Request_PDU = -1;  /* Registration_Request */
193 static int hf_x2ap_ReportCharacteristics_PDU = -1;  /* ReportCharacteristics */
194 static int hf_x2ap_ServedCells_PDU = -1;          /* ServedCells */
195 static int hf_x2ap_ShortMAC_I_PDU = -1;           /* ShortMAC_I */
196 static int hf_x2ap_SRVCCOperationPossible_PDU = -1;  /* SRVCCOperationPossible */
197 static int hf_x2ap_TargeteNBtoSource_eNBTransparentContainer_PDU = -1;  /* TargeteNBtoSource_eNBTransparentContainer */
198 static int hf_x2ap_TimeToWait_PDU = -1;           /* TimeToWait */
199 static int hf_x2ap_TraceActivation_PDU = -1;      /* TraceActivation */
200 static int hf_x2ap_UE_HistoryInformation_PDU = -1;  /* UE_HistoryInformation */
201 static int hf_x2ap_UE_X2AP_ID_PDU = -1;           /* UE_X2AP_ID */
202 static int hf_x2ap_HandoverRequest_PDU = -1;      /* HandoverRequest */
203 static int hf_x2ap_UE_ContextInformation_PDU = -1;  /* UE_ContextInformation */
204 static int hf_x2ap_E_RABs_ToBeSetup_Item_PDU = -1;  /* E_RABs_ToBeSetup_Item */
205 static int hf_x2ap_HandoverRequestAcknowledge_PDU = -1;  /* HandoverRequestAcknowledge */
206 static int hf_x2ap_E_RABs_Admitted_List_PDU = -1;  /* E_RABs_Admitted_List */
207 static int hf_x2ap_E_RABs_Admitted_Item_PDU = -1;  /* E_RABs_Admitted_Item */
208 static int hf_x2ap_HandoverPreparationFailure_PDU = -1;  /* HandoverPreparationFailure */
209 static int hf_x2ap_HandoverReport_PDU = -1;       /* HandoverReport */
210 static int hf_x2ap_SNStatusTransfer_PDU = -1;     /* SNStatusTransfer */
211 static int hf_x2ap_E_RABs_SubjectToStatusTransfer_List_PDU = -1;  /* E_RABs_SubjectToStatusTransfer_List */
212 static int hf_x2ap_E_RABs_SubjectToStatusTransfer_Item_PDU = -1;  /* E_RABs_SubjectToStatusTransfer_Item */
213 static int hf_x2ap_UEContextRelease_PDU = -1;     /* UEContextRelease */
214 static int hf_x2ap_HandoverCancel_PDU = -1;       /* HandoverCancel */
215 static int hf_x2ap_ErrorIndication_PDU = -1;      /* ErrorIndication */
216 static int hf_x2ap_ResetRequest_PDU = -1;         /* ResetRequest */
217 static int hf_x2ap_ResetResponse_PDU = -1;        /* ResetResponse */
218 static int hf_x2ap_X2SetupRequest_PDU = -1;       /* X2SetupRequest */
219 static int hf_x2ap_X2SetupResponse_PDU = -1;      /* X2SetupResponse */
220 static int hf_x2ap_X2SetupFailure_PDU = -1;       /* X2SetupFailure */
221 static int hf_x2ap_LoadInformation_PDU = -1;      /* LoadInformation */
222 static int hf_x2ap_CellInformation_List_PDU = -1;  /* CellInformation_List */
223 static int hf_x2ap_CellInformation_Item_PDU = -1;  /* CellInformation_Item */
224 static int hf_x2ap_ENBConfigurationUpdate_PDU = -1;  /* ENBConfigurationUpdate */
225 static int hf_x2ap_ServedCellsToModify_PDU = -1;  /* ServedCellsToModify */
226 static int hf_x2ap_Old_ECGIs_PDU = -1;            /* Old_ECGIs */
227 static int hf_x2ap_ENBConfigurationUpdateAcknowledge_PDU = -1;  /* ENBConfigurationUpdateAcknowledge */
228 static int hf_x2ap_ENBConfigurationUpdateFailure_PDU = -1;  /* ENBConfigurationUpdateFailure */
229 static int hf_x2ap_ResourceStatusRequest_PDU = -1;  /* ResourceStatusRequest */
230 static int hf_x2ap_CellToReport_List_PDU = -1;    /* CellToReport_List */
231 static int hf_x2ap_CellToReport_Item_PDU = -1;    /* CellToReport_Item */
232 static int hf_x2ap_ReportingPeriodicity_PDU = -1;  /* ReportingPeriodicity */
233 static int hf_x2ap_ResourceStatusResponse_PDU = -1;  /* ResourceStatusResponse */
234 static int hf_x2ap_ResourceStatusFailure_PDU = -1;  /* ResourceStatusFailure */
235 static int hf_x2ap_ResourceStatusUpdate_PDU = -1;  /* ResourceStatusUpdate */
236 static int hf_x2ap_CellMeasurementResult_List_PDU = -1;  /* CellMeasurementResult_List */
237 static int hf_x2ap_CellMeasurementResult_Item_PDU = -1;  /* CellMeasurementResult_Item */
238 static int hf_x2ap_PrivateMessage_PDU = -1;       /* PrivateMessage */
239 static int hf_x2ap_MobilityChangeRequest_PDU = -1;  /* MobilityChangeRequest */
240 static int hf_x2ap_MobilityChangeAcknowledge_PDU = -1;  /* MobilityChangeAcknowledge */
241 static int hf_x2ap_MobilityChangeFailure_PDU = -1;  /* MobilityChangeFailure */
242 static int hf_x2ap_RLFIndication_PDU = -1;        /* RLFIndication */
243 static int hf_x2ap_X2AP_PDU_PDU = -1;             /* X2AP_PDU */
244 static int hf_x2ap_local = -1;                    /* INTEGER_0_maxPrivateIEs */
245 static int hf_x2ap_global = -1;                   /* OBJECT_IDENTIFIER */
246 static int hf_x2ap_ProtocolIE_Container_item = -1;  /* ProtocolIE_Field */
247 static int hf_x2ap_id = -1;                       /* ProtocolIE_ID */
248 static int hf_x2ap_criticality = -1;              /* Criticality */
249 static int hf_x2ap_protocolIE_Field_value = -1;   /* ProtocolIE_Field_value */
250 static int hf_x2ap_ProtocolExtensionContainer_item = -1;  /* ProtocolExtensionField */
251 static int hf_x2ap_extension_id = -1;             /* ProtocolIE_ID */
252 static int hf_x2ap_extensionValue = -1;           /* T_extensionValue */
253 static int hf_x2ap_PrivateIE_Container_item = -1;  /* PrivateIE_Field */
254 static int hf_x2ap_private_id = -1;               /* PrivateIE_ID */
255 static int hf_x2ap_privateIE_Field_value = -1;    /* PrivateIE_Field_value */
256 static int hf_x2ap_key_eNodeB_star = -1;          /* Key_eNodeB_Star */
257 static int hf_x2ap_nextHopChainingCount = -1;     /* NextHopChainingCount */
258 static int hf_x2ap_iE_Extensions = -1;            /* ProtocolExtensionContainer */
259 static int hf_x2ap_priorityLevel = -1;            /* PriorityLevel */
260 static int hf_x2ap_pre_emptionCapability = -1;    /* Pre_emptionCapability */
261 static int hf_x2ap_pre_emptionVulnerability = -1;  /* Pre_emptionVulnerability */
262 static int hf_x2ap_BroadcastPLMNs_Item_item = -1;  /* PLMN_Identity */
263 static int hf_x2ap_radioNetwork = -1;             /* CauseRadioNetwork */
264 static int hf_x2ap_transport = -1;                /* CauseTransport */
265 static int hf_x2ap_protocol = -1;                 /* CauseProtocol */
266 static int hf_x2ap_misc = -1;                     /* CauseMisc */
267 static int hf_x2ap_cell_Size = -1;                /* Cell_Size */
268 static int hf_x2ap_dL_CompositeAvailableCapacity = -1;  /* CompositeAvailableCapacity */
269 static int hf_x2ap_uL_CompositeAvailableCapacity = -1;  /* CompositeAvailableCapacity */
270 static int hf_x2ap_cellCapacityClassValue = -1;   /* CellCapacityClassValue */
271 static int hf_x2ap_capacityValue = -1;            /* CapacityValue */
272 static int hf_x2ap_pDCP_SN = -1;                  /* PDCP_SN */
273 static int hf_x2ap_hFN = -1;                      /* HFN */
274 static int hf_x2ap_procedureCode = -1;            /* ProcedureCode */
275 static int hf_x2ap_triggeringMessage = -1;        /* TriggeringMessage */
276 static int hf_x2ap_procedureCriticality = -1;     /* Criticality */
277 static int hf_x2ap_iEsCriticalityDiagnostics = -1;  /* CriticalityDiagnostics_IE_List */
278 static int hf_x2ap_CriticalityDiagnostics_IE_List_item = -1;  /* CriticalityDiagnostics_IE_List_item */
279 static int hf_x2ap_iECriticality = -1;            /* Criticality */
280 static int hf_x2ap_iE_ID = -1;                    /* ProtocolIE_ID */
281 static int hf_x2ap_typeOfError = -1;              /* TypeOfError */
282 static int hf_x2ap_uL_EARFCN = -1;                /* EARFCN */
283 static int hf_x2ap_dL_EARFCN = -1;                /* EARFCN */
284 static int hf_x2ap_uL_Transmission_Bandwidth = -1;  /* Transmission_Bandwidth */
285 static int hf_x2ap_dL_Transmission_Bandwidth = -1;  /* Transmission_Bandwidth */
286 static int hf_x2ap_eARFCN = -1;                   /* EARFCN */
287 static int hf_x2ap_transmission_Bandwidth = -1;   /* Transmission_Bandwidth */
288 static int hf_x2ap_subframeAssignment = -1;       /* SubframeAssignment */
289 static int hf_x2ap_specialSubframe_Info = -1;     /* SpecialSubframe_Info */
290 static int hf_x2ap_fDD = -1;                      /* FDD_Info */
291 static int hf_x2ap_tDD = -1;                      /* TDD_Info */
292 static int hf_x2ap_pLMN_Identity = -1;            /* PLMN_Identity */
293 static int hf_x2ap_eUTRANcellIdentifier = -1;     /* EUTRANCellIdentifier */
294 static int hf_x2ap_macro_eNB_ID = -1;             /* BIT_STRING_SIZE_20 */
295 static int hf_x2ap_home_eNB_ID = -1;              /* BIT_STRING_SIZE_28 */
296 static int hf_x2ap_EPLMNs_item = -1;              /* PLMN_Identity */
297 static int hf_x2ap_qCI = -1;                      /* QCI */
298 static int hf_x2ap_allocationAndRetentionPriority = -1;  /* AllocationAndRetentionPriority */
299 static int hf_x2ap_gbrQosInformation = -1;        /* GBR_QosInformation */
300 static int hf_x2ap_E_RAB_List_item = -1;          /* ProtocolIE_Single_Container */
301 static int hf_x2ap_e_RAB_ID = -1;                 /* E_RAB_ID */
302 static int hf_x2ap_cause = -1;                    /* Cause */
303 static int hf_x2ap_ForbiddenTAs_item = -1;        /* ForbiddenTAs_Item */
304 static int hf_x2ap_forbiddenTACs = -1;            /* ForbiddenTACs */
305 static int hf_x2ap_ForbiddenTACs_item = -1;       /* TAC */
306 static int hf_x2ap_ForbiddenLAs_item = -1;        /* ForbiddenLAs_Item */
307 static int hf_x2ap_forbiddenLACs = -1;            /* ForbiddenLACs */
308 static int hf_x2ap_ForbiddenLACs_item = -1;       /* LAC */
309 static int hf_x2ap_e_RAB_MaximumBitrateDL = -1;   /* BitRate */
310 static int hf_x2ap_e_RAB_MaximumBitrateUL = -1;   /* BitRate */
311 static int hf_x2ap_e_RAB_GuaranteedBitrateDL = -1;  /* BitRate */
312 static int hf_x2ap_e_RAB_GuaranteedBitrateUL = -1;  /* BitRate */
313 static int hf_x2ap_eNB_ID = -1;                   /* ENB_ID */
314 static int hf_x2ap_transportLayerAddress = -1;    /* TransportLayerAddress */
315 static int hf_x2ap_gTP_TEID = -1;                 /* GTP_TEI */
316 static int hf_x2ap_GUGroupIDList_item = -1;       /* GU_Group_ID */
317 static int hf_x2ap_mME_Group_ID = -1;             /* MME_Group_ID */
318 static int hf_x2ap_gU_Group_ID = -1;              /* GU_Group_ID */
319 static int hf_x2ap_mMME_Code = -1;                /* MME_Code */
320 static int hf_x2ap_servingPLMN = -1;              /* PLMN_Identity */
321 static int hf_x2ap_equivalentPLMNs = -1;          /* EPLMNs */
322 static int hf_x2ap_forbiddenTAs = -1;             /* ForbiddenTAs */
323 static int hf_x2ap_forbiddenLAs = -1;             /* ForbiddenLAs */
324 static int hf_x2ap_forbiddenInterRATs = -1;       /* ForbiddenInterRATs */
325 static int hf_x2ap_dLHWLoadIndicator = -1;        /* LoadIndicator */
326 static int hf_x2ap_uLHWLoadIndicator = -1;        /* LoadIndicator */
327 static int hf_x2ap_e_UTRAN_Cell = -1;             /* LastVisitedEUTRANCellInformation */
328 static int hf_x2ap_uTRAN_Cell = -1;               /* LastVisitedUTRANCellInformation */
329 static int hf_x2ap_gERAN_Cell = -1;               /* LastVisitedGERANCellInformation */
330 static int hf_x2ap_global_Cell_ID = -1;           /* ECGI */
331 static int hf_x2ap_cellType = -1;                 /* CellType */
332 static int hf_x2ap_time_UE_StayedInCell = -1;     /* Time_UE_StayedInCell */
333 static int hf_x2ap_undefined = -1;                /* NULL */
334 static int hf_x2ap_eventType = -1;                /* EventType */
335 static int hf_x2ap_reportArea = -1;               /* ReportArea */
336 static int hf_x2ap_handoverTriggerChangeLowerLimit = -1;  /* INTEGER_M20_20 */
337 static int hf_x2ap_handoverTriggerChangeUpperLimit = -1;  /* INTEGER_M20_20 */
338 static int hf_x2ap_handoverTriggerChange = -1;    /* INTEGER_M20_20 */
339 static int hf_x2ap_Neighbour_Information_item = -1;  /* Neighbour_Information_item */
340 static int hf_x2ap_eCGI = -1;                     /* ECGI */
341 static int hf_x2ap_pCI = -1;                      /* PCI */
342 static int hf_x2ap_rootSequenceIndex = -1;        /* INTEGER_0_837 */
343 static int hf_x2ap_zeroCorrelationIndex = -1;     /* INTEGER_0_15 */
344 static int hf_x2ap_highSpeedFlag = -1;            /* BOOLEAN */
345 static int hf_x2ap_prach_FreqOffset = -1;         /* INTEGER_0_94 */
346 static int hf_x2ap_prach_ConfigIndex = -1;        /* INTEGER_0_63 */
347 static int hf_x2ap_rNTP_PerPRB = -1;              /* BIT_STRING_SIZE_6_110_ */
348 static int hf_x2ap_rNTP_Threshold = -1;           /* RNTP_Threshold */
349 static int hf_x2ap_numberOfCellSpecificAntennaPorts = -1;  /* T_numberOfCellSpecificAntennaPorts */
350 static int hf_x2ap_p_B = -1;                      /* INTEGER_0_3_ */
351 static int hf_x2ap_pDCCH_InterferenceImpact = -1;  /* INTEGER_0_4_ */
352 static int hf_x2ap_dL_GBR_PRB_usage = -1;         /* DL_GBR_PRB_usage */
353 static int hf_x2ap_uL_GBR_PRB_usage = -1;         /* UL_GBR_PRB_usage */
354 static int hf_x2ap_dL_non_GBR_PRB_usage = -1;     /* DL_non_GBR_PRB_usage */
355 static int hf_x2ap_uL_non_GBR_PRB_usage = -1;     /* UL_non_GBR_PRB_usage */
356 static int hf_x2ap_dL_Total_PRB_usage = -1;       /* DL_Total_PRB_usage */
357 static int hf_x2ap_uL_Total_PRB_usage = -1;       /* UL_Total_PRB_usage */
358 static int hf_x2ap_dLS1TNLLoadIndicator = -1;     /* LoadIndicator */
359 static int hf_x2ap_uLS1TNLLoadIndicator = -1;     /* LoadIndicator */
360 static int hf_x2ap_ServedCells_item = -1;         /* ServedCells_item */
361 static int hf_x2ap_servedCellInfo = -1;           /* ServedCell_Information */
362 static int hf_x2ap_neighbour_Info = -1;           /* Neighbour_Information */
363 static int hf_x2ap_cellId = -1;                   /* ECGI */
364 static int hf_x2ap_tAC = -1;                      /* TAC */
365 static int hf_x2ap_broadcastPLMNs = -1;           /* BroadcastPLMNs_Item */
366 static int hf_x2ap_eUTRA_Mode_Info = -1;          /* EUTRA_Mode_Info */
367 static int hf_x2ap_specialSubframePatterns = -1;  /* SpecialSubframePatterns */
368 static int hf_x2ap_cyclicPrefixDL = -1;           /* CyclicPrefixDL */
369 static int hf_x2ap_cyclicPrefixUL = -1;           /* CyclicPrefixUL */
370 static int hf_x2ap_eUTRANTraceID = -1;            /* EUTRANTraceID */
371 static int hf_x2ap_interfacesToTrace = -1;        /* InterfacesToTrace */
372 static int hf_x2ap_traceDepth = -1;               /* TraceDepth */
373 static int hf_x2ap_traceCollectionEntityIPAddress = -1;  /* TraceCollectionEntityIPAddress */
374 static int hf_x2ap_UE_HistoryInformation_item = -1;  /* LastVisitedCell_Item */
375 static int hf_x2ap_uEaggregateMaximumBitRateDownlink = -1;  /* BitRate */
376 static int hf_x2ap_uEaggregateMaximumBitRateUplink = -1;  /* BitRate */
377 static int hf_x2ap_encryptionAlgorithms = -1;     /* EncryptionAlgorithms */
378 static int hf_x2ap_integrityProtectionAlgorithms = -1;  /* IntegrityProtectionAlgorithms */
379 static int hf_x2ap_UL_InterferenceOverloadIndication_item = -1;  /* UL_InterferenceOverloadIndication_Item */
380 static int hf_x2ap_UL_HighInterferenceIndicationInfo_item = -1;  /* UL_HighInterferenceIndicationInfo_Item */
381 static int hf_x2ap_target_Cell_ID = -1;           /* ECGI */
382 static int hf_x2ap_ul_interferenceindication = -1;  /* UL_HighInterferenceIndication */
383 static int hf_x2ap_protocolIEs = -1;              /* ProtocolIE_Container */
384 static int hf_x2ap_mME_UE_S1AP_ID = -1;           /* UE_S1AP_ID */
385 static int hf_x2ap_uESecurityCapabilities = -1;   /* UESecurityCapabilities */
386 static int hf_x2ap_aS_SecurityInformation = -1;   /* AS_SecurityInformation */
387 static int hf_x2ap_uEaggregateMaximumBitRate = -1;  /* UEAggregateMaximumBitRate */
388 static int hf_x2ap_subscriberProfileIDforRFP = -1;  /* SubscriberProfileIDforRFP */
389 static int hf_x2ap_e_RABs_ToBeSetup_List = -1;    /* E_RABs_ToBeSetup_List */
390 static int hf_x2ap_rRC_Context = -1;              /* RRC_Context */
391 static int hf_x2ap_handoverRestrictionList = -1;  /* HandoverRestrictionList */
392 static int hf_x2ap_locationReportingInformation = -1;  /* LocationReportingInformation */
393 static int hf_x2ap_E_RABs_ToBeSetup_List_item = -1;  /* ProtocolIE_Single_Container */
394 static int hf_x2ap_e_RAB_Level_QoS_Parameters = -1;  /* E_RAB_Level_QoS_Parameters */
395 static int hf_x2ap_dL_Forwarding = -1;            /* DL_Forwarding */
396 static int hf_x2ap_uL_GTPtunnelEndpoint = -1;     /* GTPtunnelEndpoint */
397 static int hf_x2ap_E_RABs_Admitted_List_item = -1;  /* ProtocolIE_Single_Container */
398 static int hf_x2ap_uL_GTP_TunnelEndpoint = -1;    /* GTPtunnelEndpoint */
399 static int hf_x2ap_dL_GTP_TunnelEndpoint = -1;    /* GTPtunnelEndpoint */
400 static int hf_x2ap_E_RABs_SubjectToStatusTransfer_List_item = -1;  /* ProtocolIE_Single_Container */
401 static int hf_x2ap_receiveStatusofULPDCPSDUs = -1;  /* ReceiveStatusofULPDCPSDUs */
402 static int hf_x2ap_uL_COUNTvalue = -1;            /* COUNTvalue */
403 static int hf_x2ap_dL_COUNTvalue = -1;            /* COUNTvalue */
404 static int hf_x2ap_CellInformation_List_item = -1;  /* ProtocolIE_Single_Container */
405 static int hf_x2ap_cell_ID = -1;                  /* ECGI */
406 static int hf_x2ap_ul_InterferenceOverloadIndication = -1;  /* UL_InterferenceOverloadIndication */
407 static int hf_x2ap_ul_HighInterferenceIndicationInfo = -1;  /* UL_HighInterferenceIndicationInfo */
408 static int hf_x2ap_relativeNarrowbandTxPower = -1;  /* RelativeNarrowbandTxPower */
409 static int hf_x2ap_ServedCellsToModify_item = -1;  /* ServedCellsToModify_Item */
410 static int hf_x2ap_old_ecgi = -1;                 /* ECGI */
411 static int hf_x2ap_Old_ECGIs_item = -1;           /* ECGI */
412 static int hf_x2ap_CellToReport_List_item = -1;   /* ProtocolIE_Single_Container */
413 static int hf_x2ap_CellMeasurementResult_List_item = -1;  /* ProtocolIE_Single_Container */
414 static int hf_x2ap_hWOverLoadIndicator = -1;      /* HWLoadIndicator */
415 static int hf_x2ap_s1TNLOverLoadIndicator = -1;   /* S1TNLLoadIndicator */
416 static int hf_x2ap_radioresourceStatus = -1;      /* RadioResourceStatus */
417 static int hf_x2ap_privateIEs = -1;               /* PrivateIE_Container */
418 static int hf_x2ap_initiatingMessage = -1;        /* InitiatingMessage */
419 static int hf_x2ap_successfulOutcome = -1;        /* SuccessfulOutcome */
420 static int hf_x2ap_unsuccessfulOutcome = -1;      /* UnsuccessfulOutcome */
421 static int hf_x2ap_initiatingMessage_value = -1;  /* InitiatingMessage_value */
422 static int hf_x2ap_successfulOutcome_value = -1;  /* SuccessfulOutcome_value */
423 static int hf_x2ap_value = -1;                    /* UnsuccessfulOutcome_value */
424
425 /*--- End of included file: packet-x2ap-hf.c ---*/
426 #line 66 "packet-x2ap-template.c"
427
428 /* Initialize the subtree pointers */
429 static int ett_x2ap = -1;
430 static int ett_x2ap_TransportLayerAddress = -1;
431
432 /*--- Included file: packet-x2ap-ett.c ---*/
433 #line 1 "packet-x2ap-ett.c"
434 static gint ett_x2ap_PrivateIE_ID = -1;
435 static gint ett_x2ap_ProtocolIE_Container = -1;
436 static gint ett_x2ap_ProtocolIE_Field = -1;
437 static gint ett_x2ap_ProtocolExtensionContainer = -1;
438 static gint ett_x2ap_ProtocolExtensionField = -1;
439 static gint ett_x2ap_PrivateIE_Container = -1;
440 static gint ett_x2ap_PrivateIE_Field = -1;
441 static gint ett_x2ap_AS_SecurityInformation = -1;
442 static gint ett_x2ap_AllocationAndRetentionPriority = -1;
443 static gint ett_x2ap_BroadcastPLMNs_Item = -1;
444 static gint ett_x2ap_Cause = -1;
445 static gint ett_x2ap_CellType = -1;
446 static gint ett_x2ap_CompositeAvailableCapacityGroup = -1;
447 static gint ett_x2ap_CompositeAvailableCapacity = -1;
448 static gint ett_x2ap_COUNTvalue = -1;
449 static gint ett_x2ap_CriticalityDiagnostics = -1;
450 static gint ett_x2ap_CriticalityDiagnostics_IE_List = -1;
451 static gint ett_x2ap_CriticalityDiagnostics_IE_List_item = -1;
452 static gint ett_x2ap_FDD_Info = -1;
453 static gint ett_x2ap_TDD_Info = -1;
454 static gint ett_x2ap_EUTRA_Mode_Info = -1;
455 static gint ett_x2ap_ECGI = -1;
456 static gint ett_x2ap_ENB_ID = -1;
457 static gint ett_x2ap_EPLMNs = -1;
458 static gint ett_x2ap_E_RAB_Level_QoS_Parameters = -1;
459 static gint ett_x2ap_E_RAB_List = -1;
460 static gint ett_x2ap_E_RAB_Item = -1;
461 static gint ett_x2ap_ForbiddenTAs = -1;
462 static gint ett_x2ap_ForbiddenTAs_Item = -1;
463 static gint ett_x2ap_ForbiddenTACs = -1;
464 static gint ett_x2ap_ForbiddenLAs = -1;
465 static gint ett_x2ap_ForbiddenLAs_Item = -1;
466 static gint ett_x2ap_ForbiddenLACs = -1;
467 static gint ett_x2ap_GBR_QosInformation = -1;
468 static gint ett_x2ap_GlobalENB_ID = -1;
469 static gint ett_x2ap_GTPtunnelEndpoint = -1;
470 static gint ett_x2ap_GUGroupIDList = -1;
471 static gint ett_x2ap_GU_Group_ID = -1;
472 static gint ett_x2ap_GUMMEI = -1;
473 static gint ett_x2ap_HandoverRestrictionList = -1;
474 static gint ett_x2ap_HWLoadIndicator = -1;
475 static gint ett_x2ap_LastVisitedCell_Item = -1;
476 static gint ett_x2ap_LastVisitedEUTRANCellInformation = -1;
477 static gint ett_x2ap_LastVisitedGERANCellInformation = -1;
478 static gint ett_x2ap_LocationReportingInformation = -1;
479 static gint ett_x2ap_MobilityParametersModificationRange = -1;
480 static gint ett_x2ap_MobilityParametersInformation = -1;
481 static gint ett_x2ap_Neighbour_Information = -1;
482 static gint ett_x2ap_Neighbour_Information_item = -1;
483 static gint ett_x2ap_PRACH_Configuration = -1;
484 static gint ett_x2ap_RelativeNarrowbandTxPower = -1;
485 static gint ett_x2ap_RadioResourceStatus = -1;
486 static gint ett_x2ap_S1TNLLoadIndicator = -1;
487 static gint ett_x2ap_ServedCells = -1;
488 static gint ett_x2ap_ServedCells_item = -1;
489 static gint ett_x2ap_ServedCell_Information = -1;
490 static gint ett_x2ap_SpecialSubframe_Info = -1;
491 static gint ett_x2ap_TraceActivation = -1;
492 static gint ett_x2ap_UE_HistoryInformation = -1;
493 static gint ett_x2ap_UEAggregateMaximumBitRate = -1;
494 static gint ett_x2ap_UESecurityCapabilities = -1;
495 static gint ett_x2ap_UL_InterferenceOverloadIndication = -1;
496 static gint ett_x2ap_UL_HighInterferenceIndicationInfo = -1;
497 static gint ett_x2ap_UL_HighInterferenceIndicationInfo_Item = -1;
498 static gint ett_x2ap_HandoverRequest = -1;
499 static gint ett_x2ap_UE_ContextInformation = -1;
500 static gint ett_x2ap_E_RABs_ToBeSetup_List = -1;
501 static gint ett_x2ap_E_RABs_ToBeSetup_Item = -1;
502 static gint ett_x2ap_HandoverRequestAcknowledge = -1;
503 static gint ett_x2ap_E_RABs_Admitted_List = -1;
504 static gint ett_x2ap_E_RABs_Admitted_Item = -1;
505 static gint ett_x2ap_HandoverPreparationFailure = -1;
506 static gint ett_x2ap_HandoverReport = -1;
507 static gint ett_x2ap_SNStatusTransfer = -1;
508 static gint ett_x2ap_E_RABs_SubjectToStatusTransfer_List = -1;
509 static gint ett_x2ap_E_RABs_SubjectToStatusTransfer_Item = -1;
510 static gint ett_x2ap_UEContextRelease = -1;
511 static gint ett_x2ap_HandoverCancel = -1;
512 static gint ett_x2ap_ErrorIndication = -1;
513 static gint ett_x2ap_ResetRequest = -1;
514 static gint ett_x2ap_ResetResponse = -1;
515 static gint ett_x2ap_X2SetupRequest = -1;
516 static gint ett_x2ap_X2SetupResponse = -1;
517 static gint ett_x2ap_X2SetupFailure = -1;
518 static gint ett_x2ap_LoadInformation = -1;
519 static gint ett_x2ap_CellInformation_List = -1;
520 static gint ett_x2ap_CellInformation_Item = -1;
521 static gint ett_x2ap_ENBConfigurationUpdate = -1;
522 static gint ett_x2ap_ServedCellsToModify = -1;
523 static gint ett_x2ap_ServedCellsToModify_Item = -1;
524 static gint ett_x2ap_Old_ECGIs = -1;
525 static gint ett_x2ap_ENBConfigurationUpdateAcknowledge = -1;
526 static gint ett_x2ap_ENBConfigurationUpdateFailure = -1;
527 static gint ett_x2ap_ResourceStatusRequest = -1;
528 static gint ett_x2ap_CellToReport_List = -1;
529 static gint ett_x2ap_CellToReport_Item = -1;
530 static gint ett_x2ap_ResourceStatusResponse = -1;
531 static gint ett_x2ap_ResourceStatusFailure = -1;
532 static gint ett_x2ap_ResourceStatusUpdate = -1;
533 static gint ett_x2ap_CellMeasurementResult_List = -1;
534 static gint ett_x2ap_CellMeasurementResult_Item = -1;
535 static gint ett_x2ap_PrivateMessage = -1;
536 static gint ett_x2ap_MobilityChangeRequest = -1;
537 static gint ett_x2ap_MobilityChangeAcknowledge = -1;
538 static gint ett_x2ap_MobilityChangeFailure = -1;
539 static gint ett_x2ap_RLFIndication = -1;
540 static gint ett_x2ap_X2AP_PDU = -1;
541 static gint ett_x2ap_InitiatingMessage = -1;
542 static gint ett_x2ap_SuccessfulOutcome = -1;
543 static gint ett_x2ap_UnsuccessfulOutcome = -1;
544
545 /*--- End of included file: packet-x2ap-ett.c ---*/
546 #line 71 "packet-x2ap-template.c"
547
548 /* Global variables */
549 static guint32 ProcedureCode;
550 static guint32 ProtocolIE_ID;
551 static guint gbl_x2apSctpPort=SCTP_PORT_X2AP;
552
553 /* Dissector tables */
554 static dissector_table_t x2ap_ies_dissector_table;
555 static dissector_table_t x2ap_extension_dissector_table;
556 static dissector_table_t x2ap_proc_imsg_dissector_table;
557 static dissector_table_t x2ap_proc_sout_dissector_table;
558 static dissector_table_t x2ap_proc_uout_dissector_table;
559
560 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
561 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
562 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
563 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
564 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
565 void proto_reg_handoff_x2ap(void);
566
567
568 /*--- Included file: packet-x2ap-fn.c ---*/
569 #line 1 "packet-x2ap-fn.c"
570
571 static const value_string x2ap_Criticality_vals[] = {
572   {   0, "reject" },
573   {   1, "ignore" },
574   {   2, "notify" },
575   { 0, NULL }
576 };
577
578
579 static int
580 dissect_x2ap_Criticality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
581   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
582                                      3, NULL, FALSE, 0, NULL);
583
584   return offset;
585 }
586
587
588
589 static int
590 dissect_x2ap_INTEGER_0_maxPrivateIEs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
591   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
592                                                             0U, maxPrivateIEs, NULL, FALSE);
593
594   return offset;
595 }
596
597
598
599 static int
600 dissect_x2ap_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
601   offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
602
603   return offset;
604 }
605
606
607 static const value_string x2ap_PrivateIE_ID_vals[] = {
608   {   0, "local" },
609   {   1, "global" },
610   { 0, NULL }
611 };
612
613 static const per_choice_t PrivateIE_ID_choice[] = {
614   {   0, &hf_x2ap_local          , ASN1_NO_EXTENSIONS     , dissect_x2ap_INTEGER_0_maxPrivateIEs },
615   {   1, &hf_x2ap_global         , ASN1_NO_EXTENSIONS     , dissect_x2ap_OBJECT_IDENTIFIER },
616   { 0, NULL, 0, NULL }
617 };
618
619 static int
620 dissect_x2ap_PrivateIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
621   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
622                                  ett_x2ap_PrivateIE_ID, PrivateIE_ID_choice,
623                                  NULL);
624
625   return offset;
626 }
627
628
629 static const value_string x2ap_ProcedureCode_vals[] = {
630   { id_handoverPreparation, "id-handoverPreparation" },
631   { id_handoverCancel, "id-handoverCancel" },
632   { id_loadIndication, "id-loadIndication" },
633   { id_errorIndication, "id-errorIndication" },
634   { id_snStatusTransfer, "id-snStatusTransfer" },
635   { id_uEContextRelease, "id-uEContextRelease" },
636   { id_x2Setup, "id-x2Setup" },
637   { id_reset, "id-reset" },
638   { id_eNBConfigurationUpdate, "id-eNBConfigurationUpdate" },
639   { id_resourceStatusReportingInitiation, "id-resourceStatusReportingInitiation" },
640   { id_resourceStatusReporting, "id-resourceStatusReporting" },
641   { id_privateMessage, "id-privateMessage" },
642   { id_mobilitySettingsChange, "id-mobilitySettingsChange" },
643   { id_rLFIndication, "id-rLFIndication" },
644   { id_handoverReport, "id-handoverReport" },
645   { 0, NULL }
646 };
647
648
649 static int
650 dissect_x2ap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
651 #line 67 "x2ap.cnf"
652   ProcedureCode = 0xFFFF;
653
654   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
655                                                             0U, 255U, &ProcedureCode, FALSE);
656
657 #line 61 "x2ap.cnf"
658     col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ",
659                 val_to_str(ProcedureCode, x2ap_ProcedureCode_vals,
660                            "unknown message"));
661
662   return offset;
663 }
664
665
666 static const value_string x2ap_ProtocolIE_ID_vals[] = {
667   { id_E_RABs_Admitted_Item, "id-E-RABs-Admitted-Item" },
668   { id_E_RABs_Admitted_List, "id-E-RABs-Admitted-List" },
669   { id_E_RAB_Item, "id-E-RAB-Item" },
670   { id_E_RABs_NotAdmitted_List, "id-E-RABs-NotAdmitted-List" },
671   { id_E_RABs_ToBeSetup_Item, "id-E-RABs-ToBeSetup-Item" },
672   { id_Cause, "id-Cause" },
673   { id_CellInformation, "id-CellInformation" },
674   { id_CellInformation_Item, "id-CellInformation-Item" },
675   { id_New_eNB_UE_X2AP_ID, "id-New-eNB-UE-X2AP-ID" },
676   { id_Old_eNB_UE_X2AP_ID, "id-Old-eNB-UE-X2AP-ID" },
677   { id_TargetCell_ID, "id-TargetCell-ID" },
678   { id_TargeteNBtoSource_eNBTransparentContainer, "id-TargeteNBtoSource-eNBTransparentContainer" },
679   { id_TraceActivation, "id-TraceActivation" },
680   { id_UE_ContextInformation, "id-UE-ContextInformation" },
681   { id_UE_HistoryInformation, "id-UE-HistoryInformation" },
682   { id_UE_X2AP_ID, "id-UE-X2AP-ID" },
683   { id_CriticalityDiagnostics, "id-CriticalityDiagnostics" },
684   { id_E_RABs_SubjectToStatusTransfer_List, "id-E-RABs-SubjectToStatusTransfer-List" },
685   { id_E_RABs_SubjectToStatusTransfer_Item, "id-E-RABs-SubjectToStatusTransfer-Item" },
686   { id_ServedCells, "id-ServedCells" },
687   { id_GlobalENB_ID, "id-GlobalENB-ID" },
688   { id_TimeToWait, "id-TimeToWait" },
689   { id_GUMMEI_ID, "id-GUMMEI-ID" },
690   { id_GUGroupIDList, "id-GUGroupIDList" },
691   { id_ServedCellsToAdd, "id-ServedCellsToAdd" },
692   { id_ServedCellsToModify, "id-ServedCellsToModify" },
693   { id_ServedCellsToDelete, "id-ServedCellsToDelete" },
694   { id_Registration_Request, "id-Registration-Request" },
695   { id_CellToReport, "id-CellToReport" },
696   { id_ReportingPeriodicity, "id-ReportingPeriodicity" },
697   { id_CellToReport_Item, "id-CellToReport-Item" },
698   { id_CellMeasurementResult, "id-CellMeasurementResult" },
699   { id_CellMeasurementResult_Item, "id-CellMeasurementResult-Item" },
700   { id_GUGroupIDToAddList, "id-GUGroupIDToAddList" },
701   { id_GUGroupIDToDeleteList, "id-GUGroupIDToDeleteList" },
702   { id_SRVCCOperationPossible, "id-SRVCCOperationPossible" },
703   { id_Measurement_ID, "id-Measurement-ID" },
704   { id_ReportCharacteristics, "id-ReportCharacteristics" },
705   { id_ENB1_Measurement_ID, "id-ENB1-Measurement-ID" },
706   { id_ENB2_Measurement_ID, "id-ENB2-Measurement-ID" },
707   { id_Number_of_Antennaports, "id-Number-of-Antennaports" },
708   { id_CompositeAvailableCapacityGroup, "id-CompositeAvailableCapacityGroup" },
709   { id_ENB1_Cell_ID, "id-ENB1-Cell-ID" },
710   { id_ENB2_Cell_ID, "id-ENB2-Cell-ID" },
711   { id_ENB2_Proposed_Mobility_Parameters, "id-ENB2-Proposed-Mobility-Parameters" },
712   { id_ENB1_Mobility_Parameters, "id-ENB1-Mobility-Parameters" },
713   { id_ENB2_Mobility_Parameters_Modification_Range, "id-ENB2-Mobility-Parameters-Modification-Range" },
714   { id_FailureCellPCI, "id-FailureCellPCI" },
715   { id_Re_establishmentCellECGI, "id-Re-establishmentCellECGI" },
716   { id_FailureCellCRNTI, "id-FailureCellCRNTI" },
717   { id_ShortMAC_I, "id-ShortMAC-I" },
718   { id_SourceCellECGI, "id-SourceCellECGI" },
719   { id_FailureCellECGI, "id-FailureCellECGI" },
720   { id_HandoverReportType, "id-HandoverReportType" },
721   { id_PRACH_Configuration, "id-PRACH-Configuration" },
722   { 0, NULL }
723 };
724
725
726 static int
727 dissect_x2ap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
728   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
729                                                             0U, maxProtocolIEs, &ProtocolIE_ID, FALSE);
730
731 #line 50 "x2ap.cnf"
732   if (tree) {
733     proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(x2ap_ProtocolIE_ID_vals), "unknown (%d)"));
734   }
735
736   return offset;
737 }
738
739
740 static const value_string x2ap_TriggeringMessage_vals[] = {
741   {   0, "initiating-message" },
742   {   1, "successful-outcome" },
743   {   2, "unsuccessful-outcome" },
744   { 0, NULL }
745 };
746
747
748 static int
749 dissect_x2ap_TriggeringMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
750   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
751                                      3, NULL, FALSE, 0, NULL);
752
753   return offset;
754 }
755
756
757
758 static int
759 dissect_x2ap_ProtocolIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
760   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
761
762   return offset;
763 }
764
765
766 static const per_sequence_t ProtocolIE_Field_sequence[] = {
767   { &hf_x2ap_id             , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_ID },
768   { &hf_x2ap_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_Criticality },
769   { &hf_x2ap_protocolIE_Field_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Field_value },
770   { NULL, 0, 0, NULL }
771 };
772
773 static int
774 dissect_x2ap_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
775   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
776                                    ett_x2ap_ProtocolIE_Field, ProtocolIE_Field_sequence);
777
778   return offset;
779 }
780
781
782 static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
783   { &hf_x2ap_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Field },
784 };
785
786 static int
787 dissect_x2ap_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
788   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
789                                                   ett_x2ap_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
790                                                   0, maxProtocolIEs, FALSE);
791
792   return offset;
793 }
794
795
796
797 static int
798 dissect_x2ap_ProtocolIE_Single_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
799   offset = dissect_x2ap_ProtocolIE_Field(tvb, offset, actx, tree, hf_index);
800
801   return offset;
802 }
803
804
805
806 static int
807 dissect_x2ap_T_extensionValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
808   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
809
810   return offset;
811 }
812
813
814 static const per_sequence_t ProtocolExtensionField_sequence[] = {
815   { &hf_x2ap_extension_id   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_ID },
816   { &hf_x2ap_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_Criticality },
817   { &hf_x2ap_extensionValue , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_T_extensionValue },
818   { NULL, 0, 0, NULL }
819 };
820
821 static int
822 dissect_x2ap_ProtocolExtensionField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
823   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
824                                    ett_x2ap_ProtocolExtensionField, ProtocolExtensionField_sequence);
825
826   return offset;
827 }
828
829
830 static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
831   { &hf_x2ap_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolExtensionField },
832 };
833
834 static int
835 dissect_x2ap_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
836   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
837                                                   ett_x2ap_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
838                                                   1, maxProtocolExtensions, FALSE);
839
840   return offset;
841 }
842
843
844
845 static int
846 dissect_x2ap_PrivateIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
847   offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
848
849   return offset;
850 }
851
852
853 static const per_sequence_t PrivateIE_Field_sequence[] = {
854   { &hf_x2ap_private_id     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_PrivateIE_ID },
855   { &hf_x2ap_criticality    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_Criticality },
856   { &hf_x2ap_privateIE_Field_value, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_PrivateIE_Field_value },
857   { NULL, 0, 0, NULL }
858 };
859
860 static int
861 dissect_x2ap_PrivateIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
862   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
863                                    ett_x2ap_PrivateIE_Field, PrivateIE_Field_sequence);
864
865   return offset;
866 }
867
868
869 static const per_sequence_t PrivateIE_Container_sequence_of[1] = {
870   { &hf_x2ap_PrivateIE_Container_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_PrivateIE_Field },
871 };
872
873 static int
874 dissect_x2ap_PrivateIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
875   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
876                                                   ett_x2ap_PrivateIE_Container, PrivateIE_Container_sequence_of,
877                                                   1, maxPrivateIEs, FALSE);
878
879   return offset;
880 }
881
882
883
884 static int
885 dissect_x2ap_Key_eNodeB_Star(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
886   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
887                                      256, 256, FALSE, NULL);
888
889   return offset;
890 }
891
892
893
894 static int
895 dissect_x2ap_NextHopChainingCount(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
896   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
897                                                             0U, 7U, NULL, FALSE);
898
899   return offset;
900 }
901
902
903 static const per_sequence_t AS_SecurityInformation_sequence[] = {
904   { &hf_x2ap_key_eNodeB_star, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Key_eNodeB_Star },
905   { &hf_x2ap_nextHopChainingCount, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_NextHopChainingCount },
906   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
907   { NULL, 0, 0, NULL }
908 };
909
910 static int
911 dissect_x2ap_AS_SecurityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
912   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
913                                    ett_x2ap_AS_SecurityInformation, AS_SecurityInformation_sequence);
914
915   return offset;
916 }
917
918
919 static const value_string x2ap_PriorityLevel_vals[] = {
920   {   0, "spare" },
921   {   1, "highest" },
922   {  14, "lowest" },
923   {  15, "no-priority" },
924   { 0, NULL }
925 };
926
927
928 static int
929 dissect_x2ap_PriorityLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
930   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
931                                                             0U, 15U, NULL, FALSE);
932
933   return offset;
934 }
935
936
937 static const value_string x2ap_Pre_emptionCapability_vals[] = {
938   {   0, "shall-not-trigger-pre-emption" },
939   {   1, "may-trigger-pre-emption" },
940   { 0, NULL }
941 };
942
943
944 static int
945 dissect_x2ap_Pre_emptionCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
946   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
947                                      2, NULL, FALSE, 0, NULL);
948
949   return offset;
950 }
951
952
953 static const value_string x2ap_Pre_emptionVulnerability_vals[] = {
954   {   0, "not-pre-emptable" },
955   {   1, "pre-emptable" },
956   { 0, NULL }
957 };
958
959
960 static int
961 dissect_x2ap_Pre_emptionVulnerability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
962   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
963                                      2, NULL, FALSE, 0, NULL);
964
965   return offset;
966 }
967
968
969 static const per_sequence_t AllocationAndRetentionPriority_sequence[] = {
970   { &hf_x2ap_priorityLevel  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PriorityLevel },
971   { &hf_x2ap_pre_emptionCapability, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Pre_emptionCapability },
972   { &hf_x2ap_pre_emptionVulnerability, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Pre_emptionVulnerability },
973   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
974   { NULL, 0, 0, NULL }
975 };
976
977 static int
978 dissect_x2ap_AllocationAndRetentionPriority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
979   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
980                                    ett_x2ap_AllocationAndRetentionPriority, AllocationAndRetentionPriority_sequence);
981
982   return offset;
983 }
984
985
986
987 static int
988 dissect_x2ap_BitRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
989   offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
990                                                             0U, G_GINT64_CONSTANT(10000000000U), NULL, FALSE);
991
992   return offset;
993 }
994
995
996
997 static int
998 dissect_x2ap_PLMN_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
999 #line 78 "x2ap.cnf"
1000   tvbuff_t *parameter_tvb=NULL;
1001
1002   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1003                                        3, 3, FALSE, &parameter_tvb);
1004
1005
1006         if(tvb_length(tvb)==0) 
1007                 return offset;
1008                 
1009         if (!parameter_tvb)
1010                 return offset;
1011         dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, tree, 0, FALSE);
1012
1013
1014   return offset;
1015 }
1016
1017
1018 static const per_sequence_t BroadcastPLMNs_Item_sequence_of[1] = {
1019   { &hf_x2ap_BroadcastPLMNs_Item_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1020 };
1021
1022 static int
1023 dissect_x2ap_BroadcastPLMNs_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1024   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1025                                                   ett_x2ap_BroadcastPLMNs_Item, BroadcastPLMNs_Item_sequence_of,
1026                                                   1, maxnoofBPLMNs, FALSE);
1027
1028   return offset;
1029 }
1030
1031
1032
1033 static int
1034 dissect_x2ap_CapacityValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1035   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1036                                                             0U, 100U, NULL, FALSE);
1037
1038   return offset;
1039 }
1040
1041
1042
1043 static int
1044 dissect_x2ap_CellCapacityClassValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1045   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1046                                                             1U, 100U, NULL, TRUE);
1047
1048   return offset;
1049 }
1050
1051
1052 static const value_string x2ap_CauseRadioNetwork_vals[] = {
1053   {   0, "handover-desirable-for-radio-reasons" },
1054   {   1, "time-critical-handover" },
1055   {   2, "resource-optimisation-handover" },
1056   {   3, "reduce-load-in-serving-cell" },
1057   {   4, "partial-handover" },
1058   {   5, "unknown-new-eNB-UE-X2AP-ID" },
1059   {   6, "unknown-old-eNB-UE-X2AP-ID" },
1060   {   7, "unknown-pair-of-UE-X2AP-ID" },
1061   {   8, "ho-target-not-allowed" },
1062   {   9, "tx2relocoverall-expiry" },
1063   {  10, "trelocprep-expiry" },
1064   {  11, "cell-not-available" },
1065   {  12, "no-radio-resources-available-in-target-cell" },
1066   {  13, "invalid-MME-GroupID" },
1067   {  14, "unknown-MME-Code" },
1068   {  15, "encryption-and-or-integrity-protection-algorithms-not-supported" },
1069   {  16, "reportCharacteristicsEmpty" },
1070   {  17, "noReportPeriodicity" },
1071   {  18, "existingMeasurementID" },
1072   {  19, "unknown-eNB-Measurement-ID" },
1073   {  20, "measurement-temporarily-not-available" },
1074   {  21, "unspecified" },
1075   {  22, "load-balancing" },
1076   {  23, "handover-optimisation" },
1077   {  24, "value-out-of-allowed-range" },
1078   { 0, NULL }
1079 };
1080
1081
1082 static int
1083 dissect_x2ap_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1084   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1085                                      22, NULL, TRUE, 3, NULL);
1086
1087   return offset;
1088 }
1089
1090
1091 static const value_string x2ap_CauseTransport_vals[] = {
1092   {   0, "transport-resource-unavailable" },
1093   {   1, "unspecified" },
1094   { 0, NULL }
1095 };
1096
1097
1098 static int
1099 dissect_x2ap_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1100   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1101                                      2, NULL, TRUE, 0, NULL);
1102
1103   return offset;
1104 }
1105
1106
1107 static const value_string x2ap_CauseProtocol_vals[] = {
1108   {   0, "transfer-syntax-error" },
1109   {   1, "abstract-syntax-error-reject" },
1110   {   2, "abstract-syntax-error-ignore-and-notify" },
1111   {   3, "message-not-compatible-with-receiver-state" },
1112   {   4, "semantic-error" },
1113   {   5, "unspecified" },
1114   {   6, "abstract-syntax-error-falsely-constructed-message" },
1115   { 0, NULL }
1116 };
1117
1118
1119 static int
1120 dissect_x2ap_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1121   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1122                                      7, NULL, TRUE, 0, NULL);
1123
1124   return offset;
1125 }
1126
1127
1128 static const value_string x2ap_CauseMisc_vals[] = {
1129   {   0, "control-processing-overload" },
1130   {   1, "hardware-failure" },
1131   {   2, "om-intervention" },
1132   {   3, "not-enough-user-plane-processing-resources" },
1133   {   4, "unspecified" },
1134   { 0, NULL }
1135 };
1136
1137
1138 static int
1139 dissect_x2ap_CauseMisc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1140   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1141                                      5, NULL, TRUE, 0, NULL);
1142
1143   return offset;
1144 }
1145
1146
1147 static const value_string x2ap_Cause_vals[] = {
1148   {   0, "radioNetwork" },
1149   {   1, "transport" },
1150   {   2, "protocol" },
1151   {   3, "misc" },
1152   { 0, NULL }
1153 };
1154
1155 static const per_choice_t Cause_choice[] = {
1156   {   0, &hf_x2ap_radioNetwork   , ASN1_EXTENSION_ROOT    , dissect_x2ap_CauseRadioNetwork },
1157   {   1, &hf_x2ap_transport      , ASN1_EXTENSION_ROOT    , dissect_x2ap_CauseTransport },
1158   {   2, &hf_x2ap_protocol       , ASN1_EXTENSION_ROOT    , dissect_x2ap_CauseProtocol },
1159   {   3, &hf_x2ap_misc           , ASN1_EXTENSION_ROOT    , dissect_x2ap_CauseMisc },
1160   { 0, NULL, 0, NULL }
1161 };
1162
1163 static int
1164 dissect_x2ap_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1165   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1166                                  ett_x2ap_Cause, Cause_choice,
1167                                  NULL);
1168
1169   return offset;
1170 }
1171
1172
1173 static const value_string x2ap_Cell_Size_vals[] = {
1174   {   0, "verysmall" },
1175   {   1, "small" },
1176   {   2, "medium" },
1177   {   3, "large" },
1178   { 0, NULL }
1179 };
1180
1181
1182 static int
1183 dissect_x2ap_Cell_Size(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1184   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1185                                      4, NULL, TRUE, 0, NULL);
1186
1187   return offset;
1188 }
1189
1190
1191 static const per_sequence_t CellType_sequence[] = {
1192   { &hf_x2ap_cell_Size      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Cell_Size },
1193   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1194   { NULL, 0, 0, NULL }
1195 };
1196
1197 static int
1198 dissect_x2ap_CellType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1199   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1200                                    ett_x2ap_CellType, CellType_sequence);
1201
1202   return offset;
1203 }
1204
1205
1206 static const per_sequence_t CompositeAvailableCapacity_sequence[] = {
1207   { &hf_x2ap_cellCapacityClassValue, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_CellCapacityClassValue },
1208   { &hf_x2ap_capacityValue  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CapacityValue },
1209   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1210   { NULL, 0, 0, NULL }
1211 };
1212
1213 static int
1214 dissect_x2ap_CompositeAvailableCapacity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1215   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1216                                    ett_x2ap_CompositeAvailableCapacity, CompositeAvailableCapacity_sequence);
1217
1218   return offset;
1219 }
1220
1221
1222 static const per_sequence_t CompositeAvailableCapacityGroup_sequence[] = {
1223   { &hf_x2ap_dL_CompositeAvailableCapacity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CompositeAvailableCapacity },
1224   { &hf_x2ap_uL_CompositeAvailableCapacity, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CompositeAvailableCapacity },
1225   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1226   { NULL, 0, 0, NULL }
1227 };
1228
1229 static int
1230 dissect_x2ap_CompositeAvailableCapacityGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1231   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1232                                    ett_x2ap_CompositeAvailableCapacityGroup, CompositeAvailableCapacityGroup_sequence);
1233
1234   return offset;
1235 }
1236
1237
1238
1239 static int
1240 dissect_x2ap_PDCP_SN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1241   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1242                                                             0U, 4095U, NULL, FALSE);
1243
1244   return offset;
1245 }
1246
1247
1248
1249 static int
1250 dissect_x2ap_HFN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1251   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1252                                                             0U, 1048575U, NULL, FALSE);
1253
1254   return offset;
1255 }
1256
1257
1258 static const per_sequence_t COUNTvalue_sequence[] = {
1259   { &hf_x2ap_pDCP_SN        , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PDCP_SN },
1260   { &hf_x2ap_hFN            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_HFN },
1261   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1262   { NULL, 0, 0, NULL }
1263 };
1264
1265 static int
1266 dissect_x2ap_COUNTvalue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1267   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1268                                    ett_x2ap_COUNTvalue, COUNTvalue_sequence);
1269
1270   return offset;
1271 }
1272
1273
1274 static const value_string x2ap_TypeOfError_vals[] = {
1275   {   0, "not-understood" },
1276   {   1, "missing" },
1277   { 0, NULL }
1278 };
1279
1280
1281 static int
1282 dissect_x2ap_TypeOfError(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1283   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1284                                      2, NULL, TRUE, 0, NULL);
1285
1286   return offset;
1287 }
1288
1289
1290 static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
1291   { &hf_x2ap_iECriticality  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Criticality },
1292   { &hf_x2ap_iE_ID          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_ID },
1293   { &hf_x2ap_typeOfError    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_TypeOfError },
1294   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1295   { NULL, 0, 0, NULL }
1296 };
1297
1298 static int
1299 dissect_x2ap_CriticalityDiagnostics_IE_List_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1300   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1301                                    ett_x2ap_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
1302
1303   return offset;
1304 }
1305
1306
1307 static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
1308   { &hf_x2ap_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_CriticalityDiagnostics_IE_List_item },
1309 };
1310
1311 static int
1312 dissect_x2ap_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1313   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1314                                                   ett_x2ap_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
1315                                                   1, maxNrOfErrors, FALSE);
1316
1317   return offset;
1318 }
1319
1320
1321 static const per_sequence_t CriticalityDiagnostics_sequence[] = {
1322   { &hf_x2ap_procedureCode  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProcedureCode },
1323   { &hf_x2ap_triggeringMessage, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_TriggeringMessage },
1324   { &hf_x2ap_procedureCriticality, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_Criticality },
1325   { &hf_x2ap_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_CriticalityDiagnostics_IE_List },
1326   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1327   { NULL, 0, 0, NULL }
1328 };
1329
1330 static int
1331 dissect_x2ap_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1332   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1333                                    ett_x2ap_CriticalityDiagnostics, CriticalityDiagnostics_sequence);
1334
1335   return offset;
1336 }
1337
1338
1339
1340 static int
1341 dissect_x2ap_CRNTI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1342   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1343                                      16, 16, FALSE, NULL);
1344
1345   return offset;
1346 }
1347
1348
1349 static const value_string x2ap_CyclicPrefixDL_vals[] = {
1350   {   0, "normal" },
1351   {   1, "extended" },
1352   { 0, NULL }
1353 };
1354
1355
1356 static int
1357 dissect_x2ap_CyclicPrefixDL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1358   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1359                                      2, NULL, TRUE, 0, NULL);
1360
1361   return offset;
1362 }
1363
1364
1365 static const value_string x2ap_CyclicPrefixUL_vals[] = {
1366   {   0, "normal" },
1367   {   1, "extended" },
1368   { 0, NULL }
1369 };
1370
1371
1372 static int
1373 dissect_x2ap_CyclicPrefixUL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1374   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1375                                      2, NULL, TRUE, 0, NULL);
1376
1377   return offset;
1378 }
1379
1380
1381 static const value_string x2ap_DL_Forwarding_vals[] = {
1382   {   0, "dL-forwardingProposed" },
1383   { 0, NULL }
1384 };
1385
1386
1387 static int
1388 dissect_x2ap_DL_Forwarding(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1389   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1390                                      1, NULL, TRUE, 0, NULL);
1391
1392   return offset;
1393 }
1394
1395
1396
1397 static int
1398 dissect_x2ap_EARFCN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1399   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1400                                                             0U, maxEARFCN, NULL, FALSE);
1401
1402   return offset;
1403 }
1404
1405
1406 static const value_string x2ap_Transmission_Bandwidth_vals[] = {
1407   {   0, "bw6" },
1408   {   1, "bw15" },
1409   {   2, "bw25" },
1410   {   3, "bw50" },
1411   {   4, "bw75" },
1412   {   5, "bw100" },
1413   { 0, NULL }
1414 };
1415
1416
1417 static int
1418 dissect_x2ap_Transmission_Bandwidth(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1419   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1420                                      6, NULL, TRUE, 0, NULL);
1421
1422   return offset;
1423 }
1424
1425
1426 static const per_sequence_t FDD_Info_sequence[] = {
1427   { &hf_x2ap_uL_EARFCN      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EARFCN },
1428   { &hf_x2ap_dL_EARFCN      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EARFCN },
1429   { &hf_x2ap_uL_Transmission_Bandwidth, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Transmission_Bandwidth },
1430   { &hf_x2ap_dL_Transmission_Bandwidth, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Transmission_Bandwidth },
1431   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1432   { NULL, 0, 0, NULL }
1433 };
1434
1435 static int
1436 dissect_x2ap_FDD_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1437   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1438                                    ett_x2ap_FDD_Info, FDD_Info_sequence);
1439
1440   return offset;
1441 }
1442
1443
1444 static const value_string x2ap_SubframeAssignment_vals[] = {
1445   {   0, "sa0" },
1446   {   1, "sa1" },
1447   {   2, "sa2" },
1448   {   3, "sa3" },
1449   {   4, "sa4" },
1450   {   5, "sa5" },
1451   {   6, "sa6" },
1452   { 0, NULL }
1453 };
1454
1455
1456 static int
1457 dissect_x2ap_SubframeAssignment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1458   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1459                                      7, NULL, TRUE, 0, NULL);
1460
1461   return offset;
1462 }
1463
1464
1465 static const value_string x2ap_SpecialSubframePatterns_vals[] = {
1466   {   0, "ssp0" },
1467   {   1, "ssp1" },
1468   {   2, "ssp2" },
1469   {   3, "ssp3" },
1470   {   4, "ssp4" },
1471   {   5, "ssp5" },
1472   {   6, "ssp6" },
1473   {   7, "ssp7" },
1474   {   8, "ssp8" },
1475   { 0, NULL }
1476 };
1477
1478
1479 static int
1480 dissect_x2ap_SpecialSubframePatterns(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1481   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1482                                      9, NULL, TRUE, 0, NULL);
1483
1484   return offset;
1485 }
1486
1487
1488 static const per_sequence_t SpecialSubframe_Info_sequence[] = {
1489   { &hf_x2ap_specialSubframePatterns, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_SpecialSubframePatterns },
1490   { &hf_x2ap_cyclicPrefixDL , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CyclicPrefixDL },
1491   { &hf_x2ap_cyclicPrefixUL , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CyclicPrefixUL },
1492   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1493   { NULL, 0, 0, NULL }
1494 };
1495
1496 static int
1497 dissect_x2ap_SpecialSubframe_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1498   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1499                                    ett_x2ap_SpecialSubframe_Info, SpecialSubframe_Info_sequence);
1500
1501   return offset;
1502 }
1503
1504
1505 static const per_sequence_t TDD_Info_sequence[] = {
1506   { &hf_x2ap_eARFCN         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EARFCN },
1507   { &hf_x2ap_transmission_Bandwidth, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Transmission_Bandwidth },
1508   { &hf_x2ap_subframeAssignment, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_SubframeAssignment },
1509   { &hf_x2ap_specialSubframe_Info, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_SpecialSubframe_Info },
1510   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1511   { NULL, 0, 0, NULL }
1512 };
1513
1514 static int
1515 dissect_x2ap_TDD_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1516   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1517                                    ett_x2ap_TDD_Info, TDD_Info_sequence);
1518
1519   return offset;
1520 }
1521
1522
1523 static const value_string x2ap_EUTRA_Mode_Info_vals[] = {
1524   {   0, "fDD" },
1525   {   1, "tDD" },
1526   { 0, NULL }
1527 };
1528
1529 static const per_choice_t EUTRA_Mode_Info_choice[] = {
1530   {   0, &hf_x2ap_fDD            , ASN1_EXTENSION_ROOT    , dissect_x2ap_FDD_Info },
1531   {   1, &hf_x2ap_tDD            , ASN1_EXTENSION_ROOT    , dissect_x2ap_TDD_Info },
1532   { 0, NULL, 0, NULL }
1533 };
1534
1535 static int
1536 dissect_x2ap_EUTRA_Mode_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1537   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1538                                  ett_x2ap_EUTRA_Mode_Info, EUTRA_Mode_Info_choice,
1539                                  NULL);
1540
1541   return offset;
1542 }
1543
1544
1545
1546 static int
1547 dissect_x2ap_EUTRANCellIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1548   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1549                                      28, 28, FALSE, NULL);
1550
1551   return offset;
1552 }
1553
1554
1555 static const per_sequence_t ECGI_sequence[] = {
1556   { &hf_x2ap_pLMN_Identity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1557   { &hf_x2ap_eUTRANcellIdentifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EUTRANCellIdentifier },
1558   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1559   { NULL, 0, 0, NULL }
1560 };
1561
1562 static int
1563 dissect_x2ap_ECGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1564   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1565                                    ett_x2ap_ECGI, ECGI_sequence);
1566
1567   return offset;
1568 }
1569
1570
1571
1572 static int
1573 dissect_x2ap_BIT_STRING_SIZE_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1574   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1575                                      20, 20, FALSE, NULL);
1576
1577   return offset;
1578 }
1579
1580
1581
1582 static int
1583 dissect_x2ap_BIT_STRING_SIZE_28(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1584   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1585                                      28, 28, FALSE, NULL);
1586
1587   return offset;
1588 }
1589
1590
1591 static const value_string x2ap_ENB_ID_vals[] = {
1592   {   0, "macro-eNB-ID" },
1593   {   1, "home-eNB-ID" },
1594   { 0, NULL }
1595 };
1596
1597 static const per_choice_t ENB_ID_choice[] = {
1598   {   0, &hf_x2ap_macro_eNB_ID   , ASN1_EXTENSION_ROOT    , dissect_x2ap_BIT_STRING_SIZE_20 },
1599   {   1, &hf_x2ap_home_eNB_ID    , ASN1_EXTENSION_ROOT    , dissect_x2ap_BIT_STRING_SIZE_28 },
1600   { 0, NULL, 0, NULL }
1601 };
1602
1603 static int
1604 dissect_x2ap_ENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1605   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1606                                  ett_x2ap_ENB_ID, ENB_ID_choice,
1607                                  NULL);
1608
1609   return offset;
1610 }
1611
1612
1613
1614 static int
1615 dissect_x2ap_EncryptionAlgorithms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1616   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1617                                      16, 16, TRUE, NULL);
1618
1619   return offset;
1620 }
1621
1622
1623 static const per_sequence_t EPLMNs_sequence_of[1] = {
1624   { &hf_x2ap_EPLMNs_item    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1625 };
1626
1627 static int
1628 dissect_x2ap_EPLMNs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1629   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1630                                                   ett_x2ap_EPLMNs, EPLMNs_sequence_of,
1631                                                   1, maxnoofEPLMNs, FALSE);
1632
1633   return offset;
1634 }
1635
1636
1637
1638 static int
1639 dissect_x2ap_E_RAB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1640   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1641                                                             0U, 15U, NULL, TRUE);
1642
1643   return offset;
1644 }
1645
1646
1647
1648 static int
1649 dissect_x2ap_QCI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1650   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1651                                                             0U, 255U, NULL, FALSE);
1652
1653   return offset;
1654 }
1655
1656
1657 static const per_sequence_t GBR_QosInformation_sequence[] = {
1658   { &hf_x2ap_e_RAB_MaximumBitrateDL, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
1659   { &hf_x2ap_e_RAB_MaximumBitrateUL, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
1660   { &hf_x2ap_e_RAB_GuaranteedBitrateDL, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
1661   { &hf_x2ap_e_RAB_GuaranteedBitrateUL, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
1662   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1663   { NULL, 0, 0, NULL }
1664 };
1665
1666 static int
1667 dissect_x2ap_GBR_QosInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1668   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1669                                    ett_x2ap_GBR_QosInformation, GBR_QosInformation_sequence);
1670
1671   return offset;
1672 }
1673
1674
1675 static const per_sequence_t E_RAB_Level_QoS_Parameters_sequence[] = {
1676   { &hf_x2ap_qCI            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_QCI },
1677   { &hf_x2ap_allocationAndRetentionPriority, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_AllocationAndRetentionPriority },
1678   { &hf_x2ap_gbrQosInformation, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_GBR_QosInformation },
1679   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1680   { NULL, 0, 0, NULL }
1681 };
1682
1683 static int
1684 dissect_x2ap_E_RAB_Level_QoS_Parameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1685   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1686                                    ett_x2ap_E_RAB_Level_QoS_Parameters, E_RAB_Level_QoS_Parameters_sequence);
1687
1688   return offset;
1689 }
1690
1691
1692 static const per_sequence_t E_RAB_List_sequence_of[1] = {
1693   { &hf_x2ap_E_RAB_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Single_Container },
1694 };
1695
1696 static int
1697 dissect_x2ap_E_RAB_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1698   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1699                                                   ett_x2ap_E_RAB_List, E_RAB_List_sequence_of,
1700                                                   1, maxnoofBearers, FALSE);
1701
1702   return offset;
1703 }
1704
1705
1706 static const per_sequence_t E_RAB_Item_sequence[] = {
1707   { &hf_x2ap_e_RAB_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RAB_ID },
1708   { &hf_x2ap_cause          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Cause },
1709   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1710   { NULL, 0, 0, NULL }
1711 };
1712
1713 static int
1714 dissect_x2ap_E_RAB_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1715   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1716                                    ett_x2ap_E_RAB_Item, E_RAB_Item_sequence);
1717
1718   return offset;
1719 }
1720
1721
1722
1723 static int
1724 dissect_x2ap_EUTRANTraceID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1725   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1726                                        8, 8, FALSE, NULL);
1727
1728   return offset;
1729 }
1730
1731
1732 static const value_string x2ap_EventType_vals[] = {
1733   {   0, "change-of-serving-cell" },
1734   { 0, NULL }
1735 };
1736
1737
1738 static int
1739 dissect_x2ap_EventType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1740   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1741                                      1, NULL, TRUE, 0, NULL);
1742
1743   return offset;
1744 }
1745
1746
1747 static const value_string x2ap_ForbiddenInterRATs_vals[] = {
1748   {   0, "all" },
1749   {   1, "geran" },
1750   {   2, "utran" },
1751   {   3, "cdma2000" },
1752   { 0, NULL }
1753 };
1754
1755
1756 static int
1757 dissect_x2ap_ForbiddenInterRATs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1758   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1759                                      4, NULL, TRUE, 0, NULL);
1760
1761   return offset;
1762 }
1763
1764
1765
1766 static int
1767 dissect_x2ap_TAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1768   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1769                                        2, 2, FALSE, NULL);
1770
1771   return offset;
1772 }
1773
1774
1775 static const per_sequence_t ForbiddenTACs_sequence_of[1] = {
1776   { &hf_x2ap_ForbiddenTACs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_TAC },
1777 };
1778
1779 static int
1780 dissect_x2ap_ForbiddenTACs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1781   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1782                                                   ett_x2ap_ForbiddenTACs, ForbiddenTACs_sequence_of,
1783                                                   1, maxnoofForbTACs, FALSE);
1784
1785   return offset;
1786 }
1787
1788
1789 static const per_sequence_t ForbiddenTAs_Item_sequence[] = {
1790   { &hf_x2ap_pLMN_Identity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1791   { &hf_x2ap_forbiddenTACs  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ForbiddenTACs },
1792   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1793   { NULL, 0, 0, NULL }
1794 };
1795
1796 static int
1797 dissect_x2ap_ForbiddenTAs_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1798   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1799                                    ett_x2ap_ForbiddenTAs_Item, ForbiddenTAs_Item_sequence);
1800
1801   return offset;
1802 }
1803
1804
1805 static const per_sequence_t ForbiddenTAs_sequence_of[1] = {
1806   { &hf_x2ap_ForbiddenTAs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ForbiddenTAs_Item },
1807 };
1808
1809 static int
1810 dissect_x2ap_ForbiddenTAs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1811   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1812                                                   ett_x2ap_ForbiddenTAs, ForbiddenTAs_sequence_of,
1813                                                   1, maxnoofEPLMNsPlusOne, FALSE);
1814
1815   return offset;
1816 }
1817
1818
1819
1820 static int
1821 dissect_x2ap_LAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1822   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1823                                        2, 2, FALSE, NULL);
1824
1825   return offset;
1826 }
1827
1828
1829 static const per_sequence_t ForbiddenLACs_sequence_of[1] = {
1830   { &hf_x2ap_ForbiddenLACs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_LAC },
1831 };
1832
1833 static int
1834 dissect_x2ap_ForbiddenLACs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1835   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1836                                                   ett_x2ap_ForbiddenLACs, ForbiddenLACs_sequence_of,
1837                                                   1, maxnoofForbLACs, FALSE);
1838
1839   return offset;
1840 }
1841
1842
1843 static const per_sequence_t ForbiddenLAs_Item_sequence[] = {
1844   { &hf_x2ap_pLMN_Identity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1845   { &hf_x2ap_forbiddenLACs  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ForbiddenLACs },
1846   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1847   { NULL, 0, 0, NULL }
1848 };
1849
1850 static int
1851 dissect_x2ap_ForbiddenLAs_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1852   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1853                                    ett_x2ap_ForbiddenLAs_Item, ForbiddenLAs_Item_sequence);
1854
1855   return offset;
1856 }
1857
1858
1859 static const per_sequence_t ForbiddenLAs_sequence_of[1] = {
1860   { &hf_x2ap_ForbiddenLAs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ForbiddenLAs_Item },
1861 };
1862
1863 static int
1864 dissect_x2ap_ForbiddenLAs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1865   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1866                                                   ett_x2ap_ForbiddenLAs, ForbiddenLAs_sequence_of,
1867                                                   1, maxnoofEPLMNsPlusOne, FALSE);
1868
1869   return offset;
1870 }
1871
1872
1873 static const per_sequence_t GlobalENB_ID_sequence[] = {
1874   { &hf_x2ap_pLMN_Identity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1875   { &hf_x2ap_eNB_ID         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ENB_ID },
1876   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1877   { NULL, 0, 0, NULL }
1878 };
1879
1880 static int
1881 dissect_x2ap_GlobalENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1882   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1883                                    ett_x2ap_GlobalENB_ID, GlobalENB_ID_sequence);
1884
1885   return offset;
1886 }
1887
1888
1889
1890 static int
1891 dissect_x2ap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1892 #line 111 "x2ap.cnf"
1893   tvbuff_t *parameter_tvb=NULL;
1894   proto_tree *subtree;
1895   gint tvb_len;
1896   
1897   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1898                                      1, 160, TRUE, &parameter_tvb);
1899
1900   if (!parameter_tvb)
1901     return offset;
1902         /* Get the length */
1903         tvb_len = tvb_length(parameter_tvb);
1904         subtree = proto_item_add_subtree(actx->created_item, ett_x2ap_TransportLayerAddress);
1905         if (tvb_len==4){
1906                 /* IPv4 */
1907                  proto_tree_add_item(subtree, hf_x2ap_transportLayerAddressIPv4, parameter_tvb, 0, tvb_len, FALSE);
1908         }
1909         if (tvb_len==16){
1910                 /* IPv6 */
1911                  proto_tree_add_item(subtree, hf_x2ap_transportLayerAddressIPv6, parameter_tvb, 0, tvb_len, FALSE);
1912         }
1913
1914
1915
1916   return offset;
1917 }
1918
1919
1920
1921 static int
1922 dissect_x2ap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1923   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1924                                        4, 4, FALSE, NULL);
1925
1926   return offset;
1927 }
1928
1929
1930 static const per_sequence_t GTPtunnelEndpoint_sequence[] = {
1931   { &hf_x2ap_transportLayerAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_TransportLayerAddress },
1932   { &hf_x2ap_gTP_TEID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_GTP_TEI },
1933   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1934   { NULL, 0, 0, NULL }
1935 };
1936
1937 static int
1938 dissect_x2ap_GTPtunnelEndpoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1939   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1940                                    ett_x2ap_GTPtunnelEndpoint, GTPtunnelEndpoint_sequence);
1941
1942   return offset;
1943 }
1944
1945
1946
1947 static int
1948 dissect_x2ap_MME_Group_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1949   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1950                                        2, 2, FALSE, NULL);
1951
1952   return offset;
1953 }
1954
1955
1956 static const per_sequence_t GU_Group_ID_sequence[] = {
1957   { &hf_x2ap_pLMN_Identity  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
1958   { &hf_x2ap_mME_Group_ID   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_MME_Group_ID },
1959   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
1960   { NULL, 0, 0, NULL }
1961 };
1962
1963 static int
1964 dissect_x2ap_GU_Group_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1965   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1966                                    ett_x2ap_GU_Group_ID, GU_Group_ID_sequence);
1967
1968   return offset;
1969 }
1970
1971
1972 static const per_sequence_t GUGroupIDList_sequence_of[1] = {
1973   { &hf_x2ap_GUGroupIDList_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_GU_Group_ID },
1974 };
1975
1976 static int
1977 dissect_x2ap_GUGroupIDList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1978   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1979                                                   ett_x2ap_GUGroupIDList, GUGroupIDList_sequence_of,
1980                                                   1, maxPools, FALSE);
1981
1982   return offset;
1983 }
1984
1985
1986
1987 static int
1988 dissect_x2ap_MME_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1989   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1990                                        1, 1, FALSE, NULL);
1991
1992   return offset;
1993 }
1994
1995
1996 static const per_sequence_t GUMMEI_sequence[] = {
1997   { &hf_x2ap_gU_Group_ID    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_GU_Group_ID },
1998   { &hf_x2ap_mMME_Code      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_MME_Code },
1999   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2000   { NULL, 0, 0, NULL }
2001 };
2002
2003 static int
2004 dissect_x2ap_GUMMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2005   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2006                                    ett_x2ap_GUMMEI, GUMMEI_sequence);
2007
2008   return offset;
2009 }
2010
2011
2012 static const value_string x2ap_HandoverReportType_vals[] = {
2013   {   0, "hoTooEarly" },
2014   {   1, "hoToWrongCell" },
2015   { 0, NULL }
2016 };
2017
2018
2019 static int
2020 dissect_x2ap_HandoverReportType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2021   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2022                                      2, NULL, TRUE, 0, NULL);
2023
2024   return offset;
2025 }
2026
2027
2028 static const per_sequence_t HandoverRestrictionList_sequence[] = {
2029   { &hf_x2ap_servingPLMN    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PLMN_Identity },
2030   { &hf_x2ap_equivalentPLMNs, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_EPLMNs },
2031   { &hf_x2ap_forbiddenTAs   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ForbiddenTAs },
2032   { &hf_x2ap_forbiddenLAs   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ForbiddenLAs },
2033   { &hf_x2ap_forbiddenInterRATs, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ForbiddenInterRATs },
2034   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2035   { NULL, 0, 0, NULL }
2036 };
2037
2038 static int
2039 dissect_x2ap_HandoverRestrictionList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2040   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2041                                    ett_x2ap_HandoverRestrictionList, HandoverRestrictionList_sequence);
2042
2043   return offset;
2044 }
2045
2046
2047 static const value_string x2ap_LoadIndicator_vals[] = {
2048   {   0, "lowLoad" },
2049   {   1, "mediumLoad" },
2050   {   2, "highLoad" },
2051   {   3, "overLoad" },
2052   { 0, NULL }
2053 };
2054
2055
2056 static int
2057 dissect_x2ap_LoadIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2058   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2059                                      4, NULL, TRUE, 0, NULL);
2060
2061   return offset;
2062 }
2063
2064
2065 static const per_sequence_t HWLoadIndicator_sequence[] = {
2066   { &hf_x2ap_dLHWLoadIndicator, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_LoadIndicator },
2067   { &hf_x2ap_uLHWLoadIndicator, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_LoadIndicator },
2068   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2069   { NULL, 0, 0, NULL }
2070 };
2071
2072 static int
2073 dissect_x2ap_HWLoadIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2074   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2075                                    ett_x2ap_HWLoadIndicator, HWLoadIndicator_sequence);
2076
2077   return offset;
2078 }
2079
2080
2081
2082 static int
2083 dissect_x2ap_IntegrityProtectionAlgorithms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2084   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2085                                      16, 16, TRUE, NULL);
2086
2087   return offset;
2088 }
2089
2090
2091
2092 static int
2093 dissect_x2ap_InterfacesToTrace(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2094   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2095                                      8, 8, FALSE, NULL);
2096
2097   return offset;
2098 }
2099
2100
2101
2102 static int
2103 dissect_x2ap_Time_UE_StayedInCell(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2104   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2105                                                             0U, 4095U, NULL, FALSE);
2106
2107   return offset;
2108 }
2109
2110
2111 static const per_sequence_t LastVisitedEUTRANCellInformation_sequence[] = {
2112   { &hf_x2ap_global_Cell_ID , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ECGI },
2113   { &hf_x2ap_cellType       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_CellType },
2114   { &hf_x2ap_time_UE_StayedInCell, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_Time_UE_StayedInCell },
2115   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2116   { NULL, 0, 0, NULL }
2117 };
2118
2119 static int
2120 dissect_x2ap_LastVisitedEUTRANCellInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2121   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2122                                    ett_x2ap_LastVisitedEUTRANCellInformation, LastVisitedEUTRANCellInformation_sequence);
2123
2124   return offset;
2125 }
2126
2127
2128
2129 static int
2130 dissect_x2ap_LastVisitedUTRANCellInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2131   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2132                                        NO_BOUND, NO_BOUND, FALSE, NULL);
2133
2134   return offset;
2135 }
2136
2137
2138
2139 static int
2140 dissect_x2ap_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2141   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2142
2143   return offset;
2144 }
2145
2146
2147 static const value_string x2ap_LastVisitedGERANCellInformation_vals[] = {
2148   {   0, "undefined" },
2149   { 0, NULL }
2150 };
2151
2152 static const per_choice_t LastVisitedGERANCellInformation_choice[] = {
2153   {   0, &hf_x2ap_undefined      , ASN1_EXTENSION_ROOT    , dissect_x2ap_NULL },
2154   { 0, NULL, 0, NULL }
2155 };
2156
2157 static int
2158 dissect_x2ap_LastVisitedGERANCellInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2159   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2160                                  ett_x2ap_LastVisitedGERANCellInformation, LastVisitedGERANCellInformation_choice,
2161                                  NULL);
2162
2163   return offset;
2164 }
2165
2166
2167 static const value_string x2ap_LastVisitedCell_Item_vals[] = {
2168   {   0, "e-UTRAN-Cell" },
2169   {   1, "uTRAN-Cell" },
2170   {   2, "gERAN-Cell" },
2171   { 0, NULL }
2172 };
2173
2174 static const per_choice_t LastVisitedCell_Item_choice[] = {
2175   {   0, &hf_x2ap_e_UTRAN_Cell   , ASN1_EXTENSION_ROOT    , dissect_x2ap_LastVisitedEUTRANCellInformation },
2176   {   1, &hf_x2ap_uTRAN_Cell     , ASN1_EXTENSION_ROOT    , dissect_x2ap_LastVisitedUTRANCellInformation },
2177   {   2, &hf_x2ap_gERAN_Cell     , ASN1_EXTENSION_ROOT    , dissect_x2ap_LastVisitedGERANCellInformation },
2178   { 0, NULL, 0, NULL }
2179 };
2180
2181 static int
2182 dissect_x2ap_LastVisitedCell_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2183   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2184                                  ett_x2ap_LastVisitedCell_Item, LastVisitedCell_Item_choice,
2185                                  NULL);
2186
2187   return offset;
2188 }
2189
2190
2191 static const value_string x2ap_ReportArea_vals[] = {
2192   {   0, "ecgi" },
2193   { 0, NULL }
2194 };
2195
2196
2197 static int
2198 dissect_x2ap_ReportArea(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2199   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2200                                      1, NULL, TRUE, 0, NULL);
2201
2202   return offset;
2203 }
2204
2205
2206 static const per_sequence_t LocationReportingInformation_sequence[] = {
2207   { &hf_x2ap_eventType      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EventType },
2208   { &hf_x2ap_reportArea     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ReportArea },
2209   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2210   { NULL, 0, 0, NULL }
2211 };
2212
2213 static int
2214 dissect_x2ap_LocationReportingInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2215   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2216                                    ett_x2ap_LocationReportingInformation, LocationReportingInformation_sequence);
2217
2218   return offset;
2219 }
2220
2221
2222
2223 static int
2224 dissect_x2ap_Measurement_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2225   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2226                                                             1U, 4095U, NULL, TRUE);
2227
2228   return offset;
2229 }
2230
2231
2232
2233 static int
2234 dissect_x2ap_INTEGER_M20_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2235   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2236                                                             -20, 20U, NULL, FALSE);
2237
2238   return offset;
2239 }
2240
2241
2242 static const per_sequence_t MobilityParametersModificationRange_sequence[] = {
2243   { &hf_x2ap_handoverTriggerChangeLowerLimit, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_M20_20 },
2244   { &hf_x2ap_handoverTriggerChangeUpperLimit, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_M20_20 },
2245   { NULL, 0, 0, NULL }
2246 };
2247
2248 static int
2249 dissect_x2ap_MobilityParametersModificationRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2250   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2251                                    ett_x2ap_MobilityParametersModificationRange, MobilityParametersModificationRange_sequence);
2252
2253   return offset;
2254 }
2255
2256
2257 static const per_sequence_t MobilityParametersInformation_sequence[] = {
2258   { &hf_x2ap_handoverTriggerChange, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_M20_20 },
2259   { NULL, 0, 0, NULL }
2260 };
2261
2262 static int
2263 dissect_x2ap_MobilityParametersInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2264   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2265                                    ett_x2ap_MobilityParametersInformation, MobilityParametersInformation_sequence);
2266
2267   return offset;
2268 }
2269
2270
2271
2272 static int
2273 dissect_x2ap_PCI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2274   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2275                                                             0U, 503U, NULL, TRUE);
2276
2277   return offset;
2278 }
2279
2280
2281 static const per_sequence_t Neighbour_Information_item_sequence[] = {
2282   { &hf_x2ap_eCGI           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ECGI },
2283   { &hf_x2ap_pCI            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PCI },
2284   { &hf_x2ap_eARFCN         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EARFCN },
2285   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2286   { NULL, 0, 0, NULL }
2287 };
2288
2289 static int
2290 dissect_x2ap_Neighbour_Information_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2291   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2292                                    ett_x2ap_Neighbour_Information_item, Neighbour_Information_item_sequence);
2293
2294   return offset;
2295 }
2296
2297
2298 static const per_sequence_t Neighbour_Information_sequence_of[1] = {
2299   { &hf_x2ap_Neighbour_Information_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_Neighbour_Information_item },
2300 };
2301
2302 static int
2303 dissect_x2ap_Neighbour_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2304   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2305                                                   ett_x2ap_Neighbour_Information, Neighbour_Information_sequence_of,
2306                                                   0, maxnoofNeighbours, FALSE);
2307
2308   return offset;
2309 }
2310
2311
2312 static const value_string x2ap_Number_of_Antennaports_vals[] = {
2313   {   0, "an1" },
2314   {   1, "an2" },
2315   {   2, "an4" },
2316   { 0, NULL }
2317 };
2318
2319
2320 static int
2321 dissect_x2ap_Number_of_Antennaports(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2322   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2323                                      3, NULL, TRUE, 0, NULL);
2324
2325   return offset;
2326 }
2327
2328
2329
2330 static int
2331 dissect_x2ap_INTEGER_0_837(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2332   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2333                                                             0U, 837U, NULL, FALSE);
2334
2335   return offset;
2336 }
2337
2338
2339
2340 static int
2341 dissect_x2ap_INTEGER_0_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2342   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2343                                                             0U, 15U, NULL, FALSE);
2344
2345   return offset;
2346 }
2347
2348
2349
2350 static int
2351 dissect_x2ap_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2352   offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2353
2354   return offset;
2355 }
2356
2357
2358
2359 static int
2360 dissect_x2ap_INTEGER_0_94(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2361   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2362                                                             0U, 94U, NULL, FALSE);
2363
2364   return offset;
2365 }
2366
2367
2368
2369 static int
2370 dissect_x2ap_INTEGER_0_63(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2371   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2372                                                             0U, 63U, NULL, FALSE);
2373
2374   return offset;
2375 }
2376
2377
2378 static const per_sequence_t PRACH_Configuration_sequence[] = {
2379   { &hf_x2ap_rootSequenceIndex, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_0_837 },
2380   { &hf_x2ap_zeroCorrelationIndex, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_0_15 },
2381   { &hf_x2ap_highSpeedFlag  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BOOLEAN },
2382   { &hf_x2ap_prach_FreqOffset, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_0_94 },
2383   { &hf_x2ap_prach_ConfigIndex, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_INTEGER_0_63 },
2384   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2385   { NULL, 0, 0, NULL }
2386 };
2387
2388 static int
2389 dissect_x2ap_PRACH_Configuration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2390   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2391                                    ett_x2ap_PRACH_Configuration, PRACH_Configuration_sequence);
2392
2393   return offset;
2394 }
2395
2396
2397
2398 static int
2399 dissect_x2ap_ReceiveStatusofULPDCPSDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2400   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2401                                      4096, 4096, FALSE, NULL);
2402
2403   return offset;
2404 }
2405
2406
2407 static const value_string x2ap_Registration_Request_vals[] = {
2408   {   0, "start" },
2409   {   1, "stop" },
2410   { 0, NULL }
2411 };
2412
2413
2414 static int
2415 dissect_x2ap_Registration_Request(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2416   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2417                                      2, NULL, TRUE, 0, NULL);
2418
2419   return offset;
2420 }
2421
2422
2423
2424 static int
2425 dissect_x2ap_BIT_STRING_SIZE_6_110_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2426   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2427                                      6, 110, TRUE, NULL);
2428
2429   return offset;
2430 }
2431
2432
2433 static const value_string x2ap_RNTP_Threshold_vals[] = {
2434   {   0, "minusInfinity" },
2435   {   1, "minusEleven" },
2436   {   2, "minusTen" },
2437   {   3, "minusNine" },
2438   {   4, "minusEight" },
2439   {   5, "minusSeven" },
2440   {   6, "minusSix" },
2441   {   7, "minusFive" },
2442   {   8, "minusFour" },
2443   {   9, "minusThree" },
2444   {  10, "minusTwo" },
2445   {  11, "minusOne" },
2446   {  12, "zero" },
2447   {  13, "one" },
2448   {  14, "two" },
2449   {  15, "three" },
2450   { 0, NULL }
2451 };
2452
2453
2454 static int
2455 dissect_x2ap_RNTP_Threshold(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2456   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2457                                      16, NULL, TRUE, 0, NULL);
2458
2459   return offset;
2460 }
2461
2462
2463 static const value_string x2ap_T_numberOfCellSpecificAntennaPorts_vals[] = {
2464   {   0, "one" },
2465   {   1, "two" },
2466   {   2, "four" },
2467   { 0, NULL }
2468 };
2469
2470
2471 static int
2472 dissect_x2ap_T_numberOfCellSpecificAntennaPorts(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2473   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2474                                      3, NULL, TRUE, 0, NULL);
2475
2476   return offset;
2477 }
2478
2479
2480
2481 static int
2482 dissect_x2ap_INTEGER_0_3_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2483   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2484                                                             0U, 3U, NULL, TRUE);
2485
2486   return offset;
2487 }
2488
2489
2490
2491 static int
2492 dissect_x2ap_INTEGER_0_4_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2493   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2494                                                             0U, 4U, NULL, TRUE);
2495
2496   return offset;
2497 }
2498
2499
2500 static const per_sequence_t RelativeNarrowbandTxPower_sequence[] = {
2501   { &hf_x2ap_rNTP_PerPRB    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BIT_STRING_SIZE_6_110_ },
2502   { &hf_x2ap_rNTP_Threshold , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_RNTP_Threshold },
2503   { &hf_x2ap_numberOfCellSpecificAntennaPorts, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_T_numberOfCellSpecificAntennaPorts },
2504   { &hf_x2ap_p_B            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_0_3_ },
2505   { &hf_x2ap_pDCCH_InterferenceImpact, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_INTEGER_0_4_ },
2506   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2507   { NULL, 0, 0, NULL }
2508 };
2509
2510 static int
2511 dissect_x2ap_RelativeNarrowbandTxPower(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2512   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2513                                    ett_x2ap_RelativeNarrowbandTxPower, RelativeNarrowbandTxPower_sequence);
2514
2515   return offset;
2516 }
2517
2518
2519
2520 static int
2521 dissect_x2ap_ReportCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2522   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2523                                      32, 32, FALSE, NULL);
2524
2525   return offset;
2526 }
2527
2528
2529
2530 static int
2531 dissect_x2ap_RRC_Context(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2532 #line 136 "x2ap.cnf"
2533   tvbuff_t *parameter_tvb=NULL;
2534   gint32 start_offset;
2535   
2536   start_offset = offset;
2537   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2538                                        NO_BOUND, NO_BOUND, FALSE, NULL);
2539
2540   parameter_tvb = tvb_new_subset(tvb, start_offset>>3, -1, -1); 
2541   if (!parameter_tvb)
2542     return offset;
2543   dissect_lte_rrc_HandoverCommand_PDU(parameter_tvb, actx->pinfo, tree);
2544
2545
2546
2547   return offset;
2548 }
2549
2550
2551
2552 static int
2553 dissect_x2ap_DL_GBR_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2554   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2555                                                             0U, 100U, NULL, FALSE);
2556
2557   return offset;
2558 }
2559
2560
2561
2562 static int
2563 dissect_x2ap_UL_GBR_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2564   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2565                                                             0U, 100U, NULL, FALSE);
2566
2567   return offset;
2568 }
2569
2570
2571
2572 static int
2573 dissect_x2ap_DL_non_GBR_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2574   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2575                                                             0U, 100U, NULL, FALSE);
2576
2577   return offset;
2578 }
2579
2580
2581
2582 static int
2583 dissect_x2ap_UL_non_GBR_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2584   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2585                                                             0U, 100U, NULL, FALSE);
2586
2587   return offset;
2588 }
2589
2590
2591
2592 static int
2593 dissect_x2ap_DL_Total_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2594   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2595                                                             0U, 100U, NULL, FALSE);
2596
2597   return offset;
2598 }
2599
2600
2601
2602 static int
2603 dissect_x2ap_UL_Total_PRB_usage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2604   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2605                                                             0U, 100U, NULL, FALSE);
2606
2607   return offset;
2608 }
2609
2610
2611 static const per_sequence_t RadioResourceStatus_sequence[] = {
2612   { &hf_x2ap_dL_GBR_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_DL_GBR_PRB_usage },
2613   { &hf_x2ap_uL_GBR_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_GBR_PRB_usage },
2614   { &hf_x2ap_dL_non_GBR_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_DL_non_GBR_PRB_usage },
2615   { &hf_x2ap_uL_non_GBR_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_non_GBR_PRB_usage },
2616   { &hf_x2ap_dL_Total_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_DL_Total_PRB_usage },
2617   { &hf_x2ap_uL_Total_PRB_usage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_Total_PRB_usage },
2618   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2619   { NULL, 0, 0, NULL }
2620 };
2621
2622 static int
2623 dissect_x2ap_RadioResourceStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2624   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2625                                    ett_x2ap_RadioResourceStatus, RadioResourceStatus_sequence);
2626
2627   return offset;
2628 }
2629
2630
2631 static const per_sequence_t S1TNLLoadIndicator_sequence[] = {
2632   { &hf_x2ap_dLS1TNLLoadIndicator, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_LoadIndicator },
2633   { &hf_x2ap_uLS1TNLLoadIndicator, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_LoadIndicator },
2634   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2635   { NULL, 0, 0, NULL }
2636 };
2637
2638 static int
2639 dissect_x2ap_S1TNLLoadIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2640   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2641                                    ett_x2ap_S1TNLLoadIndicator, S1TNLLoadIndicator_sequence);
2642
2643   return offset;
2644 }
2645
2646
2647 static const per_sequence_t ServedCell_Information_sequence[] = {
2648   { &hf_x2ap_pCI            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_PCI },
2649   { &hf_x2ap_cellId         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ECGI },
2650   { &hf_x2ap_tAC            , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_TAC },
2651   { &hf_x2ap_broadcastPLMNs , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BroadcastPLMNs_Item },
2652   { &hf_x2ap_eUTRA_Mode_Info, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EUTRA_Mode_Info },
2653   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2654   { NULL, 0, 0, NULL }
2655 };
2656
2657 static int
2658 dissect_x2ap_ServedCell_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2659   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2660                                    ett_x2ap_ServedCell_Information, ServedCell_Information_sequence);
2661
2662   return offset;
2663 }
2664
2665
2666 static const per_sequence_t ServedCells_item_sequence[] = {
2667   { &hf_x2ap_servedCellInfo , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ServedCell_Information },
2668   { &hf_x2ap_neighbour_Info , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_Neighbour_Information },
2669   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2670   { NULL, 0, 0, NULL }
2671 };
2672
2673 static int
2674 dissect_x2ap_ServedCells_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2675   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2676                                    ett_x2ap_ServedCells_item, ServedCells_item_sequence);
2677
2678   return offset;
2679 }
2680
2681
2682 static const per_sequence_t ServedCells_sequence_of[1] = {
2683   { &hf_x2ap_ServedCells_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ServedCells_item },
2684 };
2685
2686 static int
2687 dissect_x2ap_ServedCells(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2688   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2689                                                   ett_x2ap_ServedCells, ServedCells_sequence_of,
2690                                                   1, maxCellineNB, FALSE);
2691
2692   return offset;
2693 }
2694
2695
2696
2697 static int
2698 dissect_x2ap_ShortMAC_I(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2699   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2700                                      16, 16, FALSE, NULL);
2701
2702   return offset;
2703 }
2704
2705
2706 static const value_string x2ap_SRVCCOperationPossible_vals[] = {
2707   {   0, "possible" },
2708   { 0, NULL }
2709 };
2710
2711
2712 static int
2713 dissect_x2ap_SRVCCOperationPossible(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2714   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2715                                      1, NULL, TRUE, 0, NULL);
2716
2717   return offset;
2718 }
2719
2720
2721
2722 static int
2723 dissect_x2ap_SubscriberProfileIDforRFP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2724   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2725                                                             1U, 256U, NULL, FALSE);
2726
2727   return offset;
2728 }
2729
2730
2731
2732 static int
2733 dissect_x2ap_TargeteNBtoSource_eNBTransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2734 #line 91 "x2ap.cnf"
2735   tvbuff_t *parameter_tvb=NULL;
2736   
2737   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2738                                        NO_BOUND, NO_BOUND, FALSE, &parameter_tvb);
2739
2740         if (!parameter_tvb)
2741                 return offset;
2742           
2743      dissect_lte_rrc_HandoverCommand_PDU(parameter_tvb, actx->pinfo, tree);
2744         
2745
2746
2747   return offset;
2748 }
2749
2750
2751 static const value_string x2ap_TimeToWait_vals[] = {
2752   {   0, "v1s" },
2753   {   1, "v2s" },
2754   {   2, "v5s" },
2755   {   3, "v10s" },
2756   {   4, "v20s" },
2757   {   5, "v60s" },
2758   { 0, NULL }
2759 };
2760
2761
2762 static int
2763 dissect_x2ap_TimeToWait(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2764   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2765                                      6, NULL, TRUE, 0, NULL);
2766
2767   return offset;
2768 }
2769
2770
2771 static const value_string x2ap_TraceDepth_vals[] = {
2772   {   0, "minimum" },
2773   {   1, "medium" },
2774   {   2, "maximum" },
2775   {   3, "minimumWithoutVendorSpecificExtension" },
2776   {   4, "mediumWithoutVendorSpecificExtension" },
2777   {   5, "maximumWithoutVendorSpecificExtension" },
2778   { 0, NULL }
2779 };
2780
2781
2782 static int
2783 dissect_x2ap_TraceDepth(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2784   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2785                                      6, NULL, TRUE, 0, NULL);
2786
2787   return offset;
2788 }
2789
2790
2791
2792 static int
2793 dissect_x2ap_TraceCollectionEntityIPAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2794   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2795                                      1, 160, TRUE, NULL);
2796
2797   return offset;
2798 }
2799
2800
2801 static const per_sequence_t TraceActivation_sequence[] = {
2802   { &hf_x2ap_eUTRANTraceID  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EUTRANTraceID },
2803   { &hf_x2ap_interfacesToTrace, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_InterfacesToTrace },
2804   { &hf_x2ap_traceDepth     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_TraceDepth },
2805   { &hf_x2ap_traceCollectionEntityIPAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_TraceCollectionEntityIPAddress },
2806   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2807   { NULL, 0, 0, NULL }
2808 };
2809
2810 static int
2811 dissect_x2ap_TraceActivation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2812   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2813                                    ett_x2ap_TraceActivation, TraceActivation_sequence);
2814
2815   return offset;
2816 }
2817
2818
2819 static const per_sequence_t UE_HistoryInformation_sequence_of[1] = {
2820   { &hf_x2ap_UE_HistoryInformation_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_LastVisitedCell_Item },
2821 };
2822
2823 static int
2824 dissect_x2ap_UE_HistoryInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2825   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2826                                                   ett_x2ap_UE_HistoryInformation, UE_HistoryInformation_sequence_of,
2827                                                   1, maxnoofCells, FALSE);
2828
2829   return offset;
2830 }
2831
2832
2833
2834 static int
2835 dissect_x2ap_UE_S1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2836   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2837                                                             0U, 4294967295U, NULL, FALSE);
2838
2839   return offset;
2840 }
2841
2842
2843
2844 static int
2845 dissect_x2ap_UE_X2AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2846   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2847                                                             0U, 4095U, NULL, FALSE);
2848
2849   return offset;
2850 }
2851
2852
2853 static const per_sequence_t UEAggregateMaximumBitRate_sequence[] = {
2854   { &hf_x2ap_uEaggregateMaximumBitRateDownlink, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
2855   { &hf_x2ap_uEaggregateMaximumBitRateUplink, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_BitRate },
2856   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2857   { NULL, 0, 0, NULL }
2858 };
2859
2860 static int
2861 dissect_x2ap_UEAggregateMaximumBitRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2862   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2863                                    ett_x2ap_UEAggregateMaximumBitRate, UEAggregateMaximumBitRate_sequence);
2864
2865   return offset;
2866 }
2867
2868
2869 static const per_sequence_t UESecurityCapabilities_sequence[] = {
2870   { &hf_x2ap_encryptionAlgorithms, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_EncryptionAlgorithms },
2871   { &hf_x2ap_integrityProtectionAlgorithms, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_IntegrityProtectionAlgorithms },
2872   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2873   { NULL, 0, 0, NULL }
2874 };
2875
2876 static int
2877 dissect_x2ap_UESecurityCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2878   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2879                                    ett_x2ap_UESecurityCapabilities, UESecurityCapabilities_sequence);
2880
2881   return offset;
2882 }
2883
2884
2885 static const value_string x2ap_UL_InterferenceOverloadIndication_Item_vals[] = {
2886   {   0, "high-interference" },
2887   {   1, "medium-interference" },
2888   {   2, "low-interference" },
2889   { 0, NULL }
2890 };
2891
2892
2893 static int
2894 dissect_x2ap_UL_InterferenceOverloadIndication_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2895   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2896                                      3, NULL, TRUE, 0, NULL);
2897
2898   return offset;
2899 }
2900
2901
2902 static const per_sequence_t UL_InterferenceOverloadIndication_sequence_of[1] = {
2903   { &hf_x2ap_UL_InterferenceOverloadIndication_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_InterferenceOverloadIndication_Item },
2904 };
2905
2906 static int
2907 dissect_x2ap_UL_InterferenceOverloadIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2908   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2909                                                   ett_x2ap_UL_InterferenceOverloadIndication, UL_InterferenceOverloadIndication_sequence_of,
2910                                                   1, maxnoofPRBs, FALSE);
2911
2912   return offset;
2913 }
2914
2915
2916
2917 static int
2918 dissect_x2ap_UL_HighInterferenceIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2919   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2920                                      1, 110, TRUE, NULL);
2921
2922   return offset;
2923 }
2924
2925
2926 static const per_sequence_t UL_HighInterferenceIndicationInfo_Item_sequence[] = {
2927   { &hf_x2ap_target_Cell_ID , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ECGI },
2928   { &hf_x2ap_ul_interferenceindication, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_HighInterferenceIndication },
2929   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2930   { NULL, 0, 0, NULL }
2931 };
2932
2933 static int
2934 dissect_x2ap_UL_HighInterferenceIndicationInfo_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2935   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2936                                    ett_x2ap_UL_HighInterferenceIndicationInfo_Item, UL_HighInterferenceIndicationInfo_Item_sequence);
2937
2938   return offset;
2939 }
2940
2941
2942 static const per_sequence_t UL_HighInterferenceIndicationInfo_sequence_of[1] = {
2943   { &hf_x2ap_UL_HighInterferenceIndicationInfo_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_UL_HighInterferenceIndicationInfo_Item },
2944 };
2945
2946 static int
2947 dissect_x2ap_UL_HighInterferenceIndicationInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2948   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2949                                                   ett_x2ap_UL_HighInterferenceIndicationInfo, UL_HighInterferenceIndicationInfo_sequence_of,
2950                                                   1, maxCellineNB, FALSE);
2951
2952   return offset;
2953 }
2954
2955
2956 static const per_sequence_t HandoverRequest_sequence[] = {
2957   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
2958   { NULL, 0, 0, NULL }
2959 };
2960
2961 static int
2962 dissect_x2ap_HandoverRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2963   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2964                                    ett_x2ap_HandoverRequest, HandoverRequest_sequence);
2965
2966   return offset;
2967 }
2968
2969
2970 static const per_sequence_t E_RABs_ToBeSetup_List_sequence_of[1] = {
2971   { &hf_x2ap_E_RABs_ToBeSetup_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Single_Container },
2972 };
2973
2974 static int
2975 dissect_x2ap_E_RABs_ToBeSetup_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2976   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2977                                                   ett_x2ap_E_RABs_ToBeSetup_List, E_RABs_ToBeSetup_List_sequence_of,
2978                                                   1, maxnoofBearers, FALSE);
2979
2980   return offset;
2981 }
2982
2983
2984 static const per_sequence_t UE_ContextInformation_sequence[] = {
2985   { &hf_x2ap_mME_UE_S1AP_ID , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UE_S1AP_ID },
2986   { &hf_x2ap_uESecurityCapabilities, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UESecurityCapabilities },
2987   { &hf_x2ap_aS_SecurityInformation, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_AS_SecurityInformation },
2988   { &hf_x2ap_uEaggregateMaximumBitRate, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_UEAggregateMaximumBitRate },
2989   { &hf_x2ap_subscriberProfileIDforRFP, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_SubscriberProfileIDforRFP },
2990   { &hf_x2ap_e_RABs_ToBeSetup_List, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RABs_ToBeSetup_List },
2991   { &hf_x2ap_rRC_Context    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_RRC_Context },
2992   { &hf_x2ap_handoverRestrictionList, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_HandoverRestrictionList },
2993   { &hf_x2ap_locationReportingInformation, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_LocationReportingInformation },
2994   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
2995   { NULL, 0, 0, NULL }
2996 };
2997
2998 static int
2999 dissect_x2ap_UE_ContextInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3000   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3001                                    ett_x2ap_UE_ContextInformation, UE_ContextInformation_sequence);
3002
3003   return offset;
3004 }
3005
3006
3007 static const per_sequence_t E_RABs_ToBeSetup_Item_sequence[] = {
3008   { &hf_x2ap_e_RAB_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RAB_ID },
3009   { &hf_x2ap_e_RAB_Level_QoS_Parameters, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RAB_Level_QoS_Parameters },
3010   { &hf_x2ap_dL_Forwarding  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_DL_Forwarding },
3011   { &hf_x2ap_uL_GTPtunnelEndpoint, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_GTPtunnelEndpoint },
3012   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
3013   { NULL, 0, 0, NULL }
3014 };
3015
3016 static int
3017 dissect_x2ap_E_RABs_ToBeSetup_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3018   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3019                                    ett_x2ap_E_RABs_ToBeSetup_Item, E_RABs_ToBeSetup_Item_sequence);
3020
3021   return offset;
3022 }
3023
3024
3025 static const per_sequence_t HandoverRequestAcknowledge_sequence[] = {
3026   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3027   { NULL, 0, 0, NULL }
3028 };
3029
3030 static int
3031 dissect_x2ap_HandoverRequestAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3032   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3033                                    ett_x2ap_HandoverRequestAcknowledge, HandoverRequestAcknowledge_sequence);
3034
3035   return offset;
3036 }
3037
3038
3039 static const per_sequence_t E_RABs_Admitted_List_sequence_of[1] = {
3040   { &hf_x2ap_E_RABs_Admitted_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Single_Container },
3041 };
3042
3043 static int
3044 dissect_x2ap_E_RABs_Admitted_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3045   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
3046                                                   ett_x2ap_E_RABs_Admitted_List, E_RABs_Admitted_List_sequence_of,
3047                                                   1, maxnoofBearers, FALSE);
3048
3049   return offset;
3050 }
3051
3052
3053 static const per_sequence_t E_RABs_Admitted_Item_sequence[] = {
3054   { &hf_x2ap_e_RAB_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RAB_ID },
3055   { &hf_x2ap_uL_GTP_TunnelEndpoint, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_GTPtunnelEndpoint },
3056   { &hf_x2ap_dL_GTP_TunnelEndpoint, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_GTPtunnelEndpoint },
3057   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
3058   { NULL, 0, 0, NULL }
3059 };
3060
3061 static int
3062 dissect_x2ap_E_RABs_Admitted_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3063   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3064                                    ett_x2ap_E_RABs_Admitted_Item, E_RABs_Admitted_Item_sequence);
3065
3066   return offset;
3067 }
3068
3069
3070 static const per_sequence_t HandoverPreparationFailure_sequence[] = {
3071   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3072   { NULL, 0, 0, NULL }
3073 };
3074
3075 static int
3076 dissect_x2ap_HandoverPreparationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3077   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3078                                    ett_x2ap_HandoverPreparationFailure, HandoverPreparationFailure_sequence);
3079
3080   return offset;
3081 }
3082
3083
3084 static const per_sequence_t HandoverReport_sequence[] = {
3085   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3086   { NULL, 0, 0, NULL }
3087 };
3088
3089 static int
3090 dissect_x2ap_HandoverReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3091   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3092                                    ett_x2ap_HandoverReport, HandoverReport_sequence);
3093
3094   return offset;
3095 }
3096
3097
3098 static const per_sequence_t SNStatusTransfer_sequence[] = {
3099   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3100   { NULL, 0, 0, NULL }
3101 };
3102
3103 static int
3104 dissect_x2ap_SNStatusTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3105   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3106                                    ett_x2ap_SNStatusTransfer, SNStatusTransfer_sequence);
3107
3108   return offset;
3109 }
3110
3111
3112 static const per_sequence_t E_RABs_SubjectToStatusTransfer_List_sequence_of[1] = {
3113   { &hf_x2ap_E_RABs_SubjectToStatusTransfer_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Single_Container },
3114 };
3115
3116 static int
3117 dissect_x2ap_E_RABs_SubjectToStatusTransfer_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3118   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
3119                                                   ett_x2ap_E_RABs_SubjectToStatusTransfer_List, E_RABs_SubjectToStatusTransfer_List_sequence_of,
3120                                                   1, maxnoofBearers, FALSE);
3121
3122   return offset;
3123 }
3124
3125
3126 static const per_sequence_t E_RABs_SubjectToStatusTransfer_Item_sequence[] = {
3127   { &hf_x2ap_e_RAB_ID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_E_RAB_ID },
3128   { &hf_x2ap_receiveStatusofULPDCPSDUs, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ReceiveStatusofULPDCPSDUs },
3129   { &hf_x2ap_uL_COUNTvalue  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_COUNTvalue },
3130   { &hf_x2ap_dL_COUNTvalue  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_COUNTvalue },
3131   { &hf_x2ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x2ap_ProtocolExtensionContainer },
3132   { NULL, 0, 0, NULL }
3133 };
3134
3135 static int
3136 dissect_x2ap_E_RABs_SubjectToStatusTransfer_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3137   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3138                                    ett_x2ap_E_RABs_SubjectToStatusTransfer_Item, E_RABs_SubjectToStatusTransfer_Item_sequence);
3139
3140   return offset;
3141 }
3142
3143
3144 static const per_sequence_t UEContextRelease_sequence[] = {
3145   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3146   { NULL, 0, 0, NULL }
3147 };
3148
3149 static int
3150 dissect_x2ap_UEContextRelease(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3151   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3152                                    ett_x2ap_UEContextRelease, UEContextRelease_sequence);
3153
3154   return offset;
3155 }
3156
3157
3158 static const per_sequence_t HandoverCancel_sequence[] = {
3159   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3160   { NULL, 0, 0, NULL }
3161 };
3162
3163 static int
3164 dissect_x2ap_HandoverCancel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3165   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3166                                    ett_x2ap_HandoverCancel, HandoverCancel_sequence);
3167
3168   return offset;
3169 }
3170
3171
3172 static const per_sequence_t ErrorIndication_sequence[] = {
3173   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3174   { NULL, 0, 0, NULL }
3175 };
3176
3177 static int
3178 dissect_x2ap_ErrorIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3179   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3180                                    ett_x2ap_ErrorIndication, ErrorIndication_sequence);
3181
3182   return offset;
3183 }
3184
3185
3186 static const per_sequence_t ResetRequest_sequence[] = {
3187   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3188   { NULL, 0, 0, NULL }
3189 };
3190
3191 static int
3192 dissect_x2ap_ResetRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3193   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3194                                    ett_x2ap_ResetRequest, ResetRequest_sequence);
3195
3196   return offset;
3197 }
3198
3199
3200 static const per_sequence_t ResetResponse_sequence[] = {
3201   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3202   { NULL, 0, 0, NULL }
3203 };
3204
3205 static int
3206 dissect_x2ap_ResetResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3207   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3208                                    ett_x2ap_ResetResponse, ResetResponse_sequence);
3209
3210   return offset;
3211 }
3212
3213
3214 static const per_sequence_t X2SetupRequest_sequence[] = {
3215   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3216   { NULL, 0, 0, NULL }
3217 };
3218
3219 static int
3220 dissect_x2ap_X2SetupRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3221   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3222                                    ett_x2ap_X2SetupRequest, X2SetupRequest_sequence);
3223
3224   return offset;
3225 }
3226
3227
3228 static const per_sequence_t X2SetupResponse_sequence[] = {
3229   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3230   { NULL, 0, 0, NULL }
3231 };
3232
3233 static int
3234 dissect_x2ap_X2SetupResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3235   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3236                                    ett_x2ap_X2SetupResponse, X2SetupResponse_sequence);
3237
3238   return offset;
3239 }
3240
3241
3242 static const per_sequence_t X2SetupFailure_sequence[] = {
3243   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3244   { NULL, 0, 0, NULL }
3245 };
3246
3247 static int
3248 dissect_x2ap_X2SetupFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3249   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3250                                    ett_x2ap_X2SetupFailure, X2SetupFailure_sequence);
3251
3252   return offset;
3253 }
3254
3255
3256 static const per_sequence_t LoadInformation_sequence[] = {
3257   { &hf_x2ap_protocolIEs    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Container },
3258   { NULL, 0, 0, NULL }
3259 };
3260
3261 static int
3262 dissect_x2ap_LoadInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3263   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3264                                    ett_x2ap_LoadInformation, LoadInformation_sequence);
3265
3266   return offset;
3267 }
3268
3269
3270 static const per_sequence_t CellInformation_List_sequence_of[1] = {
3271   { &hf_x2ap_CellInformation_List_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_x2ap_ProtocolIE_Single_Container },
3272 };
3273
3274 static int
3275 dissect_x2ap_CellInformation_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3276   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
3277                                                   ett_x2ap_CellInformation_List, CellInformation_List_sequence_of,
3278                                                   1, maxCellineNB, FALSE);
3279