epan/dissectors/pidl/ C99 drsuapi
[wireshark-sm.git] / epan / dissectors / asn1 / x2ap / packet-x2ap-template.c
blob3541dfc88501f526d3dfe95eef958d9d2d0414d9
1 /* packet-x2ap.c
2 * Routines for dissecting Evolved Universal Terrestrial Radio Access Network (EUTRAN);
3 * X2 Application Protocol (X2AP);
4 * 3GPP TS 36.423 packet dissection
5 * Copyright 2007-2014, Anders Broman <anders.broman@ericsson.com>
6 * Copyright 2016-2024, Pascal Quantin <pascal@wireshark.org>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * SPDX-License-Identifier: GPL-2.0-or-later
14 * Ref:
15 * 3GPP TS 36.423 V18.2.0 (2024-06)
18 #include "config.h"
20 #include <epan/packet.h>
21 #include <epan/tfs.h>
22 #include <epan/asn1.h>
23 #include <epan/prefs.h>
24 #include <epan/sctpppids.h>
25 #include <epan/proto_data.h>
26 #include <epan/tfs.h>
27 #include <epan/unit_strings.h>
28 #include <wsutil/array.h>
30 #include "packet-x2ap.h"
31 #include "packet-per.h"
32 #include "packet-e212.h"
33 #include "packet-lte-rrc.h"
34 #include "packet-nr-rrc.h"
35 #include "packet-ngap.h"
36 #include "packet-ranap.h"
37 #include "packet-ntp.h"
38 #include "packet-s1ap.h"
39 #include "packet-f1ap.h"
40 #include "packet-xnap.h"
42 #ifdef _MSC_VER
43 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
44 #pragma warning(disable:4146)
45 #endif
47 #define PNAME "EUTRAN X2 Application Protocol (X2AP)"
48 #define PSNAME "X2AP"
49 #define PFNAME "x2ap"
51 void proto_register_x2ap(void);
53 /* Dissector will use SCTP PPID 27 or SCTP port. IANA assigned port = 36422 */
54 #define SCTP_PORT_X2AP 36422
56 #include "packet-x2ap-val.h"
58 /* Initialize the protocol and registered fields */
59 static int proto_x2ap;
60 static int hf_x2ap_transportLayerAddressIPv4;
61 static int hf_x2ap_transportLayerAddressIPv6;
62 static int hf_x2ap_ReportCharacteristics_PRBPeriodic;
63 static int hf_x2ap_ReportCharacteristics_TNLLoadIndPeriodic;
64 static int hf_x2ap_ReportCharacteristics_HWLoadIndPeriodic;
65 static int hf_x2ap_ReportCharacteristics_CompositeAvailableCapacityPeriodic;
66 static int hf_x2ap_ReportCharacteristics_ABSStatusPeriodic;
67 static int hf_x2ap_ReportCharacteristics_RSRPMeasurementReportPeriodic;
68 static int hf_x2ap_ReportCharacteristics_CSIReportPeriodic;
69 static int hf_x2ap_ReportCharacteristics_Reserved;
70 static int hf_x2ap_measurementFailedReportCharacteristics_PRBPeriodic;
71 static int hf_x2ap_measurementFailedReportCharacteristics_TNLLoadIndPeriodic;
72 static int hf_x2ap_measurementFailedReportCharacteristics_HWLoadIndPeriodic;
73 static int hf_x2ap_measurementFailedReportCharacteristics_CompositeAvailableCapacityPeriodic;
74 static int hf_x2ap_measurementFailedReportCharacteristics_ABSStatusPeriodic;
75 static int hf_x2ap_measurementFailedReportCharacteristics_RSRPMeasurementReportPeriodic;
76 static int hf_x2ap_measurementFailedReportCharacteristics_CSIReportPeriodic;
77 static int hf_x2ap_measurementFailedReportCharacteristics_Reserved;
78 static int hf_x2ap_eUTRANTraceID_TraceID;
79 static int hf_x2ap_eUTRANTraceID_TraceRecordingSessionReference;
80 static int hf_x2ap_interfacesToTrace_S1_MME;
81 static int hf_x2ap_interfacesToTrace_X2;
82 static int hf_x2ap_interfacesToTrace_Uu;
83 static int hf_x2ap_interfacesToTrace_F1_C;
84 static int hf_x2ap_interfacesToTrace_E1;
85 static int hf_x2ap_interfacesToTrace_Reserved;
86 static int hf_x2ap_traceCollectionEntityIPAddress_IPv4;
87 static int hf_x2ap_traceCollectionEntityIPAddress_IPv6;
88 static int hf_x2ap_encryptionAlgorithms_EEA1;
89 static int hf_x2ap_encryptionAlgorithms_EEA2;
90 static int hf_x2ap_encryptionAlgorithms_EEA3;
91 static int hf_x2ap_encryptionAlgorithms_Reserved;
92 static int hf_x2ap_integrityProtectionAlgorithms_EIA1;
93 static int hf_x2ap_integrityProtectionAlgorithms_EIA2;
94 static int hf_x2ap_integrityProtectionAlgorithms_EIA3;
95 static int hf_x2ap_integrityProtectionAlgorithms_EIA7;
96 static int hf_x2ap_integrityProtectionAlgorithms_Reserved;
97 static int hf_x2ap_measurementsToActivate_M1;
98 static int hf_x2ap_measurementsToActivate_M2;
99 static int hf_x2ap_measurementsToActivate_M3;
100 static int hf_x2ap_measurementsToActivate_M4;
101 static int hf_x2ap_measurementsToActivate_M5;
102 static int hf_x2ap_measurementsToActivate_LoggingM1FromEventTriggered;
103 static int hf_x2ap_measurementsToActivate_M6;
104 static int hf_x2ap_measurementsToActivate_M7;
105 static int hf_x2ap_MDT_Location_Info_GNSS;
106 static int hf_x2ap_MDT_Location_Info_E_CID;
107 static int hf_x2ap_MDT_Location_Info_Reserved;
108 static int hf_x2ap_MDT_transmissionModes_tm1;
109 static int hf_x2ap_MDT_transmissionModes_tm2;
110 static int hf_x2ap_MDT_transmissionModes_tm3;
111 static int hf_x2ap_MDT_transmissionModes_tm4;
112 static int hf_x2ap_MDT_transmissionModes_tm6;
113 static int hf_x2ap_MDT_transmissionModes_tm8;
114 static int hf_x2ap_MDT_transmissionModes_tm9;
115 static int hf_x2ap_MDT_transmissionModes_tm10;
116 static int hf_x2ap_NRencryptionAlgorithms_NEA1;
117 static int hf_x2ap_NRencryptionAlgorithms_NEA2;
118 static int hf_x2ap_NRencryptionAlgorithms_NEA3;
119 static int hf_x2ap_NRencryptionAlgorithms_Reserved;
120 static int hf_x2ap_NRintegrityProtectionAlgorithms_NIA1;
121 static int hf_x2ap_NRintegrityProtectionAlgorithms_NIA2;
122 static int hf_x2ap_NRintegrityProtectionAlgorithms_NIA3;
123 static int hf_x2ap_NRintegrityProtectionAlgorithms_Reserved;
124 static int hf_x2ap_ReportCharacteristics_ENDC_PRBPeriodic;
125 static int hf_x2ap_ReportCharacteristics_ENDC_TNLCapacityIndPeriodic;
126 static int hf_x2ap_ReportCharacteristics_ENDC_CompositeAvailableCapacityPeriodic;
127 static int hf_x2ap_ReportCharacteristics_ENDC_NumberOfActiveUEs;
128 static int hf_x2ap_ReportCharacteristics_ENDC_Reserved;
129 static int hf_x2ap_Registration_Request_ENDC_PDU;
130 static int hf_x2ap_ReportingPeriodicity_ENDC_PDU;
131 static int hf_x2ap_ReportCharacteristics_ENDC_PDU;
132 static int hf_x2ap_rAT_RestrictionInformation_LEO;
133 static int hf_x2ap_rAT_RestrictionInformation_MEO;
134 static int hf_x2ap_rAT_RestrictionInformation_GEO;
135 static int hf_x2ap_rAT_RestrictionInformation_OTHERSAT;
136 static int hf_x2ap_rAT_RestrictionInformation_NR_LEO;
137 static int hf_x2ap_rAT_RestrictionInformation_NR_MEO;
138 static int hf_x2ap_rAT_RestrictionInformation_NR_GEO;
139 static int hf_x2ap_rAT_RestrictionInformation_NR_OTHERSAT;
140 #include "packet-x2ap-hf.c"
142 /* Initialize the subtree pointers */
143 static int ett_x2ap;
144 static int ett_x2ap_TransportLayerAddress;
145 static int ett_x2ap_PLMN_Identity;
146 static int ett_x2ap_TargeteNBtoSource_eNBTransparentContainer;
147 static int ett_x2ap_RRC_Context;
148 static int ett_x2ap_UE_HistoryInformationFromTheUE;
149 static int ett_x2ap_ReportCharacteristics;
150 static int ett_x2ap_measurementFailedReportCharacteristics;
151 static int ett_x2ap_UE_RLF_Report_Container;
152 static int ett_x2ap_UE_RLF_Report_Container_for_extended_bands;
153 static int ett_x2ap_MeNBtoSeNBContainer;
154 static int ett_x2ap_SeNBtoMeNBContainer;
155 static int ett_x2ap_EUTRANTraceID;
156 static int ett_x2ap_InterfacesToTrace;
157 static int ett_x2ap_TraceCollectionEntityIPAddress;
158 static int ett_x2ap_EncryptionAlgorithms;
159 static int ett_x2ap_IntegrityProtectionAlgorithms;
160 static int ett_x2ap_MeasurementsToActivate;
161 static int ett_x2ap_MDT_Location_Info;
162 static int ett_x2ap_transmissionModes;
163 static int ett_x2ap_X2AP_Message;
164 static int ett_x2ap_MeNBtoSgNBContainer;
165 static int ett_x2ap_SgNBtoMeNBContainer;
166 static int ett_x2ap_RRCContainer;
167 static int ett_x2ap_NRencryptionAlgorithms;
168 static int ett_x2ap_NRintegrityProtectionAlgorithms;
169 static int ett_x2ap_measurementTimingConfiguration;
170 static int ett_x2ap_LastVisitedNGRANCellInformation;
171 static int ett_x2ap_LastVisitedUTRANCellInformation;
172 static int ett_x2ap_EndcSONConfigurationTransfer;
173 static int ett_x2ap_EPCHandoverRestrictionListContainer;
174 static int ett_x2ap_NBIoT_RLF_Report_Container;
175 static int ett_x2ap_anchorCarrier_NPRACHConfig;
176 static int ett_x2ap_anchorCarrier_EDT_NPRACHConfig;
177 static int ett_x2ap_anchorCarrier_Format2_NPRACHConfig;
178 static int ett_x2ap_anchorCarrier_Format2_EDT_NPRACHConfig;
179 static int ett_x2ap_non_anchorCarrier_NPRACHConfig;
180 static int ett_x2ap_non_anchorCarrier_Format2_NPRACHConfig;
181 static int ett_x2ap_anchorCarrier_NPRACHConfigTDD;
182 static int ett_x2ap_non_anchorCarrier_NPRACHConfigTDD;
183 static int ett_x2ap_Non_anchorCarrierFrequency;
184 static int ett_x2ap_ReportCharacteristics_ENDC;
185 static int ett_x2ap_TargetCellInNGRAN;
186 static int ett_x2ap_TDDULDLConfigurationCommonNR;
187 static int ett_x2ap_MDT_ConfigurationNR;
188 static int ett_x2ap_NRCellPRACHConfig;
189 static int ett_x2ap_IntendedTDD_DL_ULConfiguration_NR;
190 static int ett_x2ap_UERadioCapability;
191 static int ett_x2ap_LastVisitedPSCell_Item;
192 static int ett_x2ap_NRRAReportContainer;
193 static int ett_x2ap_rAT_RestrictionInformation;
194 static int ett_x2ap_PSCellListContainer;
195 #include "packet-x2ap-ett.c"
197 /* Forward declarations */
198 static int dissect_x2ap_Registration_Request_ENDC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
199 static int dissect_x2ap_ReportCharacteristics_ENDC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
200 static int dissect_x2ap_ReportingPeriodicity_ENDC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
202 typedef enum {
203 RRC_CONTAINER_TYPE_UNKNOWN,
204 RRC_CONTAINER_TYPE_PDCP_C_PDU,
205 RRC_CONTAINER_TYPE_NR_UE_MEAS_REPORT,
206 RRC_CONTAINER_TYPE_FAST_MCG_RECOVERY_SgNB_TO_MeNB,
207 RRC_CONTAINER_TYPE_FAST_MCG_RECOVERY_MeNB_TO_SgNB
208 } rrc_container_type_e;
210 enum{
211 INITIATING_MESSAGE,
212 SUCCESSFUL_OUTCOME,
213 UNSUCCESSFUL_OUTCOME
216 struct x2ap_private_data {
217 uint32_t procedure_code;
218 uint32_t protocol_ie_id;
219 uint32_t message_type;
220 rrc_container_type_e rrc_container_type;
221 e212_number_type_t number_type;
224 enum {
225 X2AP_RRC_CONTEXT_LTE,
226 X2AP_RRC_CONTEXT_NBIOT
229 static const enum_val_t x2ap_rrc_context_vals[] = {
230 {"lte", "LTE", X2AP_RRC_CONTEXT_LTE},
231 {"nb-iot","NB-IoT", X2AP_RRC_CONTEXT_NBIOT},
232 {NULL, NULL, -1}
235 /* Global variables */
236 static int g_x2ap_dissect_rrc_context_as = X2AP_RRC_CONTEXT_LTE;
238 /* Dissector tables */
239 static dissector_table_t x2ap_ies_dissector_table;
240 static dissector_table_t x2ap_extension_dissector_table;
241 static dissector_table_t x2ap_proc_imsg_dissector_table;
242 static dissector_table_t x2ap_proc_sout_dissector_table;
243 static dissector_table_t x2ap_proc_uout_dissector_table;
245 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
246 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
247 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
248 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
249 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
250 static int dissect_X2AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
251 void proto_reg_handoff_x2ap(void);
253 static dissector_handle_t x2ap_handle;
255 static const true_false_string x2ap_tfs_failed_succeeded = {
256 "Failed",
257 "Succeeded"
260 static void
261 x2ap_Time_UE_StayedInCell_EnhancedGranularity_fmt(char *s, uint32_t v)
263 snprintf(s, ITEM_LABEL_LENGTH, "%.1fs", ((float)v)/10);
266 static void
267 x2ap_handoverTriggerChange_fmt(char *s, uint32_t v)
269 snprintf(s, ITEM_LABEL_LENGTH, "%.1fdB (%d)", ((float)v)/2, (int32_t)v);
272 static void
273 x2ap_Threshold_RSRP_fmt(char *s, uint32_t v)
275 snprintf(s, ITEM_LABEL_LENGTH, "%ddBm (%u)", (int32_t)v-140, v);
278 static void
279 x2ap_Threshold_RSRQ_fmt(char *s, uint32_t v)
281 snprintf(s, ITEM_LABEL_LENGTH, "%.1fdB (%u)", ((float)v/2)-20, v);
284 static void
285 x2ap_Packet_LossRate_fmt(char *s, uint32_t v)
287 snprintf(s, ITEM_LABEL_LENGTH, "%.1f %% (%u)", (float)v/10, v);
290 static void
291 x2ap_cho_handover_window_duration_fmt(char *s, uint32_t v)
293 snprintf(s, ITEM_LABEL_LENGTH, "%dms (%u)", v*100, v);
296 static struct x2ap_private_data*
297 x2ap_get_private_data(packet_info *pinfo)
299 struct x2ap_private_data *x2ap_data = (struct x2ap_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_x2ap, 0);
300 if (!x2ap_data) {
301 x2ap_data = wmem_new0(pinfo->pool, struct x2ap_private_data);
302 p_add_proto_data(pinfo->pool, pinfo, proto_x2ap, 0, x2ap_data);
304 return x2ap_data;
307 #include "packet-x2ap-fn.c"
309 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
311 struct x2ap_private_data *x2ap_data = x2ap_get_private_data(pinfo);
313 return (dissector_try_uint_with_data(x2ap_ies_dissector_table, x2ap_data->protocol_ie_id, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
316 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
318 struct x2ap_private_data *x2ap_data = x2ap_get_private_data(pinfo);
320 return (dissector_try_uint_with_data(x2ap_extension_dissector_table, x2ap_data->protocol_ie_id, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
323 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
325 struct x2ap_private_data *x2ap_data = x2ap_get_private_data(pinfo);
327 x2ap_data->message_type = INITIATING_MESSAGE;
328 return (dissector_try_uint_with_data(x2ap_proc_imsg_dissector_table, x2ap_data->procedure_code, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
331 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
333 struct x2ap_private_data *x2ap_data = x2ap_get_private_data(pinfo);
335 x2ap_data->message_type = SUCCESSFUL_OUTCOME;
336 return (dissector_try_uint_with_data(x2ap_proc_sout_dissector_table, x2ap_data->procedure_code, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
339 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
341 struct x2ap_private_data *x2ap_data = x2ap_get_private_data(pinfo);
343 x2ap_data->message_type = UNSUCCESSFUL_OUTCOME;
344 return (dissector_try_uint_with_data(x2ap_proc_uout_dissector_table, x2ap_data->procedure_code, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
347 static int
348 dissect_x2ap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
350 proto_item *x2ap_item;
351 proto_tree *x2ap_tree;
353 /* make entry in the Protocol column on summary display */
354 col_set_str(pinfo->cinfo, COL_PROTOCOL, "X2AP");
355 col_clear_fence(pinfo->cinfo, COL_INFO);
356 col_clear(pinfo->cinfo, COL_INFO);
358 /* create the x2ap protocol tree */
359 x2ap_item = proto_tree_add_item(tree, proto_x2ap, tvb, 0, -1, ENC_NA);
360 x2ap_tree = proto_item_add_subtree(x2ap_item, ett_x2ap);
362 return dissect_X2AP_PDU_PDU(tvb, pinfo, x2ap_tree, data);
365 /*--- proto_register_x2ap -------------------------------------------*/
366 void proto_register_x2ap(void) {
368 /* List of fields */
370 static hf_register_info hf[] = {
371 { &hf_x2ap_transportLayerAddressIPv4,
372 { "transportLayerAddress(IPv4)", "x2ap.transportLayerAddressIPv4",
373 FT_IPv4, BASE_NONE, NULL, 0,
374 NULL, HFILL }},
375 { &hf_x2ap_transportLayerAddressIPv6,
376 { "transportLayerAddress(IPv6)", "x2ap.transportLayerAddressIPv6",
377 FT_IPv6, BASE_NONE, NULL, 0,
378 NULL, HFILL }},
379 { &hf_x2ap_ReportCharacteristics_PRBPeriodic,
380 { "PRBPeriodic", "x2ap.ReportCharacteristics.PRBPeriodic",
381 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x80000000,
382 NULL, HFILL }},
383 { &hf_x2ap_ReportCharacteristics_TNLLoadIndPeriodic,
384 { "TNLLoadIndPeriodic", "x2ap.ReportCharacteristics.TNLLoadIndPeriodic",
385 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x40000000,
386 NULL, HFILL }},
387 { &hf_x2ap_ReportCharacteristics_HWLoadIndPeriodic,
388 { "HWLoadIndPeriodic", "x2ap.ReportCharacteristics.HWLoadIndPeriodic",
389 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x20000000,
390 NULL, HFILL }},
391 { &hf_x2ap_ReportCharacteristics_CompositeAvailableCapacityPeriodic,
392 { "CompositeAvailableCapacityPeriodic", "x2ap.ReportCharacteristics.CompositeAvailableCapacityPeriodic",
393 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x10000000,
394 NULL, HFILL }},
395 { &hf_x2ap_ReportCharacteristics_ABSStatusPeriodic,
396 { "ABSStatusPeriodic", "x2ap.ReportCharacteristics.ABSStatusPeriodic",
397 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x08000000,
398 NULL, HFILL }},
399 { &hf_x2ap_ReportCharacteristics_RSRPMeasurementReportPeriodic,
400 { "RSRPMeasurementReportPeriodic", "x2ap.ReportCharacteristics.RSRPMeasurementReportPeriodic",
401 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x04000000,
402 NULL, HFILL }},
403 { &hf_x2ap_ReportCharacteristics_CSIReportPeriodic,
404 { "CSIReportPeriodic", "x2ap.ReportCharacteristics.CSIReportPeriodic",
405 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x02000000,
406 NULL, HFILL }},
407 { &hf_x2ap_ReportCharacteristics_Reserved,
408 { "Reserved", "x2ap.ReportCharacteristics.Reserved",
409 FT_UINT32, BASE_HEX, NULL, 0x01ffffff,
410 NULL, HFILL }},
411 { &hf_x2ap_measurementFailedReportCharacteristics_PRBPeriodic,
412 { "PRBPeriodic", "x2ap.measurementFailedReportCharacteristics.PRBPeriodic",
413 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x80000000,
414 NULL, HFILL }},
415 { &hf_x2ap_measurementFailedReportCharacteristics_TNLLoadIndPeriodic,
416 { "TNLLoadIndPeriodic", "x2ap.measurementFailedReportCharacteristics.TNLLoadIndPeriodic",
417 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x40000000,
418 NULL, HFILL }},
419 { &hf_x2ap_measurementFailedReportCharacteristics_HWLoadIndPeriodic,
420 { "HWLoadIndPeriodic", "x2ap.measurementFailedReportCharacteristics.HWLoadIndPeriodic",
421 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x20000000,
422 NULL, HFILL }},
423 { &hf_x2ap_measurementFailedReportCharacteristics_CompositeAvailableCapacityPeriodic,
424 { "CompositeAvailableCapacityPeriodic", "x2ap.measurementFailedReportCharacteristics.CompositeAvailableCapacityPeriodic",
425 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x10000000,
426 NULL, HFILL }},
427 { &hf_x2ap_measurementFailedReportCharacteristics_ABSStatusPeriodic,
428 { "ABSStatusPeriodic", "x2ap.measurementFailedReportCharacteristics.ABSStatusPeriodic",
429 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x08000000,
430 NULL, HFILL }},
431 { &hf_x2ap_measurementFailedReportCharacteristics_RSRPMeasurementReportPeriodic,
432 { "RSRPMeasurementReportPeriodic", "x2ap.measurementFailedReportCharacteristics.RSRPMeasurementReportPeriodic",
433 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x04000000,
434 NULL, HFILL }},
435 { &hf_x2ap_measurementFailedReportCharacteristics_CSIReportPeriodic,
436 { "CSIReportPeriodic", "x2ap.measurementFailedReportCharacteristics.CSIReportPeriodic",
437 FT_BOOLEAN, 32, TFS(&x2ap_tfs_failed_succeeded), 0x02000000,
438 NULL, HFILL }},
439 { &hf_x2ap_measurementFailedReportCharacteristics_Reserved,
440 { "Reserved", "x2ap.measurementFailedReportCharacteristics.Reserved",
441 FT_UINT32, BASE_HEX, NULL, 0x01ffffff,
442 NULL, HFILL }},
443 { &hf_x2ap_eUTRANTraceID_TraceID,
444 { "TraceID", "x2ap.eUTRANTraceID.TraceID",
445 FT_UINT24, BASE_HEX, NULL, 0,
446 NULL, HFILL }},
447 { &hf_x2ap_eUTRANTraceID_TraceRecordingSessionReference,
448 { "TraceRecordingSessionReference", "x2ap.eUTRANTraceID.TraceRecordingSessionReference",
449 FT_UINT16, BASE_HEX, NULL, 0,
450 NULL, HFILL }},
451 { &hf_x2ap_interfacesToTrace_S1_MME,
452 { "S1-MME", "x2ap.interfacesToTrace.S1_MME",
453 FT_BOOLEAN, 8, TFS(&tfs_should_be_traced_should_not_be_traced), 0x80,
454 NULL, HFILL }},
455 { &hf_x2ap_interfacesToTrace_X2,
456 { "X2", "x2ap.interfacesToTrace.X2",
457 FT_BOOLEAN, 8, TFS(&tfs_should_be_traced_should_not_be_traced), 0x40,
458 NULL, HFILL }},
459 { &hf_x2ap_interfacesToTrace_Uu,
460 { "Uu", "x2ap.interfacesToTrace.Uu",
461 FT_BOOLEAN, 8, TFS(&tfs_should_be_traced_should_not_be_traced), 0x20,
462 NULL, HFILL }},
463 { &hf_x2ap_interfacesToTrace_F1_C,
464 { "F1-C", "x2ap.interfacesToTrace.F1_C",
465 FT_BOOLEAN, 8, TFS(&tfs_should_be_traced_should_not_be_traced), 0x10,
466 NULL, HFILL }},
467 { &hf_x2ap_interfacesToTrace_E1,
468 { "E1", "x2ap.interfacesToTrace.E1",
469 FT_BOOLEAN, 8, TFS(&tfs_should_be_traced_should_not_be_traced), 0x08,
470 NULL, HFILL }},
471 { &hf_x2ap_interfacesToTrace_Reserved,
472 { "Reserved", "x2ap.interfacesToTrace.Reserved",
473 FT_UINT8, BASE_HEX, NULL, 0x07,
474 NULL, HFILL }},
475 { &hf_x2ap_traceCollectionEntityIPAddress_IPv4,
476 { "IPv4", "x2ap.traceCollectionEntityIPAddress.IPv4",
477 FT_IPv4, BASE_NONE, NULL, 0,
478 NULL, HFILL }},
479 { &hf_x2ap_traceCollectionEntityIPAddress_IPv6,
480 { "IPv6", "x2ap.traceCollectionEntityIPAddress.IPv6",
481 FT_IPv6, BASE_NONE, NULL, 0,
482 NULL, HFILL }},
483 { &hf_x2ap_encryptionAlgorithms_EEA1,
484 { "128-EEA1", "x2ap.encryptionAlgorithms.EEA1",
485 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
486 NULL, HFILL }},
487 { &hf_x2ap_encryptionAlgorithms_EEA2,
488 { "128-EEA2", "x2ap.encryptionAlgorithms.EEA2",
489 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000,
490 NULL, HFILL }},
491 { &hf_x2ap_encryptionAlgorithms_EEA3,
492 { "128-EEA3", "x2ap.encryptionAlgorithms.EEA3",
493 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000,
494 NULL, HFILL }},
495 { &hf_x2ap_encryptionAlgorithms_Reserved,
496 { "Reserved", "x2ap.encryptionAlgorithms.Reserved",
497 FT_UINT16, BASE_HEX, NULL, 0x1fff,
498 NULL, HFILL }},
499 { &hf_x2ap_integrityProtectionAlgorithms_EIA1,
500 { "128-EIA1", "x2ap.integrityProtectionAlgorithms.EIA1",
501 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
502 NULL, HFILL }},
503 { &hf_x2ap_integrityProtectionAlgorithms_EIA2,
504 { "128-EIA2", "x2ap.integrityProtectionAlgorithms.EIA2",
505 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000,
506 NULL, HFILL }},
507 { &hf_x2ap_integrityProtectionAlgorithms_EIA3,
508 { "128-EIA3", "x2ap.integrityProtectionAlgorithms.EIA3",
509 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000,
510 NULL, HFILL }},
511 { &hf_x2ap_integrityProtectionAlgorithms_EIA7,
512 { "EIA7", "x2ap.integrityProtectionAlgorithms.EIA7",
513 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0200,
514 NULL, HFILL }},
515 { &hf_x2ap_integrityProtectionAlgorithms_Reserved,
516 { "Reserved", "x2ap.integrityProtectionAlgorithms.Reserved",
517 FT_UINT16, BASE_HEX, NULL, 0x1dff,
518 NULL, HFILL }},
519 { &hf_x2ap_measurementsToActivate_M1,
520 { "M1", "x2ap.measurementsToActivate.M1",
521 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x80,
522 NULL, HFILL }},
523 { &hf_x2ap_measurementsToActivate_M2,
524 { "M2", "x2ap.measurementsToActivate.M2",
525 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x40,
526 NULL, HFILL }},
527 { &hf_x2ap_measurementsToActivate_M3,
528 { "M3", "x2ap.measurementsToActivate.M3",
529 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x20,
530 NULL, HFILL }},
531 { &hf_x2ap_measurementsToActivate_M4,
532 { "M4", "x2ap.measurementsToActivate.M4",
533 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x10,
534 NULL, HFILL }},
535 { &hf_x2ap_measurementsToActivate_M5,
536 { "M5", "x2ap.measurementsToActivate.M5",
537 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x08,
538 NULL, HFILL }},
539 { &hf_x2ap_measurementsToActivate_LoggingM1FromEventTriggered,
540 { "LoggingM1FromEventTriggeredMeasurementReports", "x2ap.measurementsToActivate.LoggingM1FromEventTriggered",
541 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x04,
542 NULL, HFILL }},
543 { &hf_x2ap_measurementsToActivate_M6,
544 { "M6", "x2ap.measurementsToActivate.M6",
545 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x02,
546 NULL, HFILL }},
547 { &hf_x2ap_measurementsToActivate_M7,
548 { "M7", "x2ap.measurementsToActivate.M7",
549 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x01,
550 NULL, HFILL }},
551 { &hf_x2ap_MDT_Location_Info_GNSS,
552 { "GNSS", "x2ap.MDT_Location_Info.GNSS",
553 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x80,
554 NULL, HFILL }},
555 { &hf_x2ap_MDT_Location_Info_E_CID,
556 { "E-CID", "x2ap.MDT_Location_Info.E_CID",
557 FT_BOOLEAN, 8, TFS(&tfs_activate_do_not_activate), 0x40,
558 NULL, HFILL }},
559 { &hf_x2ap_MDT_Location_Info_Reserved,
560 { "Reserved", "x2ap.MDT_Location_Info.Reserved",
561 FT_UINT8, BASE_HEX, NULL, 0x3f,
562 NULL, HFILL }},
563 { &hf_x2ap_MDT_transmissionModes_tm1,
564 { "TM1", "x2ap.MDT_Location_Info.transmissionModes.tm1",
565 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
566 NULL, HFILL }},
567 { &hf_x2ap_MDT_transmissionModes_tm2,
568 { "TM2", "x2ap.MDT_Location_Info.transmissionModes.tm2",
569 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
570 NULL, HFILL }},
571 { &hf_x2ap_MDT_transmissionModes_tm3,
572 { "TM3", "x2ap.MDT_Location_Info.transmissionModes.tm3",
573 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
574 NULL, HFILL }},
575 { &hf_x2ap_MDT_transmissionModes_tm4,
576 { "TM4", "x2ap.MDT_Location_Info.transmissionModes.tm4",
577 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
578 NULL, HFILL }},
579 { &hf_x2ap_MDT_transmissionModes_tm6,
580 { "TM6", "x2ap.MDT_Location_Info.transmissionModes.tm6",
581 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
582 NULL, HFILL }},
583 { &hf_x2ap_MDT_transmissionModes_tm8,
584 { "TM8", "x2ap.MDT_Location_Info.transmissionModes.tm8",
585 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
586 NULL, HFILL }},
587 { &hf_x2ap_MDT_transmissionModes_tm9,
588 { "TM9", "x2ap.MDT_Location_Info.transmissionModes.tm9",
589 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
590 NULL, HFILL }},
591 { &hf_x2ap_MDT_transmissionModes_tm10,
592 { "TM10", "x2ap.MDT_Location_Info.transmissionModes.tm10",
593 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
594 NULL, HFILL }},
595 { &hf_x2ap_NRencryptionAlgorithms_NEA1,
596 { "128-NEA1", "x2ap.NRencryptionAlgorithms.NEA1",
597 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
598 NULL, HFILL }},
599 { &hf_x2ap_NRencryptionAlgorithms_NEA2,
600 { "128-NEA2", "x2ap.NRencryptionAlgorithms.NEA2",
601 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000,
602 NULL, HFILL }},
603 { &hf_x2ap_NRencryptionAlgorithms_NEA3,
604 { "128-NEA3", "x2ap.NRencryptionAlgorithms.NEA3",
605 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000,
606 NULL, HFILL }},
607 { &hf_x2ap_NRencryptionAlgorithms_Reserved,
608 { "Reserved", "x2ap.NRencryptionAlgorithms.Reserved",
609 FT_UINT16, BASE_HEX, NULL, 0x1fff,
610 NULL, HFILL }},
611 { &hf_x2ap_NRintegrityProtectionAlgorithms_NIA1,
612 { "128-NIA1", "x2ap.NRintegrityProtectionAlgorithms.NIA1",
613 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
614 NULL, HFILL }},
615 { &hf_x2ap_NRintegrityProtectionAlgorithms_NIA2,
616 { "128-NIA2", "x2ap.NRintegrityProtectionAlgorithms.NIA2",
617 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000,
618 NULL, HFILL }},
619 { &hf_x2ap_NRintegrityProtectionAlgorithms_NIA3,
620 { "128-NIA3", "x2ap.NRintegrityProtectionAlgorithms.NIA3",
621 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000,
622 NULL, HFILL }},
623 { &hf_x2ap_NRintegrityProtectionAlgorithms_Reserved,
624 { "Reserved", "x2ap.NRintegrityProtectionAlgorithms.Reserved",
625 FT_UINT16, BASE_HEX, NULL, 0x1fff,
626 NULL, HFILL }},
627 { &hf_x2ap_ReportCharacteristics_ENDC_PRBPeriodic,
628 { "PRBPeriodic", "x2ap.ReportCharacteristics_ENDC.PRBPeriodic",
629 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x80000000,
630 NULL, HFILL }},
631 { &hf_x2ap_ReportCharacteristics_ENDC_TNLCapacityIndPeriodic,
632 { "TNLCapacityIndPeriodic", "x2ap.ReportCharacteristics_ENDC.TNLCapacityIndPeriodic",
633 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x40000000,
634 NULL, HFILL }},
635 { &hf_x2ap_ReportCharacteristics_ENDC_CompositeAvailableCapacityPeriodic,
636 { "CompositeAvailableCapacityPeriodic", "x2ap.ReportCharacteristics_ENDC.CompositeAvailableCapacityPeriodic",
637 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x20000000,
638 NULL, HFILL }},
639 { &hf_x2ap_ReportCharacteristics_ENDC_NumberOfActiveUEs,
640 { "NumberOfActiveUEs", "x2ap.ReportCharacteristics_ENDC.NumberOfActiveUEs",
641 FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x10000000,
642 NULL, HFILL }},
643 { &hf_x2ap_ReportCharacteristics_ENDC_Reserved,
644 { "Reserved", "x2ap.ReportCharacteristics_ENDC.Reserved",
645 FT_UINT32, BASE_HEX, NULL, 0x0fffffff,
646 NULL, HFILL }},
647 { &hf_x2ap_Registration_Request_ENDC_PDU,
648 { "Registration-Request-ENDC", "x2ap.Registration_Request_ENDC",
649 FT_UINT32, BASE_DEC, VALS(x2ap_Registration_Request_ENDC_vals), 0,
650 NULL, HFILL }},
651 { &hf_x2ap_ReportingPeriodicity_ENDC_PDU,
652 { "ReportingPeriodicity-ENDC", "x2ap.ReportingPeriodicity_ENDC",
653 FT_UINT32, BASE_DEC, VALS(x2ap_ReportingPeriodicity_ENDC_vals), 0,
654 NULL, HFILL }},
655 { &hf_x2ap_ReportCharacteristics_ENDC_PDU,
656 { "ReportCharacteristics-ENDC", "x2ap.ReportCharacteristics_ENDC",
657 FT_BYTES, BASE_NONE, NULL, 0,
658 NULL, HFILL }},
659 { &hf_x2ap_rAT_RestrictionInformation_LEO,
660 { "LEO", "x2ap.rAT_RestrictionInformation.LEO",
661 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x80,
662 NULL, HFILL }},
663 { &hf_x2ap_rAT_RestrictionInformation_MEO,
664 { "MEO", "x2ap.rAT_RestrictionInformation.MEO",
665 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x40,
666 NULL, HFILL }},
667 { &hf_x2ap_rAT_RestrictionInformation_GEO,
668 { "GEO", "x2ap.rAT_RestrictionInformation.GEO",
669 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x20,
670 NULL, HFILL }},
671 { &hf_x2ap_rAT_RestrictionInformation_OTHERSAT,
672 { "OTHERSAT", "x2ap.rAT_RestrictionInformation.OTHERSAT",
673 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x10,
674 NULL, HFILL }},
675 { &hf_x2ap_rAT_RestrictionInformation_NR_LEO,
676 { "NR-LEO", "x2ap.rAT_RestrictionInformation.NR_LEO",
677 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x08,
678 NULL, HFILL }},
679 { &hf_x2ap_rAT_RestrictionInformation_NR_MEO,
680 { "NR-MEO", "x2ap.rAT_RestrictionInformation.NR_MEO",
681 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x04,
682 NULL, HFILL }},
683 { &hf_x2ap_rAT_RestrictionInformation_NR_GEO,
684 { "NR-GEO", "x2ap.rAT_RestrictionInformation.NR_GEO",
685 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x02,
686 NULL, HFILL }},
687 { &hf_x2ap_rAT_RestrictionInformation_NR_OTHERSAT,
688 { "NR-OTHERSAT", "x2ap.rAT_RestrictionInformation.NR_OTHERSAT",
689 FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x01,
690 NULL, HFILL }},
691 #include "packet-x2ap-hfarr.c"
694 /* List of subtrees */
695 static int *ett[] = {
696 &ett_x2ap,
697 &ett_x2ap_TransportLayerAddress,
698 &ett_x2ap_PLMN_Identity,
699 &ett_x2ap_TargeteNBtoSource_eNBTransparentContainer,
700 &ett_x2ap_RRC_Context,
701 &ett_x2ap_UE_HistoryInformationFromTheUE,
702 &ett_x2ap_ReportCharacteristics,
703 &ett_x2ap_measurementFailedReportCharacteristics,
704 &ett_x2ap_UE_RLF_Report_Container,
705 &ett_x2ap_UE_RLF_Report_Container_for_extended_bands,
706 &ett_x2ap_MeNBtoSeNBContainer,
707 &ett_x2ap_SeNBtoMeNBContainer,
708 &ett_x2ap_EUTRANTraceID,
709 &ett_x2ap_InterfacesToTrace,
710 &ett_x2ap_TraceCollectionEntityIPAddress,
711 &ett_x2ap_EncryptionAlgorithms,
712 &ett_x2ap_IntegrityProtectionAlgorithms,
713 &ett_x2ap_MeasurementsToActivate,
714 &ett_x2ap_MDT_Location_Info,
715 &ett_x2ap_transmissionModes,
716 &ett_x2ap_X2AP_Message,
717 &ett_x2ap_MeNBtoSgNBContainer,
718 &ett_x2ap_SgNBtoMeNBContainer,
719 &ett_x2ap_RRCContainer,
720 &ett_x2ap_NRencryptionAlgorithms,
721 &ett_x2ap_NRintegrityProtectionAlgorithms,
722 &ett_x2ap_measurementTimingConfiguration,
723 &ett_x2ap_LastVisitedNGRANCellInformation,
724 &ett_x2ap_LastVisitedUTRANCellInformation,
725 &ett_x2ap_EndcSONConfigurationTransfer,
726 &ett_x2ap_EPCHandoverRestrictionListContainer,
727 &ett_x2ap_NBIoT_RLF_Report_Container,
728 &ett_x2ap_anchorCarrier_NPRACHConfig,
729 &ett_x2ap_anchorCarrier_EDT_NPRACHConfig,
730 &ett_x2ap_anchorCarrier_Format2_NPRACHConfig,
731 &ett_x2ap_anchorCarrier_Format2_EDT_NPRACHConfig,
732 &ett_x2ap_non_anchorCarrier_NPRACHConfig,
733 &ett_x2ap_non_anchorCarrier_Format2_NPRACHConfig,
734 &ett_x2ap_anchorCarrier_NPRACHConfigTDD,
735 &ett_x2ap_non_anchorCarrier_NPRACHConfigTDD,
736 &ett_x2ap_Non_anchorCarrierFrequency,
737 &ett_x2ap_ReportCharacteristics_ENDC,
738 &ett_x2ap_TargetCellInNGRAN,
739 &ett_x2ap_TDDULDLConfigurationCommonNR,
740 &ett_x2ap_MDT_ConfigurationNR,
741 &ett_x2ap_NRCellPRACHConfig,
742 &ett_x2ap_IntendedTDD_DL_ULConfiguration_NR,
743 &ett_x2ap_UERadioCapability,
744 &ett_x2ap_LastVisitedPSCell_Item,
745 &ett_x2ap_NRRAReportContainer,
746 &ett_x2ap_rAT_RestrictionInformation,
747 &ett_x2ap_PSCellListContainer,
748 #include "packet-x2ap-ettarr.c"
751 module_t *x2ap_module;
753 /* Register protocol */
754 proto_x2ap = proto_register_protocol(PNAME, PSNAME, PFNAME);
755 /* Register fields and subtrees */
756 proto_register_field_array(proto_x2ap, hf, array_length(hf));
757 proto_register_subtree_array(ett, array_length(ett));
759 /* Register dissector */
760 x2ap_handle = register_dissector("x2ap", dissect_x2ap, proto_x2ap);
762 /* Register dissector tables */
763 x2ap_ies_dissector_table = register_dissector_table("x2ap.ies", "X2AP-PROTOCOL-IES", proto_x2ap, FT_UINT32, BASE_DEC);
764 x2ap_extension_dissector_table = register_dissector_table("x2ap.extension", "X2AP-PROTOCOL-EXTENSION", proto_x2ap, FT_UINT32, BASE_DEC);
765 x2ap_proc_imsg_dissector_table = register_dissector_table("x2ap.proc.imsg", "X2AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_x2ap, FT_UINT32, BASE_DEC);
766 x2ap_proc_sout_dissector_table = register_dissector_table("x2ap.proc.sout", "X2AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_x2ap, FT_UINT32, BASE_DEC);
767 x2ap_proc_uout_dissector_table = register_dissector_table("x2ap.proc.uout", "X2AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_x2ap, FT_UINT32, BASE_DEC);
769 /* Register configuration options */
770 x2ap_module = prefs_register_protocol(proto_x2ap, NULL);
772 prefs_register_enum_preference(x2ap_module, "dissect_rrc_context_as", "Dissect RRC Context as",
773 "Select whether RRC Context should be dissected as legacy LTE or NB-IOT",
774 &g_x2ap_dissect_rrc_context_as, x2ap_rrc_context_vals, false);
778 /*--- proto_reg_handoff_x2ap ---------------------------------------*/
779 void
780 proto_reg_handoff_x2ap(void)
782 dissector_add_uint_with_preference("sctp.port", SCTP_PORT_X2AP, x2ap_handle);
783 dissector_add_uint("sctp.ppi", X2AP_PAYLOAD_PROTOCOL_ID, x2ap_handle);
784 #include "packet-x2ap-dis-tab.c"