Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-nfapi.c
blobd738f3868cc0a45c6c17dc3a4055659e41b58d51
1 /* packet-nfapi.c
2 * Routines for Network Function Application Platform Interface (nFAPI) dissection
3 * Copyright 2017 Cisco Systems, Inc.
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
11 * References:
12 * SCF082.09.04 http://scf.io/en/documents/082_-_nFAPI_and_FAPI_specifications.php
16 #include "config.h"
18 #include <epan/packet.h>
19 #include <epan/tfs.h>
20 #include <epan/expert.h>
21 #include <epan/reassemble.h>
22 #include <unit_strings.h>
23 #include <ptvcursor.h>
24 #include <wsutil/array.h>
26 void proto_register_nfapi(void);
27 void proto_reg_handoff_nfapi(void);
29 #define NFAPI_HEADER_LENGTH 8
30 #define NFAPI_P7_HEADER_LENGTH 16
32 static const unit_name_string khz_100_units_db = { " (100)khz", NULL };
34 typedef enum{
35 NFAPI_DL_CONFIG_REQUEST_MSG_ID = 0x0080,
36 NFAPI_UL_CONFIG_REQUEST_MSG_ID,
37 NFAPI_SUBFRAME_INDICATION_MSG_ID,
38 NFAPI_HI_DCI0_REQUEST_MSG_ID,
39 NFAPI_TX_REQUEST_MSG_ID,
40 NFAPI_HARQ_INDICATION_MSG_ID,
41 NFAPI_CRC_INDICATION_MSG_ID,
42 NFAPI_RX_ULSCH_INDICATION_MSG_ID,
43 NFAPI_RACH_INDICATION_MSG_ID,
44 NFAPI_SRS_INDICATION_MSG_ID,
45 NFAPI_RX_SR_INDICATION_MSG_ID,
46 NFAPI_RX_CQI_INDICATION_MSG_ID,
47 NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID,
48 NFAPI_LBT_DL_INDICATION_MSG_ID,
50 NFAPI_PNF_PARAM_REQUEST_MSG_ID = 0x0100,
51 NFAPI_PNF_PARAM_RESPONSE_MSG_ID,
52 NFAPI_PNF_CONFIG_REQUEST_MSG_ID,
53 NFAPI_PNF_CONFIG_RESPONSE_MSG_ID,
54 NFAPI_PNF_START_REQUEST_MSG_ID,
55 NFAPI_PNF_START_RESPONSE_MSG_ID,
56 NFAPI_PNF_STOP_REQUEST_MSG_ID,
57 NFAPI_PNF_STOP_RESPONSE_MSG_ID,
58 NFAPI_PARAM_REQUEST_MSG_ID,
59 NFAPI_PARAM_RESPONSE_MSG_ID,
60 NFAPI_CONFIG_REQUEST_MSG_ID,
61 NFAPI_CONFIG_RESPONSE_MSG_ID,
62 NFAPI_START_REQUEST_MSG_ID,
63 NFAPI_START_RESPONSE_MSG_ID,
64 NFAPI_STOP_REQUEST_MSG_ID,
65 NFAPI_STOP_RESPONSE_MSG_ID,
66 NFAPI_MEASUREMENT_REQUEST_MSG_ID,
67 NFAPI_MEASUREMENT_RESPONSE_MSG_ID,
69 NFAPI_DL_NODE_SYNC_MSG_ID = 0x0180,
70 NFAPI_UL_NODE_SYNC_MSG_ID,
71 NFAPI_TIMING_INFO_MSG_ID,
73 NFAPI_RSSI_REQUEST_MSG_ID = 0x0200,
74 NFAPI_RSSI_RESPONSE_MSG_ID,
75 NFAPI_RSSI_INDICATION_MSG_ID,
76 NFAPI_CELL_SEARCH_REQUEST_MSG_ID,
77 NFAPI_CELL_SEARCH_RESPONSE_MSG_ID,
78 NFAPI_CELL_SEARCH_INDICATION_MSG_ID,
79 NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID,
80 NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID,
81 NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID,
82 NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID,
83 NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID,
84 NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID,
85 NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID,
86 NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID,
87 NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID,
88 NFAPI_NMM_STOP_REQUEST_MSG_ID,
89 NFAPI_NMM_STOP_RESPONSE_MSG_ID,
90 } nfapi_message_id_e;
92 static const value_string nfapi_error_vals[] = {
93 { 0x0, "MSG_OK" },
94 { 0x1, "MSG_INVALID_STATE" },
95 { 0x2, "MSG_INVALID_CONFIG" },
96 { 0x3, "SFN_OUT_OF_SYNC" },
97 { 0x4, "MSG_SUBFRAME_ERR" },
98 { 0x5, "MSG_BCH_MISSING" },
99 { 0x6, "MSG_INVALID_SFN" },
100 { 0x7, "MSG_HI_ERR" },
101 { 0x8, "MSG_TX_ERR" },
102 { 0, NULL },
105 static const value_string nfapi_p4_error_vals[] = {
106 { 100, "MSG_OK" },
107 { 101, "MSG_INVALID_STATE" },
108 { 102, "MSG_INVALID_CONFIG" },
109 { 103, "MSG_RAT_NOT_SUPPORTED" },
110 { 200, "MSG_NMM_STOP_OK" },
111 { 201, "MSG_NMM_STOP_IGNORED" },
112 { 202, "MSG_NMM_STOP_INVALID_STATE" },
113 { 300, "MSG_PROCEDURE_COMPLETE" },
114 { 301, "MSG_PROCEDURE_STOPPED" },
115 { 302, "MSG_PARTIAL_RESULTS" },
116 { 303, "MSG_TIMEOUT" },
117 { 0, NULL },
120 static const value_string nfapi_rat_type_vals[] = {
121 { 0, "LTE" },
122 { 1, "UTRAN" },
123 { 2, "GERAN" },
124 { 0, NULL },
127 typedef enum{
128 UN_ALIGNED_SYNCHRONIZATION = 0,
129 INTERNAL_PNF_FRAME_ALIGNMENT,
130 ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION
131 } nfapi_sync_mode_e;
133 static const value_string nfapi_sync_mode_vals[] = {
134 { UN_ALIGNED_SYNCHRONIZATION, "UN-ALIGNED SYNCHRONIZATION" },
135 { INTERNAL_PNF_FRAME_ALIGNMENT, "INTERNAL PNF FRAME ALIGNMENT" },
136 { ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION, "ABSOLUTE TIME ALIGNED SYNCHRONIZATION" },
137 { 0, NULL },
140 typedef enum {
141 NONE = 0,
142 GPS,
143 GLONASS,
144 BEIDOU
145 } location_mode_e;
147 static const value_string location_mode_vals[] = {
148 { NONE, "NONE" },
149 { GPS, "GPS" },
150 { GLONASS, "GLONASS" },
151 { BEIDOU, "BeiDou" },
152 { 0, NULL }
155 static const value_string nfapi_uplink_rs_hopping_vals[] = {
156 { 0, "RS_NO_HOPPING" },
157 { 1, "RS_GROUP_HOPPING" },
158 { 2, "RS_SEQUENCE_HOPPING" },
159 { 0, NULL }
162 static const value_string nfapi_laa_carrier_type_vals[] = {
163 { 0, "No multi carrier support" },
164 { 1, "Mode A1" },
165 { 2, "Mode A12" },
166 { 3, "Mode B1" },
167 { 4, "Mode B2" },
168 { 0, NULL }
171 static const value_string nfapi_multi_carrier_lbt_support_vals[] = {
172 { 0, "Multi carrier Mode A1" },
173 { 1, "Multi carrier Mode A2" },
174 { 2, "Multi carrier Mode B1" },
175 { 3, "Multi carrier Mode B2" },
176 { 0, NULL }
179 static const value_string nfapi_lbt_dl_req_pdu_type[] = {
180 { 0, "LBT_PDSCH_REQ PDU" },
181 { 1, "LBT_DRS_REQ PDU" },
182 { 0, NULL }
186 static const value_string nfapi_lbt_dl_ind_pdu_type[] = {
187 { 0, "LBT_PDSCH_RSP PDU" },
188 { 1, "LBT_DRS_RSP PDU" },
189 { 0, NULL }
192 static const value_string nfapi_phy_state_vals[] = {
193 { 0, "IDLE" },
194 { 1, "CONFIGURED" },
195 { 2, "RUNNING" },
196 { 0, NULL },
200 /* These are definitions where data 0 & 1 represent/provide a string name*/
201 static const true_false_string nfapi_csi_report_type_strname = {
202 "Periodic",
203 "Aperiodic",
206 static const true_false_string nfapi_control_type_string_name = {
207 "CQI/PMI",
208 "RI",
211 static const true_false_string cyclic_prefix_type_strname = {
212 "CP_NORMAL",
213 "CP_EXTENDED"
216 static const true_false_string support_strname = {
217 "No Support",
218 "Support"
221 static const true_false_string partial_sf_support_strname =
223 "Start partial SF support",
224 "End partial SF support"
227 static const true_false_string phich_duration_strname = {
228 "PHICH_D_NORMAL",
229 "PHICH_D_EXTENDED"
232 static const true_false_string high_speed_flag_strname = {
233 "HS_UNRESTRICTED_SET",
234 "HS_RESTRICTED_SET"
237 static const true_false_string hopping_mode_strname = {
238 "HM_INTER_SF",
239 "HM_INTRA_INTER_SF"
242 static const true_false_string srs_simult_tx_strname = {
243 "No Simultaneous Transmission",
244 "Simultaneous Transmission"
247 static const true_false_string crc_flag_strname = {
248 "CRC_ERROR",
249 "CRC_CORRECT"
252 static const true_false_string hi_value_strname = {
253 "HI_NACK",
254 "HI_ACK"
257 static const true_false_string flag_tb2_strname = {
258 "HI_NOT_PRESENT",
259 "HI_PRESENT"
262 static const true_false_string nfapi_multi_carrier_tx_strname = {
263 "Mutual transmission (self-deferral support for current carrier)",
264 "Transmit on channel access win (no self-deferral)"
267 static const true_false_string nfapi_multi_carrier_freeze_strname = {
268 "Absence of other technology is not guaranteed",
269 "Absence of other technology is guaranteed"
272 static const true_false_string initial_partial_sf_strname = {
273 "Full SF",
274 "Partial SF"
277 static const true_false_string lbt_mode_strname = {
278 "Full LBT",
279 "Partial LBT"
282 static const true_false_string data_report_mode_vals = {
283 "Crc reported in CRC.indication",
284 "Crc reported in RX.indication"
287 static const true_false_string mcch_flag_string_name = {
288 "MCCH or SC-MCCH change notification field is not valid",
289 "MCCH or SC-MCCH change notification field is valid"
292 static const true_false_string cross_carrier_scheduling_flag_strname = {
293 "Carrier indicator field is not valid",
294 "Carrier indicator field is valid"
297 static const true_false_string srs_flag_strname = {
298 "SRS request field is not valid",
299 "SRS request field is valid"
301 static const true_false_string srs_request_strname = {
302 "SRS not requested",
303 "SRS requested"
306 static const true_false_string ul_dl_configuration_flag_strname = {
307 "UL/DL configuration field is not valid",
308 "UL/DL configuration field is valid"
311 static const true_false_string prs_cyclic_prefix_type_strname = {
312 "normal cyclic prefix",
313 "extended cyclic prefix"
316 static const true_false_string prs_muting_strname = {
317 "no muting",
318 "muting"
322 static const value_string nfapi_dl_config_pdu_type_vals[] = {
323 { 0, "DL_CONFIG_DCI_DL_PDU" },
324 { 1, "DL_CONFIG_BCH_PDU" },
325 { 2, "DL_CONFIG_MCH_PDU" },
326 { 3, "DL_CONFIG_DLSCH_PDU" },
327 { 4, "DL_CONFIG_PCH_PDU" },
328 { 5, "DL_CONFIG_PRS_PDU" },
329 { 6, "DL_CONFIG_CSI_RS_PDU" },
330 { 7, "DL_CONFIG_EPDCCH_DL_PDU" },
331 { 8, "DL_MPDCCH" },
332 { 0, NULL }
335 static const value_string nfapi_duplex_mode_vals[] = {
336 { 0, "TDD" },
337 { 1, "FDD" },
338 { 2, "HD-FDD" },
339 { 0, NULL }
342 static const value_string modulation_vals[] = {
343 { 2, "QPSK" },
344 { 4, "16QAM" },
345 { 6, "64QAM" },
346 { 8, "256QAM" },
347 { 0, NULL }
350 static const value_string pch_modulation_vals[] = {
351 { 0, "QPSK" },
352 { 0, NULL }
355 static const value_string ue_mode_vals[] = {
356 { 0, "non LC/CE UE" },
357 { 1, "LC/CE UE" },
358 { 0, NULL }
361 static const value_string csi_rs_class_vals[] = {
362 { 0, "not used" },
363 { 1, "Class A" },
364 { 2, "Class B" },
365 { 0, NULL }
368 static const value_string csi_rs_cdm_type_vals[] = {
369 { 0, "cdm 2" },
370 { 1, "cdm 4" },
371 { 0, NULL }
374 static const value_string antenna_ports_vals[] = {
375 { 0, "1 antenna ports" },
376 { 1, "2 antenna ports" },
377 { 2, "4 antenna ports" },
378 { 0, NULL }
381 static const value_string combs_vals[] = {
382 { 0, "2 TC" },
383 { 1, "4 TC" },
384 { 0, NULL }
387 static const value_string resource_allocation_type_vals[] = {
388 { 0, "type 0" },
389 { 1, "type 1" },
390 { 2, "type 2 1A/1B/1D" },
391 { 3, "type 2 1C" },
392 { 4, "type 2 6-1A" },
393 { 5, "type UEModeB" },
394 { 6, "NB Index" },
395 { 0, NULL }
398 static const value_string transmission_scheme_vals[] = {
399 { 0, "SINGLE_ANTENNA_PORT_0" },
400 { 1, "TX_DIVERSITY" },
401 { 2, "LARGE_DELAY_CDD" },
402 { 3, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
403 { 4, "MULTI_USER_MIMO" },
404 { 5, "CLOSED_LOOP_RANK_1_PRECODING" },
405 { 6, "SINGLE_ANTENNA_PORT_5" },
406 { 7, "SINGLE_ANTENNA_PORT_7" },
407 { 8, "SINGLE_ANTENNA_PORT_8" },
408 { 9, "DUAL_LAYER_TX_PORT_7_AND_8" },
409 { 10, "UP_TO_8_LAYER_TX" },
410 { 11, "SINGLE_ANTENNA_PORT_11" },
411 { 12, "SINGLE_ANTENNA_PORT_13" },
412 { 13, "DUAL_LAYER_TX_PORT_11_13" },
413 { 0, NULL }
416 static const value_string ul_transmission_scheme_vals[] = {
417 { 0, "SINGLE_ANTENNA_PORT_10" },
418 { 1, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
419 { 0, NULL },
422 static const value_string dl_dci_format_vals[] = {
423 { 0, "1" },
424 { 1, "1A" },
425 { 2, "1B" },
426 { 3, "1C" },
427 { 4, "1D" },
428 { 5, "2" },
429 { 6, "2A" },
430 { 7, "2B" },
431 { 8, "2C" },
432 { 9, "2D" },
433 { 10, "6-1A" },
434 { 11, "6-1B" },
435 { 12, "6-2" },
436 { 0, NULL }
439 static const value_string ul_dci_format_vals[] = {
440 { 0, "0" },
441 { 1, "3" },
442 { 2, "3A" },
443 { 3, "4" },
444 { 4, "5" },
445 { 0, NULL }
448 static const value_string mpdcch_ul_dci_format_vals[] = {
449 { 1, "3" },
450 { 2, "3A" },
451 { 4, "6-0A" },
452 { 5, "6-0B" },
453 { 0, NULL }
457 static const value_string pa_vals[] = {
458 { 0, "-6dB" },
459 { 1, "-4.77dB" },
460 { 2, "-3dB" },
461 { 3, "-1.77dB" },
462 { 4, "0dB" },
463 { 5, "1dB" },
464 { 6, "2dB" },
465 { 7, "3dB" },
466 { 0, NULL }
469 static const value_string transmission_mode_vals[] = {
470 { 1, "Mode 1" },
471 { 2, "Mode 2" },
472 { 3, "Mode 3" },
473 { 4, "Mode 4" },
474 { 5, "Mode 5" },
475 { 6, "Mode 6" },
476 { 7, "Mode 7" },
477 { 8, "Mode 8" },
478 { 9, "Mode 9" },
479 { 10, "Mode 10" },
480 { 0, NULL }
483 static const value_string nfapi_ul_config_pdu_type_vals[] = {
484 { 0, "ULSCH" },
485 { 1, "ULSCH_CQI_RI" },
486 { 2, "ULSCH_HARQ" },
487 { 3, "ULSCH_CQI_HARQ_RI" },
488 { 4, "UCI_CQI" },
489 { 5, "UCI_SR" },
490 { 6, "UCI_HARQ" },
491 { 7, "UCI_SR_HARQ" },
492 { 8, "UCI_CQI_HARQ" },
493 { 9, "UCI_CQI_SR" },
494 { 10, "UCI_CQI_SR_HARQ" },
495 { 11, "SRS" },
496 { 12, "HARQ_BUFFER" },
497 { 13, "ULSCH_UCI_CSI" },
498 { 14, "ULSCH_UCI_HARQ" },
499 { 15, "ULSCH_CSI_UCI_HARQ" },
500 { 0, NULL }
503 static const value_string nfapi_tdd_ack_nack_mode_vals[] = {
504 { 0, "Bundling" },
505 { 1, "Multiplexing" },
506 { 2, "Format 1b with channel selection" },
507 { 3, "Format 3" },
508 { 4, "Format 4" },
509 { 5, "Format 5" },
510 { 0, NULL }
512 static const value_string nfapi_fdd_ack_nack_mode_vals[] = {
513 { 0, "Format 1a/1b" },
514 { 1, "Channel selection" },
515 { 2, "Format 3" },
516 { 3, "Format 4" },
517 { 4, "Format 5" },
518 { 0, NULL }
521 static const value_string nfapi_phich_resource_vals[] = {
522 { 0, "PHICH_R_ONE_SIXTH " },
523 { 1, "PHICH_R_HALF" },
524 { 2, "PHICH_R_ONE" },
525 { 3, "PHICH_R_TWO" },
526 { 0, NULL }
529 static const value_string local_distributed_vals[] = {
530 { 0, "localized" },
531 { 1, "distributed" },
532 { 0, NULL }
535 static const value_string transport_block_to_codeword_swap_flag_vals[] = {
536 { 0, "no swapping" },
537 { 1, "swapped" },
538 { 0, NULL }
541 static const value_string ngap_vals[] = {
542 { 0, "Ngap1" },
543 { 1, "Ngap2" },
544 { 0, NULL }
547 static const value_string pmi_vals[] = {
548 { 0, "Use precoding indicated in TPMI field" },
549 { 1, "Use precoding indicated in last PMI report on PUSCH" },
550 { 2, "use precoding indicated in TPM field" },
551 { 0, NULL }
554 static const value_string true_false_vals[] = {
555 { 0, "false" },
556 { 1, "true" },
557 { 0, NULL }
560 static const value_string exhustive_search_vals[] = {
561 { 0, "non-exhaustive search" },
562 { 1, "exhaustive search" },
563 { 0, NULL }
566 static const value_string not_used_enabled_vals[] = {
567 { 0, "not used" },
568 { 1, "enabled" },
569 { 0, NULL }
572 static const value_string hopping_vals[] = {
573 { 0, "no hopping" },
574 { 1, "hopping enabled" },
575 { 0, NULL }
579 static const value_string mpdcch_rnti_type_vals[] = {
580 { 1, "Temporary C-RNTI" },
581 { 2, "RA-RNTI" },
582 { 3, "P-RNTI" },
583 { 4, "other" },
584 { 0, NULL }
587 static const value_string rnti_type_vals[] = {
588 { 1, "C-RNTI" },
589 { 2, "RA-RNTI, P-RNTI, SI-RNTI, SC-RNTI, G-RNTI" },
590 { 3, "SPS-CRNTI" },
591 { 0, NULL }
594 static const value_string primary_cells_type_vals[] = {
595 { 1, "TDD" },
596 { 2, "FDD" },
597 { 3, "HD_FDD" },
598 { 0, NULL }
601 static const value_string ul_rssi_supported_vals[] = {
602 { 0, "Uplink RSSI not supported" },
603 { 1, "Uplink RSSI supported" },
604 { 0, NULL }
607 static const value_string nprb_vals[] = {
608 { 0, "2" },
609 { 1, "3" },
610 { 0, NULL }
613 static const value_string nmm_modes_supported_vals[] =
615 { 0, "NONE" },
616 { 1, "NMM_ONLY" },
617 { 2, "NMM_IN_CONFIGURED_STATE" },
618 { 3, "NMM_IN_RUNNING_STATE" },
619 { 4, "NMM_IN_CONFIGURED_AND_RUNNING_STATE" },
620 { 0, NULL }
623 static const value_string dlsch_re13_ue_type_vals[] = {
624 { 0, "non LC/CE UE" },
625 { 1, "LC/CE CEModeA UE" },
626 { 2, "LC/CE CEModeB UE" },
627 { 0, NULL }
630 static const value_string dlsch_re13_pdsch_payload_type_vals[] = {
631 { 0, "PDSCH carrying SIB1-BR " },
632 { 1, "PDSCH carrying SI message (except for SIB1-BR or PCH)" },
633 { 2, "PDSCH carrying other" },
634 { 0, NULL }
638 static const value_string paging_direct_indication_differtiation_flag_vals[] = {
639 { 0, "Direct Information" },
640 { 1, "Paging" },
641 { 0, NULL }
644 static const value_string ul_tx_mode_vals[] = {
645 { 0, "SISO/MIMO" },
646 { 1, "MIMO" },
647 { 0, NULL }
650 static const value_string n_srs_vals[] = {
651 { 0, "No overlap" },
652 { 1, "Overlap" },
653 { 0, NULL }
656 static const value_string n_srs_initial_vals[] = {
657 { 0, "Last OFDM symbol is not punctured" },
658 { 1, "Last OFDM symbol is punctured." },
659 { 0, NULL }
663 static const value_string csi_mode_vals[] = {
664 { 0, "PUCCH format 2/2a/2b/3" },
665 { 1, "PUCCH format 4" },
666 { 2, "PUCCH format 5" },
667 { 0, NULL }
670 static const value_string hi_dci0_pdu_type_vals[] = {
671 { 0, "HI" },
672 { 1, "DCI UL" },
673 { 2, "EPDCCH DCI UL" },
674 { 3, "MDPCCH DCI UL" },
675 { 0, NULL }
678 static const value_string ue_tx_antenna_selection_vals[] = {
679 { 0, "Not Configured" },
680 { 1, "Configured and using UE port 0" },
681 { 2, "Configured and using UE port 1" },
682 { 0, NULL }
685 static const value_string size_of_cqi_csi_field_vals[] = {
686 { 0, "1 bit" },
687 { 1, "2 bits" },
688 { 2, "3 bits" },
689 { 0, NULL }
692 static const value_string number_of_antenna_port_vals[] = {
693 { 0, "1 antenna port" },
694 { 1, "2 antenna ports" },
695 { 2, "4 antenna ports" },
696 { 0, NULL }
699 static const value_string ce_mode_vals[] = {
700 { 1, "CEModeA" },
701 { 2, "CEModeB" },
702 { 0, NULL }
706 static const value_string csi_request_vals[] = {
707 { 0, "Aperiodic CSI not requested" },
708 { 1, "Aperiodic CSI requested" },
709 { 0, NULL }
712 static const value_string tdd_harq_mode_vals[] = {
713 { 0, "Format 1a/1b BUNDLING" },
714 { 1, "Format 1a/1b MULTIPLEXING" },
715 { 2, "Format 1a/1b SPECIAL BUNDLING" },
716 { 3, "Channel Selection" },
717 { 4, "Format 3" },
718 { 5, "Format 4" },
719 { 6, "Format 5" },
720 { 0, NULL }
723 static const value_string fdd_harq_mode_vals[] = {
724 { 0, "Format 1a/1b" },
725 { 1, "Channel Selection" },
726 { 2, "Format 3" },
727 { 3, "Format 4" },
728 { 4, "Format 5" },
729 { 0, NULL }
732 static const value_string harq_value_vals[] = {
733 { 1, "ACK" },
734 { 2, "NACK" },
735 { 3, "ACK or NACK" },
736 { 4, "DTX" },
737 { 5, "ACK or DTX" },
738 { 6, "NACK or DTX" },
739 { 7, "ACK or NACK or DTX" },
740 { 0, NULL }
744 static const value_string harq_special_value_vals[] = {
745 { 0, "0 or None" },
746 { 1, "1 or 4 or 7 ACKs reported" },
747 { 2, "2 or 5 or 8 ACKs reported" },
748 { 3, "3 or 6 or 9 ACKs reported" },
749 { 4, "DTX (UE did not transmit anything)" },
750 { 0, NULL }
753 static const value_string channel_vals[] = {
754 { 0, "PUCCH" },
755 { 1, "PUSCH" },
756 { 0, NULL }
759 static const value_string rach_resource_type_vals[] = {
760 { 0, "Non LC / CE RACH" },
761 { 1, "LC / CE RACH CE level 0" },
762 { 2, "LC / CE RACH CE level 1" },
763 { 3, "LC / CE RACH CE level 2" },
764 { 4, "LC / CE RACH CE level 3" },
765 { 0, NULL }
768 static const value_string up_pts_symbol_vals[] = {
769 { 0, "Symbol 0" },
770 { 1, "Symbol 1" },
771 { 0, NULL }
774 static const value_string arfcn_direction_vals[] = {
775 { 0, "DL" },
776 { 1, "UL" },
777 { 0, NULL }
780 static int proto_nfapi;
782 /* These are for the subtrees */
783 static int ett_nfapi;
784 static int ett_nfapi_p4_p5_message_header;
785 static int ett_nfapi_p7_message_header;
786 static int ett_nfapi_tlv_tree;
787 static int ett_nfapi_tl;
788 static int ett_nfapi_pnf_phy;
789 static int ett_nfapi_pnf_phy_rel10;
790 static int ett_nfapi_pnf_phy_rel11;
791 static int ett_nfapi_pnf_phy_rel12;
792 static int ett_nfapi_pnf_phy_rel13;
793 static int ett_nfapi_pnf_phy_rf_config;
794 static int ett_nfapi_rf_bands;
795 static int ett_nfapi_tx_antenna_ports;
796 static int ett_nfapi_harq_ack_nack_data;
797 static int ett_nfapi_harq_data;
798 static int ett_nfapi_cc;
799 static int ett_nfapi_rbs;
800 static int ett_nfapi_antennas;
801 static int ett_nfapi_dl_config_request_pdu_list;
802 static int ett_nfapi_ul_config_request_pdu_list;
803 static int ett_nfapi_hi_dci0_request_pdu_list;
804 static int ett_nfapi_tx_request_pdu_list;
805 static int ett_nfapi_rx_indication_pdu_list;
806 static int ett_nfapi_harq_indication_pdu_list;
807 static int ett_nfapi_crc_indication_pdu_list;
808 static int ett_nfapi_sr_indication_pdu_list;
809 static int ett_nfapi_cqi_indication_pdu_list;
810 static int ett_nfapi_preamble_indication_pdu_list;
811 static int ett_nfapi_srs_indication_pdu_list;
812 static int ett_nfapi_lbt_dl_config_pdu_list;
813 static int ett_nfapi_lbt_dl_indication_pdu_list;
814 static int ett_nfapi_subbands;
815 static int ett_nfapi_bf_vector_antennas;
816 static int ett_nfapi_bf_vectors;
817 static int ett_nfapi_csi_rs_resource_configs;
818 static int ett_nfapi_csi_rs_bf_vector;
819 static int ett_nfapi_epdcch_prbs;
820 static int ett_nfapi_precoding;
821 static int ett_nfapi_earfcn_list;
822 static int ett_nfapi_uarfcn_list;
823 static int ett_nfapi_arfcn_list;
824 static int ett_nfapi_rssi_list;
825 static int ett_nfapi_pci_list;
826 static int ett_nfapi_psc_list;
827 static int ett_nfapi_lte_cells_found_list;
828 static int ett_nfapi_utran_cells_found_list;
829 static int ett_nfapi_geran_cells_found_list;
830 static int ett_nfapi_si_periodicity_list;
831 static int ett_nfapi_downlink_bandwidth_support;
832 static int ett_nfapi_uplink_bandwidth_support;
833 static int ett_nfapi_downlink_modulation_support;
834 static int ett_nfapi_uplink_modulation_support;
835 static int ett_nfapi_received_interference_power_mesurement_results;
836 static int ett_nfapi_release_support;
837 static expert_field ei_invalid_range;
838 static expert_field ei_invalid_tlv_length;
840 static int hf_nfapi_p4_p5_message_header_phy_id;
841 static int hf_nfapi_p4_p5_message_header_message_id;
842 static int hf_nfapi_p4_p5_message_header_message_length;
843 static int hf_nfapi_p4_p5_message_header_spare;
844 static int hf_nfapi_p7_message_header_phy_id;
845 static int hf_nfapi_p7_message_header_message_id;
846 static int hf_nfapi_p7_message_header_message_length;
847 static int hf_nfapi_p7_message_header_m;
848 static int hf_nfapi_p7_message_header_segment;
849 static int hf_nfapi_p7_message_header_sequence_number;
850 static int hf_nfapi_p7_message_header_checksum;
851 static int hf_nfapi_p7_message_header_transmit_timestamp;
852 static int hf_nfapi_tl_tag;
853 static int hf_nfapi_tl_length;
854 static int hf_nfapi_sync_mode;
855 static int hf_nfapi_location_mode;
856 static int hf_nfapi_location_coordinates;
857 static int hf_nfapi_dl_config_timing;
858 static int hf_nfapi_tx_timing;
859 static int hf_nfapi_ul_config_timing;
860 static int hf_nfapi_hi_dci0_timing;
861 static int hf_nfapi_maximum_number_phys;
862 static int hf_nfapi_maximum_total_bandwidth;
863 static int hf_nfapi_maximum_total_number_dl_layers;
864 static int hf_nfapi_maximum_total_number_ul_layers;
865 static int hf_nfapi_shared_bands;
866 static int hf_nfapi_shared_pa;
867 static int hf_nfapi_maximum_total_power;
868 static int hf_nfapi_oui;
869 static int hf_nfapi_pdu;
870 static int hf_nfapi_pnf_phy_number_phy;
871 static int hf_nfapi_pnf_phy_config_index;
872 static int hf_nfapi_number_of_rf_exclusions;
873 static int hf_nfapi_dl_bandwidth_support;
874 static int hf_nfapi_dl_bandwidth_support_6;
875 static int hf_nfapi_dl_bandwidth_support_15;
876 static int hf_nfapi_dl_bandwidth_support_25;
877 static int hf_nfapi_dl_bandwidth_support_50;
878 static int hf_nfapi_dl_bandwidth_support_75;
879 static int hf_nfapi_dl_bandwidth_support_100;
880 static int hf_nfapi_ul_bandwidth_support;
881 static int hf_nfapi_ul_bandwidth_support_6;
882 static int hf_nfapi_ul_bandwidth_support_15;
883 static int hf_nfapi_ul_bandwidth_support_25;
884 static int hf_nfapi_ul_bandwidth_support_50;
885 static int hf_nfapi_ul_bandwidth_support_75;
886 static int hf_nfapi_ul_bandwidth_support_100;
887 static int hf_nfapi_downlink_channel_bandwidth_supported;
888 static int hf_nfapi_uplink_channel_bandwidth_supported;
889 static int hf_nfapi_number_of_dl_layers_supported;
890 static int hf_nfapi_number_of_ul_layers_supported;
891 static int hf_nfapi_maximum_3gpp_release_supported;
892 static int hf_nfapi_maximum_3gpp_release_supported_rel8;
893 static int hf_nfapi_maximum_3gpp_release_supported_rel9;
894 static int hf_nfapi_maximum_3gpp_release_supported_rel10;
895 static int hf_nfapi_maximum_3gpp_release_supported_rel11;
896 static int hf_nfapi_maximum_3gpp_release_supported_rel12;
897 static int hf_nfapi_maximum_3gpp_release_supported_rel13;
898 static int hf_nfapi_nmm_modes_supported;
899 static int hf_nfapi_number_of_rfs;
900 static int hf_nfapi_rf_config_index;
901 static int hf_nfapi_band;
902 static int hf_nfapi_maximum_transmit_power;
903 static int hf_nfapi_maximum_transmit_power_2;
904 static int hf_nfapi_earfcn;
905 static int hf_nfapi_minimum_transmit_power;
906 static int hf_nfapi_number_of_antennas_supported;
907 static int hf_nfapi_minimum_downlink_frequency;
908 static int hf_nfapi_maximum_downlink_frequency;
909 static int hf_nfapi_minimum_uplink_frequency;
910 static int hf_nfapi_maximum_uplink_frequency;
911 static int hf_nfapi_number_of_rf_bands;
912 static int hf_nfapi_nmm_uplink_rssi_supported;
913 static int hf_nfapi_phy_rf_config_info_phy_id;
914 static int hf_nfapi_transmission_mode7_supported;
915 static int hf_nfapi_transmission_mode8_supported;
916 static int hf_nfapi_two_antennas_ports_for_pucch;
917 static int hf_nfapi_transmission_mode_9_supported;
918 static int hf_nfapi_simultaneous_pucch_pusch;
919 static int hf_nfapi_four_layer_tx_with_tm3_and_tm4;
920 static int hf_nfapi_epdcch_supported;
921 static int hf_nfapi_multi_ack_csi_reporting;
922 static int hf_nfapi_pucch_tx_diversity_with_channel_selection;
923 static int hf_nfapi_ul_comp_supported;
924 static int hf_nfapi_transmission_mode_5_supported;
925 static int hf_nfapi_csi_subframe_set;
926 static int hf_nfapi_enhanced_4tx_codebook;
927 static int hf_nfapi_drs_supported;
928 static int hf_nfapi_ul_64qam_supported;
929 static int hf_nfapi_transmission_mode_10_supported;
930 static int hf_nfapi_alternative_tbs_indices;
931 static int hf_nfapi_pucch_format_4_supported;
932 static int hf_nfapi_pucch_format_5_supported;
933 static int hf_nfapi_more_than_5_ca_supported;
934 static int hf_nfapi_laa_supported;
935 static int hf_nfapi_laa_ending_in_dwpts_supported;
936 static int hf_nfapi_laa_starting_in_second_slot_supported;
937 static int hf_nfapi_beamforming_supported;
938 static int hf_nfapi_csi_rs_enhancements_supported;
939 static int hf_nfapi_drms_enhancements_supported;
940 static int hf_nfapi_srs_enhancements_supported;
941 static int hf_nfapi_dl_rs_tx_power;
942 static int hf_nfapi_received_interference_power;
943 static int hf_nfapi_thermal_noise_power;
944 static int hf_nfapi_dl_rs_tx_power_measurement;
945 static int hf_nfapi_received_interference_power_measurement;
946 static int hf_nfapi_thermal_noise_power_measurement;
948 // P5 Message Structures
949 static int hf_nfapi_error_code;
950 static int hf_nfapi_p4_error_code;
951 static int hf_nfapi_rat_type;
952 static int hf_nfapi_num_tlv;
953 static int hf_nfapi_phy_state;
954 static int hf_nfapi_phy_antenna_capability;
955 static int hf_nfapi_release_capability;
956 static int hf_nfapi_mbsfn_capability;
957 static int hf_nfapi_laa_capability;
958 static int hf_nfapi_pd_sensing_lbt_support;
959 static int hf_nfapi_multi_carrier_lbt_support;
960 static int hf_nfapi_partial_sf_support;
962 static int hf_nfapi_pnf_address_ipv4;
963 static int hf_nfapi_pnf_address_ipv6;
964 static int hf_nfapi_vnf_address_ipv4;
965 static int hf_nfapi_vnf_address_ipv6;
966 static int hf_nfapi_pnf_port;
967 static int hf_nfapi_vnf_port;
968 static int hf_nfapi_dl_ue_per_sf;
969 static int hf_nfapi_ul_ue_per_sf;
970 static int hf_nfapi_timing_window;
971 static int hf_nfapi_timing_info_mode;
972 static int hf_nfapi_timing_info_period;
973 static int hf_nfapi_duplex_mode;
974 static int hf_nfapi_pcfich_power_offset;
975 static int hf_nfapi_pb;
976 static int hf_nfapi_dl_cyclic_prefix_type;
977 static int hf_nfapi_ul_cyclic_prefix_type;
978 static int hf_nfapi_tx_antenna_ports;
979 static int hf_nfapi_rx_antenna_ports;
980 static int hf_nfapi_downlink_channel_bandwidth;
981 static int hf_nfapi_uplink_channel_bandwidth;
982 static int hf_nfapi_reference_signal_power;
983 static int hf_nfapi_phich_resource;
984 static int hf_nfapi_phich_duration;
985 static int hf_nfapi_phich_power_offset;
986 static int hf_nfapi_primary_synchronization_signal_epre_eprers;
987 static int hf_nfapi_secondary_synchronization_signal_epre_eprers;
988 static int hf_nfapi_physical_cell_id;
989 static int hf_nfapi_configuration_index;
990 static int hf_nfapi_root_sequence_index;
991 static int hf_nfapi_zero_correlation_zone_configuration;
992 static int hf_nfapi_high_speed_flag;
993 static int hf_nfapi_frequency_offset;
994 static int hf_nfapi_hopping_mode;
995 static int hf_nfapi_hopping_offset;
996 static int hf_nfapi_delta_pucch_shift;
997 static int hf_nfapi_n_cqi_rb;
998 static int hf_nfapi_n_an_cs;
999 static int hf_nfapi_n1_pucch_an;
1000 static int hf_nfapi_bandwidth_configuration;
1001 static int hf_nfapi_max_up_pts;
1002 static int hf_nfapi_srs_subframe_configuration;
1003 static int hf_nfapi_srs_acknack_srs_simultaneous_transmission;
1004 static int hf_nfapi_uplink_rs_hopping;
1005 static int hf_nfapi_group_assignment;
1006 static int hf_nfapi_cyclic_shift_1_for_drms;
1007 static int hf_nfapi_subframe_assignment;
1008 static int hf_nfapi_special_subframe_patterns;
1009 static int hf_nfapi_ed_threshold_for_lbt_for_pdsch;
1010 static int hf_nfapi_ed_threshold_for_lbt_for_drs;
1011 static int hf_nfapi_pd_threshold;
1012 static int hf_nfapi_multi_carrier_type;
1013 static int hf_nfapi_multi_carrier_tx;
1014 static int hf_nfapi_multi_carrier_freeze;
1015 static int hf_nfapi_tx_antenna_ports_for_drs;
1016 static int hf_nfapi_transmission_power_for_drs;
1017 static int hf_nfapi_pbch_repetitions_enabled_r13;
1018 static int hf_nfapi_prach_cat_m_root_sequence_index;
1019 static int hf_nfapi_prach_cat_m_zero_correlation_zone_configuration;
1020 static int hf_nfapi_prach_cat_m_high_speed_flag;
1021 static int hf_nfapi_prach_ce_level_0_enable;
1022 static int hf_nfapi_prach_ce_level_0_configuration_index;
1023 static int hf_nfapi_prach_ce_level_0_frequency_offset;
1024 static int hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt;
1025 static int hf_nfapi_prach_ce_level_0_starting_subframe_periodicity;
1026 static int hf_nfapi_prach_ce_level_0_hopping_enabled;
1027 static int hf_nfapi_prach_ce_level_0_hopping_offset;
1028 static int hf_nfapi_prach_ce_level_1_enable;
1029 static int hf_nfapi_prach_ce_level_1_configuration_index;
1030 static int hf_nfapi_prach_ce_level_1_frequency_offset;
1031 static int hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt;
1032 static int hf_nfapi_prach_ce_level_1_starting_subframe_periodicity;
1033 static int hf_nfapi_prach_ce_level_1_hopping_enabled;
1034 static int hf_nfapi_prach_ce_level_1_hopping_offset;
1035 static int hf_nfapi_prach_ce_level_2_enable;
1036 static int hf_nfapi_prach_ce_level_2_configuration_index;
1037 static int hf_nfapi_prach_ce_level_2_frequency_offset;
1038 static int hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt;
1039 static int hf_nfapi_prach_ce_level_2_starting_subframe_periodicity;
1040 static int hf_nfapi_prach_ce_level_2_hopping_enabled;
1041 static int hf_nfapi_prach_ce_level_2_hopping_offset;
1042 static int hf_nfapi_prach_ce_level_3_enable;
1043 static int hf_nfapi_prach_ce_level_3_configuration_index;
1044 static int hf_nfapi_prach_ce_level_3_frequency_offset;
1045 static int hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt;
1046 static int hf_nfapi_prach_ce_level_3_starting_subframe_periodicity;
1047 static int hf_nfapi_prach_ce_level_3_hopping_enabled;
1048 static int hf_nfapi_prach_ce_level_3_hopping_offset;
1049 static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b;
1050 static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a;
1051 static int hf_nfapi_dl_modulation_support;
1052 static int hf_nfapi_dl_modulation_support_qpsk;
1053 static int hf_nfapi_dl_modulation_support_16qam;
1054 static int hf_nfapi_dl_modulation_support_64qam;
1055 static int hf_nfapi_dl_modulation_support_256qam;
1056 static int hf_nfapi_ul_modulation_support;
1057 static int hf_nfapi_ul_modulation_support_qpsk;
1058 static int hf_nfapi_ul_modulation_support_16qam;
1059 static int hf_nfapi_ul_modulation_support_64qam;
1060 static int hf_nfapi_data_report_mode;
1061 static int hf_nfapi_sfnsf;
1063 // P7 Sub Structures
1064 static int hf_nfapi_dl_dci_format;
1065 static int hf_nfapi_ul_dci_format;
1066 static int hf_nfapi_mpdcch_ul_dci_format;
1067 static int hf_nfapi_cce_idx;
1068 static int hf_nfapi_aggregation_level;
1069 static int hf_nfapi_mcs_1;
1070 static int hf_nfapi_redundancy_version_1;
1071 static int hf_nfapi_new_data_indicator_1;
1072 static int hf_nfapi_mcs_2;
1073 static int hf_nfapi_redundancy_version_2;
1074 static int hf_nfapi_new_data_indicator_2;
1075 static int hf_nfapi_harq_process;
1076 static int hf_nfapi_tpmi;
1077 static int hf_nfapi_pmi;
1078 static int hf_nfapi_precoding_information;
1079 static int hf_nfapi_tpc;
1080 static int hf_nfapi_downlink_assignment_index;
1081 static int hf_nfapi_transport_block_size_index;
1082 static int hf_nfapi_downlink_power_offset;
1083 static int hf_nfapi_allocate_prach_flag;
1084 static int hf_nfapi_preamble_index;
1085 static int hf_nfapi_prach_mask_index;
1086 static int hf_nfapi_rnti_type;
1087 static int hf_nfapi_mpdcch_rnti_type;
1088 static int hf_nfapi_mcch_flag;
1089 static int hf_nfapi_mcch_change_notification;
1090 static int hf_nfapi_scrambling_identity;
1091 static int hf_nfapi_cross_carrier_scheduling_flag;
1092 static int hf_nfapi_carrier_indicator;
1093 static int hf_nfapi_srs_flag;
1094 static int hf_nfapi_srs_request;
1095 static int hf_nfapi_antenna_ports_scrambling_and_layers;
1096 static int hf_nfapi_total_dci_length_including_padding;
1097 static int hf_nfapi_harq_ack_resource_offset;
1098 static int hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator;
1099 static int hf_nfapi_primary_cell_type;
1100 static int hf_nfapi_ul_dl_configuration_flag;
1101 static int hf_nfapi_number_of_ul_dl_configurations;
1102 static int hf_nfapi_ul_dl_configuration_index;
1103 static int hf_nfapi_laa_end_partial_sf_flag;
1104 static int hf_nfapi_laa_end_partial_sf_configuration;
1105 static int hf_nfapi_initial_lbt_sf;
1106 static int hf_nfapi_codebooksize_determination_r13;
1107 static int hf_nfapi_rel13_drms_table_flag;
1108 static int hf_nfapi_csi_rs_resource_config;
1109 static int hf_nfapi_csi_rs_number_of_nzp_configurations;
1110 static int hf_nfapi_pdsch_start;
1111 static int hf_nfapi_drms_config_flag;
1112 static int hf_nfapi_drms_scrambling;
1113 static int hf_nfapi_csi_config_flag;
1114 static int hf_nfapi_csi_scrambling;
1115 static int hf_nfapi_pdsch_re_mapping_flag;
1116 static int hf_nfapi_pdsch_re_mapping_antenna_ports;
1117 static int hf_nfapi_pdsch_re_mapping_freq_shift;
1118 static int hf_nfapi_alt_cqi_table_r12;
1119 static int hf_nfapi_max_layers;
1120 static int hf_nfapi_n_dl_harq;
1121 static int hf_nfapi_dwpts_symbols;
1122 static int hf_nfapi_ue_type;
1123 static int hf_nfapi_pdsch_payload_type;
1124 static int hf_nfapi_initial_transmission_sf;
1125 static int hf_nfapi_req13_drms_table_flag;
1126 static int hf_nfapi_prnti;
1127 static int hf_nfapi_mcs;
1128 static int hf_nfapi_number_of_transport_blocks;
1129 static int hf_nfapi_ue_mode;
1130 static int hf_prs_bandwidth;
1131 static int hf_prs_cyclic_prefix_type;
1132 static int hf_prs_muting;
1133 static int hf_nfapi_csi_rs_resource_index;
1134 static int hf_nfapi_csi_rs_class;
1135 static int hf_nfapi_cdm_type;
1136 static int hf_nfapi_epdcch_prb_index;
1137 static int hf_nfapi_epdcch_resource_assignment_flag;
1138 static int hf_nfapi_epdcch_id;
1139 static int hf_nfapi_epdcch_start_symbol;
1140 static int hf_nfapi_epdcch_num_prb;
1141 static int hf_nfapi_precoding_value;
1142 static int hf_nfapi_mpdcch_narrowband;
1143 static int hf_nfapi_number_of_prb_pairs;
1144 static int hf_nfapi_resource_block_assignment;
1145 static int hf_nfapi_start_symbol;
1146 static int hf_nfapi_ecce_index;
1147 static int hf_nfapi_ce_mode;
1148 static int hf_nfapi_drms_scrabmling_init;
1149 static int hf_nfapi_pdsch_reception_levels;
1150 static int hf_nfapi_new_data_indicator;
1151 static int hf_nfapi_tpmi_length;
1152 static int hf_nfapi_pmi_flag;
1153 static int hf_nfapi_harq_resource_offset;
1154 static int hf_nfapi_dci_subframe_repetition_number;
1155 static int hf_nfapi_downlink_assignment_index_length;
1156 static int hf_nfapi_starting_ce_level;
1157 static int hf_nfapi_antenna_ports_and_scrambling_identity_flag;
1158 static int hf_nfapi_antenna_ports_and_scrambling_identity;
1159 static int hf_nfapi_paging_direct_indication_differentiation_flag;
1160 static int hf_nfapi_direct_indication;
1161 static int hf_nfapi_number_of_tx_antenna_ports;
1163 // P7 Message Structures
1164 static int hf_nfapi_dl_node_sync_t1;
1165 static int hf_nfapi_dl_node_sync_delta_sfn_sf;
1166 static int hf_nfapi_ul_node_sync_t1;
1167 static int hf_nfapi_ul_node_sync_t2;
1168 static int hf_nfapi_ul_node_sync_t3;
1169 static int hf_nfapi_timing_info_last_sfn_sf;
1170 static int hf_nfapi_timing_info_time_since_last_timing_info;
1171 static int hf_nfapi_timing_info_dl_config_jitter;
1172 static int hf_nfapi_timing_info_tx_request_jitter;
1173 static int hf_nfapi_timing_info_ul_config_jitter;
1174 static int hf_nfapi_timing_info_hi_dci0_jitter;
1175 static int hf_nfapi_timing_info_dl_config_latest_delay;
1176 static int hf_nfapi_timing_info_tx_request_latest_delay;
1177 static int hf_nfapi_timing_info_ul_config_latest_delay;
1178 static int hf_nfapi_timing_info_hi_dci0_latest_delay;
1179 static int hf_nfapi_timing_info_dl_config_earliest_arrival;
1180 static int hf_nfapi_timing_info_tx_request_earliest_arrival;
1181 static int hf_nfapi_timing_info_ul_config_earliest_arrival;
1182 static int hf_nfapi_timing_info_hi_dci0_earliest_arrival;
1183 static int hf_nfapi_sfn_sf;
1184 static int hf_nfapi_number_pdcch_ofdm_symbols;
1185 static int hf_nfapi_number_dci;
1186 static int hf_nfapi_number_pdus;
1187 static int hf_nfapi_number_pdsch_rnti;
1188 static int hf_nfapi_transmission_power_pcfich;
1189 static int hf_nfapi_number_of_harqs;
1190 static int hf_nfapi_number_of_crcs;
1191 static int hf_nfapi_number_of_srs;
1192 static int hf_nfapi_number_of_cqi;
1193 static int hf_nfapi_number_of_preambles;
1194 static int hf_nfapi_number_of_srss;
1195 static int hf_nfapi_lbt_dl_req_pdu_type;
1196 static int hf_nfapi_lbt_dl_ind_pdu_type;
1197 static int hf_nfapi_dl_config_pdu_type;
1198 static int hf_nfapi_pdu_size;
1199 static int hf_nfapi_instance_length;
1200 static int hf_nfapi_length;
1201 static int hf_nfapi_pdu_index;
1202 static int hf_nfapi_rnti;
1203 static int hf_nfapi_resource_allocation_type;
1204 static int hf_nfapi_virtual_resource_block_assignment_flag;
1205 static int hf_nfapi_resource_block_coding;
1206 static int hf_nfapi_modulation;
1207 static int hf_nfapi_redundancy_version;
1208 static int hf_nfapi_transport_blocks;
1209 static int hf_nfapi_transport_block_to_codeword_swap_flag;
1210 static int hf_nfapi_transmission_scheme;
1211 static int hf_nfapi_ul_transmission_scheme;
1212 static int hf_nfapi_number_of_layers;
1213 static int hf_nfapi_number_of_subbands;
1214 static int hf_nfapi_codebook_index;
1215 static int hf_nfapi_ue_category_capacity;
1216 static int hf_nfapi_pa;
1217 static int hf_nfapi_delta_power_offset_index;
1218 static int hf_nfapi_ngap;
1219 static int hf_nfapi_nprb;
1220 static int hf_nfapi_transmission_mode;
1221 static int hf_nfapi_num_bf_prb_per_subband;
1222 static int hf_nfapi_num_bf_vector;
1223 static int hf_nfapi_bf_vector_subband_index;
1224 static int hf_nfapi_bf_vector_num_antennas;
1225 static int hf_nfapi_bf_vector_bf_value;
1226 static int hf_nfapi_nscid;
1227 static int hf_nfapi_csi_rs_flag;
1228 static int hf_nfapi_csi_rs_resource_config_r10;
1229 static int hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10;
1230 static int hf_nfapi_transmission_power;
1231 static int hf_nfapi_mbsfn_area_id;
1232 static int hf_nfapi_csi_rs_antenna_port_count_r10;
1233 static int hf_nfapi_ul_config_pdu_type;
1234 static int hf_nfapi_rach_prach_frequency_resources;
1235 static int hf_nfapi_srs_present;
1236 static int hf_nfapi_handle;
1237 static int hf_nfapi_pucch_index;
1238 static int hf_nfapi_size;
1239 static int hf_nfapi_resource_block_start;
1240 static int hf_nfapi_number_of_resource_blocks;
1241 static int hf_nfapi_cyclic_shift_2_for_drms;
1242 static int hf_nfapi_frequency_hopping_enabled_flag;
1243 static int hf_nfapi_frequency_hopping_bits;
1244 static int hf_nfapi_new_data_indication;
1245 static int hf_nfapi_harq_process_number;
1246 static int hf_nfapi_ul_tx_mode;
1247 static int hf_nfapi_current_tx_nb;
1248 static int hf_nfapi_n_srs;
1249 static int hf_nfapi_disable_sequence_hopping_flag;
1250 static int hf_nfapi_dl_cqi_pmi_size_rank_1;
1251 static int hf_nfapi_dl_cqi_pmi_size_rank_greater_1;
1252 static int hf_nfapi_ri_size;
1253 static int hf_nfapi_delta_offset_cqi;
1254 static int hf_nfapi_delta_offset_ri;
1255 static int hf_nfapi_harq_size;
1256 static int hf_nfapi_delta_offset_harq;
1257 static int hf_nfapi_tdd_ack_nack_mode;
1258 static int hf_nfapi_fdd_ack_nack_mode;
1259 static int hf_nfapi_n_srs_initial;
1260 static int hf_nfapi_initial_number_of_resource_blocks;
1261 static int hf_nfapi_dl_cqi_pmi_size;
1262 static int hf_nfapi_report_type;
1263 static int hf_nfapi_dl_cqi_ri_pmi_size;
1264 static int hf_nfapi_control_type;
1265 static int hf_nfapi_number_of_cc;
1266 static int hf_nfapi_virtual_cell_id_enabled_flag;
1267 static int hf_nfapi_npusch_identity;
1268 static int hf_nfapi_ndrms_csh_identity;
1269 static int hf_nfapi_total_number_of_repetitions;
1270 static int hf_nfapi_repetition_number;
1271 static int hf_nfapi_initial_sf_io;
1272 static int hf_nfapi_empty_symbols_due_to_retunning;
1273 static int hf_nfapi_dl_cqi_ri_pmi_size_2;
1274 static int hf_nfapi_npucch_identity;
1275 static int hf_nfapi_harq_size_2;
1276 static int hf_nfapi_delta_offset_harq_2;
1277 static int hf_nfapi_empty_symbols;
1278 static int hf_nfapi_csi_mode;
1279 static int hf_nfapi_dl_cqi_pmi_size_2;
1280 static int hf_nfapi_statring_prb;
1281 static int hf_nfapi_cdm_index;
1282 static int hf_nfapi_nsrs;
1283 static int hf_nfapi_num_ant_ports;
1284 static int hf_nfapi_n_pucch_2_0;
1285 static int hf_nfapi_n_pucch_2_1;
1286 static int hf_nfapi_n_pucch_2_2;
1287 static int hf_nfapi_n_pucch_2_3;
1288 static int hf_nfapi_starting_prb;
1289 static int hf_nfapi_antenna_port;
1290 static int hf_nfapi_number_of_combs;
1291 static int hf_nfapi_number_of_pucch_resource;
1292 static int hf_nfapi_pucch_index_p1;
1293 static int hf_nfapi_n_pucch_1_0;
1294 static int hf_nfapi_n_pucch_1_1;
1295 static int hf_nfapi_n_pucch_1_2;
1296 static int hf_nfapi_n_pucch_1_3;
1297 static int hf_nfapi_srs_bandwidth;
1298 static int hf_nfapi_frequency_domain_position;
1299 static int hf_nfapi_srs_hopping_bandwidth;
1300 static int hf_nfapi_transmission_comb;
1301 static int hf_nfapi_i_srs;
1302 static int hf_nfapi_sounding_reference_cyclic_shift;
1303 static int hf_nfapi_pdu_length;
1304 static int hf_nfapi_crc_flag;
1305 static int hf_nfapi_number_of_hi_pdus;
1306 static int hf_nfapi_number_of_dci_pdus;
1307 static int hf_nfapi_hi_dci0_pdu_type;
1308 static int hf_nfapi_hi_value;
1309 static int hf_nfapi_i_phich;
1310 static int hf_nfapi_flag_tb2;
1311 static int hf_nfapi_hi_value_2;
1312 static int hf_nfapi_ue_tx_antenna_selection;
1313 static int hf_nfapi_cqi_csi_request;
1314 static int hf_nfapi_ul_index;
1315 static int hf_nfapi_dl_assignment_index;
1316 static int hf_nfapi_tpc_bitmap;
1317 static int hf_nfapi_new_data_indication_two;
1318 static int hf_nfapi_size_of_cqi_csi_field;
1319 static int hf_nfapi_resource_allocation_flag;
1320 static int hf_nfapi_number_of_antenna_ports;
1321 static int hf_nfapi_n_ul_rb;
1322 static int hf_nfapi_pscch_resource;
1323 static int hf_nfapi_time_resource_pattern;
1324 static int hf_nfapi_mpdcch_transmission_type;
1325 static int hf_nfapi_drms_scrambling_init;
1326 static int hf_nfapi_pusch_repetition_levels;
1327 static int hf_nfapi_frequency_hopping_flag;
1328 static int hf_nfapi_csi_request;
1329 static int hf_nfapi_dai_presence_flag;
1330 static int hf_nfapi_total_dci_length_include_padding;
1331 static int hf_nfapi_data_offset;
1332 static int hf_nfapi_ul_cqi;
1333 static int hf_nfapi_timing_advance_r9;
1334 static int hf_nfapi_timing_advance;
1335 static int hf_nfapi_harq_data_value_0;
1336 static int hf_nfapi_harq_data_value_0_special;
1337 static int hf_nfapi_harq_data_value_1;
1338 static int hf_nfapi_harq_data_value_2;
1339 static int hf_nfapi_harq_data_value_3;
1340 static int hf_nfapi_tdd_harq_mode;
1341 static int hf_nfapi_fdd_harq_mode;
1342 static int hf_nfapi_number_of_ack_nack;
1343 static int hf_nfapi_harq_tb_1;
1344 static int hf_nfapi_harq_tb_2;
1345 static int hf_nfapi_harq_tb_n;
1346 static int hf_nfapi_channel;
1347 static int hf_nfapi_ri;
1348 static int hf_nfapi_number_of_cc_reported;
1349 static int hf_nfapi_preamble;
1350 static int hf_nfapi_rach_resource_type;
1351 static int hf_nfapi_snr;
1352 static int hf_nfapi_doppler_estimation;
1353 static int hf_nfapi_rb_start;
1354 static int hf_nfapi_up_pts_symbol;
1355 static int hf_nfapi_number_prb_per_subband;
1356 static int hf_nfapi_number_antennas;
1357 static int hf_nfapi_subband_index;
1358 static int hf_nfapi_channel_coefficient;
1359 static int hf_nfapi_ul_rtoa;
1360 static int hf_nfapi_mp_cca;
1361 static int hf_nfapi_n_cca;
1362 static int hf_nfapi_offset;
1363 static int hf_nfapi_lte_txop_sf;
1364 static int hf_nfapi_txop_sfn_sf_end;
1365 static int hf_nfapi_lbt_mode;
1366 static int hf_nfapi_sfn_sf_end;
1367 static int hf_nfapi_result;
1368 static int hf_nfapi_txop_symbols;
1369 static int hf_nfapi_initial_partial_sf;
1370 static int hf_nfapi_frequency_band_indicator;
1371 static int hf_nfapi_measurement_period;
1372 static int hf_nfapi_bandwidth;
1373 static int hf_nfapi_timeout;
1374 static int hf_nfapi_number_of_earfcns;
1375 static int hf_nfapi_uarfcn;
1376 static int hf_nfapi_number_of_uarfcns;
1377 static int hf_nfapi_arfcn;
1378 static int hf_nfapi_arfcn_direction;
1379 static int hf_nfapi_number_of_arfcns;
1380 static int hf_nfapi_rssi;
1381 static int hf_nfapi_number_of_rssi;
1382 static int hf_nfapi_pci;
1383 static int hf_nfapi_measurement_bandwidth;
1384 static int hf_nfapi_exhaustive_search;
1385 static int hf_nfapi_number_of_pci;
1386 static int hf_nfapi_psc;
1387 static int hf_nfapi_number_of_psc;
1388 static int hf_nfapi_rsrp;
1389 static int hf_nfapi_rsrq;
1390 static int hf_nfapi_number_of_lte_cells_found;
1391 static int hf_nfapi_rscp;
1392 static int hf_nfapi_enco;
1393 static int hf_nfapi_number_of_utran_cells_found;
1394 static int hf_nfapi_bsic;
1395 static int hf_nfapi_rxlev;
1396 static int hf_nfapi_rxqual;
1397 static int hf_nfapi_sfn_offset;
1398 static int hf_nfapi_number_of_geran_cells_found;
1399 static int hf_nfapi_number_of_tx_antenna;
1400 static int hf_nfapi_mib;
1401 static int hf_nfapi_phich_configuration;
1402 static int hf_nfapi_retry_count;
1403 static int hf_nfapi_sib1;
1404 static int hf_nfapi_si_periodicity;
1405 static int hf_nfapi_si_index;
1406 static int hf_nfapi_number_of_si_periodicity;
1407 static int hf_nfapi_si_window_length;
1408 static int hf_nfapi_sib_type;
1409 static int hf_nfapi_sib;
1410 static int hf_nfapi_si;
1411 static int hf_nfapi_pnf_search_state;
1412 static int hf_nfapi_pnf_broadcast_state;
1414 static const value_string message_id_vals[] =
1416 { NFAPI_DL_CONFIG_REQUEST_MSG_ID, "DL_CONFIG.request" },
1417 { NFAPI_UL_CONFIG_REQUEST_MSG_ID, "UL_CONFIG.request" },
1418 { NFAPI_SUBFRAME_INDICATION_MSG_ID, "SUBFRAME_INDICATION" },
1419 { NFAPI_HI_DCI0_REQUEST_MSG_ID, "HI_DCI0.request" },
1420 { NFAPI_TX_REQUEST_MSG_ID, "TX.request" },
1421 { NFAPI_HARQ_INDICATION_MSG_ID, "HARQ.indication" },
1422 { NFAPI_CRC_INDICATION_MSG_ID, "CRC.indication" },
1423 { NFAPI_RX_ULSCH_INDICATION_MSG_ID, "RX_ULSCH.indication" },
1424 { NFAPI_RACH_INDICATION_MSG_ID, "RACH.indication" },
1425 { NFAPI_SRS_INDICATION_MSG_ID, "SRS.indication" },
1426 { NFAPI_RX_SR_INDICATION_MSG_ID, "RX_SR.indication" },
1427 { NFAPI_RX_CQI_INDICATION_MSG_ID, "RX_CQI.indication" },
1428 { NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID, "LBT_DL_CONFIG.request" },
1429 { NFAPI_LBT_DL_INDICATION_MSG_ID, "LBT_DL.indication" },
1431 { NFAPI_PNF_PARAM_REQUEST_MSG_ID, "PNF_PARAM.request" },
1432 { NFAPI_PNF_PARAM_RESPONSE_MSG_ID, "PNF_PARAM.response" },
1433 { NFAPI_PNF_CONFIG_REQUEST_MSG_ID, "PNF_CONFIG.request" },
1434 { NFAPI_PNF_CONFIG_RESPONSE_MSG_ID, "PNF_CONFIG.response" },
1435 { NFAPI_PNF_START_REQUEST_MSG_ID, "PNF_START.request" },
1436 { NFAPI_PNF_START_RESPONSE_MSG_ID, "PNF_START.response" },
1437 { NFAPI_PNF_STOP_REQUEST_MSG_ID, "PNF_STOP.request" },
1438 { NFAPI_PNF_STOP_RESPONSE_MSG_ID, "PNF_STOP.response" },
1439 { NFAPI_PARAM_REQUEST_MSG_ID, "PARAM.request" },
1440 { NFAPI_PARAM_RESPONSE_MSG_ID, "PARAM.response" },
1441 { NFAPI_CONFIG_REQUEST_MSG_ID, "CONFIG.request" },
1442 { NFAPI_CONFIG_RESPONSE_MSG_ID, "CONFIG.response" },
1443 { NFAPI_START_REQUEST_MSG_ID, "START.request" },
1444 { NFAPI_START_RESPONSE_MSG_ID, "START.response" },
1445 { NFAPI_STOP_REQUEST_MSG_ID, "STOP.request" },
1446 { NFAPI_STOP_RESPONSE_MSG_ID, "STOP.response" },
1447 { NFAPI_MEASUREMENT_REQUEST_MSG_ID, "MEASUREMENT.request" },
1448 { NFAPI_MEASUREMENT_RESPONSE_MSG_ID, "MEASUREMENT.response" },
1450 { NFAPI_DL_NODE_SYNC_MSG_ID, "UL_NODE_SYNC" },
1451 { NFAPI_UL_NODE_SYNC_MSG_ID, "DL_NODE_SYNC" },
1452 { NFAPI_TIMING_INFO_MSG_ID, "TIMING_INFO" },
1454 { NFAPI_RSSI_REQUEST_MSG_ID, "RSSI.request" },
1455 { NFAPI_RSSI_RESPONSE_MSG_ID, "RSSI.response" },
1456 { NFAPI_RSSI_INDICATION_MSG_ID, "RSSI.indication" },
1457 { NFAPI_CELL_SEARCH_REQUEST_MSG_ID, "CELL_SEARCH.request" },
1458 { NFAPI_CELL_SEARCH_RESPONSE_MSG_ID, "CELL_SEARCH.response" },
1459 { NFAPI_CELL_SEARCH_INDICATION_MSG_ID, "CELL_SEARCH.indication" },
1460 { NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID, "BROADCAST_DETECT.request" },
1461 { NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID, "BROADCAST_DETECT.response" },
1462 { NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID, "BROADCAST_DETECT.indication" },
1463 { NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.request" },
1464 { NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.response" },
1465 { NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.indication" },
1466 { NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID, "SYSTEM_INFORMATION.request" },
1467 { NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID, "SYSTEM_INFORMATION.response" },
1468 { NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID, "SYSTEM_INFORMATION.indication" },
1469 { NFAPI_NMM_STOP_REQUEST_MSG_ID, "NMM_STOP.request" },
1470 { NFAPI_NMM_STOP_RESPONSE_MSG_ID, "NMM_STOP.response" },
1472 { 0, NULL },
1475 static dissector_handle_t nfapi_handle;
1476 static dissector_table_t message_table;
1478 static int * const dl_bandwidth_support_fields[] = {
1479 &hf_nfapi_dl_bandwidth_support_6,
1480 &hf_nfapi_dl_bandwidth_support_15,
1481 &hf_nfapi_dl_bandwidth_support_25,
1482 &hf_nfapi_dl_bandwidth_support_50,
1483 &hf_nfapi_dl_bandwidth_support_75,
1484 &hf_nfapi_dl_bandwidth_support_100,
1485 NULL
1488 static int * const ul_bandwidth_support_fields[] = {
1489 &hf_nfapi_ul_bandwidth_support_6,
1490 &hf_nfapi_ul_bandwidth_support_15,
1491 &hf_nfapi_ul_bandwidth_support_25,
1492 &hf_nfapi_ul_bandwidth_support_50,
1493 &hf_nfapi_ul_bandwidth_support_75,
1494 &hf_nfapi_ul_bandwidth_support_100,
1495 NULL
1498 static int * const maximum_3gpp_release_supported_fields[] = {
1499 &hf_nfapi_maximum_3gpp_release_supported_rel8,
1500 &hf_nfapi_maximum_3gpp_release_supported_rel9,
1501 &hf_nfapi_maximum_3gpp_release_supported_rel10,
1502 &hf_nfapi_maximum_3gpp_release_supported_rel11,
1503 &hf_nfapi_maximum_3gpp_release_supported_rel12,
1504 &hf_nfapi_maximum_3gpp_release_supported_rel13,
1505 &hf_nfapi_dl_bandwidth_support_100,
1506 NULL
1509 typedef void(*tlv_decode)(ptvcursor_t * ptvc, packet_info* pinfo);
1511 typedef struct
1513 uint16_t tag_id;
1514 char* name;
1515 tlv_decode decode;
1516 } tlv_t;
1518 static void dissect_tlv_list(ptvcursor_t * ptvc, packet_info* pinfo, int len);
1520 static void dissect_array_value(ptvcursor_t * ptvc, packet_info* pinfo, const char* name, uint32_t ett_idx, uint32_t count, tlv_decode decode)
1522 uint16_t i;
1524 if (count > 0)
1526 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "%s", name);
1528 for (i = 0; i < count; ++i)
1530 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "[%d]", i);
1531 decode(ptvc, pinfo);
1532 ptvcursor_pop_subtree(ptvc);
1535 ptvcursor_pop_subtree(ptvc);
1539 static void dissect_pnf_param_general_value(ptvcursor_t * ptvc, packet_info* pinfo)
1541 proto_item* item;
1542 uint32_t test_value;
1544 // nFAPI Sync Mode
1545 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sync_mode, 1, ENC_BIG_ENDIAN, &test_value);
1546 if (test_value > 2)
1548 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nfapi sync mode value [0..2]");
1551 // Location Mode
1552 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_location_mode, 1, ENC_BIG_ENDIAN, &test_value);
1553 if (test_value > 3)
1555 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid location mode value [0..3]");
1558 ptvcursor_add(ptvc, hf_nfapi_location_coordinates, 2, ENC_BIG_ENDIAN|ENC_NA);
1559 ptvcursor_add(ptvc, hf_nfapi_dl_config_timing, 4, ENC_BIG_ENDIAN);
1560 ptvcursor_add(ptvc, hf_nfapi_tx_timing, 4, ENC_BIG_ENDIAN);
1561 ptvcursor_add(ptvc, hf_nfapi_ul_config_timing, 4, ENC_BIG_ENDIAN);
1562 ptvcursor_add(ptvc, hf_nfapi_hi_dci0_timing, 4, ENC_BIG_ENDIAN);
1563 ptvcursor_add(ptvc, hf_nfapi_maximum_number_phys, 2, ENC_BIG_ENDIAN);
1564 ptvcursor_add(ptvc, hf_nfapi_maximum_total_bandwidth, 2, ENC_BIG_ENDIAN);
1565 ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_dl_layers, 1, ENC_BIG_ENDIAN);
1566 ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_ul_layers, 1, ENC_BIG_ENDIAN);
1568 // Shared Bands
1569 ptvcursor_add(ptvc, hf_nfapi_shared_bands, 1, ENC_BIG_ENDIAN);
1571 // Shared PA
1572 ptvcursor_add(ptvc, hf_nfapi_shared_pa, 1, ENC_BIG_ENDIAN);
1574 ptvcursor_add(ptvc, hf_nfapi_maximum_total_power, 2, ENC_BIG_ENDIAN);
1575 ptvcursor_add(ptvc, hf_nfapi_oui, 3, ENC_HOST_ENDIAN);
1577 static void dissect_pnf_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1579 ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1582 static void dissect_pnf_phy_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1584 proto_item* item;
1585 uint32_t array_size, test_value;
1586 uint64_t test_value64;
1588 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1590 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN, &array_size);
1591 dissect_array_value(ptvc, pinfo, "RF Config List", ett_nfapi_pnf_phy, array_size, dissect_pnf_rf_config_instance_value);
1593 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_exclusions, 2, ENC_BIG_ENDIAN, &array_size);
1594 dissect_array_value(ptvc, pinfo, "RF Exclusion List", ett_nfapi_pnf_phy, array_size, dissect_pnf_rf_config_instance_value);
1596 // Downlink Channel Bandwidth Supported
1597 item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1598 hf_nfapi_downlink_channel_bandwidth_supported, ett_nfapi_downlink_bandwidth_support, dl_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
1599 if (test_value64 > 0x3F)
1601 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink channel bandwidth supported bits [0..0x3F]");
1603 ptvcursor_advance(ptvc, 2);
1605 // Uplink Channel Bandwidth Supported
1606 item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1607 hf_nfapi_uplink_channel_bandwidth_supported, ett_nfapi_uplink_bandwidth_support, ul_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
1608 if (test_value64 > 0x3F)
1610 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink channel bandwidth supported bits [0..0x3F]");
1612 ptvcursor_advance(ptvc, 2);
1614 // Number of DL layers supported
1615 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_dl_layers_supported, 1, ENC_BIG_ENDIAN, &test_value);
1616 switch (test_value)
1618 case 1:
1619 case 2:
1620 case 4:
1621 case 8:
1622 break;
1623 default:
1624 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of dl layers supported value [1, 2, 4, 8]");
1625 break;
1628 // Number of DL layers supported
1629 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ul_layers_supported, 1, ENC_BIG_ENDIAN, &test_value);
1630 switch (test_value)
1632 case 1:
1633 case 2:
1634 case 4:
1635 case 8:
1636 break;
1637 default:
1638 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ul layers supported value [1, 2, 4, 8]");
1639 break;
1642 // Maximum 3GPP Release Supported
1643 item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1644 hf_nfapi_maximum_3gpp_release_supported, ett_nfapi_release_support, maximum_3gpp_release_supported_fields, ENC_BIG_ENDIAN, &test_value64);
1645 if (test_value64 > 0x3F)
1647 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maximum 3GPP release supported value [0..0x3F]");
1649 ptvcursor_advance(ptvc, 2);
1651 // NMM Modes Supported
1652 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nmm_modes_supported, 1, ENC_BIG_ENDIAN, &test_value);
1653 if (test_value > 3)
1655 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm modes supported value [0..3]");
1659 static void dissect_pnf_phy_value(ptvcursor_t * ptvc, packet_info* pinfo)
1661 uint32_t num_phy;
1662 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1663 dissect_array_value(ptvc, pinfo, "PHY List", ett_nfapi_pnf_phy, num_phy, dissect_pnf_phy_instance_value);
1666 static void dissect_pnf_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
1668 proto_item* item;
1669 uint32_t test_value;
1671 ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1672 ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
1673 ptvcursor_add(ptvc, hf_nfapi_maximum_transmit_power, 2, ENC_BIG_ENDIAN);
1674 ptvcursor_add(ptvc, hf_nfapi_minimum_transmit_power, 2, ENC_BIG_ENDIAN);
1676 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_antennas_supported, 1, ENC_BIG_ENDIAN, &test_value);
1677 switch (test_value)
1679 case 1:
1680 case 2:
1681 case 4:
1682 case 8:
1683 break;
1684 default:
1685 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of supported antennas [1, 2, 4, 8]");
1686 break;
1689 ptvcursor_add(ptvc, hf_nfapi_minimum_downlink_frequency, 4, ENC_BIG_ENDIAN);
1690 ptvcursor_add(ptvc, hf_nfapi_maximum_downlink_frequency, 4, ENC_BIG_ENDIAN);
1691 ptvcursor_add(ptvc, hf_nfapi_minimum_uplink_frequency, 4, ENC_BIG_ENDIAN);
1692 ptvcursor_add(ptvc, hf_nfapi_maximum_uplink_frequency, 4, ENC_BIG_ENDIAN);
1696 static void dissect_pnf_rf_value(ptvcursor_t * ptvc, packet_info* pinfo)
1698 uint32_t num_rf;
1699 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN, &num_rf);
1700 dissect_array_value(ptvc, pinfo, "RF List", ett_nfapi_pnf_phy_rf_config, num_rf, dissect_pnf_rf_config_value);
1703 static void dissect_pnf_phy_rel10_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1705 proto_item* item;
1706 uint32_t test_value;
1708 // PHY Config Index
1709 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1711 // Transmission mode 7 supported
1712 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode7_supported, 2, ENC_BIG_ENDIAN, &test_value);
1713 if (test_value > 1)
1715 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 7 supported value [0..1]");
1718 // Two antennas ports for PUCCH
1719 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode8_supported, 2, ENC_BIG_ENDIAN, &test_value);
1720 if (test_value > 1)
1722 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 8 supported value [0..1]");
1725 // Transmission mode 8 supported
1726 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_two_antennas_ports_for_pucch, 2, ENC_BIG_ENDIAN, &test_value);
1727 if (test_value > 1)
1729 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid two antennas ports for pucch value [0..1]");
1732 // Transmission mode 9 supported
1733 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_9_supported, 2, ENC_BIG_ENDIAN, &test_value);
1734 if (test_value > 1)
1736 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 9 supported value [0..1]");
1739 // Simultaneous PUCCH PUSCH
1740 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_simultaneous_pucch_pusch, 2, ENC_BIG_ENDIAN, &test_value);
1741 if (test_value > 1)
1743 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid simultaneous pucch pusch supported value [0..1]");
1746 // Four layer Tx with TM3 and TM4
1747 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_four_layer_tx_with_tm3_and_tm4, 2, ENC_BIG_ENDIAN, &test_value);
1748 if (test_value > 1)
1750 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid four layer tx with tm3 and tm4 value [0..1]");
1754 static void dissect_pnf_phy_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
1756 uint32_t num_phy;
1757 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1758 dissect_array_value(ptvc, pinfo, "PHY Rel 10 List", ett_nfapi_pnf_phy_rel10, num_phy, dissect_pnf_phy_rel10_instance_value);
1761 static void dissect_pnf_phy_rel11_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1763 proto_item* item;
1764 uint32_t test_value;
1766 // PHY Config Index
1767 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1769 // ePDCCH supported
1770 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_supported, 2, ENC_BIG_ENDIAN, &test_value);
1771 if (test_value > 1)
1773 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch supported value [0..1]");
1776 // Multi ACK CSI reporting
1777 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_ack_csi_reporting, 2, ENC_BIG_ENDIAN, &test_value);
1778 if (test_value > 1)
1780 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi ack csi reporting value [0..1]");
1783 // PUCCH Tx diversity with channel selection
1784 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_tx_diversity_with_channel_selection, 2, ENC_BIG_ENDIAN, &test_value);
1785 if (test_value > 1)
1787 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch tx diversity with channel selection value [0..1]");
1790 // UL CoMP supported
1791 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_comp_supported, 2, ENC_BIG_ENDIAN, &test_value);
1792 if (test_value > 1)
1794 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul comp supported value [0..1]");
1797 // Transmission mode 5 supported
1798 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_5_supported, 2, ENC_BIG_ENDIAN, &test_value);
1799 if (test_value > 1)
1801 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 5 supported value [0..1]");
1805 static void dissect_pnf_phy_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
1807 uint32_t num_phy;
1808 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1809 dissect_array_value(ptvc, pinfo, "PHY Rel 11 List", ett_nfapi_pnf_phy_rel11, num_phy, dissect_pnf_phy_rel11_instance_value);
1812 static void dissect_pnf_phy_rel12_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1814 proto_item* item;
1815 uint32_t test_value;
1817 // PHY Config Index
1818 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1820 // CSI subframe set
1821 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_subframe_set, 2, ENC_BIG_ENDIAN, &test_value);
1822 if (test_value > 1)
1824 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi subframe set value [0..1]");
1827 // Enhanced 4TX codebook
1828 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_enhanced_4tx_codebook, 2, ENC_BIG_ENDIAN, &test_value);
1829 if (test_value > 1)
1831 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid enhanced 4TX codebook value [0..1]");
1834 // DRS supported
1835 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drs_supported, 2, ENC_BIG_ENDIAN, &test_value);
1836 if (test_value > 1)
1838 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drs supported value [0..1]");
1841 // UL 64QAM supported
1842 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_64qam_supported, 2, ENC_BIG_ENDIAN, &test_value);
1843 if (test_value > 1)
1845 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul 64 QAM supported value [0..1]");
1848 // Transmission mode 10 supported
1849 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_10_supported, 2, ENC_BIG_ENDIAN, &test_value);
1850 if (test_value > 1)
1852 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 10 supported value [0..1]");
1855 // Alternative TBS indices
1856 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_alternative_tbs_indices, 2, ENC_BIG_ENDIAN, &test_value);
1857 if (test_value > 1)
1859 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alternative tbs indices supported value [0..1]");
1863 static void dissect_pnf_phy_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
1865 uint32_t num_phy;
1866 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1867 dissect_array_value(ptvc, pinfo, "PHY Rel 12 List", ett_nfapi_pnf_phy_rel12, num_phy, dissect_pnf_phy_rel12_instance_value);
1870 static void dissect_pnf_phy_rel13_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1872 proto_item* item;
1873 uint32_t test_value;
1875 // PHY Config Index
1876 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1878 // PUCCH format 4 supported
1879 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_format_4_supported, 2, ENC_BIG_ENDIAN, &test_value);
1880 if (test_value > 1)
1882 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 4 supported value [0..1]");
1885 // PUCCH format 5 supported
1886 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_format_5_supported, 2, ENC_BIG_ENDIAN, &test_value);
1887 if (test_value > 1)
1889 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 5 supported value [0..1]");
1892 // More than 5 CA support
1893 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_more_than_5_ca_supported, 2, ENC_BIG_ENDIAN, &test_value);
1894 if (test_value > 1)
1896 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid more than 5 ca supported value [0..1]");
1899 // LAA supported
1900 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_supported, 2, ENC_BIG_ENDIAN, &test_value);
1901 if (test_value > 1)
1903 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa supported value [0..1]");
1906 // LAA ending in DwPTS supported
1907 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_ending_in_dwpts_supported, 2, ENC_BIG_ENDIAN, &test_value);
1908 if (test_value > 1)
1910 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa ending in dwpts supported value [0..1]");
1913 // LAA starting in second slot Supported
1914 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_starting_in_second_slot_supported, 2, ENC_BIG_ENDIAN, &test_value);
1915 if (test_value > 1)
1917 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa starting in second slot supported value [0..1]");
1920 // Beamforming Supported
1921 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_beamforming_supported, 2, ENC_BIG_ENDIAN, &test_value);
1922 if (test_value > 1)
1924 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid beamforming supported value [0..1]");
1927 // CSI-RS enhancements supported
1928 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1929 if (test_value > 1)
1931 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs enhancements supported value [0..1]");
1934 // DMRS enhancements supported
1935 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1936 if (test_value > 1)
1938 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms enhancements supported value [0..1]");
1941 // SRS enhancements supported
1942 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1943 if (test_value > 1)
1945 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs enhancements supported value [0..1]");
1950 static void dissect_pnf_phy_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
1952 uint32_t num_phy;
1953 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1954 dissect_array_value(ptvc, pinfo, "PHY Rel 13 List", ett_nfapi_pnf_phy_rel13, num_phy, dissect_pnf_phy_rel13_instance_value);
1957 static void dissect_pnf_phy_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1959 ptvcursor_add(ptvc, hf_nfapi_phy_rf_config_info_phy_id, 2, ENC_BIG_ENDIAN);
1960 ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1961 ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1963 static void dissect_pnf_phy_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
1965 uint32_t num_configs;
1966 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_configs);
1967 dissect_array_value(ptvc, pinfo, "PHY RF Config List", ett_nfapi_pnf_phy_rf_config, num_configs, dissect_pnf_phy_rf_config_instance_value);
1970 static void dissect_dl_rs_tx_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
1972 uint32_t test_value;
1973 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_rs_tx_power, 2, ENC_BIG_ENDIAN, &test_value);
1975 if (!(test_value >= 1 && test_value <= 255))
1977 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
1980 static void dissect_received_interference_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
1982 uint32_t test_value;
1983 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_received_interference_power, 2, ENC_BIG_ENDIAN, &test_value);
1985 if (!(test_value >= 1 && test_value <= 255))
1987 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
1990 static void dissect_thermal_noise_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1992 ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power, 2, ENC_BIG_ENDIAN);
1994 static void dissect_dl_rs_tx_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1996 ptvcursor_add(ptvc, hf_nfapi_dl_rs_tx_power_measurement, 2, ENC_BIG_ENDIAN);
1999 static void dissect_received_interference_power_result_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2001 ptvcursor_add(ptvc, hf_nfapi_received_interference_power_measurement, 2, ENC_BIG_ENDIAN);
2003 static void dissect_received_interference_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo)
2005 uint32_t num_resource_block;
2006 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 2, ENC_BIG_ENDIAN, &num_resource_block);
2007 dissect_array_value(ptvc, pinfo, "Results", ett_nfapi_received_interference_power_mesurement_results, num_resource_block, dissect_received_interference_power_result_value);
2009 static void dissect_thermal_noise_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2011 ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power_measurement, 2, ENC_BIG_ENDIAN);
2013 static void dissect_duplex_mode_value(ptvcursor_t * ptvc, packet_info* pinfo)
2015 uint32_t test_value;
2016 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_duplex_mode, 2, ENC_BIG_ENDIAN, &test_value);
2018 if (test_value > 2)
2020 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid duplex mode [0..2]");
2023 static void dissect_pcfich_power_offset_value(ptvcursor_t* ptvc, packet_info *pinfo)
2025 uint32_t test_value;
2026 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pcfich_power_offset, 2, ENC_BIG_ENDIAN, &test_value);
2028 if (test_value > 10000)
2030 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid power level [0..10000]");
2033 static void dissect_pb_value(ptvcursor_t * ptvc, packet_info* pinfo)
2035 uint32_t test_value;
2036 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pb, 2, ENC_BIG_ENDIAN, &test_value);
2038 if (test_value > 3)
2040 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power allocation Index [0..3]");
2044 static void dissect_dl_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2046 ptvcursor_add(ptvc, hf_nfapi_dl_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
2049 static void dissect_ul_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2051 ptvcursor_add(ptvc, hf_nfapi_ul_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
2053 static void dissect_dl_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo)
2055 uint32_t test_value;
2056 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
2058 if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 || test_value == 75 || test_value == 100))
2060 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth value [6, 15, 25, 50, 75, 100]");
2063 static void dissect_ul_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo)
2065 uint32_t test_value;
2066 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_uplink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
2068 if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 || test_value == 75 || test_value == 100))
2070 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth value [6, 15, 25, 50, 75, 100]");
2073 static void dissect_reference_signal_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
2075 uint32_t test_value;
2076 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_reference_signal_power, 2, ENC_BIG_ENDIAN, &test_value);
2078 if (test_value > 255)
2080 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid reference signal power [0..255]");
2084 static void dissect_tx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo)
2086 uint32_t test_value;
2087 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tx_antenna_ports, 2, ENC_BIG_ENDIAN, &test_value);
2089 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2091 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports value [1, 2, 4, 8, 16]");
2094 static void dissect_rx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo)
2096 uint32_t test_value;
2097 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rx_antenna_ports, 2, ENC_BIG_ENDIAN, &test_value);
2099 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2101 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rx antenna ports value [1, 2, 4, 8, 16]");
2104 static void dissect_phich_resource_value(ptvcursor_t * ptvc, packet_info* pinfo)
2106 uint32_t test_value;
2107 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phich_resource, 2, ENC_BIG_ENDIAN, &test_value);
2109 if (test_value > 3)
2111 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich resource value [0..3]");
2114 static void dissect_phich_duration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2116 ptvcursor_add(ptvc, hf_nfapi_phich_duration, 2, ENC_BIG_ENDIAN);
2118 static void dissect_phich_power_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2120 uint32_t test_value;
2121 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phich_power_offset, 2, ENC_BIG_ENDIAN, &test_value);
2123 if (test_value > 10000)
2125 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich power offset value [0..10000]");
2128 static void dissect_psch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo)
2130 uint32_t test_value;
2131 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_primary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN, &test_value);
2133 if (test_value > 10000)
2135 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary synchronization signal epre/eprers value [0..10000]");
2138 static void dissect_physical_cell_id_value(ptvcursor_t * ptvc, packet_info* pinfo)
2140 uint32_t test_value;
2141 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_physical_cell_id, 2, ENC_BIG_ENDIAN, &test_value);
2143 if (test_value > 503)
2145 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid physical cell id [0..503]");
2148 static void dissect_ssch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo)
2150 uint32_t test_value;
2151 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_secondary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN, &test_value);
2153 if (test_value > 10000)
2155 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid secondary synchronization signal epre/eprers value [0..10000]");
2158 static void dissect_prach_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2160 uint32_t test_value;
2161 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2163 if (test_value > 63)
2165 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach configuration Index [0..63]");
2168 static void dissect_prach_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2170 uint32_t test_value;
2171 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_root_sequence_index, 2, ENC_BIG_ENDIAN, &test_value);
2173 if (test_value > 837)
2175 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach root sequence Index [0..837]");
2178 static void dissect_prach_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2180 uint32_t test_value;
2181 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2183 // How do differentiate between fdd 0..6 and tdd 0..15 ranges?
2184 if (test_value > 15)
2186 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid zero correlation zone configuration [0..15]");
2189 static void dissect_prach_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2191 ptvcursor_add(ptvc, hf_nfapi_high_speed_flag, 2, ENC_BIG_ENDIAN);
2193 static void dissect_prach_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2195 uint32_t test_value;
2196 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2198 // How to determine the ul channel bandwidth?
2199 if (test_value > (100 -6))
2201 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach frequency offset value [0..94]");
2204 static void dissect_pusch_hopping_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2206 ptvcursor_add(ptvc, hf_nfapi_hopping_mode, 2, ENC_BIG_ENDIAN);
2208 static void dissect_pusch_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2210 uint32_t test_value;
2211 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2213 if (test_value > 98)
2215 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch hopping offset value [0..98]");
2218 static void dissect_pusch_number_of_subbands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2220 uint32_t test_value;
2221 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 2, ENC_BIG_ENDIAN, &test_value);
2223 if (!(test_value >= 1 && test_value <= 4))
2225 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of sub-bands [1..4]");
2228 static void dissect_pucch_delta_pucch_shift_value(ptvcursor_t * ptvc, packet_info* pinfo)
2230 uint32_t test_value;
2231 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_pucch_shift, 2, ENC_BIG_ENDIAN, &test_value);
2233 if (!(test_value >= 1 && test_value <= 3))
2235 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta pucch shift [1..3]");
2238 static void dissect_pucch_n_cqi_rb_value(ptvcursor_t * ptvc, packet_info* pinfo)
2240 uint32_t test_value;
2241 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_cqi_rb, 2, ENC_BIG_ENDIAN, &test_value);
2243 if (test_value > 98)
2245 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n cqi rb value [0..98]");
2248 static void dissect_pucch_n_an_cs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2250 uint32_t test_value;
2251 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_an_cs, 2, ENC_BIG_ENDIAN, &test_value);
2253 if (test_value > 7)
2255 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n an cs value [0..7]");
2258 static void dissect_pucch_n1_pucch_an_value(ptvcursor_t * ptvc, packet_info* pinfo)
2260 uint32_t test_value;
2261 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n1_pucch_an, 2, ENC_BIG_ENDIAN, &test_value);
2263 if (test_value > 2047)
2265 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n1pucch an value [0..2047]");
2268 static void dissect_srs_bandwidth_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2270 uint32_t test_value;
2271 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2273 if (test_value > 7)
2275 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth configuration value [0..7]");
2278 static void dissect_srs_max_uppts_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2280 ptvcursor_add(ptvc, hf_nfapi_max_up_pts, 2, ENC_BIG_ENDIAN);
2282 static void dissect_srs_subframe_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2284 uint32_t test_value;
2285 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_subframe_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2287 if (test_value > 15)
2289 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs subframe configuration value [0..15]");
2292 static void dissect_srs_acknack_srs_sim_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2294 ptvcursor_add(ptvc, hf_nfapi_srs_acknack_srs_simultaneous_transmission, 2, ENC_BIG_ENDIAN);
2296 static void dissect_uplink_rs_hopping_value(ptvcursor_t * ptvc, packet_info* pinfo)
2298 uint32_t test_value;
2299 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_uplink_rs_hopping, 2, ENC_BIG_ENDIAN, &test_value);
2301 if (test_value > 2)
2303 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink rs hopping value [0..2]");
2306 static void dissect_group_assignment_value(ptvcursor_t * ptvc, packet_info* pinfo)
2308 uint32_t test_value;
2309 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_group_assignment, 2, ENC_BIG_ENDIAN, &test_value);
2311 if (test_value > 29)
2313 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid group assignment value [0..29]");
2316 static void dissect_cyclic_shift_1_for_drms_value(ptvcursor_t * ptvc, packet_info* pinfo)
2318 uint32_t test_value;
2319 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_1_for_drms, 2, ENC_BIG_ENDIAN, &test_value);
2321 if (test_value > 7)
2323 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 1 for drms value [0..7]");
2326 static void dissect_tdd_subframe_assignment_value(ptvcursor_t * ptvc, packet_info* pinfo)
2328 uint32_t test_value;
2329 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_subframe_assignment, 2, ENC_BIG_ENDIAN, &test_value);
2331 if (test_value > 6)
2333 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tdd subframe assignment value [0..6]");
2336 static void dissect_tdd_subframe_patterns_value(ptvcursor_t * ptvc, packet_info* pinfo)
2338 uint32_t test_value;
2339 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_special_subframe_patterns, 2, ENC_BIG_ENDIAN, &test_value);
2341 if (test_value > 9)
2343 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid special subframe pattern value [0..9]");
2346 static void dissect_laa_ed_threashold_for_lbt_for_pdsch_value(ptvcursor_t * ptvc, packet_info* pinfo)
2348 uint32_t test_value;
2349 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ed_threshold_for_lbt_for_pdsch, 2, ENC_BIG_ENDIAN, &test_value);
2351 if (test_value > 70)
2353 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for pdsch value [0..70]");
2356 static void dissect_laa_ed_threashold_for_lbt_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2358 uint32_t test_value;
2359 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ed_threshold_for_lbt_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2361 if (test_value > 70)
2363 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for drs value [0..70]");
2366 static void dissect_laa_pd_threshold_value(ptvcursor_t * ptvc, packet_info* pinfo)
2368 uint32_t test_value;
2369 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pd_threshold, 2, ENC_BIG_ENDIAN, &test_value);
2371 if (test_value > 70 && test_value != 65535)
2373 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pd threshold value [0..70, 65536]");
2376 static void dissect_laa_multi_carrier_type_value(ptvcursor_t * ptvc, packet_info* pinfo)
2378 uint32_t test_value;
2379 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_carrier_type, 2, ENC_BIG_ENDIAN, &test_value);
2381 if (test_value > 4)
2383 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi carrier type [0..4]");
2386 static void dissect_laa_multi_carrier_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2388 ptvcursor_add(ptvc, hf_nfapi_multi_carrier_tx, 2, ENC_BIG_ENDIAN);
2390 static void dissect_laa_multi_carrier_freeze_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2392 ptvcursor_add(ptvc, hf_nfapi_multi_carrier_freeze, 2, ENC_BIG_ENDIAN);
2394 static void dissect_laa_tx_antenna_port_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2396 uint32_t test_value;
2397 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tx_antenna_ports_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2399 if (!(test_value == 1 || test_value == 2 || test_value == 4))
2401 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports for drs value [1, 2, 4]");
2404 static void dissect_laa_transmission_power_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2406 uint32_t test_value;
2407 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2409 if (test_value > 10000)
2411 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for drs [0..10000]");
2414 static void dissect_emtc_pbch_repeitions_enabled_r13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2416 ptvcursor_add(ptvc, hf_nfapi_pbch_repetitions_enabled_r13, 2, ENC_BIG_ENDIAN);
2418 static void dissect_emtc_prach_cat_m_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2420 uint32_t test_value;
2421 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_cat_m_root_sequence_index, 2, ENC_BIG_ENDIAN, &test_value);
2423 if (test_value > 837)
2425 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m root sequence Index value [0..837]");
2428 static void dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2430 uint32_t test_value;
2431 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_cat_m_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2433 if (test_value > 15)
2435 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m zero correlation zone configuration value [0..15]");
2438 static void dissect_emtc_prach_cat_m_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2440 ptvcursor_add(ptvc, hf_nfapi_prach_cat_m_high_speed_flag, 2, ENC_BIG_ENDIAN);
2442 static void dissect_emtc_prach_ce_level_0_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2444 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_enable, 2, ENC_BIG_ENDIAN);
2446 static void dissect_emtc_prach_ce_level_0_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2448 uint32_t test_value;
2449 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2451 if (test_value > 63)
2453 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 configuration Index value [0..63]");
2456 static void dissect_emtc_prach_ce_level_0_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2458 uint32_t test_value;
2459 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2461 if (test_value > (100 - 6))
2463 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 frequency offset value [0..94]");
2466 static void dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2468 uint32_t test_value;
2469 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN, &test_value);
2471 if (!( test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2472 test_value == 64 || test_value == 128))
2474 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
2477 static void dissect_emtc_ce_level_0_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2479 uint32_t test_value;
2480 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2482 if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2483 test_value == 64 || test_value == 128 || test_value == 256))
2485 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
2488 static void dissect_emtc_preach_ce_level_0_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2490 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_hopping_enabled, 2, ENC_BIG_ENDIAN);
2492 static void dissect_emtc_preach_ce_level_0_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2494 uint32_t test_value;
2495 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2497 if (test_value > 94)
2499 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 hopping offset value [0..94]");
2502 static void dissect_emtc_prach_ce_level_1_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2504 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_enable, 2, ENC_BIG_ENDIAN);
2506 static void dissect_emtc_prach_ce_level_1_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2508 uint32_t test_value;
2509 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2511 if (test_value > 63)
2513 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 configuration Index value [0..63]");
2516 static void dissect_emtc_prach_ce_level_1_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2518 uint32_t test_value;
2519 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2521 if (test_value > (100 - 6))
2523 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 frequency offset value [0..94]");
2526 static void dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2528 uint32_t test_value;
2529 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN, &test_value);
2531 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2532 test_value == 64 || test_value == 128))
2534 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
2537 static void dissect_emtc_ce_level_1_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2539 uint32_t test_value;
2540 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2542 if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2543 test_value == 64 || test_value == 128 || test_value == 256))
2545 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
2548 static void dissect_emtc_preach_ce_level_1_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2550 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_hopping_enabled, 2, ENC_BIG_ENDIAN);
2552 static void dissect_emtc_preach_ce_level_1_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2554 uint32_t test_value;
2555 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2557 if (test_value > 94)
2559 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 hopping offset value [0..94]");
2562 static void dissect_emtc_prach_ce_level_2_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2564 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_enable, 2, ENC_BIG_ENDIAN);
2566 static void dissect_emtc_prach_ce_level_2_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2568 uint32_t test_value;
2569 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2571 if (test_value > 63)
2573 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration Index value [0..63]");
2576 static void dissect_emtc_prach_ce_level_2_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2578 uint32_t test_value;
2579 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2581 if (test_value > (100 - 6))
2583 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 frequency offset value [0..94]");
2586 static void dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2588 uint32_t test_value;
2589 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN, &test_value);
2591 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2592 test_value == 64 || test_value == 128))
2594 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
2597 static void dissect_emtc_ce_level_2_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2599 uint32_t test_value;
2600 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2602 if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2603 test_value == 64 || test_value == 128 || test_value == 256))
2605 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
2608 static void dissect_emtc_preach_ce_level_2_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2610 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_hopping_enabled, 2, ENC_BIG_ENDIAN);
2612 static void dissect_emtc_preach_ce_level_2_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2614 uint32_t test_value;
2615 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2617 if (test_value > 94)
2619 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 hopping offset value [0..94]");
2622 static void dissect_emtc_prach_ce_level_3_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2624 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_enable, 2, ENC_BIG_ENDIAN);
2626 static void dissect_emtc_prach_ce_level_3_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2628 uint32_t test_value;
2629 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2631 if (test_value > 63)
2633 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration Index value [0..63]");
2636 static void dissect_emtc_prach_ce_level_3_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2638 uint32_t test_value;
2639 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2641 if (test_value > (100 - 6))
2643 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 frequency offset value [0..94]");
2646 static void dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2648 uint32_t test_value;
2649 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN, &test_value);
2651 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2652 test_value == 64 || test_value == 128))
2654 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
2657 static void dissect_emtc_ce_level_3_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2659 uint32_t test_value;
2660 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2662 if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2663 test_value == 64 || test_value == 128 || test_value == 256))
2665 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
2668 static void dissect_emtc_preach_ce_level_3_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2670 ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_hopping_enabled, 2, ENC_BIG_ENDIAN);
2672 static void dissect_emtc_preach_ce_level_3_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2674 uint32_t test_value;
2675 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2677 if (test_value > 94)
2679 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 hopping offset value [0..94]");
2682 static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value(ptvcursor_t * ptvc, packet_info* pinfo)
2684 uint32_t test_value;
2685 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a, 2, ENC_BIG_ENDIAN, &test_value);
2687 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 5 || test_value == 10 || test_value == 20))
2689 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch internal ul hopping config common mode a value [1, 2, 4, 8] or [1, 5, 10, 20]");
2692 static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value(ptvcursor_t * ptvc, packet_info* pinfo)
2694 uint32_t test_value;
2695 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b, 2, ENC_BIG_ENDIAN, &test_value);
2697 if (!(test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 5 || test_value == 10 || test_value == 20 || test_value == 40))
2699 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch internal ul hopping config common mode a value [2, 4, 8, 16] or [5, 10, 20, 40]");
2702 static void dissect_dl_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2704 uint64_t test_value64;
2705 proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2706 hf_nfapi_dl_bandwidth_support, ett_nfapi_downlink_bandwidth_support, dl_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
2707 if (test_value64 > 0x3F)
2709 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth supported bits [0..0x3F]");
2712 ptvcursor_advance(ptvc, 2);
2714 static void dissect_ul_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2716 uint64_t test_value64;
2717 proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2718 hf_nfapi_ul_bandwidth_support, ett_nfapi_uplink_bandwidth_support, ul_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
2719 if (test_value64 > 0x3F)
2721 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth supported bits [0..0x3F]");
2724 ptvcursor_advance(ptvc, 2);
2727 static void dissect_dl_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo)
2729 static int * const dl_modulation_support_fields[] = {
2730 &hf_nfapi_dl_modulation_support_qpsk,
2731 &hf_nfapi_dl_modulation_support_16qam,
2732 &hf_nfapi_dl_modulation_support_64qam,
2733 &hf_nfapi_dl_modulation_support_256qam,
2734 NULL
2737 uint64_t test_value64;
2738 proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2739 hf_nfapi_dl_modulation_support, ett_nfapi_downlink_modulation_support, dl_modulation_support_fields, ENC_BIG_ENDIAN, &test_value64);
2741 if (test_value64 > 0xF)
2743 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink modulation support bit [0..0xF]");
2746 ptvcursor_advance(ptvc, 2);
2748 static void dissect_ul_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo)
2750 static int * const ul_modulation_support_fields[] = {
2751 &hf_nfapi_ul_modulation_support_qpsk,
2752 &hf_nfapi_ul_modulation_support_16qam,
2753 &hf_nfapi_ul_modulation_support_64qam,
2754 NULL
2757 uint64_t test_value64;
2758 proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2759 hf_nfapi_ul_modulation_support, ett_nfapi_uplink_modulation_support, ul_modulation_support_fields, ENC_BIG_ENDIAN, &test_value64);
2761 if (test_value64 > 0x7)
2763 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink modulation support bit [0..0x7]");
2766 ptvcursor_advance(ptvc, 2);
2768 static void dissect_phy_antenna_capability_value(ptvcursor_t * ptvc, packet_info* pinfo)
2770 uint32_t test_value;
2771 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phy_antenna_capability, 2, ENC_BIG_ENDIAN, &test_value);
2773 if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2775 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy antenna capability [1, 2, 4, 8, 16]");
2778 static void dissect_release_capability_value(ptvcursor_t * ptvc, packet_info* pinfo)
2780 uint64_t test_value64;
2781 proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2782 hf_nfapi_release_capability, ett_nfapi_release_support, maximum_3gpp_release_supported_fields, ENC_BIG_ENDIAN, &test_value64);
2783 if (test_value64 > 0x3F)
2785 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid release capability value [0..0x3F]");
2788 ptvcursor_advance(ptvc, 2);
2790 static void dissect_mbsfn_value(ptvcursor_t * ptvc, packet_info *pinfo _U_)
2792 ptvcursor_add(ptvc, hf_nfapi_mbsfn_capability, 2, ENC_BIG_ENDIAN);
2794 static void dissect_laa_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2796 ptvcursor_add(ptvc, hf_nfapi_laa_capability, 2, ENC_BIG_ENDIAN);
2799 static void dissect_laa_pd_sensing_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2801 ptvcursor_add(ptvc, hf_nfapi_pd_sensing_lbt_support, 2, ENC_BIG_ENDIAN);
2803 static void dissect_laa_multi_carrier_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2805 uint32_t test_value;
2806 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_carrier_lbt_support, 2, ENC_BIG_ENDIAN, &test_value);
2808 if (test_value > 0xF)
2810 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi carrier LBT support bit [0..0xF]");
2813 static void dissect_laa_partial_sf_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2815 ptvcursor_add(ptvc, hf_nfapi_partial_sf_support, 2, ENC_BIG_ENDIAN);
2817 static void dissect_data_report_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2819 ptvcursor_add(ptvc, hf_nfapi_data_report_mode, 2, ENC_BIG_ENDIAN);
2821 static void dissect_sfn_sf_value(ptvcursor_t * ptvc, packet_info* pinfo)
2823 uint32_t test_value;
2824 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sfnsf, 2, ENC_BIG_ENDIAN, &test_value);
2826 uint32_t sfn = test_value >> 0x4;
2827 uint32_t sf = test_value & 0x000F;
2828 if (sfn > 1023 || sf > 9)
2830 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sfn/sf value sfn:%u [0..1023] sf:%u [0..9]", sfn, sf);
2833 static void dissect_phy_state_value(ptvcursor_t * ptvc, packet_info* pinfo)
2835 uint32_t test_value;
2836 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phy_state, 2, ENC_BIG_ENDIAN, &test_value);
2838 if (test_value > 2)
2840 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy state [0..2]");
2843 static void dissect_p7_vnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2845 ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv4, 4, ENC_NA);
2847 static void dissect_p7_vnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2849 ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv6, 16, ENC_NA);
2851 static void dissect_p7_vnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2853 ptvcursor_add(ptvc, hf_nfapi_vnf_port, 2, ENC_BIG_ENDIAN);
2855 static void dissect_p7_pnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2857 ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv4, 4, ENC_NA);
2859 static void dissect_p7_pnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2861 ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv6, 16, ENC_NA);
2863 static void dissect_p7_pnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2865 ptvcursor_add(ptvc, hf_nfapi_pnf_port, 2, ENC_BIG_ENDIAN);
2867 static void dissect_downlink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2869 ptvcursor_add(ptvc, hf_nfapi_dl_ue_per_sf, 1, ENC_BIG_ENDIAN);
2871 static void dissect_uplink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2873 ptvcursor_add(ptvc, hf_nfapi_ul_ue_per_sf, 1, ENC_BIG_ENDIAN);
2875 static void dissect_rf_band_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2877 ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
2879 static void dissect_rf_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2881 uint32_t count;
2882 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2883 dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2885 static void dissect_timing_window_value(ptvcursor_t * ptvc, packet_info* pinfo)
2887 uint32_t test_value;
2888 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_window, 1, ENC_BIG_ENDIAN, &test_value);
2890 if (test_value > 30)
2892 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing window value [0..30]");
2895 static void dissect_timing_info_mode_value(ptvcursor_t * ptvc, packet_info* pinfo)
2897 uint32_t test_value;
2898 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_info_mode, 1, ENC_BIG_ENDIAN, &test_value);
2900 if (test_value > 0x3)
2902 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info mode [0..0x3]");
2905 static void dissect_timing_info_period_value(ptvcursor_t * ptvc, packet_info* pinfo)
2907 uint32_t test_value;
2908 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_info_period, 1, ENC_BIG_ENDIAN, &test_value);
2910 if (!(test_value >= 1 && test_value <= 255))
2912 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info period [1..255]");
2915 static void dissect_maximum_transmit_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
2917 uint32_t test_value;
2918 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_maximum_transmit_power_2, 2, ENC_BIG_ENDIAN, &test_value);
2920 if (test_value > 700)
2922 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maximum transmit power [0..700]");
2925 static void dissect_earfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2927 ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
2929 static void dissect_nmm_gsm_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2931 uint32_t count;
2932 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2933 dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2935 static void dissect_nmm_umts_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2937 uint32_t count;
2938 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2939 dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2941 static void dissect_nmm_lte_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2943 uint32_t count;
2944 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2945 dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2947 static void dissect_nmm_uplink_rssi_supported_value(ptvcursor_t * ptvc, packet_info* pinfo)
2949 uint32_t test_value;
2950 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nmm_uplink_rssi_supported, 1, ENC_BIG_ENDIAN, &test_value);
2952 if (test_value > 1)
2954 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm uplink rssi supported value [0..1]");
2957 static void dissect_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
2959 uint32_t size;
2960 ptvcursor_add(ptvc, hf_nfapi_dl_config_pdu_type, 1, ENC_BIG_ENDIAN);
2961 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
2963 unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
2964 dissect_tlv_list(ptvc, pinfo, pdu_end);
2966 static void dissect_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
2968 proto_item* item;
2969 uint32_t test_value, number_of_dcis_value, number_of_pdus_value;
2971 // Number of PDCCH OFDM symbols
2972 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdcch_ofdm_symbols, 1, ENC_BIG_ENDIAN, &test_value);
2973 if (test_value > 4)
2975 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdcch ofdm symbols value [0..4]");
2978 // Number of DCIs
2979 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_dci, 1, ENC_BIG_ENDIAN, &number_of_dcis_value);
2981 // Number of PDUs
2982 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &number_of_pdus_value);
2983 if (number_of_pdus_value > 514)
2985 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [0..514]");
2988 // Number of PDSCH RNTIs
2989 ptvcursor_add(ptvc, hf_nfapi_number_pdsch_rnti, 1, ENC_BIG_ENDIAN);
2991 // Transmission power for PCFICH
2992 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power_pcfich, 2, ENC_BIG_ENDIAN, &test_value);
2993 if (test_value > 10000)
2995 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for pcfich value [0..10000]");
2998 dissect_array_value(ptvc, pinfo, "DL Config PDU List", ett_nfapi_dl_config_request_pdu_list, number_of_dcis_value + number_of_pdus_value, dissect_dl_config_pdu);
3000 static void dissect_dl_config_request_bch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3002 proto_item* item;
3003 uint32_t test_value;
3005 // Length
3006 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3008 // PDU index
3009 ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3011 // Transmission power
3012 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3013 if (test_value > 10000)
3015 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3019 static void dissect_dl_config_request_dl_dci_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3021 proto_item* item;
3022 uint32_t test_value;
3024 // DCI format
3025 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
3026 if (test_value > 9)
3028 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..9]");
3031 // CCE index
3032 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN, &test_value);
3033 if (test_value > 88)
3035 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce Index value [0..88]");
3038 // Aggregation level
3039 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
3040 if (!(test_value == 1 || test_value == 2 || test_value == 4 ||
3041 test_value == 8 || test_value == 16 || test_value == 32))
3043 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8, 16, 32]");
3046 // RNTI
3047 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
3048 if (test_value < 1)
3050 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
3053 // Resource allocation type
3054 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3055 if (test_value > 1)
3057 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
3060 // Virtual resource block assignment flag
3061 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3062 if (test_value > 1)
3064 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
3067 // Resource block coding
3068 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3070 // MCS_1
3071 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN, &test_value);
3072 if (test_value > 31)
3074 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
3077 // Redundancy version_1
3078 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version_1, 1, ENC_BIG_ENDIAN, &test_value);
3079 if (test_value > 3)
3081 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 1 value [0..3]");
3084 // New data indicator_1
3085 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator_1, 1, ENC_BIG_ENDIAN, &test_value);
3086 if (test_value > 3)
3088 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 1 value [0..1]");
3091 // Transport block to codeword swap flag
3092 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN, &test_value);
3093 if (test_value > 3)
3095 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
3098 // MCS_2
3099 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN, &test_value);
3100 if (test_value > 31)
3102 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
3105 // Redundancy version_2
3106 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version_2, 1, ENC_BIG_ENDIAN, &test_value);
3107 if (test_value > 3)
3109 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 2 value [0..3]");
3112 // New Data indicator_2
3113 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator_2, 1, ENC_BIG_ENDIAN, &test_value);
3114 if (test_value > 3)
3116 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 2 value [0..1]");
3119 // HARQ process
3120 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
3121 if (test_value > 3)
3123 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
3126 // TPMI
3127 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
3128 if (test_value > 3)
3130 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..3]");
3133 // PMI
3134 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN, &test_value);
3135 if (test_value > 2)
3137 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..2]");
3140 // Precoding information
3141 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_precoding_information, 1, ENC_BIG_ENDIAN, &test_value);
3142 if (test_value > 2)
3144 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid precoding information value [0..15]");
3147 // TPC
3148 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
3149 if (test_value > 3)
3151 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
3154 // Downlink assignment index
3155 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
3156 if (test_value > 15)
3158 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment value [0..15]");
3161 // NGAP
3162 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3163 if (test_value > 1)
3165 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3168 // Transport block size index
3169 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_size_index, 1, ENC_BIG_ENDIAN, &test_value);
3170 if (test_value > 31)
3172 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block size Index value [0..31]");
3175 // Downlink power offset
3176 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_power_offset, 1, ENC_BIG_ENDIAN, &test_value);
3177 if (test_value > 1)
3179 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power offset value [0..1]");
3182 // Allocate PRACH flag
3183 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN, &test_value);
3184 if (test_value > 1)
3186 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
3189 // Preamble index
3190 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN, &test_value);
3191 if (test_value > 63)
3193 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble Index value [0..63]");
3196 // PRACH mask index
3197 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN, &test_value);
3198 if (test_value > 15)
3200 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask Index value [0..15]");
3203 // RNTI type
3204 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
3205 if (!(test_value >= 1 && test_value <= 3))
3207 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [1..3]");
3210 // Transmission power
3211 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3212 if (test_value > 10000)
3214 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value value [0..10000]");
3218 static void dissect_dl_config_request_dl_dci_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3220 proto_item* item;
3221 uint32_t test_value;
3223 // MCCH flag
3224 ptvcursor_add(ptvc, hf_nfapi_mcch_flag, 1, ENC_BIG_ENDIAN);
3226 // MCCH change notification
3227 ptvcursor_add(ptvc, hf_nfapi_mcch_change_notification, 1, ENC_BIG_ENDIAN);
3229 // Scrambling identity
3230 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_scrambling_identity, 1, ENC_BIG_ENDIAN, &test_value);
3231 if (test_value > 1)
3233 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid scrambling identity value [0..1]");
3237 static void dissect_dl_config_request_dl_dci_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3239 proto_item* item;
3240 uint32_t test_value;
3242 // Cross carrier scheduling flag
3243 ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
3245 // Carrier indicator
3246 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN, &test_value);
3247 if (test_value > 7)
3249 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
3252 // SRS flag
3253 ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
3255 // SRS request
3256 ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
3258 // Antenna ports, scrambling and layers
3259 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_ports_scrambling_and_layers, 1, ENC_BIG_ENDIAN, &test_value);
3260 if (test_value > 15)
3262 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports scrambling and layers value [0..15]");
3265 // Total DCI length including padding
3266 ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
3268 // N_DL_RB
3269 // TODO : This is missing from the encoder....
3270 //ptvcursor_add(ptvc, hf_nfapi_n_dl_rb, 1, ENC_BIG_ENDIAN);
3272 static void dissect_dl_config_request_dl_dci_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3274 proto_item* item;
3275 uint32_t test_value;
3277 // HARQ-ACK resource offset
3278 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_ack_resource_offset, 1, ENC_BIG_ENDIAN, &test_value);
3279 if (test_value > 3)
3281 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid hack ack resource offset value [0..3]");
3284 // PDSCH RE Mapping and Quasi-Co-Location Indicator
3285 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator, 1, ENC_BIG_ENDIAN, &test_value);
3286 if (test_value > 3)
3288 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping value [0..3]");
3292 static void dissect_ul_dl_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3294 uint32_t test_value;
3296 // UL/DL configuration indication
3297 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_dl_configuration_index, 1, ENC_BIG_ENDIAN, &test_value);
3298 if (!(test_value >= 1 && test_value <= 5))
3300 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul/dl configuration indication value [1..5]");
3303 static void dissect_dl_config_request_dl_dci_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
3305 proto_item* item;
3306 uint32_t test_value, count;
3308 // Primary cell type
3309 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_primary_cell_type, 1, ENC_BIG_ENDIAN, &test_value);
3310 if (test_value > 2)
3312 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary cell type value [0..2]");
3315 // UL/DL configuration flag
3316 ptvcursor_add(ptvc, hf_nfapi_ul_dl_configuration_flag, 1, ENC_BIG_ENDIAN);
3318 // Number of UL / DL configurations
3319 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ul_dl_configurations, 1, ENC_BIG_ENDIAN, &count);
3321 dissect_array_value(ptvc, pinfo, "UL/DL Configurations", ett_nfapi_pnf_phy, count, dissect_ul_dl_configuration_index_value);
3323 static void dissect_dl_config_request_dl_dci_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3325 ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_flag, 1, ENC_BIG_ENDIAN);
3326 ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_configuration, 1, ENC_BIG_ENDIAN);
3327 ptvcursor_add(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN);
3328 ptvcursor_add(ptvc, hf_nfapi_codebooksize_determination_r13, 1, ENC_BIG_ENDIAN);
3329 ptvcursor_add(ptvc, hf_nfapi_rel13_drms_table_flag, 1, ENC_BIG_ENDIAN);
3331 static void dissect_dl_config_request_mch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3333 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3334 ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3335 ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
3336 ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
3337 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3338 ptvcursor_add(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN);
3339 ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
3340 ptvcursor_add(ptvc, hf_nfapi_mbsfn_area_id, 2, ENC_BIG_ENDIAN);
3342 static void dissect_codebook_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3344 uint32_t test_value;
3346 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN, &test_value);
3347 if (test_value > 15)
3349 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [0..15]");
3352 static void dissect_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3354 ptvcursor_add(ptvc, hf_nfapi_bf_vector_bf_value, 2, ENC_BIG_ENDIAN);
3356 static void dissect_bf_vector_type_value(ptvcursor_t * ptvc, packet_info* pinfo)
3358 uint32_t count;
3360 ptvcursor_add(ptvc, hf_nfapi_bf_vector_subband_index, 1, ENC_BIG_ENDIAN);
3361 ptvcursor_add_ret_uint(ptvc, hf_nfapi_bf_vector_num_antennas, 1, ENC_BIG_ENDIAN, &count);
3362 dissect_array_value(ptvc, pinfo, "Antennas", ett_nfapi_bf_vector_antennas, count, dissect_bf_vector_value);
3364 static void dissect_dl_config_request_dlsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3366 proto_item* item;
3367 uint32_t test_value, num_subbands, num_vectors;
3369 // Length
3370 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3372 // PDU index
3373 ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3375 // RNTI
3376 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
3377 if (!(test_value >= 1 /* && rnti_value <= 65535)*/))
3379 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [1..65535]");
3382 // Resource allocation type
3383 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3384 if (test_value > 5)
3386 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..5]");
3389 // Virtual resource block assignment flag
3390 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3391 if (test_value > 1)
3393 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block allocation assignment value [0..1]");
3396 // Resource block coding
3397 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3399 // Modulation
3400 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN, &test_value);
3401 if (!(test_value == 2 || test_value == 4 || test_value == 6 || test_value == 8))
3403 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation value [2, 4, 6, 8]");
3406 // Redundancy version
3407 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
3408 if (test_value > 3)
3410 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0..3]");
3413 // Transport blocks
3414 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
3415 if (!(test_value >= 1 && test_value <= 2))
3417 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
3420 // Transport block to codeword swap flag
3421 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN, &test_value);
3422 if (test_value > 1)
3424 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
3427 // Transmission scheme
3428 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
3429 if (test_value > 13)
3431 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..13]");
3434 // Number of layers
3435 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
3436 if (!(test_value >= 1 && test_value <= 8))
3438 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..8]");
3441 // Number of subbands
3442 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN, &num_subbands);
3443 if (num_subbands > 13)
3445 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of subbands value [0..13]");
3448 dissect_array_value(ptvc, pinfo, "Subbands", ett_nfapi_subbands, num_subbands, dissect_codebook_index_value);
3450 // UE category capacity
3451 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN, &test_value);
3452 if (test_value > 14)
3454 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
3457 // P-A
3458 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN, &test_value);
3459 if (test_value > 7)
3461 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value [0..7]");
3464 // Delta power offset index
3465 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_power_offset_index, 1, ENC_BIG_ENDIAN, &test_value);
3466 if (test_value > 1)
3468 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta power offset value [0..1]");
3471 // NGAP
3472 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3473 if (test_value > 1)
3475 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3478 // NPRB
3479 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
3480 if (test_value > 1)
3482 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
3485 // Transmission mode
3486 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode, 1, ENC_BIG_ENDIAN, &test_value);
3487 if (!(test_value >= 1 && test_value <= 10))
3489 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode value [1..10]");
3492 // numBfPRBperSubband
3493 ptvcursor_add(ptvc, hf_nfapi_num_bf_prb_per_subband, 1, ENC_BIG_ENDIAN);
3495 // numBfVector
3496 ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN, &num_vectors);
3498 dissect_array_value(ptvc, pinfo, "Beamforming Vectors", ett_nfapi_bf_vectors, num_vectors, dissect_bf_vector_type_value);
3500 static void dissect_csi_rs_resource_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
3502 uint32_t test_value;
3504 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_resource_config, 1, ENC_BIG_ENDIAN, &test_value);
3505 if (test_value > 31)
3507 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource config value [0..31]");
3510 static void dissect_dl_config_request_dlsch_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3512 uint32_t test_value;
3514 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nscid, 1, ENC_BIG_ENDIAN, &test_value);
3515 if (test_value > 1)
3517 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nscid value [0..1]");
3520 static void dissect_dl_config_request_dlsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3522 proto_item* item;
3523 uint32_t test_value, count;
3525 // CSI-RS flag
3526 ptvcursor_add(ptvc, hf_nfapi_csi_rs_flag, 1, ENC_BIG_ENDIAN);
3528 // CSI-RS resource config R10
3529 ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
3531 // CSI-RS zero Tx power resource config bitmap R10
3532 ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
3534 // CSI-RS Number of NZP configuration
3535 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN, &count);
3536 if (count > 3)
3538 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..3]");
3541 // CSI-RS configuration
3542 dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
3544 // PDSCH start
3545 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_start, 1, ENC_BIG_ENDIAN, &test_value);
3546 if (test_value > 4)
3548 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch start value [0..4]");
3552 static void dissect_dl_config_request_dlsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3554 proto_item* item;
3555 uint32_t test_value;
3557 // DMRS Config flag
3558 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
3559 if (test_value > 1)
3561 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
3564 // DMRS-Scrambling
3565 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrambling, 2, ENC_BIG_ENDIAN, &test_value);
3566 if (test_value > 503)
3568 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling value [0..503]");
3571 // CSI Config flag
3572 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
3573 if (test_value > 1)
3575 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi config flag value [0..1]");
3578 // CSI- Scrambling
3579 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_scrambling, 2, ENC_BIG_ENDIAN, &test_value);
3580 if (test_value > 503)
3582 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi scrambling value [0..503]");
3585 // PDSCH RE mapping flag
3586 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_flag, 1, ENC_BIG_ENDIAN, &test_value);
3587 if (test_value > 1)
3589 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping flag value [0..1]");
3592 // PDSCH RE mapping antenna ports
3593 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_antenna_ports, 1, ENC_BIG_ENDIAN, &test_value);
3594 if (!(test_value == 1 || test_value == 2 || test_value == 4))
3596 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping antenna ports value [1, 2, 4]");
3599 // PDSCH RE mapping freq shift
3600 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_freq_shift, 1, ENC_BIG_ENDIAN, &test_value);
3601 if (test_value > 5)
3603 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping freq shift value [0..5]");
3606 static void dissect_dl_config_request_dlsch_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
3608 proto_item* item;
3609 uint32_t test_value;
3611 // altCQI-Table-r12
3612 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_alt_cqi_table_r12, 1, ENC_BIG_ENDIAN, &test_value);
3613 if (test_value > 1)
3615 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alt cqi table r12 value [0..1]");
3618 // MaxLayers
3619 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_max_layers, 1, ENC_BIG_ENDIAN, &test_value);
3620 if (!(test_value >= 1 && test_value <= 8))
3622 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid max layers value [1..8]");
3625 ptvcursor_add(ptvc, hf_nfapi_n_dl_harq, 1, ENC_BIG_ENDIAN);
3627 static void dissect_dl_config_request_dlsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3629 proto_item* item;
3630 uint32_t test_value;
3632 // DwPTS Symbols
3633 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN, &test_value);
3634 if (!(test_value == 3 || test_value == 6 || test_value == 9 ||
3635 test_value == 10 || test_value == 11 || test_value == 12 ||
3636 test_value == 14))
3638 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
3641 // Initial LBT SF
3642 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN, &test_value);
3643 if (test_value > 1)
3645 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
3648 // UE Type
3649 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
3650 if (test_value > 2)
3652 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
3655 // PDSCH Payload Type
3656 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_payload_type, 1, ENC_BIG_ENDIAN, &test_value);
3657 if (test_value > 2)
3659 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch payload type value [0..2]");
3662 // Initial transmission SF (io)
3663 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
3664 if (!(test_value <= 10239 || test_value == 0xFFFF))
3666 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
3669 // Rel-13-DMRS-tabe flag
3670 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_req13_drms_table_flag, 1, ENC_BIG_ENDIAN, &test_value);
3671 if (test_value > 1)
3673 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rel13 drms table flag value [0..1]");
3676 static void dissect_dl_config_request_pch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3678 proto_item* item;
3679 uint32_t test_value;
3681 // Length
3682 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3684 // PDU index
3685 ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3687 // P-RNTI
3688 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prnti, 2, ENC_BIG_ENDIAN, &test_value);
3689 if (test_value != 0xFFFE)
3691 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prnti value [0xFFFE]");
3694 // Resource allocation type
3695 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3696 if (!(test_value == 2 || test_value == 3 || test_value == 6))
3698 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocate type value [2, 3, 6]");
3701 // Virtual resource block assignment flag
3702 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3703 if (test_value > 1)
3705 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
3708 // Resource block coding
3709 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3711 // MCS
3712 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
3713 if (test_value != 0)
3715 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0]");
3718 // Redundancy version
3719 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
3720 if (test_value != 0)
3722 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0]");
3725 // Number of transport blocks
3726 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
3727 if (test_value != 1)
3729 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1]");
3732 // Transport block to codeword swap flag
3733 ptvcursor_add(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN);
3735 // Transmission scheme
3736 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
3737 if (!(test_value == 0 || test_value == 1 || test_value == 6))
3739 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission schemes value [0, 1, 6]");
3742 // Number of layers
3743 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
3744 if (!(test_value >= 1 && test_value <= 4))
3746 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
3749 // Codebook index
3750 ptvcursor_add(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN);
3752 // UE category capacity
3753 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN, &test_value);
3754 if (test_value > 14)
3756 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
3759 // P-A
3760 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN, &test_value);
3761 if (test_value > 7)
3763 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value value [0..7]");
3766 // Transmission power
3767 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3768 if (test_value > 10000)
3770 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3773 // NPRB
3774 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
3775 if (test_value > 1)
3777 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
3780 // NGAP
3781 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3782 if (test_value > 1)
3784 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3788 static void dissect_dl_config_request_pch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3790 proto_item* item;
3791 uint32_t test_value;
3793 // UE mode
3794 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_mode, 1, ENC_BIG_ENDIAN, &test_value);
3795 if (test_value > 1)
3797 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue mode value [0..1]");
3800 // Initial transmission SF (io)
3801 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
3802 if (!(test_value <= 10239 || test_value == 0xFFFF))
3804 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
3807 static void dissect_dl_config_request_prs_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3809 proto_item* item;
3810 uint32_t test_value;
3812 // Transmission power
3813 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3814 if (test_value > 10000)
3816 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3819 // PRS bandwidth
3820 item = ptvcursor_add_ret_uint(ptvc, hf_prs_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
3821 if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
3822 test_value == 50 || test_value == 75 || test_value == 100))
3824 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prs bandwidth value [6, 15, 25, 50, 75, 100]");
3827 // PRS cyclic prefix type
3828 ptvcursor_add(ptvc, hf_prs_cyclic_prefix_type, 1, ENC_BIG_ENDIAN);
3830 // PRS muting
3831 ptvcursor_add(ptvc, hf_prs_muting, 1, ENC_BIG_ENDIAN);
3833 static void dissect_dl_config_request_csi_rs_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3835 proto_item* item;
3836 uint32_t test_value, count;
3838 // CSI-RS antenna port count R10
3839 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_antenna_port_count_r10, 1, ENC_BIG_ENDIAN, &test_value);
3840 if (!(test_value == 1 || test_value == 2 ||
3841 test_value == 4 || test_value == 8 ||
3842 test_value == 12 || test_value == 16))
3844 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs antenna port count r10 value [1, 2, 4, 6, 8, 10]");
3847 // CSI-RS resource config R10
3848 ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
3850 // Transmission power
3851 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3852 if (test_value > 10000)
3854 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3857 // CSI-RS zero Tx power resource config bitmap R10
3858 ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
3860 // CSI-RS Number of NZP configuration
3861 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN, &count);
3862 if (count > 8)
3864 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..8]");
3867 // CSI-RS configuration
3868 dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
3870 static void dissect_csi_rs_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo)
3872 uint32_t count;
3873 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_resource_index, 1, ENC_BIG_ENDIAN, &count);
3874 if (count > 7)
3876 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource Index value [0..7]");
3879 // todo : how to work out the antenna port count for the bfValue
3881 static void dissect_dl_config_request_csi_rs_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3883 proto_item* item;
3884 uint32_t test_value, class_value, count;
3886 // Class
3887 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_class, 1, ENC_BIG_ENDIAN, &class_value);
3888 if (class_value > 2)
3890 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid class value [0..2]");
3893 // cdmType
3894 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_type, 1, ENC_BIG_ENDIAN, &test_value);
3895 if (test_value > 1)
3897 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm type value [0..1]");
3900 // numBfVector
3901 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN, &count);
3902 if (!((class_value == 1 && count == 0) || (class_value == 2 && count <= 8)))
3904 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num bf vector value [0] or [0..8]");
3907 dissect_array_value(ptvc, pinfo, "Beamforming Vector", ett_nfapi_csi_rs_bf_vector, count, dissect_csi_rs_bf_vector_value);
3909 static void dissect_epdcch_prb_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3911 uint32_t test_value;
3913 // EPDCCH PRB index
3914 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_prb_index, 1, ENC_BIG_ENDIAN, &test_value);
3915 if (test_value > 99)
3917 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch prb_index value [0..99]");
3920 static void dissect_dl_config_request_depdcch_params_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3922 proto_item* item;
3923 uint32_t test_value, count;
3925 // EPDCCH Resource assignment flag
3926 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_resource_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3927 if (test_value > 1)
3929 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch resource assignment flag value [0..1]");
3932 // EPDCCH ID
3933 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_id, 2, ENC_BIG_ENDIAN, &test_value);
3934 if (test_value > 503)
3936 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch id value [0..503]");
3939 // EPDCCH Start Symbol
3940 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
3941 if (!(test_value >= 1 && test_value <= 4))
3943 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch start symbol value [1..4]");
3946 // EPDCCH NumPRB
3947 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_num_prb, 1, ENC_BIG_ENDIAN, &count);
3948 if (!(count == 2 || count == 4 || count == 8))
3950 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch num prb value [2, 4, 8]");
3953 dissect_array_value(ptvc, pinfo, "PRBs", ett_nfapi_epdcch_prbs, count, dissect_epdcch_prb_index_value);
3955 dissect_bf_vector_type_value(ptvc, pinfo);
3957 static void dissect_dl_config_request_depdcch_params_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3959 proto_item* item;
3960 uint32_t test_value;
3962 // DwPTS Symbols
3963 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN, &test_value);
3964 if (!(test_value == 3 || test_value == 6 || test_value == 9 ||
3965 test_value == 10 || test_value == 11 || test_value == 12 ||
3966 test_value == 14))
3968 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
3971 // Initial LBT SF
3972 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN, &test_value);
3973 if (test_value > 1)
3975 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
3979 static void dissect_precoding_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3981 ptvcursor_add(ptvc, hf_nfapi_precoding_value, 2, ENC_BIG_ENDIAN);
3983 static void dissect_dl_config_request_mpdpcch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3985 proto_item* item;
3986 uint32_t test_value, count;
3988 // MPDCCH Narrowband
3989 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN, &test_value);
3990 if (test_value > 15)
3992 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
3995 // Number of PRB pairs
3996 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN, &test_value);
3997 if (!(test_value == 2 || test_value == 4 || test_value == 6))
3999 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pair value [2, 4, 6]");
4002 // Resource Block Assignment
4003 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN, &test_value);
4004 if (test_value > 14)
4006 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
4009 // MPDCCH transmission type
4010 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN, &test_value);
4011 if (test_value > 1)
4013 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
4016 // Start symbol
4017 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
4018 if (!(test_value >= 1 && test_value <=4))
4020 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [1..4]");
4023 // ECCE index
4024 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN, &test_value);
4025 if (test_value > 22)
4027 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce Index value [0..22]");
4030 // Aggregation level
4031 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
4032 if (!(test_value == 2 || test_value == 4 || test_value == 8 ||
4033 test_value == 16 || test_value == 24))
4035 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
4038 // RNTI type
4039 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
4040 if (test_value > 4)
4042 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0..4]");
4045 // RNTI
4046 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4047 if (!(test_value >= 1))
4049 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4052 // CEMode
4053 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN, &test_value);
4054 if (!(test_value >= 1 && test_value <= 2))
4056 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1..2]");
4059 // DMRS scrambling init
4060 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrabmling_init, 2, ENC_BIG_ENDIAN, &test_value);
4061 if (test_value > 503)
4063 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
4066 // Initial transmission SF (io)
4067 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
4068 if (!(test_value <= 10239 || test_value == 0xFFFF))
4070 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
4073 // Transmission power
4074 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
4075 if (test_value > 10000)
4077 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
4080 // DCI format
4081 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
4082 if (!(test_value == 10 || test_value == 11 || test_value == 12))
4084 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [10, 11, 12]");
4087 // Resource block coding
4088 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 2, ENC_BIG_ENDIAN);
4090 // MCS
4091 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
4092 if (test_value > 15)
4094 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..15]");
4097 // PDSCH repetition levels
4098 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_reception_levels, 1, ENC_BIG_ENDIAN, &test_value);
4099 if (!(test_value >= 1 && test_value <= 8))
4101 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch repetition levels value [1..8]");
4104 // Redundancy version
4105 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
4106 if (test_value > 3)
4108 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
4111 // New data indicator
4112 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator, 1, ENC_BIG_ENDIAN, &test_value);
4113 if (test_value > 1)
4115 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
4118 // HARQ process
4119 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
4120 if (test_value > 15)
4122 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
4125 // TPMI length
4126 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi_length, 1, ENC_BIG_ENDIAN, &test_value);
4127 if (!(test_value == 0 || test_value == 2 || test_value == 4))
4129 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi length value [0, 2, 4]");
4132 // TPMI
4133 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
4134 if (test_value > 15)
4136 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..15]");
4139 // PMI flag
4140 ptvcursor_add(ptvc, hf_nfapi_pmi_flag, 1, ENC_BIG_ENDIAN);
4142 // PMI
4143 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN, &test_value);
4144 if (test_value > 1)
4146 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pmi value [0..1]");
4149 // HARQ resource offset
4150 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_resource_offset, 1, ENC_BIG_ENDIAN, &test_value);
4151 if (test_value > 3)
4153 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq resource offset value [0..3]");
4156 // DCI subframe repetition number
4157 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN, &test_value);
4158 if (!(test_value >= 1 && test_value <= 4))
4160 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
4163 // TPC
4164 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
4165 if (test_value > 3)
4167 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
4170 // Downlink assignment Index Length
4171 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index_length, 1, ENC_BIG_ENDIAN, &test_value);
4172 if (!(test_value == 0 || test_value == 2 || test_value == 4))
4174 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment Index length value [0, 2, 4]");
4177 // Downlink assignment index
4178 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
4179 if (test_value > 15)
4181 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment Index value [0..15]");
4184 // Allocate PRACH flag
4185 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN, &test_value);
4186 if (test_value > 1)
4188 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
4191 // Preamble index
4192 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN, &test_value);
4193 if (test_value > 63)
4195 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble Index value [0..63]");
4198 // PRACH mask index
4199 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN, &test_value);
4200 if (test_value > 15)
4202 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask Index value [0..15]");
4205 // Starting CE Level
4206 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_starting_ce_level, 1, ENC_BIG_ENDIAN, &test_value);
4207 if (test_value > 3)
4209 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting ce level value [0..3]");
4212 // SRS request
4213 ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
4215 // Antenna ports and scrambling identity flag
4216 ptvcursor_add(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity_flag, 1, ENC_BIG_ENDIAN);
4218 // Antenna ports and scrambling identity
4219 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity, 1, ENC_BIG_ENDIAN, &test_value);
4220 if (test_value > 3)
4222 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports and scrambling identity value [0..3]");
4225 // Frequency hopping enabled flag
4226 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4227 if (test_value > 1)
4229 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
4232 // Paging/Direct indication differentiation flag
4233 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_paging_direct_indication_differentiation_flag, 1, ENC_BIG_ENDIAN, &test_value);
4234 if (test_value > 1)
4236 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid paging/direct indication differentiation flag value [0..1]");
4239 // Direct indication
4240 ptvcursor_add(ptvc, hf_nfapi_direct_indication, 1, ENC_BIG_ENDIAN);
4242 // Total DCI length including padding
4243 ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
4245 // Number of TX Antenna ports
4246 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN, &count);
4248 dissect_array_value(ptvc, pinfo, "Precoding", ett_nfapi_precoding, count, dissect_precoding_value);
4250 static void dissect_ul_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
4252 proto_item* item;
4253 uint32_t test_value, size;
4255 // PDU Type
4256 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_config_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
4257 if (test_value > 15)
4259 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul pdu type value [0..15]");
4262 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
4264 unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
4265 dissect_tlv_list(ptvc, pinfo, pdu_end);
4267 static void dissect_ul_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
4269 proto_item* item;
4270 uint32_t test_value, num_pdu;
4272 // Number of PDUs
4273 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 1, ENC_BIG_ENDIAN, &num_pdu);
4275 // RACH/PRACH frequency resources
4276 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rach_prach_frequency_resources, 1, ENC_BIG_ENDIAN, &test_value);
4277 if (test_value > 1)
4279 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach prach frequency resources value [0..1]");
4282 // SRS present
4283 ptvcursor_add(ptvc, hf_nfapi_srs_present, 1, ENC_BIG_ENDIAN);
4285 dissect_array_value(ptvc, pinfo, "UL Config PDU List", ett_nfapi_ul_config_request_pdu_list, num_pdu, dissect_ul_config_pdu);
4287 static void dissect_ul_config_ulsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4289 proto_item* item;
4290 uint32_t test_value;
4292 // Handle
4293 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
4295 // Size
4296 ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
4298 // RNTI
4299 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4300 if (!(test_value >= 1))
4302 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4305 // Resource block start
4306 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
4307 if (test_value > 99)
4309 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
4312 // Number of resource blocks
4313 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4314 if (!(test_value >= 1 && test_value <= 100))
4316 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..100]");
4319 // Modulation type
4320 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN, &test_value);
4321 if (!(test_value == 2 || test_value == 4 || test_value == 6))
4323 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation type value [2, 4, 6]");
4326 // Cyclic Shift 2 for DMRS
4327 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
4328 if (test_value > 99)
4330 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
4333 // Frequency hopping enabled flag
4334 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4335 if (test_value > 1)
4337 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
4340 // Frequency hopping bits
4341 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN, &test_value);
4342 if (test_value > 3)
4344 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
4347 // New data indication
4348 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
4349 if (test_value > 1)
4351 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
4354 // Redundancy version
4355 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
4356 if (test_value > 3)
4358 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
4361 // HARQ process number
4362 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process_number, 1, ENC_BIG_ENDIAN, &test_value);
4363 if (test_value > 15)
4365 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process number value [0..15]");
4368 // UL Tx mode
4369 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_tx_mode, 1, ENC_BIG_ENDIAN, &test_value);
4370 if (test_value > 1)
4372 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul tx mode value [0..1]");
4375 // Current TX NB
4376 ptvcursor_add(ptvc, hf_nfapi_current_tx_nb, 1, ENC_BIG_ENDIAN);
4378 // N srs
4379 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_srs, 1, ENC_BIG_ENDIAN, &test_value);
4380 if (test_value > 1)
4382 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n_srs value [0..1]");
4385 static void dissect_ul_config_ulsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4387 proto_item* item;
4388 uint32_t test_value;
4390 // Resource allocation type
4391 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
4392 if (test_value > 1)
4394 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
4397 // Resource block coding
4398 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
4400 // Transport blocks
4401 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4402 if (!(test_value >= 1 && test_value <= 2))
4404 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
4407 // Transmission scheme
4408 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
4409 if (test_value > 1)
4411 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..1]");
4414 // Number Of layers
4415 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
4416 if (!(test_value >= 1 && test_value <=4 ))
4418 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
4421 // Codebook Index
4422 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN, &test_value);
4423 if (test_value > 23)
4425 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [0..23]");
4428 // Disable sequence hopping flag
4429 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_disable_sequence_hopping_flag, 1, ENC_BIG_ENDIAN, &test_value);
4430 if (test_value > 1)
4432 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid disable sequence hopping flag value [0..1]");
4435 static void dissect_ul_config_ulsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
4437 proto_item* item;
4438 uint32_t test_value;
4440 // Virtual cell ID enabled flag
4441 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4442 if (test_value > 1)
4444 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
4447 // nPUSCH Identity
4448 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_npusch_identity, 2, ENC_BIG_ENDIAN, &test_value);
4449 if (test_value > 509)
4451 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npusch identity value [0..509]");
4454 // DMRS Config flag
4455 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
4456 if (test_value > 1)
4458 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
4461 // nDMRS-CSH Identity
4462 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ndrms_csh_identity, 2, ENC_BIG_ENDIAN, &test_value);
4463 if (test_value > 509)
4465 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ndrms-csh identity value [0..509]");
4469 static void dissect_ul_config_ulsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4471 proto_item* item;
4472 uint32_t test_value;
4474 // UE Type
4475 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
4476 if (test_value > 2)
4478 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
4481 // Total Number of repetitions
4482 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN, &test_value);
4483 if (!(test_value >= 1 && test_value <= 2048))
4485 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..2048]");
4488 // Repetition Number
4489 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN, &test_value);
4490 if (!(test_value >= 1 && test_value <= 2048))
4492 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..2048]");
4495 // Initial transmission SF (io)
4496 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_sf_io, 2, ENC_BIG_ENDIAN, &test_value);
4497 if (!(test_value <= 10239 || test_value == 0xFFFF))
4499 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [0..10239, 0xFFFF]");
4502 // Empty symbols due to re-tunning
4503 // todo : decode as a bitmap
4504 ptvcursor_add(ptvc, hf_nfapi_empty_symbols_due_to_retunning, 1, ENC_BIG_ENDIAN);
4506 static void dissect_ul_config_init_tx_params_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4508 proto_item* item;
4509 uint32_t test_value;
4511 // N srs initial
4512 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_srs_initial, 1, ENC_BIG_ENDIAN, &test_value);
4513 if (test_value > 1)
4515 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs initial value [0..1]");
4518 // Initial number of resource blocks
4519 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4520 if (!(test_value >= 1 && test_value <= 100))
4522 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial number of resource blocks value [1..100]");
4526 static void dissect_ul_config_cqi_ri_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4528 proto_item* item;
4529 uint32_t test_value;
4531 // DL CQI/PMI Size Rank = 1
4532 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_1, 1, ENC_BIG_ENDIAN);
4534 // DL CQI/PMI Size Rank>1
4535 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_greater_1, 1, ENC_BIG_ENDIAN);
4537 // RI Size
4538 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN, &test_value);
4539 if (test_value > 3)
4541 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri size value [0..3]");
4544 // Delta Offset CQI
4545 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN, &test_value);
4546 if (test_value > 15)
4548 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
4551 // Delta Offset RI
4552 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN, &test_value);
4553 if (test_value > 15)
4555 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
4559 static void dissect_ul_config_cqi_ri_info_rel9_later_value(ptvcursor_t * ptvc, packet_info* pinfo)
4561 proto_item* item;
4562 uint32_t test_value;
4563 bool type;
4565 // Report type
4566 ptvcursor_add_ret_boolean(ptvc, hf_nfapi_report_type, 1, ENC_BIG_ENDIAN, &type);
4568 // Delta offset CQI
4569 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN, &test_value);
4570 if (test_value > 15)
4572 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
4575 // Delta offset RI
4576 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN, &test_value);
4577 if (test_value > 15)
4579 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
4582 if (type)
4584 // todo : encoder not right for this case.
4585 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cc, 1, ENC_BIG_ENDIAN, &test_value);
4587 if (!(test_value >= 1 && test_value <= 32))
4589 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of cc value [1..32]");
4593 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "CCs");
4595 for (int i = 0; i < num_cc; ++i)
4597 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", i);
4599 uint8_t ri_size = tvb_get_uint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
4600 ptvcursor_add(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN);
4602 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Rank");
4604 for (int j = 0; j < ri_size; ++j)
4606 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", j);
4607 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
4608 ptvcursor_pop_subtree(ptvc);
4611 ptvcursor_pop_subtree(ptvc);
4613 ptvcursor_pop_subtree(ptvc);
4616 ptvcursor_pop_subtree(ptvc);
4618 } else {
4619 // DL CQI/PMI/RI size
4620 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_ri_pmi_size, 1, ENC_BIG_ENDIAN);
4622 // Control Type
4623 ptvcursor_add(ptvc, hf_nfapi_control_type, 1, ENC_BIG_ENDIAN);
4626 static void dissect_ul_config_cqi_ri_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4628 uint32_t test_value;
4630 // DL CQI/PMI/RI size 2
4631 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_cqi_ri_pmi_size_2, 2, ENC_BIG_ENDIAN, &test_value);
4632 if (test_value < 255)
4634 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl cqi ri pmi size 2 value [>= 255]");
4637 static void dissect_ul_config_harq_info_ulsch_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4639 proto_item* item;
4640 uint32_t test_value;
4642 // HARQ Size
4643 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4644 if (test_value > 21)
4646 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
4649 // Delta Offset HARQ
4650 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_harq, 1, ENC_BIG_ENDIAN, &test_value);
4651 if (test_value > 15)
4653 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq value [0..15]");
4656 // ACK_NACK mode
4657 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &test_value);
4658 if (test_value > 5)
4660 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
4663 static void dissect_ul_config_harq_info_ulsch_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4665 proto_item* item;
4666 uint32_t test_value;
4668 // HARQ Size 2
4669 ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
4671 // Delta Offset HARQ 2
4672 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_harq_2, 1, ENC_BIG_ENDIAN, &test_value);
4673 if (test_value > 15)
4675 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq 2 value [0..15]");
4678 static void dissect_ul_config_ue_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4680 proto_item* item;
4681 uint32_t test_value;
4683 // Handle
4684 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
4686 // RNTI
4687 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4688 if (test_value < 1)
4690 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4693 static void dissect_ul_config_ue_info_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
4695 proto_item* item;
4696 uint32_t test_value;
4698 // Virtual cell ID enabled flag
4699 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4700 if (test_value > 1)
4702 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
4705 // nPUCCH Identity
4706 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_npucch_identity, 2, ENC_BIG_ENDIAN, &test_value);
4707 if (test_value > 503)
4709 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch identity value [0..503]");
4713 static void dissect_ul_config_ue_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4715 proto_item* item;
4716 uint32_t test_value;
4718 // UE Type
4719 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
4720 if (test_value > 2)
4722 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
4725 // Empty symbols
4726 // todo : use bit map decoding
4727 ptvcursor_add(ptvc, hf_nfapi_empty_symbols, 1, ENC_BIG_ENDIAN);
4729 // Total Number of repetitions
4730 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN, &test_value);
4731 if (!(test_value >= 1 && test_value <= 32))
4733 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..32]");
4736 // Repetition Number
4737 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN, &test_value);
4738 if (!(test_value >= 1 && test_value <= 32))
4740 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..32]");
4744 static void dissect_ul_config_cqi_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4746 proto_item* item;
4747 uint32_t test_value;
4749 // PUCCH index
4750 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index, 2, ENC_BIG_ENDIAN, &test_value);
4751 if (test_value > 1184)
4753 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index value [0..1184]");
4756 // DL CQI/PMI Size
4757 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
4759 static void dissect_ul_config_cqi_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4761 proto_item* item;
4762 uint32_t test_value;
4764 // Number of PUCCH Resources
4765 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4766 if (!(test_value >= 1 && test_value <= 2))
4768 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [1..2]");
4771 //PUCCH Index P1
4772 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN, &test_value);
4773 if (test_value > 1184)
4775 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index p1 value [0..1184]");
4778 static void dissect_ul_config_cqi_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4780 proto_item* item;
4781 uint32_t test_value;
4783 // CSI_mode
4784 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_mode, 1, ENC_BIG_ENDIAN, &test_value);
4785 if (test_value > 2)
4787 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi mode value [0..2]");
4790 // DL CQI/PMI Size 2
4791 ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_2, 2, ENC_BIG_ENDIAN);
4793 // Starting PRB
4794 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_statring_prb, 1, ENC_BIG_ENDIAN, &test_value);
4795 if (test_value > 109)
4797 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
4800 // n_PRB
4801 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
4802 if (test_value > 7)
4804 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
4807 // cdm_Index
4808 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN, &test_value);
4809 if (test_value > 1)
4811 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm Index value [0..1]");
4814 // N srs
4815 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN, &test_value);
4816 if (test_value > 1)
4818 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
4822 static void dissect_ul_config_sr_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4824 uint32_t test_value;
4825 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index, 1, ENC_BIG_ENDIAN, &test_value);
4826 if (test_value > 2047)
4828 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index value [0..2047]");
4831 static void dissect_ul_config_sr_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4833 proto_item* item;
4834 uint32_t test_value;
4836 // Number of PUCCH Resources
4837 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4838 if (!(test_value >= 1 && test_value <= 2))
4840 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [1..2]");
4843 // PUCCH Index P1
4844 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN, &test_value);
4845 if (test_value > 2047)
4847 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index p1 value [0..2047]");
4850 static void dissect_ul_config_harq_info_uci_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4852 proto_item* item;
4853 uint32_t test_value, ack_nack_mode_value;
4855 // HARQ size
4856 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4857 if (test_value > 21)
4859 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
4862 // ACK_NACK mode
4863 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &ack_nack_mode_value);
4864 if (ack_nack_mode_value > 5)
4866 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
4869 // Number of PUCCH resources
4870 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4871 if (test_value > 4)
4873 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [0..4]");
4876 // n_PUCCH_1_0
4877 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4878 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
4880 if (test_value > 2047)
4882 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047] (All Format 1a/1b)");
4885 else if (ack_nack_mode_value == 3)
4887 if (test_value > 549)
4889 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..549] (Format 3)");
4893 // n_PUCCH_1_1
4894 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN, &test_value);
4895 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
4897 if (test_value > 2047)
4899 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 1 value [0..2047] (All Format 1a/1b)");
4903 // n_PUCCH_1_2
4904 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN, &test_value);
4905 if (ack_nack_mode_value == 2)
4907 if (test_value > 2047)
4909 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 2 value [0..2047] (All Format 1a/1b)");
4913 // n_PUCCH_1_3
4914 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN, &test_value);
4915 if (ack_nack_mode_value == 2)
4917 if (test_value > 2047)
4919 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 3 value [0..2047] (All Format 1a/1b)");
4923 static void dissect_ul_config_harq_info_uci_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4925 proto_item* item;
4926 uint32_t test_value;
4928 // n_PUCCH_1_0
4929 // todo : how to work out the ack_nack mode?
4930 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4931 if (test_value > 2047)
4933 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047]");
4936 // HARQ Size
4937 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4938 if (!(test_value >= 1 && test_value <= 2))
4940 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..2]");
4943 static void dissect_ul_config_harq_info_uci_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4945 proto_item *item, *harq_size_item;
4946 uint32_t test_value, harq_size_value, ack_nack_mode_value;
4948 // HARQ Size
4949 harq_size_item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &harq_size_value);
4951 // ACK_NAK mode
4952 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &ack_nack_mode_value);
4953 if (ack_nack_mode_value > 4)
4955 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..4]");
4958 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 2)
4960 if (!(harq_size_value >= 1 && harq_size_value <= 10))
4962 expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [1..10] (Format 1a/1b/3)");
4965 else if (ack_nack_mode_value == 3 || ack_nack_mode_value == 4)
4967 if (harq_size_value != 0)
4969 expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
4973 // Number of PUCCH Resources
4974 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4975 if (test_value == 0 || test_value == 2)
4977 if (!(harq_size_value >= 1 && harq_size_value <= 4))
4979 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..4] (Format 1a/1b/3)");
4982 else if (test_value == 3 || test_value == 4)
4984 if (harq_size_value != 0)
4986 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
4990 // n_PUCCH_1_0
4991 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4992 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
4994 if (test_value > 2047)
4996 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..2047] (Format 1a/1b/channel selection)");
4999 else if (ack_nack_mode_value == 2)
5001 if (test_value > 549)
5003 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..549] (Format 3)");
5007 // n_PUCCH_1_1
5008 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN, &test_value);
5009 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5011 if (test_value > 2047)
5013 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 1 value [0..2047] (Format 1a/1b/channel selection)");
5017 // n_PUCCH_1_2
5018 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN, &test_value);
5019 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5021 if (test_value > 2047)
5023 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 2 value [0..2047] (Format 1a/1b/channel selection)");
5027 // n_PUCCH_1_3
5028 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN, &test_value);
5029 if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5031 if (test_value > 2047)
5033 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 3 value [0..2047] (Format 1a/1b/channel selection)");
5037 static void dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5039 proto_item* item;
5040 uint32_t test_value;
5042 // Num_ant_ports
5043 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_ant_ports, 1, ENC_BIG_ENDIAN, &test_value);
5044 if (!(test_value >= 1 && test_value <= 2))
5046 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num ant ports value [1..2]");
5049 // n_PUCCH_2_0
5050 // todo : how to work out the ack nack mode
5051 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_0, 2, ENC_BIG_ENDIAN, &test_value);
5052 if (test_value > 2047)
5054 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 0 value [0..2047]");
5057 // n_PUCCH_2_1
5058 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_1, 2, ENC_BIG_ENDIAN, &test_value);
5059 if (test_value > 2047)
5061 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 1 value [0..2047]");
5064 // n_PUCCH_2_2
5065 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_2, 2, ENC_BIG_ENDIAN, &test_value);
5066 if (test_value > 2047)
5068 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 2 value [0..2047]");
5071 // n_PUCCH_2_3
5072 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_3, 2, ENC_BIG_ENDIAN, &test_value);
5073 if (test_value > 2047)
5075 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 3 value [0..2047]");
5079 static void dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5081 proto_item* item;
5082 uint32_t test_value;
5084 // HARQ Size 2
5085 ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
5087 // Starting PRB
5088 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_starting_prb, 1, ENC_BIG_ENDIAN, &test_value);
5089 if (test_value > 109)
5091 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
5094 // n_PRB
5095 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
5096 if (test_value > 109)
5098 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
5101 // cdm_Index
5102 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN, &test_value);
5103 if (test_value > 1)
5105 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm Index value [0..1]");
5108 // N srs
5109 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN, &test_value);
5110 if (test_value > 1)
5112 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
5115 static void dissect_ul_config_srs_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5117 proto_item* item;
5118 uint32_t test_value;
5120 // Handle
5121 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
5123 // Size
5124 ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
5126 // RNTI
5127 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5128 if (test_value < 1)
5130 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5133 // SRS Bandwidth
5134 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
5135 if (test_value > 3)
5137 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth value [0..3]");
5140 // Frequency Domain Position
5141 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_domain_position, 1, ENC_BIG_ENDIAN, &test_value);
5142 if (test_value > 23)
5144 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency domain bandwidth value [0..23]");
5147 // SRS Hopping Bandwidth
5148 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_hopping_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
5149 if (test_value > 3)
5151 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs hopping bandwidth value [0..3]");
5154 // Transmission Comb
5155 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_comb, 1, ENC_BIG_ENDIAN, &test_value);
5156 if (test_value > 3)
5158 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission comb value [0..3]");
5161 // ISRS / SRS-ConfigIndex
5162 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_i_srs, 2, ENC_BIG_ENDIAN, &test_value);
5163 if (test_value > 1023)
5165 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid isrs/srs-configindex value [0..1023]");
5168 // Sounding Reference Cyclic Shift
5169 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sounding_reference_cyclic_shift, 1, ENC_BIG_ENDIAN, &test_value);
5170 if (test_value > 11)
5172 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sounding reference cyclic shift value [0..11]");
5175 static void dissect_ul_config_srs_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
5177 uint32_t test_value;
5179 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_port, 1, ENC_BIG_ENDIAN, &test_value);
5180 if (test_value > 2)
5182 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna port value [0..2]");
5185 static void dissect_ul_config_srs_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
5187 uint32_t test_value;
5189 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_combs, 1, ENC_BIG_ENDIAN, &test_value);
5190 if (test_value > 1)
5192 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of combs value [0..1]");
5195 static void dissect_hi_dci0_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
5197 uint32_t test_value, size;
5199 // PDU Type
5200 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_hi_dci0_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
5201 if (test_value > 3)
5203 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..3]");
5206 // PDU Size
5207 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
5209 unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
5210 dissect_tlv_list(ptvc, pinfo, pdu_end);
5212 static void dissect_hi_dci0_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
5214 uint32_t test_value, num_pdu;
5216 // SFN/SF
5217 ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
5219 // Number of DCI
5220 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_dci_pdus, 1, ENC_BIG_ENDIAN, &num_pdu);
5222 // Number of HI
5223 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_hi_pdus, 1, ENC_BIG_ENDIAN, &test_value);
5224 num_pdu += test_value;
5226 dissect_array_value(ptvc, pinfo, "HI DCI0 PDU List", ett_nfapi_hi_dci0_request_pdu_list, num_pdu, dissect_hi_dci0_pdu);
5228 static void dissect_hi_dci0_hi_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5230 proto_item* item;
5231 uint32_t test_value;
5233 // Resource block start
5234 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5235 if (test_value > 100)
5237 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
5240 // Cyclic Shift 2 for DMRS
5241 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
5242 if (test_value > 7)
5244 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
5247 // HI value
5248 ptvcursor_add(ptvc, hf_nfapi_hi_value, 1, ENC_BIG_ENDIAN);
5250 // I_PHICH
5251 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_i_phich, 1, ENC_BIG_ENDIAN, &test_value);
5252 if (test_value > 1)
5254 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid i phich value [0..1]");
5257 // Transmission power
5258 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5259 if (test_value > 10000)
5261 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5265 static void dissect_hi_dci0_hi_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
5267 // Flag TB2
5268 ptvcursor_add(ptvc, hf_nfapi_flag_tb2, 1, ENC_BIG_ENDIAN);
5270 // HI Value 2
5271 ptvcursor_add(ptvc, hf_nfapi_hi_value_2, 1, ENC_BIG_ENDIAN);
5273 static void dissect_hi_dci0_dci_ul_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5275 proto_item* item;
5276 uint32_t test_value;
5278 // DCI format
5279 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
5280 if (test_value > 4)
5282 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..4]");
5285 // CCE index
5286 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN, &test_value);
5287 if (test_value > 88)
5289 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce Index value [0..88]");
5292 // Aggregation level
5293 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
5294 if (!(test_value == 1 || test_value == 2 || test_value == 4 ||
5295 test_value == 8))
5297 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8]");
5300 // RNTI
5301 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5302 if (test_value < 1)
5304 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5307 // Resource block start
5308 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5309 if (test_value > 100)
5311 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
5314 // Number of resource blocks
5315 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
5316 if (test_value > 100)
5318 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [0..100]");
5321 // MCS_1
5322 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN, &test_value);
5323 if (test_value > 31)
5325 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
5328 // Cyclic Shift 2 for DMRS
5329 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
5330 if (test_value > 7)
5332 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
5335 // Frequency hopping enabled flag
5336 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
5337 if (test_value > 1)
5339 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
5342 // Frequency hopping bits
5343 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN, &test_value);
5344 if (test_value > 3)
5346 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
5349 // New Data indication_1
5350 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
5351 if (test_value > 1)
5353 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
5356 // UE TX antenna selection
5357 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_tx_antenna_selection, 1, ENC_BIG_ENDIAN, &test_value);
5358 if (test_value > 2)
5360 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue tx antenna selection value [0..2]");
5363 // TPC
5364 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
5365 if (test_value > 3)
5367 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value value [0..3]");
5370 // CQI/CSI request
5371 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cqi_csi_request, 1, ENC_BIG_ENDIAN, &test_value);
5372 if (test_value > 7)
5374 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cqi csi value [0..7]");
5377 // UL index
5378 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN, &test_value);
5379 if (test_value > 3)
5381 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul Index value [0..3]");
5384 // DL assignment index
5385 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
5386 if (!(test_value >= 1 && test_value <= 4))
5388 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment Index value [1..4]");
5391 // TPC bitmap
5392 ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
5394 // Transmission power
5395 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5396 if (test_value > 10000)
5398 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5402 static void dissect_hi_dci0_dci_ul_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
5404 proto_item* item;
5405 uint32_t test_value, number_of_antenna_ports_value;
5407 // Cross carrier scheduling flag
5408 ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
5410 // Carrier indicator
5411 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN, &test_value);
5412 if (test_value > 7)
5414 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
5417 // Size of CQI/CSI field
5418 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_size_of_cqi_csi_field, 1, ENC_BIG_ENDIAN, &test_value);
5419 if (test_value > 2)
5421 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid size of cqi/csi field value [0..2]");
5424 // SRS flag
5425 ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
5427 // SRS request
5428 ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
5430 // Resource allocation flag
5431 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_flag, 1, ENC_BIG_ENDIAN, &test_value);
5432 if (test_value > 1)
5434 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation flag value [0..1]");
5437 // Resource allocation type
5438 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
5439 if (test_value > 1)
5441 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
5444 // Resource block coding
5445 ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
5447 // MCS_2
5448 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN, &test_value);
5449 if (test_value > 31)
5451 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
5454 // New data indication_2
5455 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication_two, 1, ENC_BIG_ENDIAN, &test_value);
5456 if (test_value > 1)
5458 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication 2 value [0..1]");
5461 // Number of antenna ports
5462 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_antenna_ports, 1, ENC_BIG_ENDIAN, &number_of_antenna_ports_value);
5463 if (number_of_antenna_ports_value > 2)
5465 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of antenna ports value [0..2]");
5468 // TPMI
5469 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
5470 if (number_of_antenna_ports_value == 2)
5472 if (test_value > 7)
5474 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..7]");
5477 else if (number_of_antenna_ports_value == 4)
5479 if (test_value > 63)
5481 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..63]");
5485 // Total DCI length including padding
5486 ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
5488 // N_UL_RB
5489 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_ul_rb, 1, ENC_BIG_ENDIAN, &test_value);
5490 if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 ||
5491 test_value == 75 || test_value == 100))
5493 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n ul rb value [6, 15, 25, 50, 75, 100]");
5496 static void dissect_hi_dci0_dci_ul_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
5498 proto_item* item;
5499 uint32_t test_value;
5501 // PSCCH Resource
5502 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pscch_resource, 1, ENC_BIG_ENDIAN, &test_value);
5503 if (test_value > 0x3F)
5505 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pscch resource value [0..0x3F]");
5508 // Time resource pattern
5509 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_time_resource_pattern, 1, ENC_BIG_ENDIAN, &test_value);
5510 if (test_value > 0x7F)
5512 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid time resource pattern value [0..0x7F]");
5516 static void dissect_hi_dci0_mdpcch_dci_ul_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
5518 proto_item* item;
5519 uint32_t test_value, dci_format_value, count;
5521 // MPDCCH Narrowband
5522 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN, &test_value);
5523 if (test_value > 15)
5525 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
5528 // Number of PRB pairs
5529 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN, &test_value);
5530 if (!(test_value == 2 || test_value == 4 || test_value == 6))
5532 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pairs value [2, 4, 6]");
5535 // Resource Block Assignment
5536 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN, &test_value);
5537 if (test_value > 14)
5539 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
5542 // MPDCCH transmission type
5543 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN, &test_value);
5544 if (test_value > 1)
5546 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
5549 // Start symbol
5550 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
5551 if (!(test_value >= 1 && test_value <=4))
5553 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [0..1]");
5556 // ECCE index
5557 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN, &test_value);
5558 if (test_value > 22)
5560 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce Index value [0..22]");
5563 // Aggregation level
5564 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
5565 if (!(test_value == 2 || test_value == 4 || test_value == 8 ||
5566 test_value == 16 || test_value == 24))
5568 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
5571 // RNTI type
5572 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
5573 if (!(test_value == 0 || test_value == 4))
5575 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0, 4]");
5578 // RNTI
5579 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5580 if (test_value < 1)
5582 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5585 // CEMode
5586 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN, &test_value);
5587 if (!(test_value == 1 || test_value == 2))
5589 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1,2]");
5592 // DMRS scrambling init
5593 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrambling_init, 2, ENC_BIG_ENDIAN, &test_value);
5594 if (test_value < 503)
5596 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
5599 // Initial transmission SF (io)
5600 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
5601 if (!(test_value <= 10239 || test_value == 0xFFFF))
5603 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
5606 // Transmission power
5607 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5608 if (test_value > 10000)
5610 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5613 // DCI format
5614 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_ul_dci_format, 1, ENC_BIG_ENDIAN, &dci_format_value);
5615 if (!(dci_format_value == 1 || dci_format_value == 2 || dci_format_value == 4 || dci_format_value == 5))
5617 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [1, 2, 4, 5]");
5620 // Resource block start
5621 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5622 if (test_value > 99)
5624 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
5627 // Number of resource blocks
5628 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
5629 if (!(test_value >= 1 && test_value <= 6))
5631 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..6]");
5634 // MCS
5635 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
5636 if (test_value > 15)
5638 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0..15]");
5641 // PUSCH repetition levels
5642 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pusch_repetition_levels, 1, ENC_BIG_ENDIAN, &test_value);
5643 if (dci_format_value == 4)
5645 if (!(test_value >= 1 && test_value <= 4))
5647 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..4]");
5650 else if (dci_format_value == 5)
5652 if (!(test_value >= 1 && test_value <= 8))
5654 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..8]");
5658 // Frequency hopping flag
5659 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_flag, 1, ENC_BIG_ENDIAN, &test_value);
5660 if (test_value > 1)
5662 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping flag value [0..1]");
5665 // New Data indication
5666 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
5667 if (test_value > 1)
5669 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
5672 // HARQ process
5673 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
5674 if (test_value > 7)
5676 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..7]");
5679 // Redundancy version
5680 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
5681 if (test_value > 3)
5683 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
5686 // TPC
5687 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
5688 if (test_value > 3)
5690 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
5693 // CSI request
5694 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_request, 1, ENC_BIG_ENDIAN, &test_value);
5695 if (test_value > 1)
5697 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi request value [0..1]");
5700 // UL index
5701 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN, &test_value);
5702 if (test_value > 3)
5704 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul Index value [0..3]");
5707 // DAI presence flag
5708 ptvcursor_add(ptvc, hf_nfapi_dai_presence_flag, 1, ENC_BIG_ENDIAN);
5710 // DL assignment index
5711 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
5712 if (!(test_value >=1 && test_value <= 4))
5714 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment value [1, 2, 3, 4]");
5717 // SRS request
5718 ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
5720 // DCI subframe repetition number
5721 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN, &test_value);
5722 if (!(test_value >= 1 && test_value <= 4))
5724 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
5727 //TPC bitmap
5728 ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
5730 // Total DCI length including padding
5731 ptvcursor_add(ptvc, hf_nfapi_total_dci_length_include_padding, 1, ENC_BIG_ENDIAN);
5733 // Number of TX Antenna ports
5734 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN, &count);
5736 dissect_array_value(ptvc, pinfo, "TX Antenna Ports", ett_nfapi_tx_antenna_ports, count, dissect_precoding_value);
5738 static void dissect_rx_ue_info_value(ptvcursor_t * ptvc, packet_info* pinfo)
5740 uint32_t test_value;
5742 // Handle
5743 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
5745 // RNTI
5746 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5747 if (test_value < 1)
5749 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5752 static void dissect_rx_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5754 proto_item* item;
5755 uint32_t test_value;
5757 // Length
5758 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
5760 // Data offset
5761 ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
5763 // UL_CQI
5764 ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
5766 // Timing advance
5767 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
5768 if (test_value > 63)
5770 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
5773 static void dissect_rx_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
5775 uint32_t test_value;
5777 // Timing advance R9
5778 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
5779 if (test_value > 7690)
5781 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance r9 value [0..7690]");
5785 static void dissect_harq_indication_data_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5787 proto_item* item;
5788 uint32_t test_value;
5790 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5791 if (!(test_value >= 1 && test_value <= 7))
5793 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5796 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN, &test_value);
5797 if (!(test_value >= 1 && test_value <= 7))
5799 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
5802 static void dissect_harq_indication_data_format_1a_1b_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5804 uint32_t test_value;
5806 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5807 if (!(test_value >= 1 && test_value <= 7))
5809 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5812 static void dissect_harq_indication_data_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo)
5814 proto_item* item;
5815 uint32_t test_value;
5817 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5818 if (!(test_value >= 1 && test_value <= 7))
5820 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5823 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN, &test_value);
5824 if (!(test_value >= 1 && test_value <= 7))
5826 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
5829 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_2, 1, ENC_BIG_ENDIAN, &test_value);
5830 if (!(test_value >= 1 && test_value <= 7))
5832 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 2 [1..7]");
5835 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_3, 1, ENC_BIG_ENDIAN, &test_value);
5836 if (!(test_value >= 1 && test_value <= 7))
5838 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 3 [1..7]");
5842 static void dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo)
5844 uint32_t test_value;
5845 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5846 if (!(test_value >= 1 && test_value <= 7))
5848 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5851 static void dissect_harq_indication_data_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5853 uint32_t test_value;
5854 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN, &test_value);
5856 if (test_value > 4)
5858 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
5861 static void dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5863 uint32_t test_value;
5864 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN, &test_value);
5865 if (test_value > 4)
5867 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
5870 static void dissect_harq_indication_data_channel_selection_value(ptvcursor_t * ptvc, packet_info* pinfo)
5872 uint32_t test_value;
5873 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5874 if (!(test_value >= 1 && test_value <= 7))
5876 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5879 static void dissect_harq_indication_data_format_3_value(ptvcursor_t * ptvc, packet_info* pinfo)
5881 uint32_t test_value;
5882 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5883 if (!(test_value >= 1 && test_value <= 7))
5885 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5888 static void dissect_harq_indication_data_format_4_value(ptvcursor_t * ptvc, packet_info* pinfo)
5890 uint32_t test_value;
5891 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5892 if (!(test_value >= 1 && test_value <= 7))
5894 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5897 static void dissect_harq_indication_data_format_5_value(ptvcursor_t * ptvc, packet_info* pinfo)
5899 uint32_t test_value;
5900 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5901 if (!(test_value >= 1 && test_value <= 7))
5903 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5906 static void dissect_harq_indication_rel8_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5908 proto_item* item;
5909 uint32_t test_value, mode;
5911 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
5912 if (mode > 4)
5914 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
5917 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &test_value);
5918 if (!(test_value >= 1 && test_value <= 4))
5920 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
5923 switch (mode)
5925 case 0:
5927 dissect_harq_indication_data_bundling_value(ptvc, pinfo);
5928 break;
5930 case 1:
5932 dissect_harq_indication_data_multplexing_value(ptvc, pinfo);
5933 break;
5935 case 2:
5937 dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
5938 break;
5942 static void dissect_harq_indication_rel9_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5944 proto_item* item;
5945 uint32_t mode, i, count;
5947 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
5948 if (mode > 4)
5950 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
5953 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &count);
5954 if (mode == 0 || mode == 1)
5956 if (!(count >= 1 && count <= 4))
5958 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
5961 else if (mode == 3)
5963 if (!(count >= 1 && count <= 8))
5965 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
5968 else if (mode == 4)
5970 if (!(count >= 1 && count <= 21))
5972 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
5977 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
5979 for (i = 0; i < count; ++i)
5981 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%u]", i);
5983 switch (mode)
5985 case 0:
5987 dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
5988 break;
5990 case 1:
5992 dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
5993 break;
5995 case 2:
5997 dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvc, pinfo);
5998 break;
6000 case 3:
6002 dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
6003 break;
6005 case 4:
6007 dissect_harq_indication_data_format_3_value(ptvc, pinfo);
6008 break;
6012 ptvcursor_pop_subtree(ptvc);
6015 ptvcursor_pop_subtree(ptvc);
6017 static void dissect_harq_indication_rel13_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6019 proto_item* item;
6020 uint32_t mode, i, count;
6022 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
6023 if (mode > 6)
6025 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..6]");
6028 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN, &count);
6029 if (mode == 0 || mode == 1)
6031 if (!(count >= 1 && count <= 4))
6033 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
6036 else if (mode == 3)
6038 if (!(count >= 1 && count <= 8))
6040 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
6043 else if (mode == 4)
6045 if (!(count >= 1 && count <= 21))
6047 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
6050 else if (mode == 5 || mode == 6)
6052 if (count < 22)
6054 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [>= 22]");
6059 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
6061 for (i = 0; i < count; ++i)
6063 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%u]", i);
6065 switch (mode)
6067 case 0:
6069 dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
6070 break;
6072 case 1:
6074 dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
6075 break;
6077 case 2:
6079 dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
6080 break;
6082 case 3:
6084 dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
6085 break;
6087 case 4:
6089 dissect_harq_indication_data_format_3_value(ptvc, pinfo);
6090 break;
6092 case 5:
6094 dissect_harq_indication_data_format_4_value(ptvc, pinfo);
6095 break;
6097 case 6:
6099 dissect_harq_indication_data_format_5_value(ptvc, pinfo);
6100 break;
6104 ptvcursor_pop_subtree(ptvc);
6107 ptvcursor_pop_subtree(ptvc);
6109 static void dissect_harq_indication_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6111 proto_item* item;
6112 uint32_t test_value;
6114 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_1, 1, ENC_BIG_ENDIAN, &test_value);
6115 if (!(test_value >= 1 && test_value <= 7))
6117 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 1 [1..7]");
6120 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_2, 1, ENC_BIG_ENDIAN, &test_value);
6121 if (!(test_value >= 1 && test_value <= 7))
6123 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 2 [1..7]");
6127 static void dissect_harq_tb_value(ptvcursor_t * ptvc, packet_info* pinfo)
6129 uint32_t test_value;
6130 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_n, 1, ENC_BIG_ENDIAN, &test_value);
6132 if (!(test_value >= 1 && test_value <= 7))
6134 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb n [1..7]");
6137 static void dissect_harq_indication_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6139 uint32_t harq_mode_value, count;
6141 // Mode
6142 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN, &harq_mode_value);
6143 if (harq_mode_value > 2)
6145 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..2]");
6148 // Number of ACK/NACK
6149 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &count);
6151 if (harq_mode_value == 0)
6153 if (!(count >=1 && count <= 2))
6155 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
6158 else if (harq_mode_value == 1)
6160 if (!(count >= 1 && count <= 4))
6162 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
6166 else if (harq_mode_value == 2)
6168 if (!(count >= 1 && count <= 10))
6170 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
6175 dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
6177 static void dissect_harq_indication_rel13_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6179 uint32_t harq_mode_value, count;
6181 // Mode
6182 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN, &harq_mode_value);
6183 if (harq_mode_value > 4)
6185 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..4]");
6188 // Number of ACK/NACK
6189 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN, &count);
6191 if (harq_mode_value == 0)
6193 if (!(count >= 1 && count <= 2))
6195 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
6198 else if (harq_mode_value == 1)
6200 if (!(count >= 1 && count <= 4))
6202 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
6206 else if (harq_mode_value == 2)
6208 if (!(count >= 1 && count <= 10))
6210 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
6213 else if (harq_mode_value == 3 || harq_mode_value == 4)
6215 if (count < 22)
6217 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [>= 22]");
6221 dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
6223 static void dissect_ul_cqi_information_value(ptvcursor_t * ptvc, packet_info* pinfo)
6225 proto_item* item;
6226 uint32_t test_value;
6228 // UL_CQI
6229 ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6231 // Channel
6232 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_channel, 1, ENC_BIG_ENDIAN, &test_value);
6233 if (test_value > 1)
6235 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid channel value [0..1]");
6238 static void dissect_crc_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6240 ptvcursor_add(ptvc, hf_nfapi_crc_flag, 1, ENC_BIG_ENDIAN);
6242 static void dissect_rx_cqi_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6244 proto_item* item;
6245 uint32_t test_value;
6247 //Length
6248 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
6250 // Data Offset
6251 ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
6253 // UL_CQI
6254 ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6256 // RI
6257 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN, &test_value);
6258 if (test_value > 8)
6260 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
6263 // Timing Advance
6264 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6265 if (test_value > 63)
6267 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
6270 static void dissect_ri_value(ptvcursor_t * ptvc, packet_info* pinfo)
6272 uint32_t test_value;
6274 // RI
6275 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN, &test_value);
6276 if (test_value > 8)
6278 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
6281 static void dissect_rx_cqi_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6283 proto_item* item;
6284 uint32_t test_value, count;
6286 // Length
6287 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
6289 // Data Offset
6290 ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
6292 // UL_CQI
6293 ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6295 // Number of CC reported
6296 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cc_reported, 1, ENC_BIG_ENDIAN, &count);
6297 if (!(count >= 1 && count <= 5))
6299 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of CC reported value [1..5]");
6302 dissect_array_value(ptvc, pinfo, "CC List", ett_nfapi_cc, count, dissect_ri_value);
6304 // Timing Advance
6305 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6306 if (test_value > 63)
6308 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
6311 // Timing Advance R9
6312 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6313 if (test_value > 7690)
6315 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6318 static void dissect_rach_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6320 proto_item* item;
6321 uint32_t test_value;
6323 // RNTI
6324 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
6325 if (test_value < 1)
6327 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
6330 // Preamble
6331 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble, 1, ENC_BIG_ENDIAN, &test_value);
6332 if (test_value > 63)
6334 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble value [0..63]");
6337 // Timing Advance
6338 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6339 if (test_value > 1282)
6341 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
6345 static void dissect_rach_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6347 uint32_t test_value;
6349 // Timing Advance R9
6350 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6351 if (test_value > 7690)
6353 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6356 static void dissect_rach_indication_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6358 uint32_t test_value;
6360 // RACH resource type
6361 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rach_resource_type, 1, ENC_BIG_ENDIAN, &test_value);
6362 if (test_value > 4)
6364 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach resource type value [0..4]");
6367 static void dissect_snr_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6369 // SNR
6370 ptvcursor_add(ptvc, hf_nfapi_snr, 1, ENC_BIG_ENDIAN);
6372 static void dissect_srs_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6374 proto_item* item;
6375 uint32_t test_value, count;
6377 // Doppler estimation
6378 ptvcursor_add(ptvc, hf_nfapi_doppler_estimation, 2, ENC_BIG_ENDIAN);
6380 // Timing Advance
6381 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6382 if (test_value > 1282)
6384 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
6387 // Number of resource blocks
6388 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &count);
6390 // RB start
6391 ptvcursor_add(ptvc, hf_nfapi_rb_start, 1, ENC_BIG_ENDIAN);
6394 dissect_array_value(ptvc, pinfo, "RB List", ett_nfapi_rbs, count, dissect_snr_value);
6396 static void dissect_srs_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6398 uint32_t test_value;
6400 // Timing Advance R9
6401 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6402 if (test_value > 7690)
6404 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6407 static void dissect_srs_indication_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6409 uint32_t test_value;
6411 // UpPTS Symbol
6412 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_up_pts_symbol, 1, ENC_BIG_ENDIAN, &test_value);
6413 if (test_value > 1)
6415 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid up pts symbol value [0..1]");
6419 static void dissect_tdd_channel_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6421 uint32_t i, j, num_subbands, num_phy_ant;
6423 // numPRBperSubband
6424 ptvcursor_add(ptvc, hf_nfapi_number_prb_per_subband, 1, ENC_BIG_ENDIAN);
6426 // Number of subbands
6427 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN, &num_subbands);
6429 // numAntennas
6430 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_antennas, 1, ENC_BIG_ENDIAN, &num_phy_ant);
6432 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "Subbands");
6434 for (i = 0; i < num_subbands; ++i)
6436 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "[%u]", i);
6438 // subbandIndex
6439 ptvcursor_add(ptvc, hf_nfapi_subband_index, 1, ENC_BIG_ENDIAN);
6441 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "Physical Antennas");
6443 for (j = 0; j < num_phy_ant; ++j)
6445 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "[%u]", j);
6447 // Channel
6448 ptvcursor_add(ptvc, hf_nfapi_channel_coefficient, 2, ENC_BIG_ENDIAN);
6450 ptvcursor_pop_subtree(ptvc);
6453 ptvcursor_pop_subtree(ptvc);
6455 ptvcursor_pop_subtree(ptvc);
6458 ptvcursor_pop_subtree(ptvc);
6460 static void dissect_srs_indication_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
6462 uint32_t test_value;
6464 //UL_RTOA
6465 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_rtoa, 2, ENC_BIG_ENDIAN, &test_value);
6466 if (test_value > 4800)
6468 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul rtoa value [0..4800]");
6471 static void dissect_lbt_dl_config_request_pdsch_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6473 proto_item* item;
6474 uint32_t test_value;
6476 // Handle
6477 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6479 // nCCA
6480 ptvcursor_add(ptvc, hf_nfapi_mp_cca, 4, ENC_BIG_ENDIAN);
6482 // NCCA
6483 ptvcursor_add(ptvc, hf_nfapi_n_cca, 4, ENC_BIG_ENDIAN);
6485 // Offset
6486 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN, &test_value);
6487 if (test_value > 999)
6489 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
6492 // LTE TXOP SF
6493 ptvcursor_add(ptvc, hf_nfapi_lte_txop_sf, 4, ENC_BIG_ENDIAN);
6495 // TXOP SFN/SF End
6496 ptvcursor_add(ptvc, hf_nfapi_txop_sfn_sf_end, 2, ENC_BIG_ENDIAN);
6498 // LBT mode
6499 ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
6501 static void dissect_lbt_dl_config_request_drs_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6503 proto_item* item;
6504 uint32_t test_value;
6506 // Handle
6507 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6509 // Offset
6510 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN, &test_value);
6511 if (test_value > 999)
6513 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
6516 // SFN/SF End
6517 ptvcursor_add(ptvc, hf_nfapi_sfn_sf_end, 2, ENC_BIG_ENDIAN);
6519 // LBT mode
6520 ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
6522 static void dissect_lbt_dl_config_request_pdsch_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6524 // Handle
6525 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6527 // result
6528 ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
6530 // LTE TXOP symbols
6531 ptvcursor_add(ptvc, hf_nfapi_txop_symbols, 4, ENC_BIG_ENDIAN);
6533 // Initial Partial SF
6534 ptvcursor_add(ptvc, hf_nfapi_initial_partial_sf, 4, ENC_BIG_ENDIAN);
6536 static void dissect_lbt_dl_config_request_drs_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6538 // Handle
6539 ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6541 // result
6542 ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
6544 static void dissect_tx_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6546 uint32_t len;
6548 // PDU length
6549 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_length, 2, ENC_BIG_ENDIAN, &len);
6551 // PDU index
6552 ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
6554 // PDU#N
6555 ptvcursor_add(ptvc, hf_nfapi_pdu, len, ENC_NA);
6557 static void dissect_tx_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6559 uint32_t num_pdu;
6561 // Number of PDUs
6562 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6564 dissect_array_value(ptvc, pinfo, "TX PDU List", ett_nfapi_tx_request_pdu_list, num_pdu, dissect_tx_pdu);
6566 static void dissect_harq_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6568 uint32_t instance_len;
6570 // Instance Length
6571 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6573 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6574 dissect_tlv_list(ptvc, pinfo, instance_end);
6576 static void dissect_harq_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6578 uint32_t num_pdu;
6580 // Number of HARQs
6581 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_harqs, 2, ENC_BIG_ENDIAN, &num_pdu);
6583 dissect_array_value(ptvc, pinfo, "HARQ PDU List", ett_nfapi_harq_indication_pdu_list, num_pdu, dissect_harq_indication_pdu);
6585 static void dissect_crc_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6587 uint32_t instance_len;
6589 // Instance Length
6590 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6592 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6593 dissect_tlv_list(ptvc, pinfo, instance_end);
6595 static void dissect_crc_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6597 uint32_t num_pdu;
6599 // Number of CRCs
6600 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_crcs, 2, ENC_BIG_ENDIAN, &num_pdu);
6601 dissect_array_value(ptvc, pinfo, "CRC PDU List", ett_nfapi_crc_indication_pdu_list, num_pdu, dissect_crc_indication_pdu);
6603 static void dissect_sr_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6605 uint32_t instance_len;
6607 // Instance Length
6608 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6610 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6611 dissect_tlv_list(ptvc, pinfo, instance_end);
6613 static void dissect_rx_sr_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6615 uint32_t num_pdu;
6617 // Number of SRs
6618 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_srs, 2, ENC_BIG_ENDIAN, &num_pdu);
6620 dissect_array_value(ptvc, pinfo, "SR PDU List", ett_nfapi_sr_indication_pdu_list, num_pdu, dissect_sr_indication_pdu);
6622 static void dissect_cqi_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6624 uint32_t instance_len;
6626 // Instance Length
6627 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6629 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6630 dissect_tlv_list(ptvc, pinfo, instance_end);
6632 static void dissect_rx_cqi_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6634 uint32_t i, num_pdu;
6635 uint16_t* lengths = NULL;
6637 // Number of PDUs
6638 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cqi, 2, ENC_BIG_ENDIAN, &num_pdu);
6641 tvbuff_t* tvb = ptvcursor_tvbuff(ptvc);
6642 uint32_t tmp_offset = ptvcursor_current_offset(ptvc);
6644 if (num_pdu > 0)
6646 lengths = (uint16_t*)wmem_alloc0(pinfo->pool, num_pdu * 2);
6649 for (i = 0; i < num_pdu; ++i)
6651 uint32_t instance_len = tvb_get_ntohs(tvb, tmp_offset);
6652 tmp_offset += 2;
6653 uint32_t pdu_end = tmp_offset + instance_len;
6655 while (tmp_offset < pdu_end)
6657 uint16_t tlv_id = tvb_get_ntohs(tvb, tmp_offset);
6658 tmp_offset += 2;
6659 uint16_t tlv_len = tvb_get_ntohs(tvb, tmp_offset);
6660 tmp_offset += 2;
6662 if (tlv_id == 0x202F)
6664 lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
6666 else if (tlv_id == 0x2030)
6668 lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
6671 tmp_offset += tlv_len;
6675 dissect_array_value(ptvc, pinfo, "CQI PDU List", ett_nfapi_cqi_indication_pdu_list, num_pdu, dissect_cqi_indication_pdu);
6677 for (i = 0; i < num_pdu; ++i)
6679 ptvcursor_add(ptvc, hf_nfapi_pdu, lengths[i], ENC_NA);
6682 static void dissect_preamble_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6684 uint32_t instance_len;
6686 // Instance Length
6687 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6689 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6690 dissect_tlv_list(ptvc, pinfo, instance_end);
6692 static void dissect_rach_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6694 uint32_t num_pdu;
6696 // Number of Preambles
6697 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_preambles, 2, ENC_BIG_ENDIAN, &num_pdu);
6698 dissect_array_value(ptvc, pinfo, "Preamble PDU List", ett_nfapi_preamble_indication_pdu_list, num_pdu, dissect_preamble_indication_pdu);
6700 static void dissect_srs_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6702 uint32_t instance_len;
6704 // Instance Length
6705 ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6706 uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6707 dissect_tlv_list(ptvc, pinfo, instance_end);
6709 static void dissect_srs_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6711 uint32_t num_pdu;
6713 // Number of UEs
6714 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_srss, 1, ENC_BIG_ENDIAN, &num_pdu);
6715 dissect_array_value(ptvc, pinfo, "SRS PDU List", ett_nfapi_srs_indication_pdu_list, num_pdu, dissect_srs_indication_pdu);
6717 static void dissect_lbt_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6719 uint32_t test_value, size;
6721 // PDU Type
6722 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_lbt_dl_req_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
6723 if (test_value > 1)
6725 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
6728 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
6729 unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
6731 dissect_tlv_list(ptvc, pinfo, pdu_end);
6733 static void dissect_lbt_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6735 uint32_t num_pdu;
6737 // Number of PDUs
6738 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6739 if (!(num_pdu >= 1 && num_pdu <= 2))
6741 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
6744 dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_config_pdu_list, num_pdu, dissect_lbt_dl_config_pdu);
6746 static void dissect_lbt_dl_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6748 uint32_t test_value, size;
6750 // PDU Type
6751 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_lbt_dl_ind_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
6752 if (test_value > 1)
6754 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
6757 // PDU Size
6758 ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
6759 uint32_t pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
6760 dissect_tlv_list(ptvc, pinfo, pdu_end);
6762 static void dissect_lbt_indication_message_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6764 uint32_t num_pdu;
6766 // Number of PDUs
6767 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6768 if (!(num_pdu >= 1 && num_pdu <= 2))
6770 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
6773 dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_indication_pdu_list, num_pdu, dissect_lbt_dl_indication_pdu);
6775 static void dissect_lte_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6777 uint32_t test_value, num_earfcns;
6779 // Frequency Band Indicator
6780 ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6782 // Measurement Period
6783 ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6785 // Bandwidth
6786 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
6787 if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
6788 test_value == 50 || test_value == 75 || test_value == 100))
6790 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
6793 // Timeout
6794 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6796 // Number of EARFCNs
6797 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_earfcns, 1, ENC_BIG_ENDIAN, &num_earfcns);
6799 dissect_array_value(ptvc, pinfo, "EARFCNs", ett_nfapi_earfcn_list, num_earfcns, dissect_earfcn_value);
6801 static void dissect_uarfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6803 // UARFCN
6804 ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
6806 static void dissect_utran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6808 uint32_t num_uarfcns;
6810 // Frequency Band Indicator
6811 ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6813 // Measurement Period
6814 ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6816 // Timeout
6817 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6819 // Number of UARFCNs
6820 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_uarfcns, 1, ENC_BIG_ENDIAN, &num_uarfcns);
6822 dissect_array_value(ptvc, pinfo, "UARFCNs", ett_nfapi_uarfcn_list, num_uarfcns, dissect_uarfcn_value);
6824 static void dissect_arfcn_dir_value(ptvcursor_t * ptvc, packet_info* pinfo)
6826 uint32_t test_value;
6828 // ARFCN
6829 ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6831 // Direction
6832 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_arfcn_direction, 1, ENC_BIG_ENDIAN, &test_value);
6833 if (test_value > 1)
6835 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid direction value [0..1]");
6839 static void dissect_geran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6841 uint32_t num_arfcns;
6843 // Frequency Band Indicator
6844 ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6846 // Measurement Period
6847 ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6849 // Timeout
6850 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6852 // Number of ARFCNs
6853 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN, &num_arfcns);
6855 dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcns, dissect_arfcn_dir_value);
6857 static void dissect_rssi_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6859 // RSSI
6860 ptvcursor_add(ptvc, hf_nfapi_rssi, 2, ENC_BIG_ENDIAN);
6862 static void dissect_rssi_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6864 uint32_t num_rssi;
6866 // Number of RSSI
6867 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rssi, 2, ENC_BIG_ENDIAN, &num_rssi);
6869 dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_rssi_list, num_rssi, dissect_rssi_value);
6871 static void dissect_pci_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6873 // PCI
6874 ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
6876 static void dissect_lte_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6878 uint32_t num_pci;
6880 // EARFCN
6881 ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
6883 // Measurement Bandwidth
6884 ptvcursor_add(ptvc, hf_nfapi_measurement_bandwidth, 1, ENC_BIG_ENDIAN);
6886 // Exhaustive Search
6887 ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
6889 // Timeout
6890 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6892 // Number of PCI
6893 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pci, 1, ENC_BIG_ENDIAN, &num_pci);
6895 dissect_array_value(ptvc, pinfo, "PCIs", ett_nfapi_pci_list, num_pci, dissect_pci_value);
6897 static void dissect_psc_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6899 // PSC
6900 ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
6902 static void dissect_utran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6904 uint32_t num_psc;
6906 // UARFCN
6907 ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
6909 // Exhaustive Search
6910 ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
6912 // Timeout
6913 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6915 // Number of PSC
6916 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_psc, 1, ENC_BIG_ENDIAN, &num_psc);
6918 dissect_array_value(ptvc, pinfo, "PSCs", ett_nfapi_psc_list, num_psc, dissect_psc_value);
6920 static void dissect_arfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6922 // ARFCN
6923 ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6925 static void dissect_geran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6927 uint32_t num_arfcn;
6929 // Timeout
6930 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6932 // Number of ARFCN
6933 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN, &num_arfcn);
6935 dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcn, dissect_arfcn_value);
6938 static void dissect_lte_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6940 // PCI
6941 ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
6943 // RSRP
6944 ptvcursor_add(ptvc, hf_nfapi_rsrp, 1, ENC_BIG_ENDIAN);
6946 // RSRQ
6947 ptvcursor_add(ptvc, hf_nfapi_rsrq, 1, ENC_BIG_ENDIAN);
6949 // Frequency Offset
6950 ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6952 static void dissect_lte_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6954 uint32_t num_lte_cells;
6956 // Number of LTE Cells Found
6957 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_lte_cells_found, 2, ENC_BIG_ENDIAN, &num_lte_cells);
6958 dissect_array_value(ptvc, pinfo, "LTE Cells Found", ett_nfapi_lte_cells_found_list, num_lte_cells, dissect_lte_cell_found_value);
6960 static void dissect_utran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6962 // PSC
6963 ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
6965 // RSCP
6966 ptvcursor_add(ptvc, hf_nfapi_rscp, 1, ENC_BIG_ENDIAN);
6968 // EcN0
6969 ptvcursor_add(ptvc, hf_nfapi_enco, 1, ENC_BIG_ENDIAN);
6971 // Frequency Offset
6972 ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6974 static void dissect_utran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6976 uint32_t num_utran_cells;
6978 // Number of UTRAN Cells Found
6979 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_utran_cells_found, 2, ENC_BIG_ENDIAN, &num_utran_cells);
6980 dissect_array_value(ptvc, pinfo, "UTRAN Cells Found", ett_nfapi_utran_cells_found_list, num_utran_cells, dissect_utran_cell_found_value);
6982 static void dissect_geran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6984 // ARFCN
6985 ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6987 // BSIC
6988 ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
6990 // RxLev
6991 ptvcursor_add(ptvc, hf_nfapi_rxlev, 1, ENC_BIG_ENDIAN);
6993 // RxQual
6994 ptvcursor_add(ptvc, hf_nfapi_rxqual, 1, ENC_BIG_ENDIAN);
6996 // Frequency Offset
6997 ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6999 // SFN Offset
7000 ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
7002 static void dissect_geran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
7004 uint32_t num_geran_cells;
7006 // Number of GSM Cells Found
7007 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_geran_cells_found, 2, ENC_BIG_ENDIAN, &num_geran_cells);
7008 dissect_array_value(ptvc, pinfo, "GERAN Cells Found", ett_nfapi_geran_cells_found_list, num_geran_cells, dissect_geran_cell_found_value);
7010 static void dissect_pnf_cell_search_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7012 unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7013 ptvcursor_add(ptvc, hf_nfapi_pnf_search_state, len, ENC_NA);
7015 static void dissect_pnf_cell_broadcast_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7017 unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7018 ptvcursor_add(ptvc, hf_nfapi_pnf_broadcast_state, len, ENC_NA);
7020 static void dissect_lte_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7022 // EARFCN
7023 ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7025 // PCI
7026 ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7028 // Timeout
7029 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7031 static void dissect_utran_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7033 // UARFCN
7034 ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
7036 // PSC
7037 ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
7039 // Timeout
7040 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7042 static void dissect_lte_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
7044 uint32_t test_value;
7046 // Number of Tx Antenna
7047 proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7048 if (!(test_value == 1 || test_value == 2 || test_value == 4))
7050 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7053 // MIB[MIB Length]
7054 ptvcursor_add(ptvc, hf_nfapi_mib, 2, ENC_BIG_ENDIAN|ENC_NA);
7056 // SFN Offset
7057 ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
7059 static void dissect_utran_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7061 // MIB[MIB Length]
7062 ptvcursor_add(ptvc, hf_nfapi_mib, 2, ENC_BIG_ENDIAN|ENC_NA);
7064 // SFN Offset
7065 ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
7067 static void dissect_lte_system_information_schedule_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
7069 proto_item* item;
7070 uint32_t test_value;
7072 // EARFCN
7073 ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7075 // PCI
7076 ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7078 // Bandwidth
7079 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
7080 if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
7081 test_value == 50 || test_value == 75 || test_value == 100))
7083 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
7086 // PHICH Configuration
7087 // todo : phich bit decode
7088 ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
7090 // Number of Tx Antenna
7091 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7092 if (!(test_value == 1 || test_value == 2 || test_value == 4))
7094 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7097 // retryCount
7098 ptvcursor_add(ptvc, hf_nfapi_retry_count, 1, ENC_BIG_ENDIAN);
7100 // Timeout
7101 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7103 static void dissect_lte_system_information_schedule_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7105 // this needs to be SIB 1
7106 unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7107 ptvcursor_add(ptvc, hf_nfapi_sib1, len, ENC_NA);
7109 static void dissect_si_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
7111 proto_item* item;
7112 uint32_t test_value;
7114 // SI Periodicity
7115 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_periodicity, 1, ENC_BIG_ENDIAN, &test_value);
7116 if (test_value > 7)
7118 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si periodicity value [0..7]");
7121 // SI Index
7122 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_index, 1, ENC_BIG_ENDIAN, &test_value);
7123 if (test_value > 32)
7125 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si Index value [0..32]");
7129 static void dissect_lte_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
7131 proto_item* item;
7132 uint32_t test_value, si_priodicity;
7134 // EARFCN
7135 ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7137 // PCI
7138 ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7140 // Downlink channel bandwidth
7141 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
7142 if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
7143 test_value == 50 || test_value == 75 || test_value == 100))
7145 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
7148 // PHICH Configuration
7149 ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
7151 // Number of Tx Antenna
7152 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7153 if (!(test_value == 1 || test_value == 2 || test_value == 4))
7155 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7158 // Number of SI Periodicity
7159 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_si_periodicity, 1, ENC_BIG_ENDIAN, &si_priodicity);
7161 dissect_array_value(ptvc, pinfo, "Number SI Periodicity", ett_nfapi_si_periodicity_list, si_priodicity, dissect_si_periodicity_value);
7163 // SI Window Length
7164 item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_window_length, 1, ENC_BIG_ENDIAN, &test_value);
7165 if (!(test_value == 1 || test_value == 2 || test_value == 5 || test_value == 10 ||
7166 test_value == 15 || test_value == 20 || test_value == 40))
7168 expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si window length value [1, 2, 5, 10, 15, 20, 40]");
7171 // Timeout
7172 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7174 static void dissect_utran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7176 // UARFCN
7177 ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
7179 // PSC
7180 ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
7182 // Timeout
7183 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7185 static void dissect_geran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7187 // ARFCN
7188 ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
7190 // BSIC
7191 ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
7193 // Timeout
7194 ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7196 static void dissect_lte_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7198 // SIB Type
7199 ptvcursor_add(ptvc, hf_nfapi_sib_type, 1, ENC_BIG_ENDIAN);
7201 // SIB[SIB Length]
7202 ptvcursor_add(ptvc, hf_nfapi_sib, 2, ENC_BIG_ENDIAN|ENC_NA);
7204 static void dissect_utran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7206 // SIB[SIB Length]
7207 ptvcursor_add(ptvc, hf_nfapi_sib, 2, ENC_BIG_ENDIAN|ENC_NA);
7209 static void dissect_geran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7211 // SI[SI Length]
7212 ptvcursor_add(ptvc, hf_nfapi_si, 2, ENC_BIG_ENDIAN|ENC_NA);
7215 static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_);
7217 // Important the tags must be in numerical order so that they can be indexed correctly
7218 static const tlv_t nfapi_tags[] =
7220 { 0x1000, "PNF Param General", dissect_pnf_param_general_value },
7221 { 0x1001, "PNF PHY", dissect_pnf_phy_value },
7222 { 0x1002, "PNF RF", dissect_pnf_rf_value },
7223 { 0x1003, "PNF PHY RF Config", dissect_pnf_phy_rf_config_value },
7224 { 0x1004, "DL RS Tx power", dissect_dl_rs_tx_power_value },
7225 { 0x1005, "Received interference power", dissect_received_interference_power_value },
7226 { 0x1006, "Thermal noise power", dissect_thermal_noise_power_value },
7227 { 0x1007, "DL RS TX Power measurement", dissect_dl_rs_tx_power_measurement_value },
7228 { 0x1008, "Received Interference power measurement", dissect_received_interference_power_measurement_value },
7229 { 0x1009, "Thermal noise power measurement", dissect_thermal_noise_power_measurement_value },
7230 { 0x100A, "PNF PHY Rel 10", dissect_pnf_phy_rel10_value },
7231 { 0x100B, "PNF PHY Rel 11", dissect_pnf_phy_rel11_value },
7232 { 0x100C, "PNF PHY Rel 12", dissect_pnf_phy_rel12_value },
7233 { 0x100D, "PNF PHY Rel 13", dissect_pnf_phy_rel13_value },
7236 static const tlv_t configuration_tags[] =
7238 { 0x0000, NULL, NULL },
7239 { 0x0001, "Subframe config - Duplex Mode", dissect_duplex_mode_value },
7240 { 0x0002, "Subframe config - PCFICH power offset TLV", dissect_pcfich_power_offset_value },
7241 { 0x0003, "Subframe config - P-B", dissect_pb_value },
7242 { 0x0004, "Subframe config - DL cyclic prefix type", dissect_dl_cyclic_prefix_value },
7243 { 0x0005, "Subframe config - UL cyclic prefix type", dissect_ul_cyclic_prefix_value },
7244 { 0x0006, NULL, NULL },
7245 { 0x0007, NULL, NULL },
7246 { 0x0008, NULL, NULL },
7247 { 0x0009, NULL, NULL },
7248 { 0x000A, "RF config - Downlink channel bandwidth", dissect_dl_channel_bandwidth_value },
7249 { 0x000B, "RF config - Uplink channel bandwidth", dissect_ul_channel_bandwidth_value },
7250 { 0x000C, "RF config - Reference signal power", dissect_reference_signal_power_value },
7251 { 0x000D, "RF config - Tx antenna ports", dissect_tx_antenna_ports_value },
7252 { 0x000E, "RF config - Rx Antenna ports", dissect_rx_antenna_ports_value },
7253 { 0x000F, NULL, NULL },
7254 { 0x0010, NULL, NULL },
7255 { 0x0011, NULL, NULL },
7256 { 0x0012, NULL, NULL },
7257 { 0x0013, NULL, NULL },
7258 { 0x0014, "PHICH config - PHICH resource", dissect_phich_resource_value },
7259 { 0x0015, "PHICH config - PHICH duration", dissect_phich_duration_value },
7260 { 0x0016, "PHICH config - PHICH power offset", dissect_phich_power_offset_value },
7261 { 0x0017, NULL, NULL },
7262 { 0x0018, NULL, NULL },
7263 { 0x0019, NULL, NULL },
7264 { 0x001A, NULL, NULL },
7265 { 0x001B, NULL, NULL },
7266 { 0x001C, NULL, NULL },
7267 { 0x001D, NULL, NULL },
7268 { 0x001E, "SCH config - Primary synchronization signal EPRE/EPRERS", dissect_psch_synch_signal_epre_eprers_value },
7269 { 0x001F, "SCH config - Secondary synchronization signal EPRE/EPRERS", dissect_ssch_synch_signal_epre_eprers_value },
7270 { 0x0020, "SCH config - Physical Cell Id", dissect_physical_cell_id_value },
7271 { 0x0021, NULL, NULL },
7272 { 0x0022, NULL, NULL },
7273 { 0x0023, NULL, NULL },
7274 { 0x0024, NULL, NULL },
7275 { 0x0025, NULL, NULL },
7276 { 0x0026, NULL, NULL },
7277 { 0x0027, NULL, NULL },
7278 { 0x0028, "PRACH config - Configuration Index", dissect_prach_configuration_index_value },
7279 { 0x0029, "PRACH config - Root sequence Index", dissect_prach_root_sequence_index_value },
7280 { 0x002A, "PRACH config - Zero correlation zone configuration", dissect_prach_zero_correlation_zone_configuration_value },
7281 { 0x002B, "PRACH config - High speed flag", dissect_prach_high_speed_flag_value },
7282 { 0x002C, "PRACH config - Frequency offset", dissect_prach_frequency_offset_value },
7283 { 0x002D, NULL, NULL },
7284 { 0x002E, NULL, NULL },
7285 { 0x002F, NULL, NULL },
7286 { 0x0030, NULL, NULL },
7287 { 0x0031, NULL, NULL },
7288 { 0x0032, "PUSCH config - Hopping mode", dissect_pusch_hopping_mode_value },
7289 { 0x0033, "PUSCH config - Hopping offset", dissect_pusch_hopping_offset_value },
7290 { 0x0034, "PUSCH config - Number of sub-bands", dissect_pusch_number_of_subbands_value },
7291 { 0x0035, NULL, NULL },
7292 { 0x0036, NULL, NULL },
7293 { 0x0037, NULL, NULL },
7294 { 0x0038, NULL, NULL },
7295 { 0x0039, NULL, NULL },
7296 { 0x003A, NULL, NULL },
7297 { 0x003B, NULL, NULL },
7298 { 0x003C, "PUCCH config - Delta PUCCH Shift", dissect_pucch_delta_pucch_shift_value },
7299 { 0x003D, "PUCCH config - N_CQI RB", dissect_pucch_n_cqi_rb_value },
7300 { 0x003E, "PUCCH config - N_AN CS", dissect_pucch_n_an_cs_value },
7301 { 0x003F, "PUCCH config - N1Pucch-AN", dissect_pucch_n1_pucch_an_value },
7302 { 0x0040, NULL, NULL },
7303 { 0x0041, NULL, NULL },
7304 { 0x0042, NULL, NULL },
7305 { 0x0043, NULL, NULL },
7306 { 0x0044, NULL, NULL },
7307 { 0x0045, NULL, NULL },
7308 { 0x0046, "SRS config - Bandwidth configuration", dissect_srs_bandwidth_configuration_value },
7309 { 0x0047, "SRS config - MaxUpPTS", dissect_srs_max_uppts_value },
7310 { 0x0048, "SRS config - SRS subframe configuration", dissect_srs_subframe_configuration_value },
7311 { 0x0049, "SRS config - SRS AckNack SRS simultaneous transmission", dissect_srs_acknack_srs_sim_tx_value },
7312 { 0x004A, NULL, NULL },
7313 { 0x004B, NULL, NULL },
7314 { 0x004C, NULL, NULL },
7315 { 0x004D, NULL, NULL },
7316 { 0x004E, NULL, NULL },
7317 { 0x004F, NULL, NULL },
7318 { 0x0050, "Uplink reference signal config - Uplink RS hopping", dissect_uplink_rs_hopping_value },
7319 { 0x0051, "Uplink reference signal config - Group assignment (delta sequence-shift pattern)", dissect_group_assignment_value },
7320 { 0x0052, "Uplink reference signal config - Cyclic Shift 1 for DMRS", dissect_cyclic_shift_1_for_drms_value },
7321 { 0x0053, NULL, NULL },
7322 { 0x0054, NULL, NULL },
7323 { 0x0055, NULL, NULL },
7324 { 0x0056, NULL, NULL },
7325 { 0x0057, NULL, NULL },
7326 { 0x0058, NULL, NULL },
7327 { 0x0059, NULL, NULL },
7328 { 0x005A, "TDD frame structure config - Subframe assignment", dissect_tdd_subframe_assignment_value },
7329 { 0x005B, "TDD frame structure config - Special sub-frame patterns", dissect_tdd_subframe_patterns_value },
7330 { 0x005C, NULL, NULL },
7331 { 0x005D, NULL, NULL },
7332 { 0x005E, NULL, NULL },
7333 { 0x005F, NULL, NULL },
7334 { 0x0060, NULL, NULL },
7335 { 0x0061, NULL, NULL },
7336 { 0x0062, NULL, NULL },
7337 { 0x0063, NULL, NULL },
7338 { 0x0064, "LAA config - ED Threshold for LBT for PDSCH", dissect_laa_ed_threashold_for_lbt_for_pdsch_value },
7339 { 0x0065, "LAA config - ED Threshold for LBT for DRS", dissect_laa_ed_threashold_for_lbt_for_drs_value },
7340 { 0x0066, "LAA config - PD Threshold", dissect_laa_pd_threshold_value },
7341 { 0x0067, "LAA config - Multi carrier type", dissect_laa_multi_carrier_type_value },
7342 { 0x0068, "LAA config - Multi carrier TX", dissect_laa_multi_carrier_tx_value },
7343 { 0x0069, "LAA config - Multi carrier freeze", dissect_laa_multi_carrier_freeze_value },
7344 { 0x006A, "LAA config - Tx antenna ports for DRS", dissect_laa_tx_antenna_port_for_drs_value },
7345 { 0x006B, "LAA config - Transmission power for DRS", dissect_laa_transmission_power_for_drs_value },
7346 { 0x006C, NULL, NULL },
7347 { 0x006D, NULL, NULL },
7348 { 0x006E, NULL, NULL },
7349 { 0x006F, NULL, NULL },
7350 { 0x0070, NULL, NULL },
7351 { 0x0071, NULL, NULL },
7352 { 0x0072, NULL, NULL },
7353 { 0x0073, NULL, NULL },
7354 { 0x0074, NULL, NULL },
7355 { 0x0075, NULL, NULL },
7356 { 0x0076, NULL, NULL },
7357 { 0x0077, NULL, NULL },
7358 { 0x0078, "eMTC config - PBCH Repetitions enable R13", dissect_emtc_pbch_repeitions_enabled_r13_value },
7359 { 0x0079, "eMTC config - PRACH CAT-M Root sequence Index", dissect_emtc_prach_cat_m_root_sequence_index_value },
7360 { 0x007A, "eMTC config - PRACH CAT-M Zero correlation zone configuration", dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value },
7361 { 0x007B, "eMTC config - PRACH CAT-M High speed flag", dissect_emtc_prach_cat_m_high_speed_flag_value },
7362 { 0x007C, "eMTC config - PRACH CE level #0 Enable", dissect_emtc_prach_ce_level_0_enabled_value },
7363 { 0x007D, "eMTC config - PRACH CE level #0 Configuration Index", dissect_emtc_prach_ce_level_0_configuration_offset_value },
7364 { 0x007E, "eMTC config - PRACH CE level #0 Frequency offset", dissect_emtc_prach_ce_level_0_frequency_offset_value },
7365 { 0x007F, "eMTC config - PRACH CE level #0 Number of repetitions per attempt", dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value },
7366 { 0x0080, "eMTC config - CE level #0 Starting subframe periodicity", dissect_emtc_ce_level_0_starting_subframe_periodicity_value },
7367 { 0x0081, "eMTC config - PRACH CE level #0 Hopping Enable", dissect_emtc_preach_ce_level_0_hopping_enabled_value },
7368 { 0x0082, "eMTC config - PRACH CE level #0 Hopping Offset", dissect_emtc_preach_ce_level_0_hopping_offset_value },
7369 { 0x0083, "eMTC config - PRACH CE level #1 Enable", dissect_emtc_prach_ce_level_1_enabled_value },
7370 { 0x0084, "eMTC config - PRACH CE level #1 Configuration Index", dissect_emtc_prach_ce_level_1_configuration_offset_value },
7371 { 0x0085, "eMTC config - PRACH CE level #1 Frequency offset", dissect_emtc_prach_ce_level_1_frequency_offset_value },
7372 { 0x0086, "eMTC config - PRACH CE level #1 Number of repetitions per attempt", dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value },
7373 { 0x0087, "eMTC config - CE level #1 Starting subframe periodicity", dissect_emtc_ce_level_1_starting_subframe_periodicity_value },
7374 { 0x0088, "eMTC config - PRACH CE level #1 Hopping Enable", dissect_emtc_preach_ce_level_1_hopping_enabled_value },
7375 { 0x0089, "eMTC config - PRACH CE level #1 Hopping Offset", dissect_emtc_preach_ce_level_1_hopping_offset_value },
7376 { 0x008A, "eMTC config - PRACH CE level #2 Enable", dissect_emtc_prach_ce_level_2_enabled_value },
7377 { 0x008B, "eMTC config - PRACH CE level #2 Configuration Index", dissect_emtc_prach_ce_level_2_configuration_offset_value },
7378 { 0x008C, "eMTC config - PRACH CE level #2 Frequency offset", dissect_emtc_prach_ce_level_2_frequency_offset_value },
7379 { 0x008D, "eMTC config - PRACH CE level #2 Number of repetitions per attempt", dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value },
7380 { 0x008E, "eMTC config - CE level #2 Starting subframe periodicity", dissect_emtc_ce_level_2_starting_subframe_periodicity_value },
7381 { 0x008F, "eMTC config - PRACH CE level #2 Hopping Enable", dissect_emtc_preach_ce_level_2_hopping_enabled_value },
7382 { 0x0090, "eMTC config - PRACH CE level #2 Hopping Offset", dissect_emtc_preach_ce_level_2_hopping_offset_value },
7383 { 0x0091, "eMTC config - PRACH CE level #3 Enable", dissect_emtc_prach_ce_level_3_enabled_value },
7384 { 0x0092, "eMTC config - PRACH CE level #3 Configuration Index", dissect_emtc_prach_ce_level_3_configuration_offset_value },
7385 { 0x0093, "eMTC config - PRACH CE level #3 Frequency offset", dissect_emtc_prach_ce_level_3_frequency_offset_value },
7386 { 0x0094, "eMTC config - PRACH CE level #3 Number of repetitions per attempt", dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value },
7387 { 0x0095, "eMTC config - CE level #3 Starting subframe periodicity", dissect_emtc_ce_level_3_starting_subframe_periodicity_value },
7388 { 0x0096, "eMTC config - PRACH CE level #3 Hopping Enable", dissect_emtc_preach_ce_level_3_hopping_enabled_value },
7389 { 0x0097, "eMTC config - PRACH CE level #3 Hopping Offset", dissect_emtc_preach_ce_level_3_hopping_offset_value },
7390 { 0x0098, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeA", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value },
7391 { 0x0099, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeB", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value },
7392 { 0x009A, NULL, NULL },
7393 { 0x009B, NULL, NULL },
7394 { 0x009C, NULL, NULL },
7395 { 0x009D, NULL, NULL },
7396 { 0x009E, NULL, NULL },
7397 { 0x009F, NULL, NULL },
7398 { 0x00A0, NULL, NULL },
7399 { 0x00A1, NULL, NULL },
7400 { 0x00A2, NULL, NULL },
7401 { 0x00A3, NULL, NULL },
7402 { 0x00A4, NULL, NULL },
7403 { 0x00A5, NULL, NULL },
7404 { 0x00A6, NULL, NULL },
7405 { 0x00A7, NULL, NULL },
7406 { 0x00A8, NULL, NULL },
7407 { 0x00A9, NULL, NULL },
7408 { 0x00AA, NULL, NULL },
7409 { 0x00AB, NULL, NULL },
7410 { 0x00AC, NULL, NULL },
7411 { 0x00AD, NULL, NULL },
7412 { 0x00AE, NULL, NULL },
7413 { 0x00AF, NULL, NULL },
7414 { 0x00B0, NULL, NULL },
7415 { 0x00B1, NULL, NULL },
7416 { 0x00B2, NULL, NULL },
7417 { 0x00B3, NULL, NULL },
7418 { 0x00B4, NULL, NULL },
7419 { 0x00B5, NULL, NULL },
7420 { 0x00B6, NULL, NULL },
7421 { 0x00B7, NULL, NULL },
7422 { 0x00B8, NULL, NULL },
7423 { 0x00B9, NULL, NULL },
7424 { 0x00BA, NULL, NULL },
7425 { 0x00BB, NULL, NULL },
7426 { 0x00BC, NULL, NULL },
7427 { 0x00BD, NULL, NULL },
7428 { 0x00BE, NULL, NULL },
7429 { 0x00BF, NULL, NULL },
7430 { 0x00C0, NULL, NULL },
7431 { 0x00C1, NULL, NULL },
7432 { 0x00C2, NULL, NULL },
7433 { 0x00C3, NULL, NULL },
7434 { 0x00C4, NULL, NULL },
7435 { 0x00C5, NULL, NULL },
7436 { 0x00C6, NULL, NULL },
7437 { 0x00C7, NULL, NULL },
7438 { 0x00C8, "Layer 2/3 - Downlink Bandwidth Support", dissect_dl_bandwidth_support_value },
7439 { 0x00C9, "Layer 2/3 - Uplink Bandwidth Support", dissect_ul_bandwidth_support_value },
7440 { 0x00CA, "Layer 2/3 - Downlink modulation support", dissect_dl_modulation_value },
7441 { 0x00CB, "Layer 2/3 - Uplink modulation support", dissect_ul_modulation_value },
7442 { 0x00CC, "Layer 2/3 - PHY antenna capability", dissect_phy_antenna_capability_value },
7443 { 0x00CD, "Layer 2/3 - Release capability", dissect_release_capability_value },
7444 { 0x00CE, "Layer 2/3 - MBSFN capability", dissect_mbsfn_value },
7445 { 0x00CF, NULL, NULL },
7446 { 0x00D0, NULL, NULL },
7447 { 0x00D1, "LAA Capability - LAA support", dissect_laa_support_value },
7448 { 0x00D2, "LAA Capability - PD sensing LBT support", dissect_laa_pd_sensing_lbt_support_value },
7449 { 0x00D3, "LAA Capability - Multi carrier LBT support", dissect_laa_multi_carrier_lbt_support_value },
7450 { 0x00D4, "LAA Capability - Partial SF support", dissect_laa_partial_sf_support_value },
7451 { 0x00D5, NULL, NULL },
7452 { 0x00D6, NULL, NULL },
7453 { 0x00D7, NULL, NULL },
7454 { 0x00D8, NULL, NULL },
7455 { 0x00D9, NULL, NULL },
7456 { 0x00DA, NULL, NULL },
7457 { 0x00DB, NULL, NULL },
7458 { 0x00DC, NULL, NULL },
7459 { 0x00DD, NULL, NULL },
7460 { 0x00DE, NULL, NULL },
7461 { 0x00DF, NULL, NULL },
7462 { 0x00E0, NULL, NULL },
7463 { 0x00E1, NULL, NULL },
7464 { 0x00E2, NULL, NULL },
7465 { 0x00E3, NULL, NULL },
7466 { 0x00E4, NULL, NULL },
7467 { 0x00E5, NULL, NULL },
7468 { 0x00E6, NULL, NULL },
7469 { 0x00E7, NULL, NULL },
7470 { 0x00E8, NULL, NULL },
7471 { 0x00E9, NULL, NULL },
7472 { 0x00EA, NULL, NULL },
7473 { 0x00EB, NULL, NULL },
7474 { 0x00EC, NULL, NULL },
7475 { 0x00ED, NULL, NULL },
7476 { 0x00EE, NULL, NULL },
7477 { 0x00EF, NULL, NULL },
7478 { 0x00F0, "Layer 2/3 - Data report mode", dissect_data_report_mode_value },
7479 { 0x00F1, "Layer 2/3 - SFN/SF", dissect_sfn_sf_value },
7480 { 0x00F2, NULL, NULL },
7481 { 0x00F3, NULL, NULL },
7482 { 0x00F4, NULL, NULL },
7483 { 0x00F5, NULL, NULL },
7484 { 0x00F6, NULL, NULL },
7485 { 0x00F7, NULL, NULL },
7486 { 0x00F8, NULL, NULL },
7487 { 0x00F9, NULL, NULL },
7488 { 0x00FA, "Layer 1 - PHY state", dissect_phy_state_value },
7489 { 0x00FB, NULL, NULL },
7490 { 0x00FC, NULL, NULL },
7491 { 0x00FD, NULL, NULL },
7492 { 0x00FE, NULL, NULL },
7493 { 0x00FF, NULL, NULL },
7494 { 0x0100, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv4_value },
7495 { 0x0101, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv6_value },
7496 { 0x0102, "NFAPI - P7 Port", dissect_p7_vnf_port_value },
7497 { 0x0103, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv4_value },
7498 { 0x0104, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv6_value },
7499 { 0x0105, "NFAPI - P7 Port", dissect_p7_pnf_port_value },
7500 { 0x0106, NULL, NULL },
7501 { 0x0107, NULL, NULL },
7502 { 0x0108, NULL, NULL },
7503 { 0x0109, NULL, NULL },
7504 { 0x010A, "NFAPI - Downlink UEs per Subframe", dissect_downlink_ues_per_subframe_value },
7505 { 0x010B, "NFAPI - Uplink UEs per Subframe", dissect_uplink_ues_per_subframe_value },
7506 { 0x010C, NULL, NULL },
7507 { 0x010D, NULL, NULL },
7508 { 0x010E, NULL, NULL },
7509 { 0x010F, NULL, NULL },
7510 { 0x0110, NULL, NULL },
7511 { 0x0111, NULL, NULL },
7512 { 0x0112, NULL, NULL },
7513 { 0x0113, NULL, NULL },
7514 { 0x0114, "NFAPI - nFAPI RF Bands", dissect_rf_bands_value },
7515 { 0x0115, NULL, NULL },
7516 { 0x0116, NULL, NULL },
7517 { 0x0117, NULL, NULL },
7518 { 0x0118, NULL, NULL },
7519 { 0x0119, NULL, NULL },
7520 { 0x011A, NULL, NULL },
7521 { 0x011B, NULL, NULL },
7522 { 0x011C, NULL, NULL },
7523 { 0x011D, NULL, NULL },
7524 { 0x011E, "NFAPI - Timing window", dissect_timing_window_value },
7525 { 0x011F, "NFAPI - Timing info mode", dissect_timing_info_mode_value },
7526 { 0x0120, "NFAPI - Timing info period", dissect_timing_info_period_value },
7527 { 0x0121, NULL, NULL },
7528 { 0x0122, NULL, NULL },
7529 { 0x0123, NULL, NULL },
7530 { 0x0124, NULL, NULL },
7531 { 0x0125, NULL, NULL },
7532 { 0x0126, NULL, NULL },
7533 { 0x0127, NULL, NULL },
7534 { 0x0128, "NFAPI - Maximum Transmit Power", dissect_maximum_transmit_power_value },
7535 { 0x0129, "NFAPI - EARFCN", dissect_earfcn_value },
7536 { 0x012A, NULL, NULL },
7537 { 0x012B, NULL, NULL },
7538 { 0x012C, NULL, NULL },
7539 { 0x012D, NULL, NULL },
7540 { 0x012E, NULL, NULL },
7541 { 0x012F, NULL, NULL },
7542 { 0x0130, "NFAPI - NMM GSM Frequency Bands", dissect_nmm_gsm_frequency_bands_value },
7543 { 0x0131, "NFAPI - NMM UMTS Frequency Bands", dissect_nmm_umts_frequency_bands_value },
7544 { 0x0132, "NFAPI - NMM LTE Frequency Bands", dissect_nmm_lte_frequency_bands_value },
7545 { 0x0133, "NFAPI - NMM Uplink RSSI supported", dissect_nmm_uplink_rssi_supported_value },
7548 static const tlv_t p7_tags[] =
7550 { 0x2000, "DL Config Request Body", dissect_dl_config_request_body_value },
7551 { 0x2001, "DL DCI PDU Release 8", dissect_dl_config_request_dl_dci_pdu_rel8_value },
7552 { 0x2002, "DL DCI PDU Release 9", dissect_dl_config_request_dl_dci_pdu_rel9_value },
7553 { 0x2003, "DL DCI PDU Release 10", dissect_dl_config_request_dl_dci_pdu_rel10_value },
7554 { 0x2004, "BCH PDU Release 8", dissect_dl_config_request_bch_pdu_rel8_value },
7555 { 0x2005, "MCH PDU Release 8", dissect_dl_config_request_mch_pdu_rel8_value },
7556 { 0x2006, "DLSCH PDU Release 8", dissect_dl_config_request_dlsch_pdu_rel8_value },
7557 { 0x2007, "DLSCH PDU Release 9", dissect_dl_config_request_dlsch_pdu_rel9_value },
7558 { 0x2008, "DLSCH PDU Release 10", dissect_dl_config_request_dlsch_pdu_rel10_value },
7559 { 0x2009, "PCH PDU Release 8", dissect_dl_config_request_pch_pdu_rel8_value },
7560 { 0x200A, "PRS PDU Release 9", dissect_dl_config_request_prs_pdu_rel9_value },
7561 { 0x200B, "CSI-RS PDU Release 10", dissect_dl_config_request_csi_rs_pdu_rel10_value },
7562 { 0x200C, "UL Config Request Body", dissect_ul_config_request_body_value },
7563 { 0x200D, "ULSCH PDU Release 8", dissect_ul_config_ulsch_pdu_rel8_value },
7564 { 0x200E, "ULSCH PDU Release 10", dissect_ul_config_ulsch_pdu_rel10_value },
7565 { 0x200F, "Initial Transmission Parameters Release 8", dissect_ul_config_init_tx_params_rel8_value },
7566 { 0x2010, "CQI RI Information Release 8", dissect_ul_config_cqi_ri_info_rel8_value },
7567 { 0x2011, "CQI RI Information Release 9 or later", dissect_ul_config_cqi_ri_info_rel9_later_value },
7568 { 0x2012, "HARQ Information (ULSCH) Release 10", dissect_ul_config_harq_info_ulsch_rel10_value },
7569 { 0x2013, "UE Information Release 8", dissect_ul_config_ue_info_rel8_value },
7570 { 0x2014, "CQI Information Release 8", dissect_ul_config_cqi_info_rel8_value },
7571 { 0x2015, "CQI Information Release 10", dissect_ul_config_cqi_info_rel10_value },
7572 { 0x2016, "SR Information Release 8", dissect_ul_config_sr_info_rel8_value },
7573 { 0x2017, "SR Information Release 10", dissect_ul_config_sr_info_rel10_value },
7574 { 0x2018, "HARQ Information (UCI) Release 10 TDD", dissect_ul_config_harq_info_uci_rel10_tdd_value },
7575 { 0x2019, "HARQ Information (UCI) Release 8 FDD", dissect_ul_config_harq_info_uci_rel8_fdd_value },
7576 { 0x201A, "HARQ Information (UCI) Release 9 or later FDD", dissect_ul_config_harq_info_uci_rel9_later_fdd_value },
7577 { 0x201B, "SRS Information Release 8", dissect_ul_config_srs_info_rel8_value },
7578 { 0x201C, "SRS Information Release 10", dissect_ul_config_srs_info_rel10_value },
7579 { 0x201D, "HI DCI0 Request Body", dissect_hi_dci0_request_body_value },
7580 { 0x201E, "HI PDU Release 8", dissect_hi_dci0_hi_rel8_value },
7581 { 0x201F, "HI PDU Release 10", dissect_hi_dci0_hi_rel10_value },
7582 { 0x2020, "DCI UL PDU Release 8", dissect_hi_dci0_dci_ul_rel8_value },
7583 { 0x2021, "DCI UL PDU Release 10", dissect_hi_dci0_dci_ul_rel10_value },
7584 { 0x2022, "Tx Request Body", dissect_tx_request_body_value },
7585 { 0x2023, "RX Indication Body", dissect_rx_indication_body_value },
7586 { 0x2024, "RX PDU Release 8", dissect_rx_indication_rel8_value },
7587 { 0x2025, "RX PDU Release 9", dissect_rx_indication_rel9_value },
7588 { 0x2026, "HARQ Indication Body", dissect_harq_indication_body_value },
7589 { 0x2027, "HARQ PDU Release 8 TDD", dissect_harq_indication_rel8_tdd_value },
7590 { 0x2028, "HARQ PDU Release 9 or later TDD", dissect_harq_indication_rel9_later_tdd_value },
7591 { 0x2029, "HARQ PDU Release 8 FDD", dissect_harq_indication_rel8_fdd_value },
7592 { 0x202A, "HARQ PDU Release 9 or later FDD", dissect_harq_indication_rel9_later_fdd_value },
7593 { 0x202B, "CRC Indication Body", dissect_crc_indication_body_value },
7594 { 0x202C, "CRC PDU Release 8", dissect_crc_indication_rel8_value },
7595 { 0x202D, "RX SR Indication Body", dissect_rx_sr_indication_body_value },
7596 { 0x202E, "RX CQI Indication Body", dissect_rx_cqi_indication_body_value },
7597 { 0x202F, "CQI PDU Release 8", dissect_rx_cqi_indication_rel8_value },
7598 { 0x2030, "CQI PDU Release 9", dissect_rx_cqi_indication_rel9_value },
7599 { 0x2031, "RACH Indication Body", dissect_rach_indication_body_value },
7600 { 0x2032, "Preamble PDU Release 8", dissect_rach_indication_rel8_value },
7601 { 0x2033, "Preamble PDU Release 9", dissect_rach_indication_rel9_value },
7602 { 0x2034, "SRS Indication Body", dissect_srs_indication_body_value },
7603 { 0x2035, "SRS PDU Release 8", dissect_srs_indication_rel8_value },
7604 { 0x2036, "SRS PDU Release 9", dissect_srs_indication_rel9_value },
7605 { 0x2037, "SRS PDU Release 10 TDD", dissect_srs_indication_rel10_tdd_value },
7606 { 0x2038, "RX UE Information", dissect_rx_ue_info_value },
7607 { 0x2039, "DL DCI PDU Release 11", dissect_dl_config_request_dl_dci_pdu_rel11_value },
7608 { 0x203A, "DL DCI PDU Release 12", dissect_dl_config_request_dl_dci_pdu_rel12_value },
7609 { 0x203B, "DL DCI PDU Release 13", dissect_dl_config_request_dl_dci_pdu_rel13_value },
7610 { 0x203C, "DLSCH PDU Release 11", dissect_dl_config_request_dlsch_pdu_rel11_value },
7611 { 0x203D, "DLSCH PDU Release 12", dissect_dl_config_request_dlsch_pdu_rel12_value },
7612 { 0x203E, "DLSCH PDU Release 13", dissect_dl_config_request_dlsch_pdu_rel13_value },
7613 { 0x203F, "PCH PDU Release 13", dissect_dl_config_request_pch_pdu_rel13_value },
7614 { 0x2040, "CSI-RS PDU Release 13", dissect_dl_config_request_csi_rs_pdu_rel13_value },
7615 { 0x2041, "depdcch PDU Release 11 Parameters", dissect_dl_config_request_depdcch_params_rel11_value },
7616 { 0x2042, "depdcch PDU Release 13 Parameters", dissect_dl_config_request_depdcch_params_rel13_value },
7617 { 0x2043, "ULSCH PDU Release 11", dissect_ul_config_ulsch_pdu_rel11_value },
7618 { 0x2044, "ULSCH PDU Release 13", dissect_ul_config_ulsch_pdu_rel13_value },
7619 { 0x2045, "CQI RI Information Release 13", dissect_ul_config_cqi_ri_info_rel13_value },
7620 { 0x2046, "HARQ Information (ULSCH) Release 13", dissect_ul_config_harq_info_ulsch_rel13_value },
7621 { 0x2047, "UE Information Release 11", dissect_ul_config_ue_info_rel11_value },
7622 { 0x2048, "UE Information Release 13", dissect_ul_config_ue_info_rel13_value },
7623 { 0x2049, "CQI Information Release 13", dissect_ul_config_cqi_info_rel13_value },
7624 { 0x204A, "HARQ Information (UCI) Release 11 FDD/TDD", dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value },
7625 { 0x204B, "HARQ Information (UCI) Release 13 FDD/TDD", dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value },
7626 { 0x204C, "SRS Information Release 13", dissect_ul_config_srs_info_rel13_value },
7627 { 0x204D, "DCI UL PDU Release 12", dissect_hi_dci0_dci_ul_rel12_value },
7628 { 0x204E, "MDPCCH DCI UL PDU Release 13", dissect_hi_dci0_mdpcch_dci_ul_rel13_value },
7629 { 0x204F, "HARQ PDU Release 13 or later TDD", dissect_harq_indication_rel13_later_tdd_value },
7630 { 0x2050, "HARQ PDU Release 13 or later FDD", dissect_harq_indication_rel13_later_fdd_value },
7631 { 0x2051, "Preamble PDU Release 13", dissect_rach_indication_rel13_value },
7632 { 0x2052, "UL CQI Information", dissect_ul_cqi_information_value },
7633 { 0x2053, "SRS PDU Release 11", dissect_srs_indication_rel11_value },
7634 { 0x2054, "TDD Channel Measurement", dissect_tdd_channel_measurement_value },
7635 { 0x2055, "LBT DL Config Request Body", dissect_lbt_dl_config_request_body_value },
7636 { 0x2056, "LBT PDSCH Req PDU Release 13", dissect_lbt_dl_config_request_pdsch_req_rel13_value },
7637 { 0x2057, "LBT DRS req PDU Release 13", dissect_lbt_dl_config_request_drs_req_rel13_value },
7638 { 0x2058, "LBT DL Indication Message Body", dissect_lbt_indication_message_body_value },
7639 { 0x2059, "LBT PDSCH Resp PDU Release 13", dissect_lbt_dl_config_request_pdsch_resp_rel13_value },
7640 { 0x205A, "LBT DRS Resp PDU Release 13", dissect_lbt_dl_config_request_drs_resp_rel13_value },
7641 { 0x205B, "MPDCCH PDU Release 13", dissect_dl_config_request_mpdpcch_pdu_rel13_value },
7644 static const tlv_t p4_tags[] =
7646 { 0x3000, "LTE RSSI Request", dissect_lte_rssi_request_value },
7647 { 0x3001, "UTRAN RSSI Request", dissect_utran_rssi_request_value },
7648 { 0x3002, "GERAN RSSI Request", dissect_geran_rssi_request_value },
7649 { 0x3003, "RSSI Indication", dissect_rssi_indication_value },
7650 { 0x3004, "LTE CELL SEARCH Request", dissect_lte_cell_search_value },
7651 { 0x3005, "UTRAN CELL SEARCH Request", dissect_utran_cell_search_value },
7652 { 0x3006, "GERAN CELL SEARCH Request", dissect_geran_cell_search_value },
7653 { 0x3007, "LTE CELL SEARCH Indication", dissect_lte_cell_search_indication_value },
7654 { 0x3008, "UTRAN CELL SEARCH Indication", dissect_utran_cell_search_indication_value },
7655 { 0x3009, "GERAN CELL SEARCH Indication", dissect_geran_cell_search_indication_value },
7656 { 0x300A, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
7657 { 0x300B, "LTE BROADCAST DETECT Request", dissect_lte_broadcast_detect_request_value },
7658 { 0x300C, "UTRAN BROADCAST DETECT Request", dissect_utran_broadcast_detect_request_value },
7659 { 0x300D, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
7660 { 0x300E, "LTE BROADCAST DETECT Indication", dissect_lte_broadcast_detect_indication_value },
7661 { 0x300F, "UTRAN BROADCAST DETECT Indication", dissect_utran_broadcast_detect_indication_value },
7662 { 0x3010, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7663 { 0x3011, "LTE SYSTEM INFORMATION SCHEDULE Request", dissect_lte_system_information_schedule_request_value },
7664 { 0x3012, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7665 { 0x3013, "LTE SYSTEM INFORMATION SCHEDULE Indication", dissect_lte_system_information_schedule_indication_value },
7666 { 0x3014, "LTE SYSTEM INFORMATION Request", dissect_lte_system_information_request_value },
7667 { 0x3015, "UTRAN SYSTEM INFORMATION Request", dissect_utran_system_information_request_value },
7668 { 0x3016, "GERAN SYSTEM INFORMATION Request", dissect_geran_system_information_request_value },
7669 { 0x3017, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7670 { 0x3018, "LTE SYSTEM INFORMATION Indication", dissect_lte_system_information_indication_value },
7671 { 0x3019, "UTRAN SYSTEM INFORMATION Indication", dissect_utran_system_information_indication_value },
7672 { 0x301A, "GERAN SYSTEM INFORMATION Indication", dissect_geran_system_information_indication_value },
7676 static const tlv_t* look_up_tlv(int tag_id)
7678 const tlv_t* tlv = NULL;
7680 static const int num_configuration_tags = array_length(configuration_tags);
7681 static const int num_nfapi_tags = array_length(nfapi_tags);
7682 static const int num_p7_tags = array_length(p7_tags);
7683 static const int num_p4_tags = array_length(p4_tags);
7685 if (tag_id >= 0x0000 && tag_id <= (0x0000 + num_configuration_tags - 1)) // 0x0133)
7687 tlv = &configuration_tags[tag_id];
7689 else if (tag_id >= 0x1000 && tag_id <= (0x1000 + num_nfapi_tags - 1)) // 0x100D)
7691 tlv = &nfapi_tags[tag_id - 0x1000];
7693 else if (tag_id >= 0x2000 && tag_id <= (0x2000 + num_p7_tags - 1)) //0x205B)
7695 tlv = &p7_tags[tag_id - 0x2000];
7697 else if (tag_id >= 0x3000 && tag_id <= (0x3000 + num_p4_tags - 1)) // 0x301A)
7699 tlv = &p4_tags[tag_id - 0x3000];
7701 return tlv;
7705 static proto_item* dissect_tl_header(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7707 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tl, "TL");
7708 ptvcursor_add(ptvc, hf_nfapi_tl_tag, 2, ENC_BIG_ENDIAN);
7709 proto_item* item = ptvcursor_add(ptvc, hf_nfapi_tl_length, 2, ENC_BIG_ENDIAN);
7710 ptvcursor_pop_subtree(ptvc);
7712 return item;
7715 static void dissect_tlv_list(ptvcursor_t* ptvc, packet_info* pinfo, int len)
7717 while (ptvcursor_current_offset(ptvc) < len)
7719 uint16_t tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7720 uint16_t tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
7722 const tlv_t* tlv = look_up_tlv(tlv_id);
7724 if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
7726 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "%s", tlv->name);
7727 proto_item* tlv_length_item = dissect_tl_header(ptvc, pinfo);
7729 // There are rare cases where the len of the tlv is 0.
7730 if (tlv_len > 0)
7733 if (tlv->decode != NULL)
7735 // Create a sub buff with the correct length, so we can detect reading off the end
7736 tvbuff_t* sub_tvbuff = tvb_new_subset_length(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), tlv_len);
7737 ptvcursor_t* sub_ptvc = ptvcursor_new(pinfo->pool, ptvcursor_tree(ptvc), sub_tvbuff, 0);
7739 tlv->decode(sub_ptvc, pinfo);
7741 if (ptvcursor_current_offset(sub_ptvc) != tlv_len)
7743 // error in the tlv length
7744 expert_add_info_format(pinfo, tlv_length_item, &ei_invalid_tlv_length, "TLV length does not match decoded length");
7747 ptvcursor_free(sub_ptvc);
7750 ptvcursor_advance(ptvc, tlv_len);
7753 ptvcursor_pop_subtree(ptvc);
7755 else
7757 if (tlv_id >= 0xF000 /* && tlv_id <= 0xFFFF*/)
7759 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown Vendor Extension Tag");
7761 else
7763 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown");
7766 dissect_tl_header(ptvc, pinfo);
7767 ptvcursor_advance(ptvc, tlv_len);
7768 ptvcursor_pop_subtree(ptvc);
7774 static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
7776 uint32_t i = 0, count;
7777 unsigned number_of_pdu_addr = ptvcursor_current_offset(ptvc); // *offset;
7778 wmem_array_t *lengths = wmem_array_new(pinfo->pool, sizeof(uint16_t));
7780 ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &count);
7782 if (count > 0)
7784 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "RX PDU List");
7785 int pdu_end = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc);
7787 while (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) > 0 &&
7788 ptvcursor_current_offset(ptvc) < pdu_end )
7790 uint16_t tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7791 //uint16_t tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
7793 if (tlv_id == 0x2038)
7795 if (i != 0)
7796 ptvcursor_pop_subtree(ptvc);
7798 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "[%u]", i);
7800 i++;
7803 char* tlv_name = "Unknown";
7804 const tlv_t* tlv = look_up_tlv(tlv_id);
7806 if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
7808 tlv_name = tlv->name;
7811 ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "%s", tlv_name);
7813 dissect_tl_header(ptvc, pinfo);
7816 if (tlv_id == 0x2038)
7818 dissect_rx_ue_info_value(ptvc, pinfo);
7820 else if ((tlv_id == 0x2024) && (i > 0))
7822 uint16_t val = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7823 wmem_array_append_one(lengths, val);
7824 ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
7825 int data_offset = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7826 ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
7827 ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
7828 ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
7830 if ((data_offset > 0) && (pdu_end == (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc))))
7832 pdu_end = number_of_pdu_addr + data_offset;
7836 else if (tlv_id == 0x2025)
7838 dissect_rx_indication_rel9_value(ptvc, pinfo);
7841 ptvcursor_pop_subtree(ptvc);
7845 // pop the last pdu index
7846 ptvcursor_pop_subtree(ptvc);
7848 ptvcursor_pop_subtree(ptvc);
7851 for (i = 0; i < wmem_array_get_count(lengths); ++i)
7853 ptvcursor_add(ptvc, hf_nfapi_pdu, *((uint16_t *)wmem_array_index(lengths, i)), ENC_NA);
7858 // ----------------------------------------------------------------------------|
7860 static int dissect_p45_header(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
7862 proto_tree* p45_tree;
7864 p45_tree = proto_tree_add_subtree(tree, tvb, 0, 8, ett_nfapi_p4_p5_message_header, NULL, "P4 P5 Header");
7866 proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_phy_id, tvb, 0, 2, ENC_BIG_ENDIAN);
7867 proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_message_id, tvb, 2, 2, ENC_BIG_ENDIAN);
7868 proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_message_length, tvb, 4, 2, ENC_BIG_ENDIAN);
7869 proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_spare, tvb, 6, 2, ENC_BIG_ENDIAN);
7871 return 8;
7874 static int dissect_p45_header_with_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7876 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7877 ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7879 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7880 ptvcursor_free(ptvc);
7881 return tvb_captured_length(tvb);
7884 static int dissect_p45_header_with_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7886 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7888 proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7890 return offset+4;
7893 static int dissect_p45_header_with_error_and_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7895 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7896 ptvcursor_t *ptvc;
7898 proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7899 offset += 4;
7901 ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7902 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7903 ptvcursor_free(ptvc);
7905 return tvb_captured_length(tvb);
7908 static int dissect_p45_header_with_p4_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7910 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7912 proto_tree_add_item(tree, hf_nfapi_p4_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7914 return offset+4;
7917 static int dissect_p45_header_with_p4_error_and_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7919 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7920 ptvcursor_t *ptvc;
7922 proto_tree_add_item(tree, hf_nfapi_p4_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7923 offset += 4;
7925 ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7926 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7927 ptvcursor_free(ptvc);
7929 return tvb_captured_length(tvb);
7932 static int dissect_p45_header_with_rat_type_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7934 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7935 ptvcursor_t *ptvc;
7937 proto_tree_add_item(tree, hf_nfapi_rat_type, tvb, offset, 1, ENC_BIG_ENDIAN);
7938 offset += 1;
7940 ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7941 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7942 ptvcursor_free(ptvc);
7944 return tvb_captured_length(tvb);
7947 static int dissect_p45_param_response_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7949 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7950 ptvcursor_t *ptvc;
7952 proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 1, ENC_BIG_ENDIAN);
7953 offset += 1;
7954 proto_tree_add_item(tree, hf_nfapi_num_tlv, tvb, offset, 1, ENC_BIG_ENDIAN);
7955 offset += 1;
7957 ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7958 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7959 ptvcursor_free(ptvc);
7961 return tvb_captured_length(tvb);
7964 static int dissect_p45_config_request_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7966 int offset = dissect_p45_header(tvb, pinfo, tree, data);
7967 ptvcursor_t *ptvc;
7969 proto_tree_add_item(tree, hf_nfapi_num_tlv, tvb, offset, 1, ENC_BIG_ENDIAN);
7970 offset += 1;
7972 ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7973 dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7974 ptvcursor_free(ptvc);
7976 return tvb_captured_length(tvb);
7979 static int dissect_p7_header(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint8_t* m, uint8_t* seg, uint8_t* seq)
7981 proto_tree *header_tree;
7982 int offset = 0;
7983 uint8_t m_seg;
7984 static int * const fields[] = {
7985 &hf_nfapi_p7_message_header_m,
7986 &hf_nfapi_p7_message_header_segment,
7987 NULL
7990 header_tree = proto_tree_add_subtree(tree, tvb, offset, 16, ett_nfapi_p7_message_header, NULL, "P7 Header");
7991 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_phy_id, tvb, offset, 2, ENC_BIG_ENDIAN);
7992 offset += 2;
7993 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_message_id, tvb, offset, 2, ENC_BIG_ENDIAN);
7994 offset += 2;
7995 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_message_length, tvb, offset, 2, ENC_BIG_ENDIAN);
7996 offset += 2;
7998 if ((m != NULL) && (seg != NULL))
8000 m_seg = tvb_get_uint8(tvb, offset);
8001 *m = (m_seg & 0x80) >> 7;
8002 *seg = m_seg & 0x7F;
8004 proto_tree_add_bitmask_list(header_tree, tvb, offset, 1, fields, ENC_BIG_ENDIAN);
8005 offset += 1;
8007 if (seq != NULL)
8009 *seq = tvb_get_uint8(tvb, offset);
8011 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_sequence_number, tvb, offset, 1, ENC_BIG_ENDIAN);
8012 offset += 1;
8013 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_checksum, tvb, offset, 4, ENC_BIG_ENDIAN);
8014 offset += 4;
8015 proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_transmit_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN);
8016 offset += 4;
8018 return offset;
8021 static int dissect_p7_dl_node_sync_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8023 int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8025 proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t1, tvb, offset, 4, ENC_BIG_ENDIAN);
8026 offset += 4;
8027 proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t2, tvb, offset, 4, ENC_BIG_ENDIAN);
8028 offset += 4;
8029 proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t3, tvb, offset, 4, ENC_BIG_ENDIAN);
8030 offset += 4;
8032 return offset;
8035 static int dissect_p7_ul_node_sync_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8037 int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8039 proto_tree_add_item(tree, hf_nfapi_dl_node_sync_t1, tvb, offset, 4, ENC_BIG_ENDIAN);
8040 offset += 4;
8041 proto_tree_add_item(tree, hf_nfapi_dl_node_sync_delta_sfn_sf, tvb, offset, 4, ENC_BIG_ENDIAN);
8042 offset += 4;
8044 return offset;
8047 static int dissect_p7_timing_info_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8049 int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8050 proto_tree_add_item(tree, hf_nfapi_timing_info_last_sfn_sf, tvb, offset, 4, ENC_BIG_ENDIAN);
8051 offset += 4;
8052 proto_tree_add_item(tree, hf_nfapi_timing_info_time_since_last_timing_info, tvb, offset, 4, ENC_BIG_ENDIAN);
8053 offset += 4;
8054 proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8055 offset += 4;
8056 proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8057 offset += 4;
8058 proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8059 offset += 4;
8060 proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8061 offset += 4;
8062 proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8063 offset += 4;
8064 proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8065 offset += 4;
8066 proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8067 offset += 4;
8068 proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8069 offset += 4;
8070 proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8071 offset += 4;
8072 proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8073 offset += 4;
8074 proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8075 offset += 4;
8076 proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8077 offset += 4;
8079 return offset;
8082 static reassembly_table ul_p7_reassemble_table;
8083 static reassembly_table dl_p7_reassemble_table;
8085 static int hf_msg_fragments;
8086 static int hf_msg_fragment;
8087 static int hf_msg_fragment_overlap;
8088 static int hf_msg_fragment_overlap_conflicts;
8089 static int hf_msg_fragment_multiple_tails;
8090 static int hf_msg_fragment_too_long_fragment;
8091 static int hf_msg_fragment_error;
8092 static int hf_msg_fragment_count;
8093 static int hf_msg_reassembled_in;
8094 static int hf_msg_reassembled_length;
8095 static int ett_msg_fragment;
8096 static int ett_msg_fragments;
8098 static const fragment_items msg_frag_items = {
8099 /* Fragment subtrees */
8100 &ett_msg_fragment,
8101 &ett_msg_fragments,
8102 /* Fragment fields */
8103 &hf_msg_fragments,
8104 &hf_msg_fragment,
8105 &hf_msg_fragment_overlap,
8106 &hf_msg_fragment_overlap_conflicts,
8107 &hf_msg_fragment_multiple_tails,
8108 &hf_msg_fragment_too_long_fragment,
8109 &hf_msg_fragment_error,
8110 &hf_msg_fragment_count,
8111 /* Reassembled in field */
8112 &hf_msg_reassembled_in,
8113 /* Reassembled length field */
8114 &hf_msg_reassembled_length,
8115 NULL,
8116 /* Tag */
8117 "Message fragments"
8120 static int dissect_nfapi_ul_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8122 uint8_t m, seg, seq;
8123 int offset;
8125 uint8_t save_fragmented;
8127 uint16_t msg_id = tvb_get_ntohs(tvb, 2);
8128 uint16_t msg_len = tvb_get_ntohs(tvb, 4);
8130 offset = dissect_p7_header(tvb, pinfo, tree, &m, &seg, &seq);
8131 save_fragmented = pinfo->fragmented;
8133 if (m == 1 || (m == 0 && seg > 0))
8135 fragment_head *fd_head;
8136 tvbuff_t *save_tvb = tvb;
8138 if (offset >= msg_len) {
8139 return tvb_captured_length(tvb);
8142 pinfo->fragmented = true;
8144 fd_head = fragment_add_seq_check(&ul_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
8146 if (fd_head == NULL)
8148 return tvb_captured_length(tvb);
8151 tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled UL P7", fd_head, &msg_frag_items, NULL, tree);
8152 if (tvb)
8154 offset = 0;
8155 col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
8157 else
8159 col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
8160 return tvb_captured_length(save_tvb);
8164 pinfo->fragmented = save_fragmented;
8166 switch (msg_id)
8168 case NFAPI_HARQ_INDICATION_MSG_ID:
8169 case NFAPI_CRC_INDICATION_MSG_ID:
8170 case NFAPI_RX_ULSCH_INDICATION_MSG_ID:
8171 case NFAPI_RACH_INDICATION_MSG_ID:
8172 case NFAPI_SRS_INDICATION_MSG_ID:
8173 case NFAPI_RX_SR_INDICATION_MSG_ID:
8174 case NFAPI_RX_CQI_INDICATION_MSG_ID:
8176 ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
8177 ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
8178 dissect_tlv_list(ptvc, pinfo, msg_len);
8179 ptvcursor_free(ptvc);
8181 break;
8186 return tvb_captured_length(tvb);
8189 static int dissect_nfapi_dl_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8191 uint8_t m, seg, seq;
8192 int offset;
8194 uint8_t save_fragmented;
8196 uint16_t msg_id = tvb_get_ntohs(tvb, 2);
8197 uint16_t msg_len = tvb_get_ntohs(tvb, 4);
8199 offset = dissect_p7_header(tvb, pinfo, tree, &m, &seg, &seq);
8200 save_fragmented = pinfo->fragmented;
8202 if (m == 1 || (m == 0 && seg > 0))
8204 fragment_head *fd_head;
8205 tvbuff_t *save_tvb = tvb;
8207 if (offset >= msg_len) {
8208 return tvb_captured_length(tvb);
8211 pinfo->fragmented = true;
8213 fd_head = fragment_add_seq_check(&dl_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
8215 if (fd_head == NULL)
8217 return tvb_captured_length(tvb);
8220 tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled DL P7", fd_head, &msg_frag_items, NULL, tree);
8221 if (tvb)
8223 offset = 0;
8224 col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
8226 else
8228 col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
8229 return tvb_captured_length(save_tvb);
8233 pinfo->fragmented = save_fragmented;
8235 switch (msg_id)
8237 case NFAPI_DL_CONFIG_REQUEST_MSG_ID:
8238 case NFAPI_UL_CONFIG_REQUEST_MSG_ID:
8239 case NFAPI_HI_DCI0_REQUEST_MSG_ID:
8240 case NFAPI_TX_REQUEST_MSG_ID:
8241 case NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID:
8242 case NFAPI_LBT_DL_INDICATION_MSG_ID:
8244 ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
8245 ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
8246 dissect_tlv_list(ptvc, pinfo, msg_len);
8247 ptvcursor_free(ptvc);
8248 break;
8252 return tvb_captured_length(tvb);
8256 static int dissect_nfapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8258 proto_tree* nfapi_tree;
8259 proto_item* nfapi_item;
8260 uint16_t msg_id;
8261 const char* message_str;
8263 if (tvb_reported_length(tvb) < 4)
8264 return 0;
8266 col_set_str(pinfo->cinfo, COL_PROTOCOL, "NFAPI");
8267 col_clear(pinfo->cinfo, COL_INFO);
8269 nfapi_item = proto_tree_add_item(tree, proto_nfapi, tvb, 0, -1, ENC_NA);
8270 nfapi_tree = proto_item_add_subtree(nfapi_item, ett_nfapi);
8272 msg_id = tvb_get_ntohs(tvb, 2);
8273 message_str = val_to_str_const(msg_id, message_id_vals, "Unknown");
8275 // Flag if this is a vendor extension message, could do it for P4, 5, 7
8276 if (msg_id >= 0x0300 && msg_id <= 0x03FF)
8278 col_append_str(pinfo->cinfo, COL_INFO, "Vendor Extension");
8279 proto_item_append_text(nfapi_item, ", Vendor Extension");
8281 else
8283 proto_item_append_text(nfapi_item, ", %s", message_str);
8284 col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", message_str);
8287 if (!dissector_try_uint_with_data(message_table, msg_id, tvb, pinfo, nfapi_tree, false, NULL))
8289 call_data_dissector(tvb, pinfo, nfapi_tree);
8292 return tvb_captured_length(tvb);
8295 static void nfapi_tag_vals_fn(char* s, uint32_t v)
8297 const tlv_t* tlv = look_up_tlv(v);
8298 if (tlv != 0)
8300 snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", tlv->name, v);
8302 else
8304 snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", "Unknown", v);
8307 static void neg_pow_conversion_fn(char* s, uint8_t v)
8309 snprintf(s, ITEM_LABEL_LENGTH, "%d dB (%d)", ((int16_t)v * (-1)), v);
8311 static void power_offset_conversion_fn(char* s, uint16_t v)
8313 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.001) - 6.0), v);
8315 static void reference_signal_power_conversion_fn(char* s, uint16_t v)
8317 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.25) - 63.75), v);
8319 static void laa_threshold_conversion_fn(char* s, uint16_t v)
8321 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (float)(v * -100.00), v);
8323 static void max_transmit_power_2_conversion_fn(char* s, uint16_t v)
8325 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1) - 10.0, v);
8327 static void max_transmit_power_conversion_fn(char* s, uint16_t v)
8329 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8331 static void sfn_sf_conversion_fn(char* s, uint16_t v)
8333 snprintf(s, ITEM_LABEL_LENGTH, "%d/%d (%d)", v >> 0x4, v & 0x000F, v);
8335 static void rssi_conversion_fn(char* s, uint16_t v)
8337 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8339 static void dl_rs_tx_pow_measment_conversion_fn(char* s, uint16_t v)
8341 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8344 static void ul_cqi_conversion_fn(char* s, uint16_t v)
8346 snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v / 2 ) - 64.0), v);
8349 // ----------------------------------------------------------------------------|
8351 void proto_register_nfapi(void)
8353 static hf_register_info hf[] =
8355 { &hf_msg_fragments,
8356 { "Message fragments", "nfapi.fragments",
8357 FT_NONE, BASE_NONE, NULL, 0x00,
8358 NULL, HFILL }
8360 { &hf_msg_fragment,
8361 { "Message fragment", "nfapi.fragment",
8362 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8363 NULL, HFILL }
8365 { &hf_msg_fragment_overlap,
8366 { "Message fragment overlap", "nfapi.fragment.overlap",
8367 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8368 NULL, HFILL }
8370 { &hf_msg_fragment_overlap_conflicts,
8371 { "Message fragment overlapping with conflicting data", "nfapi.fragment.overlap.conflicts",
8372 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8373 NULL, HFILL }
8375 { &hf_msg_fragment_multiple_tails,
8376 { "Message has multiple tail fragments", "nfapi.fragment.multiple_tails",
8377 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8378 NULL, HFILL }
8380 { &hf_msg_fragment_too_long_fragment,
8381 { "Message fragment too long", "nfapi.fragment.too_long_fragment",
8382 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8383 NULL, HFILL }
8385 { &hf_msg_fragment_error,
8386 { "Message defragmentation error", "nfapi.fragment.error",
8387 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8388 NULL, HFILL }
8390 { &hf_msg_fragment_count,
8391 { "Message fragment count", "nfapi.fragment.count",
8392 FT_UINT32, BASE_DEC, NULL, 0x00,
8393 NULL, HFILL }
8395 { &hf_msg_reassembled_in,
8396 { "Reassembled in", "nfapi.reassembled.in",
8397 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8398 NULL, HFILL }
8400 { &hf_msg_reassembled_length,
8401 { "Reassembled length", "nfapi.reassembled.length",
8402 FT_UINT32, BASE_DEC, NULL, 0x00,
8403 NULL, HFILL }
8405 { &hf_nfapi_p4_p5_message_header_phy_id,
8406 { "PHY ID", "nfapi.p4_p5_message_header.phy_id",
8407 FT_UINT16, BASE_DEC, NULL, 0x0,
8408 "Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
8410 { &hf_nfapi_p4_p5_message_header_message_id,
8411 { "Message ID", "nfapi.p4_p5_message_header.message_id",
8412 FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
8413 "The nFAPI message identity", HFILL }
8415 { &hf_nfapi_p4_p5_message_header_message_length,
8416 { "Message Length", "nfapi.p4_p5_message_header.message_length",
8417 FT_UINT16, BASE_DEC, NULL, 0x0,
8418 "The length in bytes of the message including the header", HFILL }
8420 { &hf_nfapi_p4_p5_message_header_spare,
8421 { "Spare", "nfapi.p4_p5_message_header.spare",
8422 FT_UINT16, BASE_DEC, NULL, 0x0,
8423 "Reserved field to be populated with zeros on transmission and ignored on reception", HFILL }
8425 { &hf_nfapi_p7_message_header_phy_id,
8426 { "Phy ID", "nfapi.p7_message_header.phy_id",
8427 FT_UINT16, BASE_DEC, NULL, 0x0,
8428 "Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
8430 { &hf_nfapi_p7_message_header_message_id,
8431 { "Message ID", "nfapi.p7.message_header.message_id",
8432 FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
8433 "The nFAPI message identity", HFILL }
8435 { &hf_nfapi_p7_message_header_message_length,
8436 { "Message Length", "nfapi.p7_message_header.message_length",
8437 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_byte_bytes), 0x0,
8438 "The length in bytes of the message segment including the header", HFILL }
8440 { &hf_nfapi_p7_message_header_m,
8441 { "More segments", "nfapi.p7_message_header.more_segments",
8442 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
8443 "A More flag indicating there are more segments to follow to complete the entire message", HFILL }
8445 { &hf_nfapi_p7_message_header_segment,
8446 { "Segment Number", "nfapi.p7_message_header.segment_number",
8447 FT_UINT8, BASE_DEC, NULL, 0x7F,
8448 "The segment number starting at zero and incrementing by one between each segment", HFILL }
8450 { &hf_nfapi_p7_message_header_sequence_number,
8451 { "Sequence Number", "nfapi.p7_message_header.m_segment_sequence",
8452 FT_UINT8, BASE_DEC, NULL, 0x0,
8453 "The incrementing sequence number for all complete messages over the P7 nFAPI interface per PHY instance", HFILL }
8455 { &hf_nfapi_p7_message_header_checksum,
8456 { "Checksum", "nfapi.p7_message_header.checksum",
8457 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8458 "The checksum of the whole message segment (including header) as calculated using "
8459 "the CRC32c algorithm following the same method as the SCTP protocol defined in IETF RFC 4960 "
8460 "The Checksum is optional to populate and must be filled with zero's when not used", HFILL }
8462 { &hf_nfapi_p7_message_header_transmit_timestamp,
8463 { "Transmit Timestamp", "nfapi.p7_message_header.timestamp",
8464 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
8465 "The offset from VNF SFN/SF 0/0 time reference of the message transmission at the transport layer, in microseconds, with a range of 0 to 10239999", HFILL }
8467 { &hf_nfapi_tl_tag,
8468 { "TLV Tag", "nfapi.tlv_tag",
8469 FT_UINT16, BASE_CUSTOM, CF_FUNC(nfapi_tag_vals_fn), 0x0,
8470 NULL, HFILL }
8472 { &hf_nfapi_tl_length,
8473 { "TLV Length", "nfapi.tlv_length",
8474 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_byte_bytes), 0x0,
8475 NULL, HFILL }
8477 { &hf_nfapi_error_code,
8478 { "Error Code", "nfapi.error.code",
8479 FT_UINT32, BASE_DEC, VALS(nfapi_error_vals), 0x0,
8480 NULL, HFILL }
8482 { &hf_nfapi_p4_error_code,
8483 { "Error Code", "nfapi.p4_error.code",
8484 FT_UINT32, BASE_DEC, VALS(nfapi_p4_error_vals), 0x0,
8485 NULL, HFILL }
8487 { &hf_nfapi_rat_type,
8488 { "RAT Type", "nfapi.rat_type",
8489 FT_UINT8, BASE_DEC, VALS(nfapi_rat_type_vals), 0x0,
8490 NULL, HFILL }
8492 { &hf_nfapi_num_tlv,
8493 { "Number of TLV", "nfapi.param.response.num_tlv",
8494 FT_UINT8, BASE_DEC, NULL, 0x0,
8495 NULL, HFILL }
8497 { &hf_nfapi_phy_state,
8498 { "Phy state value", "nfapi.phy.state",
8499 FT_UINT16, BASE_DEC, VALS(nfapi_phy_state_vals), 0x0,
8500 "Indicates the current operational state of the PHY", HFILL }
8502 { &hf_nfapi_dl_ue_per_sf,
8503 { "Downlink UEs per Subframe", "nfapi.dl.ue.per.sf",
8504 FT_UINT8, BASE_DEC, NULL, 0x0,
8505 "The maximum number of downlink UEs per subframe supported."
8506 "This is the maximum number of downlink UEs that can be scheduled per "
8507 "subframe, non-inclusive of broadcast, paging and common channels.", HFILL }
8509 { &hf_nfapi_ul_ue_per_sf,
8510 { "Uplink UEs per Subframe", "nfapi.ul.ue.per.sf",
8511 FT_UINT8, BASE_DEC, NULL, 0x0,
8512 "The maximum number of uplink UEs per subframe supported."
8513 "This is the maximum number of uplink UEs that can be scheduled per "
8514 "subframe, non-inclusive of common channels.", HFILL }
8516 { &hf_nfapi_duplex_mode,
8517 { "Duplex Mode", "nfapi.duplex.mode",
8518 FT_UINT16, BASE_DEC, VALS(nfapi_duplex_mode_vals), 0x0,
8519 NULL, HFILL }
8521 { &hf_nfapi_dl_bandwidth_support,
8522 { "Downlink bandwidth support", "nfapi.dl.bandwidth.support",
8523 FT_UINT16, BASE_HEX, NULL, 0x0,
8524 "The PHY downlink channel bandwidth capability (in resource blocks)", HFILL }
8526 { &hf_nfapi_dl_bandwidth_support_6,
8527 { "6Mhz", "nfapi.dl.bandwidth.support.6",
8528 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8529 NULL, HFILL }
8531 { &hf_nfapi_dl_bandwidth_support_15,
8532 { "15Mhz", "nfapi.dl.bandwidth.support.15",
8533 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8534 NULL, HFILL }
8536 { &hf_nfapi_dl_bandwidth_support_25,
8537 { "25Mhz", "nfapi.dl.bandwidth.support.25",
8538 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8539 NULL, HFILL }
8541 { &hf_nfapi_dl_bandwidth_support_50,
8542 { "50Mhz", "nfapi.dl.bandwidth.support.50",
8543 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8544 NULL, HFILL }
8546 { &hf_nfapi_dl_bandwidth_support_75,
8547 { "75Mhz", "nfapi.dl.bandwidth.support.75",
8548 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
8549 NULL, HFILL }
8551 { &hf_nfapi_dl_bandwidth_support_100,
8552 { "100Mhz", "nfapi.dl.bandwidth.support.100",
8553 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
8554 NULL, HFILL }
8556 { &hf_nfapi_ul_bandwidth_support,
8557 { "Uplink bandwidth support", "nfapi.ul.bandwidth.support",
8558 FT_UINT16, BASE_HEX, NULL, 0x0,
8559 "The PHY uplink channel bandwidth capability (in resource blocks)", HFILL }
8561 { &hf_nfapi_ul_bandwidth_support_6,
8562 { "6Mhz", "nfapi.ul.bandwidth.support.6",
8563 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8564 NULL, HFILL }
8566 { &hf_nfapi_ul_bandwidth_support_15,
8567 { "15Mhz", "nfapi.ul.bandwidth.support.15",
8568 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8569 NULL, HFILL }
8571 { &hf_nfapi_ul_bandwidth_support_25,
8572 { "25Mhz", "nfapi.ul.bandwidth.support.25",
8573 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8574 NULL, HFILL }
8576 { &hf_nfapi_ul_bandwidth_support_50,
8577 { "50Mhz", "nfapi.ul.bandwidth.support.50",
8578 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8579 NULL, HFILL }
8581 { &hf_nfapi_ul_bandwidth_support_75,
8582 { "75Mhz", "nfapi.ul.bandwidth.support.75",
8583 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
8584 NULL, HFILL }
8586 { &hf_nfapi_ul_bandwidth_support_100,
8587 { "100Mhz", "nfapi.ul.bandwidth.support.100",
8588 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
8589 NULL, HFILL }
8591 { &hf_nfapi_dl_modulation_support,
8592 { "Downlink modulation support", "nfapi.dl.modulation.support",
8593 FT_UINT16, BASE_HEX, NULL, 0x0,
8594 "The PHY downlink modulation capability", HFILL }
8596 { &hf_nfapi_dl_modulation_support_qpsk,
8597 { "QPSK", "nfapi.dl.modulation.support.qpsk",
8598 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8599 NULL, HFILL }
8601 { &hf_nfapi_dl_modulation_support_16qam,
8602 { "16QAM", "nfapi.dl.modulation.support.16qam",
8603 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8604 NULL, HFILL }
8606 { &hf_nfapi_dl_modulation_support_64qam,
8607 { "64QAM", "nfapi.dl.modulation.support.64qam",
8608 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8609 NULL, HFILL }
8611 { &hf_nfapi_dl_modulation_support_256qam,
8612 { "256QAM", "nfapi.dl.modulation.support.256qam",
8613 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8614 NULL, HFILL }
8616 { &hf_nfapi_ul_modulation_support,
8617 { "Uplink modulation support", "nfapi.ul.modulation.support",
8618 FT_UINT16, BASE_HEX, NULL, 0x0,
8619 "The PHY uplink modulation capability", HFILL }
8621 { &hf_nfapi_ul_modulation_support_qpsk,
8622 { "QPSK", "nfapi.ul.modulation.support.qpsk",
8623 FT_BOOLEAN, 16, NULL, 0x0001,
8624 NULL, HFILL }
8626 { &hf_nfapi_ul_modulation_support_16qam,
8627 { "16QAM", "nfapi.ul.modulation.support.16qam",
8628 FT_BOOLEAN, 16, NULL, 0x0002,
8629 NULL, HFILL }
8631 { &hf_nfapi_ul_modulation_support_64qam,
8632 { "64QAM", "nfapi.ul.modulation.support.64qam",
8633 FT_BOOLEAN, 16, NULL, 0x0004,
8634 NULL, HFILL }
8636 { &hf_nfapi_phy_antenna_capability,
8637 { "Phy Antenna capability", "nfapi.phy.antenna.capability",
8638 FT_UINT16, BASE_DEC, NULL, 0x0,
8639 "Number of antennas supported", HFILL }
8641 { &hf_nfapi_release_capability,
8642 { "Release capability", "nfapi.release.capability",
8643 FT_UINT16, BASE_DEC, NULL, 0x0,
8644 "Indicates which release the PHY supports", HFILL }
8646 { &hf_nfapi_mbsfn_capability,
8647 { "MBSFN capability", "nfapi.mbsfn.capability",
8648 FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8649 "Indicates support for MBSFN features", HFILL }
8651 { &hf_nfapi_laa_capability,
8652 { "LAA Support", "nfapi.laa.support",
8653 FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8654 "Indicates support for LAA features", HFILL }
8656 { &hf_nfapi_pd_sensing_lbt_support,
8657 { "PD sensing LBT support", "nfapi.pd.sensing.lbt.support",
8658 FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8659 "Indicates support for PD sensing in L1", HFILL }
8661 { &hf_nfapi_multi_carrier_lbt_support,
8662 { "Multi carrier LBT support", "nfapi.multi.carrier.lbt.support",
8663 FT_UINT16, BASE_DEC, VALS(nfapi_multi_carrier_lbt_support_vals), 0x0,
8664 NULL, HFILL }
8666 { &hf_nfapi_partial_sf_support,
8667 { "Partial SF support", "nfapi.partial.sf.support",
8668 FT_BOOLEAN, BASE_NONE, TFS(&partial_sf_support_strname), 0x0,
8669 "Indicates support for Partial SF in L1", HFILL }
8671 { &hf_nfapi_reference_signal_power,
8672 { "Reference signal power", "nfapi.ref_sig_power",
8673 FT_UINT16, BASE_CUSTOM, CF_FUNC(reference_signal_power_conversion_fn), 0x0,
8674 "Normalized value levels (relative) to accommodate different absolute Tx Power used by eNb", HFILL }
8676 { &hf_nfapi_primary_synchronization_signal_epre_eprers,
8677 { "Primary synchronization signal EPRE/EPRERS", "nfapi.primary.sync.signal",
8678 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8679 "The power of synchronization signal with respect to the reference signal, (PSS for LTE cell, NPSS for NB-IOT cell)", HFILL }
8681 { &hf_nfapi_secondary_synchronization_signal_epre_eprers,
8682 { "Secondary synchronization signal EPRE/EPRERS", "nfapi.secondary.sync.signal",
8683 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8684 "The power of synchronization signal with respect to the reference signal, (SSS for LTE cell, NSSS for NB-IOT cell)", HFILL }
8686 { &hf_nfapi_physical_cell_id,
8687 { "Physical Cell ID", "nfapi.physical.cell.id",
8688 FT_UINT16, BASE_DEC, NULL, 0x0,
8689 "The Cell ID sent with the synchronization signal", HFILL }
8691 { &hf_nfapi_phich_resource,
8692 { "PHICH Resource", "nfapi.phich.resource",
8693 FT_UINT16, BASE_DEC, VALS(nfapi_phich_resource_vals), 0x0,
8694 "The number of resource element groups used for PHICH", HFILL }
8696 { &hf_nfapi_phich_duration,
8697 { "PHICH Duration", "nfapi.phich.duration",
8698 FT_BOOLEAN, BASE_NONE, TFS(&phich_duration_strname), 0x0,
8699 "The PHICH duration for MBSFN and non-MBSFN sub-frames", HFILL }
8701 { &hf_nfapi_phich_power_offset,
8702 { "PHICH Power Offset", "nfapi.phich.power.offset",
8703 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8704 "The power per antenna of the PHICH with respect to the reference signal", HFILL }
8706 { &hf_nfapi_configuration_index,
8707 { "Configuration Index", "nfapi.configuration.index",
8708 FT_UINT16, BASE_DEC, NULL, 0x0,
8709 "Provides information about the location and format of the PRACH.", HFILL }
8711 { &hf_nfapi_root_sequence_index,
8712 { "Root sequence Index", "nfapi.root.sequence.index",
8713 FT_UINT16, BASE_DEC, NULL, 0x0,
8714 "PRACH Root sequence Index", HFILL }
8716 { &hf_nfapi_zero_correlation_zone_configuration,
8717 { "Zero correlation zone configuration", "nfapi.zero.correlation.zone.configuration",
8718 FT_UINT16, BASE_DEC, NULL, 0x0,
8719 "Equivalent to Ncs", HFILL }
8721 { &hf_nfapi_high_speed_flag,
8722 { "High Speed Flag", "nfapi.high.speed.flag",
8723 FT_BOOLEAN, BASE_NONE, TFS(&high_speed_flag_strname), 0x0,
8724 "Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
8726 { &hf_nfapi_frequency_offset,
8727 { "Frequency offset", "nfapi.frequency.offset",
8728 FT_UINT16, BASE_DEC, NULL, 0x0,
8729 "The first physical resource block available for PRACH", HFILL }
8731 { &hf_nfapi_hopping_mode,
8732 { "Hopping Mode", "nfapi.hopping.mode",
8733 FT_BOOLEAN, BASE_NONE, TFS(&hopping_mode_strname), 0x0,
8734 "If hopping is enabled indicates the type of hopping used", HFILL }
8736 { &hf_nfapi_hopping_offset,
8737 { "Hopping offset", "nfapi.hopping.offset",
8738 FT_UINT16, BASE_DEC, NULL, 0x0,
8739 "The offset used if hopping is enabled", HFILL }
8741 { &hf_nfapi_delta_pucch_shift,
8742 { "Delta PUCCH Shift", "nfapi.delta.pucch.shift",
8743 FT_UINT16, BASE_DEC, NULL, 0x0,
8744 "The cyclic shift difference", HFILL }
8746 { &hf_nfapi_n_cqi_rb,
8747 { "N CQI RB", "nfapi.n.cqi.rb",
8748 FT_UINT16, BASE_DEC, NULL, 0x0,
8749 "The bandwidth, in units of resource blocks, that is available for use by PUCCH formats 2/2a/2b transmission in each slot", HFILL }
8751 { &hf_nfapi_n_an_cs,
8752 { "N AN CS", "nfapi.n.an.cs",
8753 FT_UINT16, BASE_DEC, NULL, 0x0,
8754 "The number of cyclic shifts used for PUCCH formats 1/1a/1b in a resource block with a mix of formats 1/a/1/ab and 2/2a/2b.", HFILL }
8756 { &hf_nfapi_n1_pucch_an,
8757 { "N1 PUCCH AN", "nfapi.n1.pucch.an",
8758 FT_UINT16, BASE_DEC, NULL, 0x0,
8759 NULL, HFILL }
8761 { &hf_nfapi_bandwidth_configuration,
8762 { "Bandwidth configuration", "nfapi.bw.configuration",
8763 FT_UINT16, BASE_DEC, NULL, 0x0,
8764 "The available SRS bandwidth of the cell", HFILL }
8766 { &hf_nfapi_srs_subframe_configuration,
8767 { "SRS subframe configuration", "nfapi.srs.subframe.configuration",
8768 FT_UINT16, BASE_DEC, NULL, 0x0,
8769 "The subframe configuration. Needed if semi-static configuration is held in PHY", HFILL }
8771 { &hf_nfapi_uplink_rs_hopping,
8772 { "Uplink RS hopping", "nfapi.uplink.rs.hopping",
8773 FT_UINT16, BASE_DEC, VALS(nfapi_uplink_rs_hopping_vals), 0x0,
8774 "Indicates the type of hopping to use", HFILL }
8776 { &hf_nfapi_group_assignment,
8777 { "Group assignment", "nfapi.group.assignment",
8778 FT_UINT16, BASE_DEC, NULL, 0x0,
8779 "The sequence shift pattern used if group hopping is enabled", HFILL }
8781 { &hf_nfapi_cyclic_shift_1_for_drms,
8782 { "Cyclic Shift 1 for DRMS", "nfapi.cyclic.shift.1.for.drms",
8783 FT_UINT16, BASE_DEC, NULL, 0x0,
8784 "Specifies the cyclic shift for the reference signal used in the cell.", HFILL }
8786 { &hf_nfapi_subframe_assignment,
8787 { "Subframe_assignment", "nfapi.subframe.assignment",
8788 FT_UINT16, BASE_DEC, NULL, 0x0,
8789 "For TDD mode only, indicates the DL/UL subframe structure", HFILL }
8791 { &hf_nfapi_special_subframe_patterns,
8792 { "Special Subframe patterns", "nfapi.special.subframe.patterns",
8793 FT_UINT16, BASE_DEC, NULL, 0x0,
8794 "For TDD mode only. Length of fields DwPTS, GP and UpPTS", HFILL }
8796 { &hf_nfapi_ed_threshold_for_lbt_for_pdsch,
8797 { "ED Threshold for LBT for PDSCH", "nfapi.ed.threshold.for.lbt.pdsch",
8798 FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8799 "Indicates the energy detection threshold in dBm for LBT for PDSCH", HFILL }
8801 { &hf_nfapi_ed_threshold_for_lbt_for_drs,
8802 { "ED Threshold for LBT for DRS", "nfapi.ed.threshold.for.lbt.for.drs",
8803 FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8804 "Indicates the energy detection threshold in dBm for LBT for DRS", HFILL }
8806 { &hf_nfapi_pd_threshold,
8807 { "PD Threshold", "nfapi.pd.threshold",
8808 FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8809 "Indicates the preamble detection threshold in dBm, if the L1 capabilities support PD", HFILL }
8811 { &hf_nfapi_multi_carrier_type,
8812 { "Multi carrier type", "nfapi.multi.carrier.type",
8813 FT_UINT16, BASE_DEC, VALS(nfapi_laa_carrier_type_vals), 0x0,
8814 "Indicates multi carrier type configuration of L1 (according to L1 capabilities and L2 scheduler requirements)", HFILL }
8816 { &hf_nfapi_multi_carrier_tx,
8817 { "Multi carrier TX", "nfapi.multi.carrier.tx",
8818 FT_BOOLEAN, BASE_NONE, TFS(&nfapi_multi_carrier_tx_strname), 0x0,
8819 "Indicates multi carrier transmission configuration of L1 (according to type if supporting multi carrier)", HFILL }
8821 { &hf_nfapi_multi_carrier_freeze,
8822 { "Multi carrier freeze", "nfapi.multi.carrier.freeze",
8823 FT_BOOLEAN, BASE_NONE, TFS(&nfapi_multi_carrier_freeze_strname), 0x0,
8824 "Indicates multi carrier freeze, configuration of L1 (applicable only to type A type if supporting multi carrier)", HFILL }
8826 { &hf_nfapi_tx_antenna_ports_for_drs,
8827 { "Tx antenna ports for DRS", "nfapi.tx.antenna.ports.for.drs",
8828 FT_UINT16, BASE_DEC, NULL, 0x0,
8829 "The number of cell specific transmit antenna ports within the DRS occasions", HFILL }
8831 { &hf_nfapi_transmission_power_for_drs,
8832 { "Transmission power for DRS", "nfapi.transmission.power.for.drs",
8833 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8834 "Offset of cell specific Reference signals power within DRS occasions to the reference signal power", HFILL }
8836 { &hf_nfapi_pbch_repetitions_enabled_r13,
8837 { "PBCH Repetitions enable R13", "nfapi.pbch.repetitions.enabled_r13",
8838 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8839 "Enable / Disable PBCH repetitions", HFILL }
8841 { &hf_nfapi_prach_cat_m_root_sequence_index,
8842 { "PRACH CAT-M Root sequence Index", "nfapi.prach.cat_m.root.sequence.index",
8843 FT_UINT16, BASE_DEC, NULL, 0x0,
8844 NULL, HFILL }
8846 { &hf_nfapi_prach_cat_m_zero_correlation_zone_configuration,
8847 { "PRACH CAT-M Zero correlation zone configuration", "nfapi.prach.cat_m.zero.correlation.zone.configuration",
8848 FT_UINT16, BASE_DEC, NULL, 0x0,
8849 "Equivalent to Ncs", HFILL }
8851 { &hf_nfapi_prach_cat_m_high_speed_flag,
8852 { "PRACH CAT-M High speed flag", "nfapi.prach.cat_m.high.speed.flag",
8853 FT_BOOLEAN, BASE_NONE, TFS(&high_speed_flag_strname), 0x0,
8854 "Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
8856 { &hf_nfapi_prach_ce_level_0_enable,
8857 { "PRACH CE level #0 Enable", "nfapi.prach.ce.level.0.enable",
8858 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8859 "Enable \\ Disable CE level #0.", HFILL }
8861 { &hf_nfapi_prach_ce_level_0_configuration_index,
8862 { "PRACH CE level #0 Configuration Index", "nfapi.prach.ce.level.0.configuration.index",
8863 FT_UINT16, BASE_DEC, NULL, 0x0,
8864 "Provides information about the location and format of the PRACH", HFILL }
8866 { &hf_nfapi_prach_ce_level_0_frequency_offset,
8867 { "PRACH CE level #0 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset",
8868 FT_UINT16, BASE_DEC, NULL, 0x0,
8869 "The first physical resource block available for PRACH for each CE", HFILL }
8871 { &hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt,
8872 { "PRACH CE level #0 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt",
8873 FT_UINT16, BASE_DEC, NULL, 0x0,
8874 "Number of PRACH repetitions per attempt for each CE level", HFILL }
8876 { &hf_nfapi_prach_ce_level_0_starting_subframe_periodicity,
8877 { "CE level #0 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity",
8878 FT_UINT16, BASE_DEC, NULL, 0x0,
8879 "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8881 { &hf_nfapi_prach_ce_level_0_hopping_enabled,
8882 { "PRACH CE level #0 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable",
8883 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8884 "Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
8886 { &hf_nfapi_prach_ce_level_0_hopping_offset,
8887 { "PRACH CE level #0 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset",
8888 FT_UINT16, BASE_DEC, NULL, 0x0,
8889 "Valid in case 'PRACH Hopping Enable' is enabled", HFILL }
8891 { &hf_nfapi_prach_ce_level_1_enable,
8892 { "PRACH CE level #1 Enable", "nfapi.prach.ce.level.0.enable",
8893 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8894 "Enable \\ Disable CE level #1", HFILL }
8896 { &hf_nfapi_prach_ce_level_1_configuration_index,
8897 { "PRACH CE level #1 Configuration Index", "nfapi.prach.ce.level.1.configuration.index",
8898 FT_UINT16, BASE_DEC, NULL, 0x0,
8899 "Provides information about the location and format of the PRACH", HFILL }
8901 { &hf_nfapi_prach_ce_level_1_frequency_offset,
8902 { "PRACH CE level #1 Frequency offset", "nfapi.prach.ce.level.1.frequency_offset",
8903 FT_UINT16, BASE_DEC, NULL, 0x0,
8904 "The first physical resource block available for PRACH for each CE", HFILL }
8906 { &hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt,
8907 { "PRACH CE level #1 Number of repetitions per attempt", "nfapi.prach.ce.level.1.number.of.repetitions.per_attempt",
8908 FT_UINT16, BASE_DEC, NULL, 0x0,
8909 "Number of PRACH repetitions per attempt for each CE level", HFILL }
8911 { &hf_nfapi_prach_ce_level_1_starting_subframe_periodicity,
8912 { "CE level #1 Starting subframe periodicity", "nfapi.prach.ce.level.1.starting.subframe_periodicity",
8913 FT_UINT16, BASE_DEC, NULL, 0x0,
8914 "Optional.PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities),", HFILL }
8916 { &hf_nfapi_prach_ce_level_1_hopping_enabled,
8917 { "PRACH CE level #1 Hopping Enable", "nfapi.prach.ce.level.1.hopping_enable",
8918 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8919 "Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
8921 { &hf_nfapi_prach_ce_level_1_hopping_offset,
8922 { "PRACH CE level #1 Hopping Offset", "nfapi.prach.ce.level.1.hopping.offset",
8923 FT_UINT16, BASE_DEC, NULL, 0x0,
8924 "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8926 { &hf_nfapi_prach_ce_level_2_enable,
8927 { "PRACH CE level #2 Enable", "nfapi.prach.ce.level.2.enable",
8928 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8929 "Enable \\ Disable CE level #2", HFILL }
8931 { &hf_nfapi_prach_ce_level_2_configuration_index,
8932 { "PRACH CE level #2 Configuration Index", "nfapi.prach.ce.level.2.configuration.index",
8933 FT_UINT16, BASE_DEC, NULL, 0x0,
8934 "Provides information about the location and format of the PRACH", HFILL }
8936 { &hf_nfapi_prach_ce_level_2_frequency_offset,
8937 { "PRACH CE level #2 Frequency offset", "nfapi.prach.ce.level.2.frequency_offset",
8938 FT_UINT16, BASE_DEC, NULL, 0x0,
8939 "The first physical resource block available for PRACH for each CE", HFILL }
8941 { &hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt,
8942 { "PRACH CE level #2 Number of repetitions per attempt", "nfapi.prach.ce.level.2.number.of.repetitions.per_attempt",
8943 FT_UINT16, BASE_DEC, NULL, 0x0,
8944 "Number of PRACH repetitions per attempt for each CE level", HFILL }
8946 { &hf_nfapi_prach_ce_level_2_starting_subframe_periodicity,
8947 { "CE level #2 Starting subframe periodicity", "nfapi.prach.ce.level.2.starting.subframe_periodicity",
8948 FT_UINT16, BASE_DEC, NULL, 0x0,
8949 "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8951 { &hf_nfapi_prach_ce_level_2_hopping_enabled,
8952 { "PRACH CE level #2 Hopping Enable", "nfapi.prach.ce.level.2.hopping_enable",
8953 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8954 "Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
8956 { &hf_nfapi_prach_ce_level_2_hopping_offset,
8957 { "PRACH CE level #2 Hopping Offset", "nfapi.prach.ce.level.2.hopping.offset",
8958 FT_UINT16, BASE_DEC, NULL, 0x0,
8959 "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8961 { &hf_nfapi_prach_ce_level_3_enable,
8962 { "PRACH CE level #3 Enable", "nfapi.prach.ce.level.3.enable",
8963 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8964 "Enable \\ Disable CE level #3.", HFILL }
8966 { &hf_nfapi_prach_ce_level_3_configuration_index,
8967 { "PRACH CE level #3 Configuration Index", "nfapi.prach.ce.level.3.configuration.index",
8968 FT_UINT16, BASE_DEC, NULL, 0x0,
8969 "Provides information about the location and format of the PRACH.", HFILL }
8971 { &hf_nfapi_prach_ce_level_3_frequency_offset,
8972 { "PRACH CE level #3 Frequency offset", "nfapi.prach.ce.level.3.frequency_offset",
8973 FT_UINT16, BASE_DEC, NULL, 0x0,
8974 "The first physical resource block available for PRACH for each CE", HFILL }
8976 { &hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt,
8977 { "PRACH CE level #3 Number of repetitions per attempt", "nfapi.prach.ce.level.3.number.of.repetitions.per_attempt",
8978 FT_UINT16, BASE_DEC, NULL, 0x0,
8979 "Number of PRACH repetitions per attempt for each CE level", HFILL }
8981 { &hf_nfapi_prach_ce_level_3_starting_subframe_periodicity,
8982 { "CE level #3 Starting subframe periodicity", "nfapi.prach.ce.level.3.starting.subframe_periodicity",
8983 FT_UINT16, BASE_DEC, NULL, 0x0,
8984 "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8986 { &hf_nfapi_prach_ce_level_3_hopping_enabled,
8987 { "PRACH CE level #3 Hopping Enable", "nfapi.prach.ce.level.3.hopping_enable",
8988 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8989 "Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
8991 { &hf_nfapi_prach_ce_level_3_hopping_offset,
8992 { "PRACH CE level #3 Hopping Offset", "nfapi.prach.ce.level.3.hopping.offset",
8993 FT_UINT16, BASE_DEC, NULL, 0x0,
8994 "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8996 { &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a,
8997 { "PUCCH Interval-ULHoppingConfigCommonModeA", "nfapi.pucch.interval.ulhopping.config.common.mode.a",
8998 FT_UINT16, BASE_DEC, NULL, 0x0,
8999 "NthULNB for UEModeA", HFILL }
9001 { &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b,
9002 { "PUCCH Interval-ULHoppingConfigCommonModeB", "nfapi.pucch.interval.ulhopping.config.common.mode.b",
9003 FT_UINT16, BASE_DEC, NULL, 0x0,
9004 "NthULNB for UEModeB", HFILL }
9006 { &hf_nfapi_data_report_mode,
9007 { "Data Report Mode", "nfapi.data.report.mode",
9008 FT_BOOLEAN, BASE_NONE, TFS(&data_report_mode_vals), 0x0,
9009 "The data report mode for the uplink data", HFILL }
9011 { &hf_nfapi_sfnsf,
9012 { "SFN/SF", "nfapi.sfn.sf",
9013 FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
9014 "The future SFN/SF subframe where the TLVs included in the message should be applied", HFILL }
9016 { &hf_nfapi_max_up_pts,
9017 { "Max UpPTS frames", "nfapi.max.uppts.frame",
9018 FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
9019 "Used for TDD only and indicates how SRS operates in UpPTS subframes", HFILL }
9021 { &hf_nfapi_srs_acknack_srs_simultaneous_transmission,
9022 { "SRS AckNack Simultaneous transmission", "nfapi.srs.acknack.simult.tx",
9023 FT_BOOLEAN, BASE_NONE, TFS(&srs_simult_tx_strname), 0x0,
9024 "Indicates if SRS and ACK/NACK can be received in the same subframe. Needed if semi-static configuration is held in PHY.", HFILL }
9026 { &hf_nfapi_pnf_address_ipv4,
9027 { "PNF IPV4", "nfapi.pnf.address.ipv4",
9028 FT_IPv4, BASE_NONE, NULL, 0x0,
9029 "The IPv4 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9031 { &hf_nfapi_pnf_address_ipv6,
9032 { "PNF IPV6", "nfapi.pnf.address.ipv6",
9033 FT_IPv6, BASE_NONE, NULL, 0x0,
9034 "The IPv6 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9036 { &hf_nfapi_vnf_address_ipv4,
9037 { "VNF IPV4 Address", "nfapi.vnf.address.ipv4",
9038 FT_IPv4, BASE_NONE, NULL, 0x0,
9039 "The IPv4 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
9041 { &hf_nfapi_vnf_address_ipv6,
9042 { "VNF IPV6 Address", "nfapi.vnf.address.ipv6",
9043 FT_IPv6, BASE_NONE, NULL, 0x0,
9044 "The IPv6 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
9046 { &hf_nfapi_pnf_port,
9047 { "PNF PORT value", "nfapi.config.pnf.port.value",
9048 FT_UINT16, BASE_DEC, NULL, 0x0,
9049 "The port of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9051 { &hf_nfapi_vnf_port,
9052 { "VNF PORT value", "nfapi.config.vnf.port.value",
9053 FT_UINT16, BASE_DEC, NULL, 0x0,
9054 "The port of the VNF to be used by the PNF for this P7 PHY instance", HFILL } },
9055 { &hf_nfapi_sync_mode,
9056 { "Sync Mode", "nfapi.sync.mode",
9057 FT_UINT8, BASE_DEC, VALS(nfapi_sync_mode_vals), 0x0,
9058 "The method of nFAPI Synchronization supported by the PNF", HFILL }
9060 { &hf_nfapi_location_mode,
9061 { "Location Mode", "nfapi.location.mode",
9062 FT_UINT8, BASE_DEC, VALS(location_mode_vals), 0x0,
9063 "The method of location derivation supported by the PNF", HFILL }
9065 { &hf_nfapi_location_coordinates,
9066 { "Location Coordinates", "nfapi.location.coordinates",
9067 FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
9068 "The Location of the PNF. The value is formatted as the LocationCoordinates IE using BASIC-PER encoding as defined in "
9069 "TS36.355 section 6.4.2. The first bit of the LocationCoordinates IE is in the LSB of the first byte of the array."
9070 "The MSBs of the last element of the array may be padded with zeros if the ASN.1 element is not an integer number of bytes", HFILL }
9072 { &hf_nfapi_pdu,
9073 { "PDU", "nfapi.pdu",
9074 FT_BYTES, BASE_NONE, NULL, 0x0,
9075 NULL, HFILL }
9077 { &hf_nfapi_dl_config_timing,
9078 { "DL config Timing", "nfapi.dl.config.timing",
9079 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9080 "The timing offset before the air interface subframe start that the DL_Config.request must be received at the PNF.", HFILL }
9082 { &hf_nfapi_tx_timing,
9083 { "Tx Timing", "nfapi.general.tx.timing",
9084 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9085 "The timing offset before the air interface subframe start that the TX.request must be received at the PNF.", HFILL }
9087 { &hf_nfapi_ul_config_timing,
9088 { "UL Config Timing", "nfapi.ul.config.timing",
9089 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9090 "The timing offset before the air interface subframe start that the UL_CONFIG.request must be received at the PNF.", HFILL }
9092 { &hf_nfapi_hi_dci0_timing,
9093 { "HI DCi0 Timing", "nfapi.hi.dci0.timing",
9094 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9095 "The timing offset before the air interface subframe start that the HI_DCI0.request must be received at the PNF.", HFILL }
9097 { &hf_nfapi_maximum_number_phys,
9098 { "Maximum number of Phys", "nfapi.maximum.number.phys",
9099 FT_UINT16, BASE_DEC, NULL, 0x0,
9100 "The maximum number of operational PHYs supported by the PNF device.", HFILL }
9102 { &hf_nfapi_maximum_total_bandwidth,
9103 { "Maximum Total Bandwidth", "nfapi.maximum.total.bandwidth",
9104 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9105 "The total maximum bandwidth (in units of 100kHz) supported by the PNF device.", HFILL }
9107 { &hf_nfapi_maximum_total_number_dl_layers,
9108 { "Maximum Total Number DL Layers", "nfapi.maximum.total.number.dl.layers",
9109 FT_UINT16, BASE_DEC, NULL, 0x0,
9110 "The maximum total number of downlink layers supported.", HFILL }
9112 { &hf_nfapi_maximum_total_number_ul_layers,
9113 { "Maximum Total Number UL Layers", "nfapi.maximum.total.number.ul.layers",
9114 FT_UINT16, BASE_DEC, NULL, 0x0,
9115 "The maximum total number of uplink layers supported across all available PHYs.", HFILL }
9117 { &hf_nfapi_shared_bands,
9118 { "Shared bands", "nfapi.shared.bands",
9119 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9120 "Indication that the PNF device shares the list of RF band options available across all available PHYs, so each may only be used with a single PHY.", HFILL }
9122 { &hf_nfapi_shared_pa,
9123 { "Shared pa", "nfapi.shared.pa",
9124 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9125 "Indication that the PNF device shares a single RF PA across all available PHYs, so that the maximum Total Power is shared across all available PHYs.", HFILL }
9127 { &hf_nfapi_maximum_total_power,
9128 { "Maximum total power", "nfapi.maximum.total.power",
9129 FT_UINT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
9130 "The maximum transmit power of the PNF device summed across all PHYs.", HFILL }
9132 { &hf_nfapi_oui,
9133 { "OUI", "nfapi.oui",
9134 FT_STRING, BASE_NONE, NULL, 0x0,
9135 "The PNF OUI in the format as specified by IEEE", HFILL }
9137 { &hf_nfapi_pnf_phy_number_phy,
9138 { "PNF Phy Number of Phy", "nfapi.pnf.phy.number.phy",
9139 FT_UINT16, BASE_DEC, NULL, 0x0,
9140 "The number of PHY instances", HFILL }
9142 { &hf_nfapi_pnf_phy_config_index,
9143 { "PNF Phy Config Index", "nfapi.pnf.phy.config.index",
9144 FT_UINT16, BASE_DEC, NULL, 0x0,
9145 "The unique Index number of the PHY to permit the PNF to identify the PHY in the PNF_CONFIG.Request", HFILL }
9147 { &hf_nfapi_number_of_rfs,
9148 { "Number of RFs", "nfapi.pnf.rf.number.rf",
9149 FT_UINT16, BASE_DEC, NULL, 0x0,
9150 "The number of RF configurations", HFILL }
9152 { &hf_nfapi_phy_rf_config_info_phy_id,
9153 { "Phy ID", "nfapi.pnf.phy.rf.config.phy.id",
9154 FT_UINT16, BASE_DEC, NULL, 0x0,
9155 NULL, HFILL }
9157 { &hf_nfapi_rf_config_index,
9158 { "RF Config Index", "nfapi.rf_config_index",
9159 FT_UINT16, BASE_DEC, NULL, 0x0,
9160 "The Index number defined in the PNF RF struct that the PHY can support",
9161 HFILL }
9163 { &hf_nfapi_number_of_rf_exclusions,
9164 { "Number of RF exclusions", "nfapi.hf_nfapi_number_of_rf_exclusions",
9165 FT_UINT16, BASE_DEC, NULL, 0x0,
9166 "The number of RF configurations excluded from use by this PHY", HFILL }
9168 { &hf_nfapi_maximum_3gpp_release_supported,
9169 { "Maximum 3gpp Release Supported", "nfapi.maximum_3gpp_release_supported",
9170 FT_UINT16, BASE_HEX, NULL, 0x0,
9171 "The major 3GPP releases supported", HFILL }
9173 { &hf_nfapi_maximum_3gpp_release_supported_rel8,
9174 { "Release 8", "nfapi.maximum_3gpp_release_supported.rel8",
9175 FT_BOOLEAN, 16, NULL, 0x0001,
9176 NULL, HFILL }
9178 { &hf_nfapi_maximum_3gpp_release_supported_rel9,
9179 { "Release 9", "nfapi.maximum_3gpp_release_supported.rel9",
9180 FT_BOOLEAN, 16, NULL, 0x0002,
9181 NULL, HFILL }
9183 { &hf_nfapi_maximum_3gpp_release_supported_rel10,
9184 { "Release 10", "nfapi.maximum_3gpp_release_supported.rel10",
9185 FT_BOOLEAN, 16, NULL, 0x0004,
9186 NULL, HFILL }
9188 { &hf_nfapi_maximum_3gpp_release_supported_rel11,
9189 { "Release 11", "nfapi.maximum_3gpp_release_supported.rel11",
9190 FT_BOOLEAN, 16, NULL, 0x0008,
9191 NULL, HFILL }
9193 { &hf_nfapi_maximum_3gpp_release_supported_rel12,
9194 { "Release 12", "nfapi.maximum_3gpp_release_supported.rel12",
9195 FT_BOOLEAN, 16, NULL, 0x0010,
9196 NULL, HFILL }
9198 { &hf_nfapi_maximum_3gpp_release_supported_rel13,
9199 { "Release 13", "nfapi.maximum_3gpp_release_supported.rel13",
9200 FT_BOOLEAN, 16, NULL, 0x0020,
9201 NULL, HFILL }
9203 { &hf_nfapi_downlink_channel_bandwidth_supported,
9204 { "Maximum Channel Downlink Bandwidth Supported", "nfapi.downlink_channel_bandwidth_supported",
9205 FT_UINT16, BASE_DEC, NULL, 0x0,
9206 "The downlink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104", HFILL }
9208 { &hf_nfapi_uplink_channel_bandwidth_supported,
9209 { "Maximum Channel Uplink Bandwidth Supported", "nfapi.uplink_channel_bandwidth_supported",
9210 FT_UINT16, BASE_DEC, NULL, 0x0,
9211 "The uplink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104.", HFILL }
9213 { &hf_nfapi_number_of_dl_layers_supported,
9214 { "Number of DL Layers Supported", "nfapi.number_of_dl_layer_supported",
9215 FT_UINT16, BASE_DEC, NULL, 0x0,
9216 "The maximum number of downlink layers supported", HFILL }
9218 { &hf_nfapi_number_of_ul_layers_supported,
9219 { "Number of UL Layers Supported", "nfapi.number_of_ul_layer_supported",
9220 FT_UINT16, BASE_DEC, NULL, 0x0,
9221 "The maximum number of uplink layers supported", HFILL }
9223 { &hf_nfapi_nmm_modes_supported,
9224 { "NMM modes supported", "nfapi.nmm_modes_supported",
9225 FT_UINT8, BASE_DEC, VALS(nmm_modes_supported_vals), 0x0,
9226 "Network Monitor Modes Supported.", HFILL }
9228 { &hf_nfapi_band,
9229 { "Band", "nfapi.band",
9230 FT_UINT16, BASE_DEC, NULL, 0x0,
9231 "Band number as specified in 3GPP TS36.101", HFILL }
9233 { &hf_nfapi_maximum_transmit_power_2,
9234 { "Maximum transmit power", "nfapi.maximum_transmit_power",
9235 FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_2_conversion_fn), 0x0,
9236 "The maximum transmit power for the PHY and RF operating at the configured bandwidth as defined in 3GPP TS 36.104.", HFILL }
9238 { &hf_nfapi_maximum_transmit_power,
9239 { "Maximum transmit power", "nfapi.maximum_transmit_power",
9240 FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
9241 "The maximum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
9243 { &hf_nfapi_earfcn,
9244 { "EARFCN", "nfapi.earfcn",
9245 FT_UINT16, BASE_DEC, NULL, 0x0,
9246 "The EARFCN to be measured.", HFILL }
9248 { &hf_nfapi_number_of_rf_bands,
9249 { "Number of RF Bands", "nfapi.num.rf_bands",
9250 FT_UINT16, BASE_DEC, NULL, 0x0,
9251 "The number of RF Band instances", HFILL }
9253 { &hf_nfapi_nmm_uplink_rssi_supported,
9254 { "NMM Uplink RSSI supported", "nfapi.nmm.uplink.rssi.supported",
9255 FT_UINT8, BASE_DEC, VALS(ul_rssi_supported_vals), 0x0,
9256 "Indicates if the uplink RSSI measurements are supported by NMM.", HFILL }
9258 { &hf_nfapi_minimum_transmit_power,
9259 { "Minimum transmit power", "nfapi.minimum_transmit_power",
9260 FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
9261 "The minimum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
9263 { &hf_nfapi_number_of_antennas_supported,
9264 { "Number of Supported Antennas", "nfapi.number_of_antennas_supported",
9265 FT_UINT8, BASE_DEC, NULL, 0x0,
9266 "The maximum number of antennas supported.", HFILL }
9268 { &hf_nfapi_minimum_downlink_frequency,
9269 { "Minimum downlink frequency", "nfapi.minimum_downlink_frequency",
9270 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9271 "The minimum supported downlink frequency in 100kHz units", HFILL }
9273 { &hf_nfapi_maximum_downlink_frequency,
9274 { "Maximum downlink frequency", "nfapi.maximum_downlink_frequency",
9275 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9276 "The maximum supported downlink frequency in 100kHz units", HFILL }
9278 { &hf_nfapi_minimum_uplink_frequency,
9279 { "Minimum uplink frequency", "nfapi.minimum_uplink_frequency",
9280 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9281 "The minimum supported uplink frequency in 100kHz units", HFILL }
9283 { &hf_nfapi_maximum_uplink_frequency,
9284 { "Maximum uplink frequency", "nfapi.maximum_uplink_frequency",
9285 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9286 "The maximum supported uplink frequency in 100kHz units", HFILL }
9288 { &hf_nfapi_transmission_mode7_supported,
9289 { "Transmission Mode 7 Supported", "nfapi.pnf.phy_rel10.tx_mode7_supported",
9290 FT_UINT16, BASE_DEC, NULL, 0x0,
9291 "Indicates if PHY supports TM7 for PDSCH", HFILL }
9293 { &hf_nfapi_transmission_mode8_supported,
9294 { "Transmission Mode 8 Supported", "nfapi.pnf.phy_rel10.tx_mode8_supported",
9295 FT_UINT16, BASE_DEC, NULL, 0x0,
9296 "Indicates if PHY supports TM8 for PDSCH", HFILL }
9298 { &hf_nfapi_two_antennas_ports_for_pucch,
9299 { "Two antennas ports for PUCCH", "nfapi.pnf.phy_rel10.two_antennas_ports_for_pucch",
9300 FT_UINT16, BASE_DEC, NULL, 0x0,
9301 "Indicates if PHY supports PUCCH transmit diversity introduced in Release 10. Equivalent to two-AntennaPortsForPUCCH-r10 in TS36.306", HFILL }
9303 { &hf_nfapi_transmission_mode_9_supported,
9304 { "Transmission Mode 9 Supported", "nfapi.pnf.phy_rel10.tx_mode9_supported",
9305 FT_UINT16, BASE_DEC, NULL, 0x0,
9306 "Indicates if PHY supports TM9 for PDSCH with 8 antennas and 8 CSI. Equivalent to tm9-With-8Tx-FDD-r10 in TS36.306", HFILL }
9308 { &hf_nfapi_simultaneous_pucch_pusch,
9309 { "Simultaneous PUCCH PUSCH", "nfapi.pnf.simultaneous_pucch_pusch",
9310 FT_UINT16, BASE_DEC, NULL, 0x0,
9311 "Indicates if PHY supports UE sending simultaneous PUCCH and PUSCH introduced in Release 10. Equivalent to simultaneousPUCCH-PUSCH-r10 in TS36.306", HFILL }
9313 { &hf_nfapi_four_layer_tx_with_tm3_and_tm4,
9314 { "Four layer Tx with TM3 and TM4", "nfapi.pnf.phy_rel10.layer_tx_with_tm3_and_tm4",
9315 FT_UINT16, BASE_DEC, NULL, 0x0,
9316 "Indicates if PHY supports four layer transmission for TM3 and TM4. Equivalent to fourLayerTM3-TM4-r10 in TS36.306", HFILL }
9318 { &hf_nfapi_epdcch_supported,
9319 { "ePDCCH supported", "nfapi.pnf.phy_rel11.epdcch_supported",
9320 FT_UINT16, BASE_DEC, NULL, 0x0,
9321 "Indicates if PHY supports Enhanced PDCCH", HFILL }
9323 { &hf_nfapi_multi_ack_csi_reporting,
9324 { "Multi ACK CSI reporting", "nfapi.pnf.phy_rel11.multi_ack_csi_reporting",
9325 FT_UINT16, BASE_DEC, NULL, 0x0,
9326 "Indicates if PHY supports the multi ACK and CSI reporting required with CA and mixed FDD/TDD carriers. Equivalent to multiACK-CSI-Reporting-r11 in TS36.306", HFILL }
9328 { &hf_nfapi_pucch_tx_diversity_with_channel_selection,
9329 { "PUCCH Tx diversity with channel selection", "nfapi.pnf.phy_rel11.tx_div_with_channel_selection",
9330 FT_UINT16, BASE_DEC, NULL, 0x0,
9331 "Indicates if PHY supports transmit diversity for PUCCH format 1b with channel selection. Equivalent to txDiv-PUCCH1b-ChSelect in TS36.306", HFILL }
9333 { &hf_nfapi_ul_comp_supported,
9334 { "UL CoMP supported", "nfapi.pnf.phy_rel11.ul_comp_supported",
9335 FT_UINT16, BASE_DEC, NULL, 0x0,
9336 "Indicates if PHY supports UL CoMP", HFILL }
9338 { &hf_nfapi_transmission_mode_5_supported,
9339 { "Transmission mode 5 supported", "nfapi.pnf.phy_rel11.tx_mode5_supported",
9340 FT_UINT16, BASE_DEC, NULL, 0x0,
9341 "Indicates if PHY supports TM5 for PDSCH", HFILL }
9343 { &hf_nfapi_csi_subframe_set,
9344 { "CSI subframe set", "nfapi.pnf.phy_rel12.csi_subframe_set",
9345 FT_UINT16, BASE_DEC, NULL, 0x0,
9346 "Equivalent to csi-SubframeSet-r12 in TS36.306", HFILL }
9348 { &hf_nfapi_enhanced_4tx_codebook,
9349 { "Enhanced 4TX codebook", "nfapi.pnf.phy_rel12.enhanced_t4x_codebook",
9350 FT_UINT16, BASE_DEC, NULL, 0x0,
9351 "Indicates if PHY supports the enhanced 4TX codebook. Equivalent to enhanced-4TxCodebook-r12 in TS36.306", HFILL }
9353 { &hf_nfapi_drs_supported,
9354 { "DRS supported", "nfapi.pnf.phy_rel12.drs_supported",
9355 FT_UINT16, BASE_DEC, NULL, 0x0,
9356 "Indicates if PHY supports the Discovery Reference Signal", HFILL }
9358 { &hf_nfapi_ul_64qam_supported,
9359 { "UL 64QAM supported", "nfapi.pnf.phy_rel12.ul_64qam_supported",
9360 FT_UINT16, BASE_DEC, NULL, 0x0,
9361 "Indicates if PHY support 64 QAM in the uplink", HFILL }
9363 { &hf_nfapi_transmission_mode_10_supported,
9364 { "Transmission mode 10 supported", "nfapi.pnf.phy_rel12.tx_mode10_supported",
9365 FT_UINT16, BASE_DEC, NULL, 0x0,
9366 "Indicates if PHY supports TM10 for PDSCH (DL CoMP)", HFILL }
9368 { &hf_nfapi_alternative_tbs_indices,
9369 { "Alternative TBS indices", "nfapi.pnf.phy_rel12.alternative_tbs_indices",
9370 FT_UINT16, BASE_DEC, NULL, 0x0,
9371 "Indicates if PHY supports the alternate TBS indices (256 QAM). Equivalent to alternativeTBS-Indices-r12 in TS36.306", HFILL }
9373 { &hf_nfapi_pucch_format_4_supported,
9374 { "PUCCH format 4 supported", "nfapi.pnf.phy_rel13.pucch_format4_supported",
9375 FT_UINT16, BASE_DEC, NULL, 0x0,
9376 "Indicates if PHY supports PUCCH format 4", HFILL }
9378 { &hf_nfapi_pucch_format_5_supported,
9379 { "PUCCH format 5 supported", "nfapi.pnf.phy_rel13.pucch_format5_supported",
9380 FT_UINT16, BASE_DEC, NULL, 0x0,
9381 "Indicates if PHY supports PUCCH format 5", HFILL }
9383 { &hf_nfapi_more_than_5_ca_supported,
9384 { "More than 5 CA support", "nfapi.pnf.phy_rel13.mode_than_5_ca_supported",
9385 FT_UINT16, BASE_DEC, NULL, 0x0,
9386 "Indicates if PHY supports features required for more than 5 CA support on PUSCH. Equivalent to uci-PUSCH-Ext-r13 in TS36.306", HFILL }
9388 { &hf_nfapi_laa_supported,
9389 { "LAA supported", "nfapi.pnf.phy_rel13.laa_supported",
9390 FT_UINT16, BASE_DEC, NULL, 0x0,
9391 "Indicates if PHY supports DL LAA (subframe format 3)", HFILL }
9393 { &hf_nfapi_laa_ending_in_dwpts_supported,
9394 { "LAA ending in DwPTS supported", "nfapi.pnf.phy_rel13.laa_ending_in_dwpts_supported",
9395 FT_UINT16, BASE_DEC, NULL, 0x0,
9396 "Indicates if PHY supports DL LAA ending in a DwPTS subframe. Equivalent to endingDwPTS-r13i n TS36.306", HFILL }
9398 { &hf_nfapi_laa_starting_in_second_slot_supported,
9399 { "LAA starting in second slot Supported", "nfapi.pnf.phy_rel13.laa_starting_in_second_slot_supported",
9400 FT_UINT16, BASE_DEC, NULL, 0x0,
9401 "Indicates if PHY supports DL LAA starting in the second slot in a subframe. Equivalent to secondSlotStartingPosition-r13 in TS36.306", HFILL }
9403 { &hf_nfapi_beamforming_supported,
9404 { "Beamforming Supported", "nfapi.pnf.phy_rel13.beamforming_supported",
9405 FT_UINT16, BASE_DEC, NULL, 0x0,
9406 "Indicates if PHY supports beamforming (FD-MIMO Class B). Equivalent to beamformed-r13 in TS36.306", HFILL }
9408 { &hf_nfapi_csi_rs_enhancements_supported,
9409 { "CSI-RS enhancements supported", "nfapi.pnf.phy_rel13.csi_rs_enhancements_supported",
9410 FT_UINT16, BASE_DEC, NULL, 0x0,
9411 "Indicates if PHY supports CSI-RS enhancements (FD-MIMO Class A). Equivalent to csi-RS-EnhancementsTDD-r13 in TS36.306", HFILL }
9413 { &hf_nfapi_drms_enhancements_supported,
9414 { "DRMS enhancements supported", "nfapi.pnf.phy_rel13.drms_enhancements_supported",
9415 FT_UINT16, BASE_DEC, NULL, 0x0,
9416 "Indicates if PHY supports DMRS enhancements added in Release 13. Equivalent to dmrs-Enhancements-r13 in TS36.306", HFILL }
9418 { &hf_nfapi_srs_enhancements_supported,
9419 { "SRS enhancements supported", "nfapi.pnf.phy_rel13.srs_enhancements_supported",
9420 FT_UINT16, BASE_DEC, NULL, 0x0,
9421 "Indicates if PHY supports SRS enhancements added in Release 13. Equivalent to srs-Enhancements-r13in TS36.306", HFILL }
9423 { &hf_nfapi_sfn_sf,
9424 { "SFN_SF", "nfapi.sfn_sf",
9425 FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
9426 NULL, HFILL }
9428 { &hf_nfapi_number_pdcch_ofdm_symbols,
9429 { "Number of PDCCH OFDM Symbols", "nfapi.number_pdcch_ofdm_symbols",
9430 FT_UINT8, BASE_DEC, NULL, 0x0,
9431 "The number of OFDM symbols for the PDCCH", HFILL }
9433 { &hf_nfapi_number_dci,
9434 { "Number of DCI", "nfapi.number_dci",
9435 FT_UINT8, BASE_DEC, NULL, 0x0,
9436 "The number of DCI PDUs included in this message", HFILL }
9438 { &hf_nfapi_number_pdus,
9439 { "Number of PDUs", "nfapi.number_pdu",
9440 FT_UINT16, BASE_DEC, NULL, 0x0,
9441 "Number of PDUs that are included in this message", HFILL }
9443 { &hf_nfapi_number_of_harqs,
9444 { "Number of HARQs", "nfapi.number_harqs",
9445 FT_UINT16, BASE_DEC, NULL, 0x0,
9446 "Number of HARQs included in this message", HFILL }
9448 { &hf_nfapi_number_of_crcs,
9449 { "Number of CRCs", "nfapi.number_crcs",
9450 FT_UINT16, BASE_DEC, NULL, 0x0,
9451 "Number of CRCs included in this message", HFILL }
9453 { &hf_nfapi_number_of_srs,
9454 { "Number of SRs", "nfapi.number_srs",
9455 FT_UINT16, BASE_DEC, NULL, 0x0,
9456 "Number of SRs included in this message", HFILL }
9458 { &hf_nfapi_number_of_cqi,
9459 { "Number of CQIs", "nfapi.number_cqi",
9460 FT_UINT16, BASE_DEC, NULL, 0x0,
9461 "Number of CQIs included in this message", HFILL }
9463 { &hf_nfapi_number_of_preambles,
9464 { "Number of Preambles", "nfapi.number_preambles",
9465 FT_UINT16, BASE_DEC, NULL, 0x0,
9466 "Number of RACH preambles", HFILL }
9468 { &hf_nfapi_number_of_srss,
9469 { "Number of SRSs", "nfapi.number_srss",
9470 FT_UINT16, BASE_DEC, NULL, 0x0,
9471 "Number of UEs contributing to the uplink SRS", HFILL }
9473 { &hf_nfapi_lbt_dl_req_pdu_type,
9474 { "LBT DL Request PDU Type", "nfapi.lbt_dl_req_pdu_type",
9475 FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_req_pdu_type), 0x0,
9476 NULL, HFILL }
9478 { &hf_nfapi_lbt_dl_ind_pdu_type,
9479 { "LBT DL Indication PDU Type", "nfapi.lbt_dl_ind_pdu_type",
9480 FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_ind_pdu_type), 0x0,
9481 NULL, HFILL }
9483 { &hf_nfapi_number_pdsch_rnti,
9484 { "Number of PDSCH RNTI", "nfapi.number_pdsch_rnti",
9485 FT_UINT8, BASE_DEC, NULL, 0x0,
9486 "Number of unique RNTIs sent on the PDSCH", HFILL }
9488 { &hf_nfapi_transmission_power_pcfich,
9489 { "Transmission Power PCFICH", "nfapi.transmission_power_pcfich",
9490 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
9491 "Offset to the reference signal power.", HFILL }
9493 { &hf_nfapi_dl_config_pdu_type,
9494 { "PDU Type", "nfapi.pdu.type",
9495 FT_UINT8, BASE_DEC, VALS(nfapi_dl_config_pdu_type_vals), 0x0,
9496 "DL_CONFIG.request PDU Type", HFILL }
9498 { &hf_nfapi_pdu_size,
9499 { "PDU size", "nfapi.pdu.size",
9500 FT_UINT8, BASE_DEC, NULL, 0x0,
9501 "Size of the PDU control information (in bytes). This length value includes the 2 bytes required for the PDU type and PDU size parameters", HFILL }
9503 { &hf_nfapi_instance_length,
9504 { "Instance length", "nfapi.instance.length",
9505 FT_UINT16, BASE_DEC, NULL, 0x0,
9506 "The Length in bytes of all TLVs within this instance", HFILL }
9508 { &hf_nfapi_length,
9509 { "PDU length", "nfapi.pdu.length",
9510 FT_UINT16, BASE_DEC, NULL, 0x0,
9511 "Length of PDU in bytes.", HFILL }
9513 { &hf_nfapi_pdu_index,
9514 { "PDU Index", "nfapi.pdu.index",
9515 FT_UINT16, BASE_DEC, NULL, 0x0,
9516 "The PDU Index parameter specified for each PDU", HFILL }
9518 { &hf_nfapi_rnti,
9519 { "RNTI", "nfapi.rnti",
9520 FT_UINT16, BASE_DEC, NULL, 0x0,
9521 "The RNTI used for identifying the UE when receiving the PDU", HFILL }
9523 { &hf_nfapi_resource_allocation_type,
9524 { "Resource Allocation Type", "nfapi.resource.allocation.type",
9525 FT_UINT8, BASE_DEC, VALS(resource_allocation_type_vals), 0x0,
9526 "Resource allocation type/header Valid for DCI formats : 1, 2, 2A, 2B, 2C, 2D", HFILL }
9528 { &hf_nfapi_virtual_resource_block_assignment_flag,
9529 { "Virtual resource block assignment flag", "nfapi.resource.block.assignment.flag",
9530 FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
9531 "Type of virtual resource block used Valid for DCI formats : 1A, 1B, 1D", HFILL }
9533 { &hf_nfapi_resource_block_coding,
9534 { "Resource block coding", "nfapi.resource.block.coding",
9535 FT_UINT32, BASE_DEC, NULL, 0x0,
9536 "The encoding for the resource blocks. The coding is dependent on whether resource allocation type 0, 1, 2 is in use", HFILL }
9538 { &hf_nfapi_modulation,
9539 { "Modulation", "nfapi.modulation",
9540 FT_UINT8, BASE_DEC, VALS(modulation_vals), 0x0,
9541 NULL, HFILL }
9543 { &hf_nfapi_redundancy_version,
9544 { "Redundancy version", "nfapi.redundancy.version",
9545 FT_UINT8, BASE_DEC, NULL, 0x0,
9546 "HARQ redundancy version", HFILL }
9548 { &hf_nfapi_transport_blocks,
9549 { "Transport blocks", "nfapi.transport.blocks",
9550 FT_UINT8, BASE_DEC, NULL, 0x0,
9551 "The transport block transmitted to this RNTI", HFILL }
9553 { &hf_nfapi_transport_block_to_codeword_swap_flag,
9554 { "Transport block to codeword swap flag", "nfapi.transport.block.to.codeword.swap.flag",
9555 FT_UINT8, BASE_DEC, VALS(transport_block_to_codeword_swap_flag_vals), 0x0,
9556 "Indicates the mapping of transport block to codewords.", HFILL }
9558 { &hf_nfapi_transmission_scheme,
9559 { "Transmission scheme", "nfapi.transmission.scheme",
9560 FT_UINT8, BASE_DEC, VALS(transmission_scheme_vals), 0x0,
9561 "The MIMO mode used in the PDU", HFILL }
9563 { &hf_nfapi_ul_transmission_scheme,
9564 { "Transmission scheme", "nfapi.transmission.scheme",
9565 FT_UINT8, BASE_DEC, VALS(ul_transmission_scheme_vals), 0x0,
9566 "The MIMO mode used in the PDU", HFILL }
9568 { &hf_nfapi_number_of_layers,
9569 { "Number of layers", "nfapi.number.of.layers",
9570 FT_UINT8, BASE_DEC, NULL, 0x0,
9571 "The number of layers used in transmission", HFILL }
9573 { &hf_nfapi_number_of_subbands,
9574 { "Number of subbands", "nfapi.number.of.subbands",
9575 FT_UINT8, BASE_DEC, NULL, 0x0,
9576 "Only valid when transmission scheme = 3, 4, 5. Defines the number of subbands and "
9577 "codebooks used for PMI.If value = 1 then a single PMI value is supplied which should be used over all RB", HFILL }
9579 { &hf_nfapi_codebook_index,
9580 { "Codebook Index", "nfapi.number.of.codebook.index",
9581 FT_UINT8, BASE_DEC, NULL, 0x0,
9582 "Only valid when transmission scheme = 3, 4, 5. Defines the codebook used.", HFILL }
9584 { &hf_nfapi_ue_category_capacity,
9585 { "UE category capacity", "nfapi.ue.category.capacity",
9586 FT_UINT8, BASE_DEC, NULL, 0x0,
9587 "The UE capabilities category", HFILL }
9589 { &hf_nfapi_pa,
9590 { "P-A", "nfapi.pa",
9591 FT_UINT8, BASE_DEC, VALS(pa_vals), 0x0,
9592 "The ratio of PDSCH EPRE to cell-specific RS EPRE among PDSCH REs in all the OFDM symbols not containing cell-specific RS in dB.", HFILL }
9594 { &hf_nfapi_delta_power_offset_index,
9595 { "Delta Power offset Index", "nfapi.delta.power.offset.index",
9596 FT_UINT8, BASE_DEC, NULL, 0x0,
9597 "Delta power offset, value: 0..1", HFILL }
9599 { &hf_nfapi_nprb,
9600 { "Nprb", "nfapi.nprb",
9601 FT_UINT8, BASE_DEC, VALS(nprb_vals), 0x0,
9602 "Used with DCI format 1A and RNTI=SI-RNTI or RA-RNTI. This should match the value sent in the TPC field of the DCI 1A PDU which allocated this grant.", HFILL }
9604 { &hf_nfapi_transmission_mode,
9605 { "Transmission Mode", "nfapi.transmission_nprb",
9606 FT_UINT8, BASE_DEC, VALS(transmission_mode_vals), 0x0,
9607 "Transmission mode associated with the UE", HFILL }
9609 { &hf_nfapi_prnti,
9610 { "P-RNTI", "nfapi.prnti",
9611 FT_UINT16, BASE_DEC, NULL, 0x0,
9612 "The P-RNTI associated with the paging", HFILL }
9614 { &hf_nfapi_mcs,
9615 { "MCS", "nfapi.mcs",
9616 FT_UINT8, BASE_DEC, VALS(pch_modulation_vals), 0x0,
9617 "The modulation and coding scheme for the transport block", HFILL }
9619 { &hf_nfapi_number_of_transport_blocks,
9620 { "Number of transport blocks", "nfapi.number_of_transport_blocks",
9621 FT_UINT8, BASE_DEC, NULL, 0x0,
9622 "The number of transport blocks transmitted to this RNTI", HFILL }
9624 { &hf_nfapi_ue_mode,
9625 { "UE Mode", "nfapi.ue.mode",
9626 FT_UINT8, BASE_DEC, VALS(ue_mode_vals), 0x0,
9627 NULL, HFILL }
9629 { &hf_prs_bandwidth,
9630 { "PRS bandwidth", "nfapi.prs.bandwidth",
9631 FT_UINT8, BASE_DEC, NULL, 0x0,
9632 "PRS bandwidth in resource blocks.", HFILL }
9634 { &hf_prs_cyclic_prefix_type,
9635 { "PRS cyclic prefix type", "nfapi.prs.cyclic.prefix.type",
9636 FT_BOOLEAN, BASE_NONE, TFS(&prs_cyclic_prefix_type_strname), 0x0,
9637 "The cyclic prefix used for PRS transmission", HFILL }
9639 { &hf_prs_muting,
9640 { "PRS muting", "nfapi.prs.muting",
9641 FT_BOOLEAN, BASE_NONE, TFS(&prs_muting_strname), 0x0,
9642 "PRS muting dictates if PRS REs are vacant (prsMutingInfo-r9 indicates the SF occasions)", HFILL }
9644 { &hf_nfapi_num_bf_prb_per_subband,
9645 { "Num of BF PRB per Subband", "nfapi.num.bf.prb.per.subband",
9646 FT_UINT8, BASE_DEC, NULL, 0x0,
9647 "Number of PRBs that are treated as one subband", HFILL }
9649 { &hf_nfapi_num_bf_vector,
9650 { "Num of BF Vector", "nfapi.num.bf.vector",
9651 FT_UINT8, BASE_DEC, NULL, 0x0,
9652 "Number of beam forming vectors. One beam forming vector is specified for each subband", HFILL }
9654 { &hf_nfapi_csi_rs_resource_config,
9655 { "CSI-RS resource config", "nfapi.csi.rs.resource.config",
9656 FT_UINT8, BASE_DEC, NULL, 0x0,
9657 "Indicates reference signal configuration for CSI-RS", HFILL }
9659 { &hf_nfapi_bf_vector_subband_index,
9660 { "BF Subband Index", "nfapi.num.bf.vector.subband.index",
9661 FT_UINT8, BASE_DEC, NULL, 0x0,
9662 "Index of subband for which the following beam forming vector is applied", HFILL }
9664 { &hf_nfapi_bf_vector_num_antennas,
9665 { "BF Num of Antennas", "nfapi.num.bf.vector.bf.value",
9666 FT_UINT8, BASE_DEC, NULL, 0x0,
9667 "Number of physical antennas", HFILL }
9669 { &hf_nfapi_bf_vector_bf_value,
9670 { "BF Value per Antenna", "nfapi.num.bf.vector.bf.value",
9671 FT_UINT16, BASE_DEC, NULL, 0x0,
9672 "Beam forming vector element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
9674 { &hf_nfapi_nscid,
9675 { "NSC id", "nfapi.nscid",
9676 FT_UINT8, BASE_DEC, NULL, 0x0,
9677 "Used with DCI format 2B and 2C.", HFILL }
9679 { &hf_nfapi_csi_rs_flag,
9680 { "CSI RS Flag", "nfapi.csi.rs.flag",
9681 FT_BOOLEAN, BASE_NONE, TFS(&tfs_valid_not_valid), 0x0,
9682 "Indicates if parameters related to CSI-RS are valid or not.", HFILL }
9684 { &hf_nfapi_csi_rs_resource_config_r10,
9685 { "CSI RS resource config R10", "nfapi.csi.rs.resource_config_r10",
9686 FT_UINT8, BASE_DEC, NULL, 0x0,
9687 "This value is deprecated", HFILL }
9689 { &hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10,
9690 { "CSI-RS Number of NZP configuration", "nfapi.csi.rs.num.of.nzp.configurations",
9691 FT_UINT16, BASE_DEC, NULL, 0x0,
9692 "Bitmap of 16 bits. Encoding format of bitmap follows section 6.10.5.2 of 36.211", HFILL }
9694 { &hf_nfapi_csi_rs_number_of_nzp_configurations,
9695 { "CSI RS zero Tx Power Resource config bitmap R10", "nfapi.csi.rs.zero.tx.power.resource.config.bitmap.r10",
9696 FT_UINT8, BASE_DEC, NULL, 0x0,
9697 "Indicates the number of Non-Zero power CSI-RS configurations.", HFILL }
9699 { &hf_nfapi_pdsch_start,
9700 { "PDSCH_start", "nfapi.pdsch.start",
9701 FT_UINT8, BASE_DEC, NULL, 0x0,
9702 "Per UE starting OFDM symbol for the PDSCH, impacts the mapping of PDSCH to REs", HFILL }
9704 { &hf_nfapi_drms_config_flag,
9705 { "DMRS Config flag", "nfapi.drms.config.flag",
9706 FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9707 "Indicates if the DMRS Config parameter is valid", HFILL }
9709 { &hf_nfapi_drms_scrambling,
9710 { "DMRS Scrambling", "nfapi.drms.scrambling",
9711 FT_UINT16, BASE_DEC, NULL, 0x0,
9712 "The scrambling identity for UE specific reference signals.", HFILL }
9714 { &hf_nfapi_csi_config_flag,
9715 { "CSI Config flag", "nfapi.csi.config.flag",
9716 FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9717 "Indicates if the CSI Config parameter is valid", HFILL }
9719 { &hf_nfapi_csi_scrambling,
9720 { "CSI Scrambling", "nfapi.csi.scrambling",
9721 FT_UINT16, BASE_DEC, NULL, 0x0,
9722 "The scrambling identity for CSI.", HFILL }
9724 { &hf_nfapi_pdsch_re_mapping_flag,
9725 { "PDSCH RE mapping flag", "nfapi.pdsch.remapping.flag",
9726 FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9727 "Indicates if the PDSCH RE parameters are valid.", HFILL }
9729 { &hf_nfapi_pdsch_re_mapping_antenna_ports,
9730 { "PDSCH RE mapping antenna ports", "nfapi.pdsch.remapping.antenna.ports",
9731 FT_UINT8, BASE_DEC, NULL, 0x0,
9732 "Indicates number of antennas used for PDSCH RE mapping", HFILL }
9734 { &hf_nfapi_pdsch_re_mapping_freq_shift,
9735 { "PDSCH RE mapping freq shift", "nfapi.pdsch.remapping.freq.shift",
9736 FT_UINT8, BASE_DEC, NULL, 0x0,
9737 "Indicates the frequency shift used for PDSCH RE mapping.", HFILL }
9739 { &hf_nfapi_alt_cqi_table_r12,
9740 { "altCQI-Table-r12", "nfapi.alt.cqi.table.r12",
9741 FT_UINT8, BASE_DEC, NULL, 0x0,
9742 "altCQI-Table-r12 is indicative of using an alternative MCS table for UEs supporting 256QAM."
9743 "This is taken into account for calculation of soft buffer size for the transport block", HFILL }
9745 { &hf_nfapi_max_layers,
9746 { "MaxLayers", "nfapi.max.layers",
9747 FT_UINT16, BASE_DEC, NULL, 0x0,
9748 "Maximal number of negotiated / configured layers for a UE, used for the calculation of soft buffer size for the transport block", HFILL }
9750 { &hf_nfapi_n_dl_harq,
9751 { "N_DL_HARQ", "nfapi.n.dl.harq",
9752 FT_UINT8, BASE_DEC, NULL, 0x0,
9753 NULL, HFILL }
9755 { &hf_nfapi_dwpts_symbols,
9756 { "DwPTS Symbols", "nfapi.dwpts.symbols",
9757 FT_UINT8, BASE_DEC, NULL, 0x0,
9758 "Valid if DCI format 1C is being used to signal LAA end partial SF. Indicates the number of starting symbols according to 36.213 Table 13-A-1", HFILL }
9760 { &hf_nfapi_initial_lbt_sf,
9761 { "Initial LBT SF", "nfapi.initial.lbt.sf",
9762 FT_UINT8, BASE_DEC, NULL, 0x0,
9763 "Indicates if the DCI PDU is prepared for full SF (regular) or for initial partial SF (2nd slot) according to [11] section 6.2.4 (if PDCCH) or 6.2.4A (if ePDCCH)", HFILL }
9765 { &hf_nfapi_ue_type,
9766 { "UE Type", "nfapi.ue.type",
9767 FT_UINT8, BASE_DEC, VALS(dlsch_re13_ue_type_vals), 0x0,
9768 NULL, HFILL }
9770 { &hf_nfapi_pdsch_payload_type,
9771 { "PDSCH Payload Type", "nfapi.pdsch.payload.type",
9772 FT_UINT8, BASE_DEC, VALS(dlsch_re13_pdsch_payload_type_vals), 0x0,
9773 NULL, HFILL }
9775 { &hf_nfapi_initial_transmission_sf,
9776 { "Initial transmission SF (io)", "nfapi.init.tx.sf.io",
9777 FT_UINT16, BASE_DEC, NULL, 0x0,
9778 "Absolute Sub-Frame of the initial transmission", HFILL }
9780 { &hf_nfapi_req13_drms_table_flag,
9781 { "Rel-13-DMRS-tabe flag", "nfapi.r13.drms.table.flag",
9782 FT_UINT8, BASE_DEC, NULL, 0x0,
9783 "Indicates if Release 13 DMRS table is used.", HFILL }
9785 { &hf_nfapi_csi_rs_resource_index,
9786 { "CSI-RS resource Index", "nfapi.csi.rs.resource.index",
9787 FT_UINT8, BASE_DEC, NULL, 0x0,
9788 "Index of the CSI-RS resource. This is included to link bfValues to CSI-RS resources included in Release 10 parameters.", HFILL }
9790 { &hf_nfapi_csi_rs_class,
9791 { "Class", "nfapi.csi.rs.class",
9792 FT_UINT8, BASE_DEC, VALS(csi_rs_class_vals), 0x0,
9793 "Indicates CSI-RS class", HFILL }
9795 { &hf_nfapi_cdm_type,
9796 { "CDM Type", "nfapi.cdm.type",
9797 FT_UINT8, BASE_DEC, VALS(csi_rs_cdm_type_vals), 0x0,
9798 "Indicates CDM type for CSI-RS. See [36.211] section 6.10.5.2. Valid for Class A", HFILL }
9800 { &hf_nfapi_epdcch_prb_index,
9801 { "EPDCCH PRB Index", "nfapi.epdcch.prb.index",
9802 FT_UINT8, BASE_DEC, NULL, 0x0,
9803 NULL, HFILL }
9805 { &hf_nfapi_epdcch_resource_assignment_flag,
9806 { "EPDCCH Resource assignment flag", "nfapi.epdcch.resource.assignment.flag",
9807 FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
9808 "Type of virtual resource block used", HFILL }
9810 { &hf_nfapi_epdcch_id,
9811 { "EPDCCH ID", "nfapi.epdcch.id",
9812 FT_UINT8, BASE_DEC, NULL, 0x0,
9813 "EPDCCH Index- used for the scrambler initiation The DMRS scrambling sequence initialization parameter defined in[11] section 6.10.3A.1", HFILL }
9815 { &hf_nfapi_epdcch_start_symbol,
9816 { "EPDCCH Start Symbol", "nfapi.epdcch.start.symbol",
9817 FT_UINT8, BASE_DEC, NULL, 0x0,
9818 "Indicates the OFDM starting symbol for any EPDCCH and PDSCH", HFILL }
9820 { &hf_nfapi_epdcch_num_prb,
9821 { "EPDCCH NumPRB", "nfapi.epdcch.num.prb",
9822 FT_UINT8, BASE_DEC, NULL, 0x0,
9823 "Number of PRBs allocated for EPDCCH", HFILL }
9825 { &hf_nfapi_precoding_value,
9826 { "Precoding value", "nfapi.precoding.value",
9827 FT_UINT16, BASE_DEC, NULL, 0x0,
9828 "Precoding element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
9830 { &hf_nfapi_mpdcch_narrowband,
9831 { "MPDCCH Narrowband", "nfapi.mpdcch.narrowband",
9832 FT_UINT8, BASE_DEC, NULL, 0x0,
9833 "Narrowband for MPDCCH", HFILL }
9835 { &hf_nfapi_number_of_prb_pairs,
9836 { "Number of PRB pairs", "nfapi.number.prb.pairs",
9837 FT_UINT8, BASE_DEC, NULL, 0x0,
9838 "Number of PRB-pairs constituting the MPDCCH-PRB-pair set", HFILL }
9840 { &hf_nfapi_resource_block_assignment,
9841 { "Resource Block Assignment", "nfapi.resource.block.assignment",
9842 FT_UINT8, BASE_DEC, NULL, 0x0,
9843 "Combinational Index r", HFILL }
9845 { &hf_nfapi_start_symbol,
9846 { "Start symbol", "nfapi.start.symbol",
9847 FT_UINT8, BASE_DEC, NULL, 0x0,
9848 NULL, HFILL }
9850 { &hf_nfapi_ecce_index,
9851 { "ECCE Index", "nfapi.ecce.index",
9852 FT_UINT8, BASE_DEC, NULL, 0x0,
9853 "ECCE Index used to send the DCI", HFILL }
9855 { &hf_nfapi_ce_mode,
9856 { "CE Mode", "nfapi.ce.mode",
9857 FT_UINT8, BASE_DEC, VALS(ce_mode_vals), 0x0,
9858 NULL, HFILL }
9860 { &hf_nfapi_drms_scrabmling_init,
9861 { "DMRS scrambling init", "nfapi.drms.scrambling.init",
9862 FT_UINT16, BASE_DEC, NULL, 0x0,
9863 "The DMRS scrambling sequence initialization parameter defined in [11] section 6.10.3A.1", HFILL }
9865 { &hf_nfapi_pdsch_reception_levels,
9866 { "PDSCH repetition levels", "nfapi.pdsch.repetition.levels",
9867 FT_UINT8, BASE_DEC, NULL, 0x0,
9868 "Valid for DCI formats: 6-0A, 6-0B", HFILL }
9870 { &hf_nfapi_new_data_indicator,
9871 { "New data indicator", "nfapi.new.data.indicator",
9872 FT_UINT8, BASE_DEC, NULL, 0x0,
9873 "The new data indicator for the transport block", HFILL }
9875 { &hf_nfapi_tpmi_length,
9876 { "TPMI length", "nfapi.tpmi.length",
9877 FT_UINT8, BASE_DEC, NULL, 0x0,
9878 "Length of 'TPMI' field in units of bits", HFILL }
9880 { &hf_nfapi_pmi_flag,
9881 { "PMI flag", "nfapi.pmi.flag",
9882 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
9883 "Indicates if 'PMI' field is present", HFILL }
9885 { &hf_nfapi_harq_resource_offset,
9886 { "HARQ resource offset", "nfapi.harq.resource.offset",
9887 FT_UINT8, BASE_DEC, NULL, 0x0,
9888 "HARQ-ACK resource offset used", HFILL }
9890 { &hf_nfapi_dci_subframe_repetition_number,
9891 { "DCI subframe repetition number", "nfapi.dci.subframe.repetition.number",
9892 FT_UINT8, BASE_DEC, NULL, 0x0,
9893 "Indicates the number of MPDCCH repetitions", HFILL }
9895 { &hf_nfapi_downlink_assignment_index_length,
9896 { "Downlink assignment Index Length", "nfapi.dl.assignment.index.length",
9897 FT_UINT8, BASE_DEC, NULL, 0x0,
9898 "Length of Downlink assignment Index field in units of bits.", HFILL }
9900 { &hf_nfapi_starting_ce_level,
9901 { "Starting CE Level", "nfapi.starting.ce.level",
9902 FT_UINT8, BASE_DEC, NULL, 0x0,
9903 "2 bits provide the PRACH starting CE level", HFILL }
9905 { &hf_nfapi_antenna_ports_and_scrambling_identity_flag,
9906 { "Antenna ports and scrambling identity flag", "nfapi.antenna.ports.and.scrambling.identity.flag",
9907 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
9908 "Indicates if 'Antenna ports and scrambling identity' field is present.", HFILL }
9910 { &hf_nfapi_antenna_ports_and_scrambling_identity,
9911 { "Antenna ports and scrambling identity", "nfapi.antenna.ports.and.scrambling.identity",
9912 FT_UINT8, BASE_DEC, NULL, 0x0,
9913 "Indicates the Antenna port and, scrambling identity value", HFILL }
9915 { &hf_nfapi_paging_direct_indication_differentiation_flag,
9916 { "Paging/Direct indication differentiation flag", "nfapi.paging.direct.indication.differentiation.flag",
9917 FT_UINT8, BASE_DEC, VALS(paging_direct_indication_differtiation_flag_vals), 0x0,
9918 "Valid for DCI format 6-2", HFILL }
9920 { &hf_nfapi_direct_indication,
9921 { "Direct indication", "nfapi.direct.indication",
9922 FT_UINT8, BASE_DEC, NULL, 0x0,
9923 "Valid for DCI format 6-2", HFILL }
9925 { &hf_nfapi_number_of_tx_antenna_ports,
9926 { "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports",
9927 FT_UINT8, BASE_DEC, NULL, 0x0,
9928 "Number of TX physical antenna ports", HFILL }
9930 { &hf_nfapi_transmission_power,
9931 { "Transmission Power", "nfapi.transmission_power",
9932 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
9933 "Offset to the reference signal power.", HFILL }
9935 { &hf_nfapi_mbsfn_area_id,
9936 { "MBSFN Area id", "nfapi.mbsfn.area.id",
9937 FT_UINT16, BASE_DEC, NULL, 0x0,
9938 "Indicates MBSFN area ID", HFILL }
9940 { &hf_nfapi_dl_dci_format,
9941 { "DL DCI format", "nfapi.dl.dci.format",
9942 FT_UINT8, BASE_DEC, VALS(dl_dci_format_vals), 0x0,
9943 "Format of the DL DCI", HFILL }
9945 { &hf_nfapi_ul_dci_format,
9946 { "UL DCI format", "nfapi.ul_dci.format",
9947 FT_UINT8, BASE_DEC, VALS(ul_dci_format_vals), 0x0,
9948 "Format of the UL DCI", HFILL }
9950 { &hf_nfapi_mpdcch_ul_dci_format,
9951 { "UL DCI format", "nfapi.mpdcch.ul_dci.format",
9952 FT_UINT8, BASE_DEC, VALS(mpdcch_ul_dci_format_vals), 0x0,
9953 "Format of the UL DCI", HFILL }
9955 { &hf_nfapi_cce_idx,
9956 { "CCE Index", "nfapi.cce.index",
9957 FT_UINT8, BASE_DEC, NULL, 0x0,
9958 "CCE Index used to send the DCI", HFILL }
9960 { &hf_nfapi_aggregation_level,
9961 { "Aggregation level", "nfapi.aggregation.level",
9962 FT_UINT8, BASE_DEC, NULL, 0x0,
9963 "The aggregation level used", HFILL }
9965 { &hf_nfapi_mcs_1,
9966 { "MCS_1", "nfapi.mcs_1",
9967 FT_UINT8, BASE_DEC, NULL, 0x0,
9968 "The modulation and coding scheme for 1st transport block", HFILL }
9970 { &hf_nfapi_mcs_2,
9971 { "MCS_2", "nfapi.mcs_2",
9972 FT_UINT8, BASE_DEC, NULL, 0x0,
9973 "The modulation and coding scheme for 2nd transport block", HFILL }
9975 { &hf_nfapi_redundancy_version_1,
9976 { "Redundancy version_1", "nfapi.redundancy.version.1",
9977 FT_UINT8, BASE_DEC, NULL, 0x0,
9978 "The redundancy version for 1st transport block.", HFILL }
9980 { &hf_nfapi_redundancy_version_2,
9981 { "Redundancy version_2", "nfapi.redundancy.version.2",
9982 FT_UINT8, BASE_DEC, NULL, 0x0,
9983 "The redundancy version for 2nd transport block", HFILL }
9985 { &hf_nfapi_new_data_indicator_1,
9986 { "New data indicator_1", "nfapi.new.data.indicator.1",
9987 FT_UINT8, BASE_DEC, NULL, 0x0,
9988 "The new data indicator for 1st transport block.", HFILL }
9990 { &hf_nfapi_new_data_indicator_2,
9991 { "New data indicator_2", "nfapi.new.data.indicator.2",
9992 FT_UINT8, BASE_DEC, NULL, 0x0,
9993 "The new data indicator for 2nd transport block.", HFILL }
9995 { &hf_nfapi_harq_process,
9996 { "HARQ process", "nfapi.harq.process",
9997 FT_UINT8, BASE_DEC, NULL, 0x0,
9998 "HARQ process number", HFILL }
10000 { &hf_nfapi_tpmi,
10001 { "TPMI", "nfapi.tpmi",
10002 FT_UINT8, BASE_DEC, NULL, 0x0,
10003 "The codebook Index to be used for precoding", HFILL }
10005 { &hf_nfapi_pmi,
10006 { "PMI", "nfapi.pmi",
10007 FT_UINT8, BASE_DEC, VALS(pmi_vals), 0x0,
10008 "Confirmation for precoding", HFILL }
10010 { &hf_nfapi_precoding_information,
10011 { "Precoding information", "nfapi.precoding.information",
10012 FT_UINT8, BASE_DEC, NULL, 0x0,
10013 NULL, HFILL }
10015 { &hf_nfapi_tpc,
10016 { "TPC", "nfapi.tpc",
10017 FT_UINT8, BASE_DEC, NULL, 0x0,
10018 "Tx power control command for PUCCH", HFILL }
10020 { &hf_nfapi_downlink_assignment_index,
10021 { "Downlink assignment Index", "nfapi.downlink.assignment.index",
10022 FT_UINT8, BASE_DEC, NULL, 0x0,
10023 "The downlink assignment Index. In release 8-11 this is only used in TDD mode, "
10024 "value ignored for FDD. In release 12 or later a field indicating the structure "
10025 "type of the primary cell is used to determine if this is valid with size 2 bits."
10026 "In release 13 or later a field indicating codebooksizeDetermination - r13 = 0 is "
10027 "used to determine is this field is valid with size 4 bits", HFILL }
10029 { &hf_nfapi_ngap,
10030 { "Ngap", "nfapi.ngap",
10031 FT_UINT8, BASE_DEC, VALS(ngap_vals), 0x0,
10032 "Used in virtual resource block distribution", HFILL }
10034 { &hf_nfapi_transport_block_size_index,
10035 { "Transport block size Index", "nfapi.transport.block.size.index",
10036 FT_UINT8, BASE_DEC, NULL, 0x0,
10037 "The transport block size", HFILL }
10039 { &hf_nfapi_downlink_power_offset,
10040 { "Downlink power offset", "nfapi.downlink.power.offset",
10041 FT_UINT8, BASE_DEC, NULL, 0x0,
10042 "Indicates the DL power offset type for multi-user MIMO transmission", HFILL }
10044 { &hf_nfapi_allocate_prach_flag,
10045 { "Allocation PRACH flag", "nfapi.allocation.prach.flag",
10046 FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
10047 "Indicates that PRACH procedure is initiated", HFILL }
10049 { &hf_nfapi_preamble_index,
10050 { "Preamble Index", "nfapi.preamble.index",
10051 FT_UINT8, BASE_DEC, NULL, 0x0,
10052 "The preamble Index to be used on the PRACH", HFILL }
10054 { &hf_nfapi_prach_mask_index,
10055 { "PRACH mask Index", "nfapi.prach.mask.index",
10056 FT_UINT8, BASE_DEC, NULL, 0x0,
10057 "The mask Index to be used on the PRACH", HFILL }
10059 { &hf_nfapi_rnti_type,
10060 { "RNTI type", "nfapi.rnti.type",
10061 FT_UINT8, BASE_DEC, VALS(rnti_type_vals), 0x0,
10062 NULL, HFILL }
10064 { &hf_nfapi_mpdcch_rnti_type,
10065 { "RNTI type", "nfapi.mpdcch.rnti.type",
10066 FT_UINT8, BASE_DEC, VALS(mpdcch_rnti_type_vals), 0x0,
10067 NULL, HFILL }
10069 { &hf_nfapi_mcch_flag,
10070 { "MCCH flag", "nfapi.mcch.flag",
10071 FT_BOOLEAN, BASE_NONE, TFS(&mcch_flag_string_name), 0x0,
10072 "Indicates if format 1C is being used to signal a MCCH or SC-MCCH change notification", HFILL }
10074 { &hf_nfapi_mcch_change_notification,
10075 { "MCCH change notification", "nfapi.mcch.change.notification",
10076 FT_UINT8, BASE_DEC, NULL, 0x0,
10077 "MCCH or SC-MCCH Change Notification", HFILL }
10079 { &hf_nfapi_scrambling_identity,
10080 { "Scrambling identity", "nfapi.scrambling.identity",
10081 FT_UINT8, BASE_DEC, NULL, 0x0,
10082 "Indicates the scrambling identity value NSCID", HFILL }
10084 { &hf_nfapi_cross_carrier_scheduling_flag,
10085 { "Cross Carrier scheduling flag", "nfapi.cross.carrier.scheduling.flag",
10086 FT_BOOLEAN, BASE_NONE, TFS(&cross_carrier_scheduling_flag_strname), 0x0,
10087 "Indicates if cross carrier scheduling has been enabled for the UE receiving this DCI", HFILL }
10089 { &hf_nfapi_carrier_indicator,
10090 { "Carrier Indicator", "nfapi.carrier.indicator",
10091 FT_UINT8, BASE_DEC, NULL, 0x0,
10092 "Serving Cell Index", HFILL }
10094 { &hf_nfapi_srs_flag,
10095 { "SRS flag", "nfapi.srs.flag",
10096 FT_BOOLEAN, BASE_NONE, TFS(&srs_flag_strname), 0x0,
10097 "Indicates if the SRS request parameter is valid", HFILL }
10099 { &hf_nfapi_srs_request,
10100 { "SRS request", "nfapi.srs.request",
10101 FT_BOOLEAN, BASE_NONE, TFS(&srs_request_strname), 0x0,
10102 "SRS request flag", HFILL }
10104 { &hf_nfapi_antenna_ports_scrambling_and_layers,
10105 { "Antenna ports scrambling and layers", "nfapi.antenna.ports.scrambling.and.layers",
10106 FT_UINT8, BASE_DEC, NULL, 0x0,
10107 "Indicates the Antenna port, scrambling identity value NSCID and number of layers", HFILL }
10109 { &hf_nfapi_total_dci_length_including_padding,
10110 { "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
10111 FT_UINT8, BASE_DEC, NULL, 0x0,
10112 "The total DCI length including padding bits", HFILL }
10114 { &hf_nfapi_n_ul_rb,
10115 { "N_UL_RB", "nfapi.n.dl.rb",
10116 FT_UINT8, BASE_DEC, NULL, 0x0,
10117 "BW of serving cell for which the DCI was scheduled for. This is valid for "
10118 "the case of cross carrier scheduling, for the case of a self - "
10119 "scheduling(cross carrier scheduling is not valid or Carrier indicator has value '0', "
10120 "the BW is the 'DL BW support' as configured in configuration phase(params) "
10121 "Uplink channel bandwidth in resource blocks", HFILL }
10123 { &hf_nfapi_harq_ack_resource_offset,
10124 { "HARQ-ACK resource offset", "nfapi.harq.ack.resource.offset",
10125 FT_UINT8, BASE_DEC, NULL, 0x0,
10126 "HARQ-ACK resource offset field is present only when this format is carried by EPDCCH.", HFILL }
10128 { &hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator,
10129 { "PDSCH RE Mapping and Quasi-Co-Location Indicator", "nfapi.pdsch.re.mapping",
10130 FT_UINT8, BASE_DEC, NULL, 0x0,
10131 "Indicates the parameter set configured by the higher layers which the UE should use.", HFILL }
10133 { &hf_nfapi_primary_cell_type,
10134 { "Primary cell type", "nfapi.primary.cell.type",
10135 FT_UINT8, BASE_DEC, VALS(primary_cells_type_vals), 0x0,
10136 "Indicates the type of the primary cell.", HFILL }
10138 { &hf_nfapi_ul_dl_configuration_flag,
10139 { "UL/DL configuration flag", "nfapi.ul.dl.configuration.flag",
10140 FT_BOOLEAN, BASE_NONE, TFS(&ul_dl_configuration_flag_strname), 0x0,
10141 "Indicates if format 1C is being used to signal UL/DL configuration", HFILL }
10143 { &hf_nfapi_number_of_ul_dl_configurations,
10144 { "Number of UL/DL configurations", "nfapi.number.ul.dl.configurations",
10145 FT_UINT8, BASE_DEC, NULL, 0x0,
10146 NULL, HFILL }
10148 { &hf_nfapi_ul_dl_configuration_index,
10149 { "UL/DL configuration indication", "nfapi.ul.dl.configuration.indication",
10150 FT_UINT8, BASE_DEC, NULL, 0x0,
10151 "UL/DL configuration Index", HFILL }
10153 { &hf_nfapi_laa_end_partial_sf_flag,
10154 { "LAA end partial SF flag", "nfapi.laa.end.partial.sf.flag",
10155 FT_UINT8, BASE_DEC, NULL, 0x0,
10156 "Indicates if DCI format 1C is being used to signal LAA end partial SF (valid if end partial SF support configuration is set)", HFILL }
10158 { &hf_nfapi_laa_end_partial_sf_configuration,
10159 { "LAA end partial SF configuration", "nfapi.laa.end.partial.sf.configuration",
10160 FT_UINT8, BASE_DEC, NULL, 0x0,
10161 "If DCI format 1C scrambled by CC - RNTI is used to signal end partial SF, this field "
10162 "contains LAA common information (4 bits used in [9] Table 13A-1 for configuration of "
10163 "occupied OFDM symbols for current and next SF)", HFILL }
10165 { &hf_nfapi_codebooksize_determination_r13,
10166 { "Codebook Size Determination R13", "nfapi.codebook.size.determination.r13",
10167 FT_UINT8, BASE_DEC, NULL, 0x0,
10168 "Indicates if the downlink assignment Index parameter (DAI) is 4 bits", HFILL }
10170 { &hf_nfapi_rel13_drms_table_flag,
10171 { "Rel-13-DMRS-tabe flag", "nfapi.drms.table.flag.r13",
10172 FT_UINT8, BASE_DEC, NULL, 0x0,
10173 "Indicates if Release 13 DMRS table for be used", HFILL }
10175 { &hf_nfapi_pscch_resource,
10176 { "PSCCH Resource", "nfapi.pscch.resource",
10177 FT_UINT8, BASE_DEC, NULL, 0x0,
10178 "6-bits describing the resource blocks for transmitting PSCCH", HFILL }
10180 { &hf_nfapi_time_resource_pattern,
10181 { "Time resource pattern", "nfapi.time.resource.pattern",
10182 FT_UINT8, BASE_DEC, NULL, 0x0,
10183 "7-bits describing the time resource pattern Index", HFILL }
10185 { &hf_nfapi_mpdcch_transmission_type,
10186 { "MPDCCH transmission type", "nfapi.mpdcch.transmission.type",
10187 FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
10188 NULL, HFILL }
10190 { &hf_nfapi_drms_scrambling_init,
10191 { "DMRS scrambling init", "nfapi.drms.scrambling.init",
10192 FT_UINT8, BASE_DEC, NULL, 0x0,
10193 "The DMRS scrambling sequence initialization", HFILL }
10195 { &hf_nfapi_pusch_repetition_levels,
10196 { "PUSCH repetition levels", "nfapi.pusch.repetition.levels",
10197 FT_UINT8, BASE_DEC, NULL, 0x0,
10198 "Valid for DCI formats: 6-0A, 6-0B", HFILL }
10200 { &hf_nfapi_frequency_hopping_flag,
10201 { "Frequency hopping flag", "nfapi.frequency.hopping.flag",
10202 FT_UINT8, BASE_DEC, NULL, 0x0,
10203 "Indicates if hopping is being used.", HFILL }
10205 { &hf_nfapi_csi_request,
10206 { "CSI request", "nfapi.csi.request",
10207 FT_UINT8, BASE_DEC, VALS(csi_request_vals), 0x0,
10208 "Aperiodic CSI request flag", HFILL }
10210 { &hf_nfapi_dai_presence_flag,
10211 { "DAI presence flag", "nfapi.dia.presence.flag",
10212 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
10213 "Indicates if DL assignment Index field is present in the DCI", HFILL }
10215 { &hf_nfapi_total_dci_length_include_padding,
10216 { "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
10217 FT_UINT8, BASE_DEC, NULL, 0x0,
10218 "The total DCI length including padding bits", HFILL }
10220 { &hf_nfapi_csi_rs_antenna_port_count_r10,
10221 { "CSI-RS antenna port count r10", "nfapi.csi.rs.antenna.port.count.r10",
10222 FT_UINT8, BASE_DEC, NULL, 0x0,
10223 "Indicates number of antennas used for transmission of CSI reference signal.", HFILL }
10225 { &hf_nfapi_ul_config_pdu_type,
10226 { "UL Config PDU Type", "nfapi.ul.config.pdu.type",
10227 FT_UINT8, BASE_DEC, VALS(nfapi_ul_config_pdu_type_vals), 0x0,
10228 NULL, HFILL }
10230 { &hf_nfapi_rach_prach_frequency_resources,
10231 { "RACH PRACH Frequency resources", "nfapi.rach.prach.frequency.resources",
10232 FT_UINT8, BASE_DEC, NULL, 0x0,
10233 "If semi-static information is held in the MAC", HFILL }
10235 { &hf_nfapi_srs_present,
10236 { "SRS present", "nfapi.srs.present",
10237 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
10238 "If semi-static information is held in the MAC", HFILL }
10240 { &hf_nfapi_handle,
10241 { "Handle", "nfapi.handle",
10242 FT_UINT32, BASE_DEC, NULL, 0x0,
10243 "An opaque handle", HFILL }
10245 { &hf_nfapi_pucch_index,
10246 { "PUCCH Index", "nfapi.pucch.index",
10247 FT_UINT16, BASE_DEC, NULL, 0x0,
10248 "The PUCCH Index value", HFILL }
10250 { &hf_nfapi_size,
10251 { "Size", "nfapi.size",
10252 FT_UINT16, BASE_DEC, NULL, 0x0,
10253 "The size of the ULSCH PDU in bytes as defined by the relevant UL grant", HFILL }
10255 { &hf_nfapi_resource_block_start,
10256 { "Resource block start", "nfapi.resource.block.start",
10257 FT_UINT8, BASE_DEC, NULL, 0x0,
10258 "The starting resource block for this ULSCH allocation", HFILL }
10260 { &hf_nfapi_number_of_resource_blocks,
10261 { "Number of resource blocks", "nfapi.resource.blocks",
10262 FT_UINT8, BASE_DEC, NULL, 0x0,
10263 "The number of resource blocks allocated to this ULSCH grant", HFILL }
10265 { &hf_nfapi_cyclic_shift_2_for_drms,
10266 { "Cyclic Shift 2 for DRMS", "nfapi.cyclic.shift.2.for.drms",
10267 FT_UINT8, BASE_DEC, NULL, 0x0,
10268 "The 2nd cyclic shift for DMRS assigned to the UE in the ULSCH grant", HFILL }
10270 { &hf_nfapi_frequency_hopping_enabled_flag,
10271 { "Frequency hopping enabled flag", "nfapi.frequency.hopping.enabled.flag",
10272 FT_UINT8, BASE_DEC, VALS(hopping_vals), 0x0,
10273 "Indicates if hopping is being used", HFILL }
10275 { &hf_nfapi_frequency_hopping_bits,
10276 { "Frequency hopping bits", "nfapi.frequency.hopping.bits",
10277 FT_UINT8, BASE_DEC, NULL, 0x0,
10278 NULL, HFILL }
10280 { &hf_nfapi_new_data_indication,
10281 { "New Data indication", "nfapi.new.data.indication",
10282 FT_UINT8, BASE_DEC, NULL, 0x0,
10283 "Specify whether this received transport block is a new transmission from UE", HFILL }
10285 { &hf_nfapi_harq_process_number,
10286 { "HARQ Process number", "nfapi.harq.process.number",
10287 FT_UINT8, BASE_DEC, NULL, 0x0,
10288 NULL, HFILL }
10290 { &hf_nfapi_ul_tx_mode,
10291 { "UL Tx Mode", "nfapi.ul.tx.mode",
10292 FT_UINT8, BASE_DEC, VALS(ul_tx_mode_vals), 0x0,
10293 NULL, HFILL }
10295 { &hf_nfapi_current_tx_nb,
10296 { "Current Tx nb", "nfapi.current.tx.nb",
10297 FT_UINT8, BASE_DEC, NULL, 0x0,
10298 "The current HARQ transmission count of this transport block. Valid if frequency hopping enabled.", HFILL }
10300 { &hf_nfapi_n_srs,
10301 { "N SRS", "nfapi.n.srs",
10302 FT_UINT8, BASE_DEC, VALS(n_srs_vals), 0x0,
10303 "Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
10305 { &hf_nfapi_disable_sequence_hopping_flag,
10306 { "Disable sequence hopping flag", "nfapi.disable.sequence.hopping.flag",
10307 FT_UINT8, BASE_DEC, NULL, 0x0,
10308 "Indicates if any configured group hopping should be disabled for this UE.", HFILL }
10310 { &hf_nfapi_virtual_cell_id_enabled_flag,
10311 { "Virtual cell ID enabled flag", "nfapi.virtual.cell.id.enabled.flag",
10312 FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
10313 "Indicates if virtual cell is being used and nPUSCH identity is valid.", HFILL }
10315 { &hf_nfapi_npusch_identity,
10316 { "nPUSCH Identity", "nfapi.npusch.identity",
10317 FT_UINT16, BASE_DEC, NULL, 0x0,
10318 "Virtual cell ID for initialization of group hopping, sequence hopping and sequence shift pattern of PUSCH DMRS.", HFILL }
10320 { &hf_nfapi_ndrms_csh_identity,
10321 { "nDMRS-CSH Identity", "nfapi.ndrms.csh.identity",
10322 FT_UINT16, BASE_DEC, NULL, 0x0,
10323 "Virtual cell ID for initialization of cyclic shift hopping of PUSCH DMRS.", HFILL }
10325 { &hf_nfapi_total_number_of_repetitions,
10326 { "Total Number of repetitions", "nfapi.total.number.of.repetitions",
10327 FT_UINT16, BASE_DEC, NULL, 0x0,
10328 NULL, HFILL }
10330 { &hf_nfapi_repetition_number,
10331 { "Repetition Number", "nfapi.repetition.number",
10332 FT_UINT16, BASE_DEC, NULL, 0x0,
10333 "Current transmission number", HFILL }
10335 { &hf_nfapi_initial_sf_io,
10336 { "Initial transmission SF (io)", "nfapi.initial.sf.io",
10337 FT_UINT16, BASE_DEC, NULL, 0x0,
10338 "Absolute Sub-Frame of the initial transmission", HFILL }
10340 { &hf_nfapi_empty_symbols_due_to_retunning,
10341 { "Empty symbols due to re-tunning", "nfapi.empty.symbols.due.to.retunning",
10342 FT_UINT8, BASE_DEC, NULL, 0x0,
10343 "Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
10345 { &hf_nfapi_dl_cqi_ri_pmi_size_2,
10346 { "DL CQI/PMI/RI size 2", "nfapi.dl.cqi.ri.pmi.size.2",
10347 FT_UINT16, BASE_DEC, NULL, 0x0,
10348 "The size of the DL CQI/PMI/RI in bits. If the CQI/PMI/RI size exceeds 255 (8-bits) then the Release 9 size value = 0, and this field is used instead.", HFILL }
10350 { &hf_nfapi_harq_size_2,
10351 { "HARQ Size 2", "nfapi.harq.size2",
10352 FT_UINT16, BASE_DEC, NULL, 0x0,
10353 "The size of the ACK/NACK in bits.", HFILL }
10355 { &hf_nfapi_delta_offset_harq_2,
10356 { "Delta Offset HARQ 2", "nfapi.delta.offset.harq.2",
10357 FT_UINT8, BASE_DEC, NULL, 0x0,
10358 "Delta offset 2 for HARQ. This value is fixed for a UE, allocated in RRC connection setup and used for ACK_NACK mode = 4 or 5", HFILL }
10360 { &hf_nfapi_starting_prb,
10361 { "Starting PRB", "nfapi.starting.prb",
10362 FT_UINT8, BASE_DEC, NULL, 0x0,
10363 "The starting PRB for the PUCCH", HFILL }
10365 { &hf_nfapi_antenna_port,
10366 { "Antenna Port", "nfapi.antenna.port",
10367 FT_UINT8, BASE_DEC, VALS(antenna_ports_vals), 0x0,
10368 "Defines the number of antenna ports used by the UE for the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10370 { &hf_nfapi_number_of_combs,
10371 { "Number of Combs", "nfapi.num.of.combs",
10372 FT_UINT8, BASE_DEC, VALS(combs_vals), 0x0,
10373 "Defines the maximum number of transmission combs (TC).", HFILL }
10375 { &hf_nfapi_npucch_identity,
10376 { "nPUCCH Identity", "nfapi.npucch.identity",
10377 FT_UINT16, BASE_DEC, NULL, 0x0,
10378 "Virtual cell ID for initialization of base sequence and cyclic shift hopping of PUCCH.", HFILL }
10380 { &hf_nfapi_empty_symbols,
10381 { "Empty symbols", "nfapi.empty.symbols",
10382 FT_UINT8, BASE_DEC, NULL, 0x0,
10383 "Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
10385 { &hf_nfapi_csi_mode,
10386 { "CSI_mode", "nfapi.csi.mode",
10387 FT_UINT8, BASE_DEC, VALS(csi_mode_vals), 0x0,
10388 NULL, HFILL }
10390 { &hf_nfapi_dl_cqi_pmi_size_2,
10391 { "DL CQI/PMI Size 2", "nfapi.dl.cqi.pmi.size.2",
10392 FT_UINT16, BASE_DEC, NULL, 0x0,
10393 "The size of the DL CQI/PMI in bits", HFILL }
10395 { &hf_nfapi_statring_prb,
10396 { "Starting PRB", "nfapi.starting.prb",
10397 FT_UINT8, BASE_DEC, NULL, 0x0,
10398 "The starting PRB for the PUCCH", HFILL }
10400 { &hf_nfapi_cdm_index,
10401 { "cdm_Index", "nfapi.cdm.index",
10402 FT_UINT8, BASE_DEC, NULL, 0x0,
10403 "Selected CDM option", HFILL }
10405 { &hf_nfapi_nsrs,
10406 { "N srs", "nfapi.n.srs",
10407 FT_UINT8, BASE_DEC, NULL, 0x0,
10408 "Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
10410 { &hf_nfapi_num_ant_ports,
10411 { "Num_ant_ports", "nfapi.num.ant.port",
10412 FT_UINT8, BASE_DEC, NULL, 0x0,
10413 "The number of antenna ports used by the UE transmit", HFILL }
10415 { &hf_nfapi_n_pucch_2_0,
10416 { "n_PUCCH_2_0", "nfapi.n.pucch.2.0",
10417 FT_UINT16, BASE_DEC, NULL, 0x0,
10418 "The PUCCH Index value for ACK/NACK HARQ resource 4 on antenna port", HFILL }
10420 { &hf_nfapi_n_pucch_2_1,
10421 { "n_PUCCH_2_1", "nfapi.n.pucch.2.1",
10422 FT_UINT16, BASE_DEC, NULL, 0x0,
10423 "HARQ resource 5", HFILL }
10425 { &hf_nfapi_n_pucch_2_2,
10426 { "n_PUCCH_2_2", "nfapi.n.pucch.2.2",
10427 FT_UINT16, BASE_DEC, NULL, 0x0,
10428 "HARQ resource 6", HFILL }
10430 { &hf_nfapi_n_pucch_2_3,
10431 { "n_PUCCH_2_3", "nfapi.n.pucch.2.3",
10432 FT_UINT16, BASE_DEC, NULL, 0x0,
10433 "HARQ resource 7", HFILL }
10435 { &hf_nfapi_dl_cqi_pmi_size_rank_1,
10436 { "DL CQI PMI size rank 1", "nfapi.dl.cqi.pmi.size.rank.1",
10437 FT_UINT8, BASE_DEC, NULL, 0x0,
10438 "The size of the DL CQI/PMI in bits in case of rank 1 report.", HFILL }
10440 { &hf_nfapi_dl_cqi_pmi_size_rank_greater_1,
10441 { "DL CQI PMI size rank greater 1", "nfapi.dl.cqi.pmi.size.rank.gt_1",
10442 FT_UINT8, BASE_DEC, NULL, 0x0,
10443 "The size of the DL CQI/PMI in bits in case of rank>1 report.", HFILL }
10445 { &hf_nfapi_ri_size,
10446 { "RI size", "nfapi.ri.size",
10447 FT_UINT8, BASE_DEC, NULL, 0x0,
10448 "The size of RI in bits", HFILL }
10450 { &hf_nfapi_delta_offset_cqi,
10451 { "Delta offset cqi", "nfapi.delta.offset.cqi",
10452 FT_UINT8, BASE_DEC, NULL, 0x0,
10453 "Delta offset for CQI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10455 { &hf_nfapi_delta_offset_ri,
10456 { "Delta offset ri", "nfapi.delta.offset.ri",
10457 FT_UINT8, BASE_DEC, NULL, 0x0,
10458 "Delta offset for RI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10460 { &hf_nfapi_harq_size,
10461 { "HARQ size", "nfapi.harq_size",
10462 FT_UINT8, BASE_DEC, NULL, 0x0,
10463 "The size of the ACK/NACK in bits", HFILL }
10465 { &hf_nfapi_delta_offset_harq,
10466 { "Delta offset HARQ", "nfapi.delta.offset.harq",
10467 FT_UINT8, BASE_DEC, NULL, 0x0,
10468 "Delta offset for HARQ. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10470 { &hf_nfapi_tdd_ack_nack_mode,
10471 { "ACK NACK mode", "nfapi.tdd.ack.nack.mode",
10472 FT_UINT8, BASE_DEC, VALS(nfapi_tdd_ack_nack_mode_vals), 0x0,
10473 "The format of the ACK/NACK response expected. For TDD only.", HFILL }
10475 { &hf_nfapi_fdd_ack_nack_mode,
10476 { "ACK NACK mode", "nfapi.fdd.ack.nack.mode",
10477 FT_UINT8, BASE_DEC, VALS(nfapi_fdd_ack_nack_mode_vals), 0x0,
10478 "The format of the ACK/NACK response expected. For TDD only.", HFILL }
10480 { &hf_nfapi_n_srs_initial,
10481 { "N srs initial", "nfapi.n.srs.initial",
10482 FT_UINT8, BASE_DEC, VALS(n_srs_initial_vals), 0x0,
10483 NULL, HFILL }
10485 { &hf_nfapi_initial_number_of_resource_blocks,
10486 { "Initial number of resource blocks", "nfapi.initial.number.of.resource.blocks",
10487 FT_UINT8, BASE_DEC, NULL, 0x0,
10488 "The number of resource blocks used in the initial transmission of this transport block.", HFILL }
10490 { &hf_nfapi_dl_cqi_pmi_size,
10491 { "DL cqi pmi size", "nfapi.dl.cqi.pmi.size",
10492 FT_UINT8, BASE_DEC, NULL, 0x0,
10493 "The size of the DL CQI/PMI in bits in case of this RI value. The size of the DL CQI / PMI / RI in bits in case of this CRI value", HFILL }
10495 { &hf_nfapi_report_type,
10496 { "Report type", "nfapi.report.type",
10497 FT_BOOLEAN, BASE_NONE, TFS(&nfapi_csi_report_type_strname), 0x0,
10498 "Type of CSI report", HFILL }
10500 { &hf_nfapi_dl_cqi_ri_pmi_size,
10501 { "DL CQI/PMI/RI size", "nfapi.dl.cqi.ri.pmi.size",
10502 FT_UINT8, BASE_DEC, NULL, 0x0,
10503 "The size of the DL CQI/PMI/RI/CRI in bits", HFILL }
10505 { &hf_nfapi_control_type,
10506 { "Control type", "nfapi.control.type",
10507 FT_BOOLEAN, BASE_NONE, TFS(&nfapi_control_type_string_name), 0x0,
10508 NULL, HFILL }
10510 { &hf_nfapi_number_of_cc,
10511 { "Number of cc", "nfapi.number.of.cc",
10512 FT_UINT8, BASE_DEC, NULL, 0x0,
10513 "The number of CC in the aperiodic report", HFILL }
10515 { &hf_nfapi_number_of_pucch_resource,
10516 { "Number of PUCCH Resource", "nfapi.number.of.pucch.resource",
10517 FT_UINT8, BASE_DEC, NULL, 0x0,
10518 "A value of 2 indicates that the UE is configured to transmit on two antenna ports", HFILL }
10520 { &hf_nfapi_pucch_index_p1,
10521 { "PUCCH Index P1", "nfapi.pucch.index.p1",
10522 FT_UINT16, BASE_DEC, NULL, 0x0,
10523 "The PUCCH Index value for antenna port P1", HFILL }
10525 { &hf_nfapi_n_pucch_1_0,
10526 { "N PUCCH 1 0", "nfapi.n.pucch.1.0",
10527 FT_UINT8, BASE_DEC, NULL, 0x0,
10528 "HARQ resource 0", HFILL }
10530 { &hf_nfapi_n_pucch_1_1,
10531 { "N PUCCH 1 1", "nfapi.n.pucch.1.1",
10532 FT_UINT8, BASE_DEC, NULL, 0x0,
10533 "HARQ resource 1", HFILL }
10535 { &hf_nfapi_n_pucch_1_2,
10536 { "N PUCCH 1 2", "nfapi.n.pucch.1.2",
10537 FT_UINT8, BASE_DEC, NULL, 0x0,
10538 "HARQ resource 2", HFILL }
10540 { &hf_nfapi_n_pucch_1_3,
10541 { "N PUCCH 1 3", "nfapi.n.pucch.1.3",
10542 FT_UINT8, BASE_DEC, NULL, 0x0,
10543 "HARQ resource 3", HFILL }
10545 { &hf_nfapi_srs_bandwidth,
10546 { "SRS Bandwidth", "nfapi.srs.bandwidth",
10547 FT_UINT8, BASE_DEC, NULL, 0x0,
10548 "SRS Bandwidth. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10550 { &hf_nfapi_frequency_domain_position,
10551 { "Frequency Domain position", "nfapi.frequency.domain.position",
10552 FT_UINT8, BASE_DEC, NULL, 0x0,
10553 "Frequency-domain position, NRRC This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10555 { &hf_nfapi_srs_hopping_bandwidth,
10556 { "SRS hopping bandwidth", "nfapi.srs.hopping.bandwidth",
10557 FT_UINT8, BASE_DEC, NULL, 0x0,
10558 "Configures the frequency hopping on the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10560 { &hf_nfapi_transmission_comb,
10561 { "Transmission comb", "nfapi.transmission.comb",
10562 FT_UINT8, BASE_DEC, NULL, 0x0,
10563 "Configures the frequency location of the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10565 { &hf_nfapi_i_srs,
10566 { "I SRS", "nfapi.i.srs",
10567 FT_UINT8, BASE_DEC, NULL, 0x0,
10568 "Defines the periodicity and subframe location of the SRS. SRS Configuration Index. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10570 { &hf_nfapi_sounding_reference_cyclic_shift,
10571 { "Sounding reference cyclic shift", "nfapi.sounding.reference.cyclic.shift",
10572 FT_UINT8, BASE_DEC, NULL, 0x0,
10573 "Configures the SRS sequence generation. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10575 { &hf_nfapi_pdu_length,
10576 { "PDU length", "nfapi.pdu.length",
10577 FT_UINT16, BASE_DEC, NULL, 0x0,
10578 "The total length (in bytes) of the PDU description and PDU data, without the padding bytes", HFILL }
10580 { &hf_nfapi_crc_flag,
10581 { "CRC flag", "nfapi.crc.flag",
10582 FT_BOOLEAN, BASE_NONE, TFS(&crc_flag_strname), 0x0,
10583 "A flag indicating if a CRC error was detected", HFILL }
10585 { &hf_nfapi_number_of_hi_pdus,
10586 { "Number of HI Pdu's", "nfapi.number_of_hi_pdus",
10587 FT_UINT8, BASE_DEC, NULL, 0x0,
10588 "Number of HI PDUs included in this message", HFILL }
10590 { &hf_nfapi_number_of_dci_pdus,
10591 { "Number of DCI Pdu's", "nfapi.number_of_dci_pdus",
10592 FT_UINT8, BASE_DEC, NULL, 0x0,
10593 "Number of DCI PDUs included in this message", HFILL }
10595 { &hf_nfapi_hi_dci0_pdu_type,
10596 { "PDU Type", "nfapi.pdu_type",
10597 FT_UINT8, BASE_DEC, VALS(hi_dci0_pdu_type_vals), 0x0,
10598 NULL, HFILL }
10600 { &hf_nfapi_hi_value,
10601 { "HI Value", "nfapi.hi_value",
10602 FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0,
10603 "The PHICH value which is sent on the resource", HFILL }
10605 { &hf_nfapi_i_phich,
10606 { "i phich", "nfapi.i_phich",
10607 FT_UINT8, BASE_DEC, NULL, 0x0,
10608 "Is used in the calculation of the PHICH location. For TDD only", HFILL }
10610 { &hf_nfapi_flag_tb2,
10611 { "Flag TB2", "nfapi.flag_tb2",
10612 FT_BOOLEAN, BASE_NONE, TFS(&flag_tb2_strname), 0x0,
10613 "Indicates is HI is present for a second transport block", HFILL }
10615 { &hf_nfapi_hi_value_2,
10616 { "HI Value 2", "nfapi.hi_value_2",
10617 FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0,
10618 "The PHICH value for a second transport block.", HFILL }
10620 { &hf_nfapi_ue_tx_antenna_selection,
10621 { "UE Tx Antenna selection", "nfapi.ue_tx_antenna_selection",
10622 FT_UINT8, BASE_DEC, VALS(ue_tx_antenna_selection_vals), 0x0,
10623 "Indicates how the CRC is calculated on the PDCCH.", HFILL }
10625 { &hf_nfapi_cqi_csi_request,
10626 { "cqi csi request", "nfapi.cqi_csi_request",
10627 FT_UINT8, BASE_DEC, NULL, 0x0,
10628 "Aperiodic CQI request flag", HFILL }
10630 { &hf_nfapi_ul_index,
10631 { "UL Index", "nfapi.ul_index",
10632 FT_UINT8, BASE_DEC, NULL, 0x0,
10633 "Valid for TDD mode only", HFILL }
10635 { &hf_nfapi_dl_assignment_index,
10636 { "DL Assignment Index", "nfapi.dl_assignment_index",
10637 FT_UINT8, BASE_DEC, NULL, 0x0,
10638 "Valid for TDD mode only.", HFILL }
10640 { &hf_nfapi_tpc_bitmap,
10641 { "TPC bitmap", "nfapi.tpc_bitmap",
10642 FT_UINT32, BASE_DEC, NULL, 0x0,
10643 "TPC commands for PUCCH and PUSCH", HFILL }
10645 { &hf_nfapi_number_of_antenna_ports,
10646 { "Number of antenna ports", "nfapi.number.of.antenna.ports",
10647 FT_UINT8, BASE_DEC, VALS(number_of_antenna_port_vals), 0x0,
10648 "Defines number of antenna ports for this ULSCH allocation", HFILL }
10650 { &hf_nfapi_size_of_cqi_csi_field,
10651 { "Size of cqi csi field", "nfapi.size.of.cqi.csi.field",
10652 FT_UINT8, BASE_DEC, VALS(size_of_cqi_csi_field_vals), 0x0,
10653 "Indicates the size of the CQI/CSI request field", HFILL }
10655 { &hf_nfapi_new_data_indication_two,
10656 { "New data indication 2", "nfapi.new.data.indication.two",
10657 FT_UINT8, BASE_DEC, NULL, 0x0,
10658 "The new data indicator for the second transport block", HFILL }
10660 { &hf_nfapi_resource_allocation_flag,
10661 { "Resource allocation flag", "nfapi.resource.allocation.flag",
10662 FT_UINT8, BASE_DEC, NULL, 0x0,
10663 "Indicates if the Resource Allocation Type parameter is valid.", HFILL }
10665 { &hf_nfapi_dl_node_sync_t1,
10666 { "DL Node Sync t1", "nfapi.dl.node.sync.t1",
10667 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10668 "Offset from VNF SFN/SF 0/0 time reference of the DL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
10670 { &hf_nfapi_dl_node_sync_delta_sfn_sf,
10671 { "DL Node Sync Delta SFN SF", "nfapi.dl.node.sync.delta_sfn_sf",
10672 FT_INT32, BASE_DEC, NULL, 0x0,
10673 "The delta shift in subframes that the PNF PHY instance must update to on the next subframe boundary", HFILL }
10675 { &hf_nfapi_dl_cyclic_prefix_type,
10676 { "DL Cyclic Prefix type", "nfapi.dl.cyclic.prefix.type",
10677 FT_BOOLEAN, BASE_NONE, TFS(&cyclic_prefix_type_strname), 0x0,
10678 "Cyclic prefix type, used for DL", HFILL }
10680 { &hf_nfapi_ul_cyclic_prefix_type,
10681 { "UL Cyclic Prefix type", "nfapi.ul.cyclic.prefix.type",
10682 FT_BOOLEAN, BASE_NONE, TFS(&cyclic_prefix_type_strname), 0x0,
10683 "Cyclic prefix type, used for UL", HFILL }
10685 { &hf_nfapi_downlink_channel_bandwidth,
10686 { "Downlink Channel Bandwidth", "nfapi.dl.channel.bandwidth",
10687 FT_UINT16, BASE_DEC, NULL, 0x0,
10688 "Downlink channel bandwidth in resource blocks.", HFILL }
10690 { &hf_nfapi_uplink_channel_bandwidth,
10691 { "Uplink Channel Bandwidth", "nfapi.ul.channel_bandwidth",
10692 FT_UINT16, BASE_DEC, NULL, 0x0,
10693 "Uplink channel bandwidth in resource blocks.", HFILL }
10695 { &hf_nfapi_tx_antenna_ports,
10696 { "Tx Antenna Ports", "nfapi.tx.antenna.ports",
10697 FT_UINT16, BASE_DEC, NULL, 0x0,
10698 "The number of cell specific or NB transmit antenna ports.", HFILL }
10700 { &hf_nfapi_rx_antenna_ports,
10701 { "Tx Antenna Ports", "nfapi.rx.antenna.ports",
10702 FT_UINT16, BASE_DEC, NULL, 0x0,
10703 "The number of cell specific or NB receive antenna ports.", HFILL }
10705 { &hf_nfapi_ul_node_sync_t1,
10706 { "UL Node Sync t1", "nfapi.ul.node.sync.t1",
10707 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10708 "The supplied t1 field in the DL Node Sync", HFILL }
10710 { &hf_nfapi_ul_node_sync_t2,
10711 { "UL Node Sync t2", "nfapi.ul.node.sync.t2",
10712 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10713 "Offset from PNF SFN/SF 0/0 time reference of the DL Node Sync message reception at the transport layer, in microseconds.", HFILL }
10715 { &hf_nfapi_ul_node_sync_t3,
10716 { "UL Node Sync t3", "nfapi.ul.node.sync.t3",
10717 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10718 "Offset from PNF SFN/SF 0/0 time reference of the UL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
10720 { &hf_nfapi_pb,
10721 { "P-B", "nfapi.pb.allocation",
10722 FT_UINT16, BASE_DEC, NULL, 0x0,
10723 "Refers to downlink power allocation. Value is an Index into the referenced table.", HFILL }
10725 { &hf_nfapi_timing_info_last_sfn_sf,
10726 { "Last SFN/SF", "nfapi.timing.info.last.sfn.sf",
10727 FT_UINT32, BASE_DEC, NULL, 0x0,
10728 "The completed SFN/SF at the PNF PHY instance that triggered the Timing Info message", HFILL }
10730 { &hf_nfapi_timing_info_time_since_last_timing_info,
10731 { "Time since last Timing Info", "nfapi.timing.info.time.since.last.timing.info",
10732 FT_UINT32, BASE_DEC, NULL, 0x0,
10733 "The number of ms since the last Timing Info was sent from this PNF PHY instance.", HFILL }
10735 { &hf_nfapi_timing_info_dl_config_jitter,
10736 { "DL Config Jitter", "nfapi.timing.info.dl.config.jitter",
10737 FT_UINT32, BASE_DEC, NULL, 0x0,
10738 "The inter message jitter of the DL Config message reception in microseconds", HFILL }
10740 { &hf_nfapi_timing_info_tx_request_jitter,
10741 { "Tx Request Jitter", "nfapi.timing.info.tx.req.jitter",
10742 FT_UINT32, BASE_DEC, NULL, 0x0,
10743 "The inter message jitter of the Tx Request message reception in microseconds", HFILL }
10745 { &hf_nfapi_timing_info_ul_config_jitter,
10746 { "UL Config Jitter", "nfapi.timing.info.ul.config.jitter",
10747 FT_UINT32, BASE_DEC, NULL, 0x0,
10748 "The inter message jitter of the UL Config message reception in microseconds", HFILL }
10750 { &hf_nfapi_timing_info_hi_dci0_jitter,
10751 { "HI_DCI0 Jitter", "nfapi.timing.info.hi.dci0.jitter",
10752 FT_UINT32, BASE_DEC, NULL, 0x0,
10753 "The inter message jitter of the HI_DCI0 message reception in microseconds", HFILL }
10755 { &hf_nfapi_timing_info_dl_config_latest_delay,
10756 { "DL Config Latest Delay", "nfapi.timing.info.dl.config.latest.delay",
10757 FT_INT32, BASE_DEC, NULL, 0x0,
10758 "The latest delay offset in microseconds from the latest acceptable time for the DL Config as defined in the DL Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10760 { &hf_nfapi_timing_info_tx_request_latest_delay,
10761 { "Tx Request Latest Delay", "nfapi.timing.info.tx.request.latest.delay",
10762 FT_INT32, BASE_DEC, NULL, 0x0,
10763 "The latest delay offset in microseconds from the latest acceptable time for the Tx Request as defined in the Tx Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10765 { &hf_nfapi_timing_info_ul_config_latest_delay,
10766 { "UL Config Latest Delay", "nfapi.timing.info.ul.config.latest.delay",
10767 FT_INT32, BASE_DEC, NULL, 0x0,
10768 "The latest delay offset in microseconds from the latest acceptable time for the UL Config as defined in the UL Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10770 { &hf_nfapi_timing_info_hi_dci0_latest_delay,
10771 { "HI_DCI0 Latest Delay", "nfapi.timing.info.hi.dci0.latest.delay",
10772 FT_INT32, BASE_DEC, NULL, 0x0,
10773 "The latest delay offset in microseconds from the latest acceptable time for the HI_DCI0 as defined in the HI_DCI0 Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10775 { &hf_nfapi_timing_info_dl_config_earliest_arrival,
10776 { "DL Config Earliest Arrival", "nfapi.timing.info.dl.config.earliest.arrival",
10777 FT_INT32, BASE_DEC, NULL, 0x0,
10778 "The earliest arrival offset in microseconds from the latest time acceptable for the DL Config as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10780 { &hf_nfapi_timing_info_tx_request_earliest_arrival,
10781 { "Tx Request Earliest Arrival", "nfapi.timing.info.tx.request.earliest.arrival",
10782 FT_INT32, BASE_DEC, NULL, 0x0,
10783 "The earliest arrival offset in microseconds from the latest time acceptable for the Tx Request as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10785 { &hf_nfapi_timing_info_ul_config_earliest_arrival,
10786 { "UL Config Earliest Arrival", "nfapi.timing.info.ul.config.earliest.arrival",
10787 FT_INT32, BASE_DEC, NULL, 0x0,
10788 "The earliest arrival offset in microseconds from the latest time acceptable for the UL Config as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10790 { &hf_nfapi_timing_info_hi_dci0_earliest_arrival,
10791 { "HI_DCI0 Earliest Arrival", "nfapi.timing.info.hi.dci0.earliest.arrival",
10792 FT_INT32, BASE_DEC, NULL, 0x0,
10793 "The earliest arrival offset in microseconds from the latest time acceptable for the HI_DCI0 as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
10795 { &hf_nfapi_pcfich_power_offset,
10796 { "PCFICH Power Offset", "nfapi.pcfich.power.offset",
10797 FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
10798 "The power per antenna of the PCFICH with respect to the reference signal.", HFILL }
10800 { &hf_nfapi_timing_window,
10801 { "NFAPI Timing window", "nfapi.timing.window",
10802 FT_UINT8, BASE_DEC, NULL, 0x0,
10803 "The window in milliseconds that the PHY must receive and queue the P7 messages.", HFILL }
10805 { &hf_nfapi_timing_info_mode,
10806 { "Timing Info mode", "nfapi.timing.info.mode",
10807 FT_UINT8, BASE_DEC, NULL, 0x0,
10808 "The configured mode of operation for the timing info message to be sent to the VNF from the PHY", HFILL }
10810 { &hf_nfapi_timing_info_period,
10811 { "Timing info period", "nfapi.timing.info.period",
10812 FT_UINT8, BASE_DEC, NULL, 0x0,
10813 "If Periodic timing mode is enabled, this defines the periodicity in subframes. This field is ignored if periodic timing mode is disabled.", HFILL }
10815 { &hf_nfapi_tdd_harq_mode,
10816 { "Mode", "nfapi.tdd.harq.mode",
10817 FT_UINT8, BASE_DEC, VALS(tdd_harq_mode_vals), 0x0,
10818 "The format of the ACK/NACK response expected", HFILL }
10820 { &hf_nfapi_fdd_harq_mode,
10821 { "Mode", "nfapi.fdd.harq.mode",
10822 FT_UINT8, BASE_DEC, VALS(fdd_harq_mode_vals), 0x0,
10823 "The format of the ACK/NACK response expected", HFILL }
10825 { &hf_nfapi_number_of_ack_nack,
10826 { "Number of ACK/NACK", "nfapi.num-ack-nack",
10827 FT_UINT16, BASE_DEC, NULL, 0x0,
10828 "The number of ACK/NACK results reported for this UE", HFILL }
10830 { &hf_nfapi_harq_data_value_0,
10831 { "Value 0", "nfapi.harq.value.0",
10832 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10833 "Indicates HARQ results", HFILL }
10835 { &hf_nfapi_harq_data_value_0_special,
10836 { "Value 0", "nfapi.harq.value.0.special",
10837 FT_UINT8, BASE_DEC, VALS(harq_special_value_vals), 0x0,
10838 "Indicates HARQ results", HFILL }
10840 { &hf_nfapi_harq_data_value_1,
10841 { "Value 1", "nfapi.harq.value.1",
10842 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10843 "Indicates HARQ results", HFILL }
10845 { &hf_nfapi_harq_data_value_2,
10846 { "Value 2", "nfapi.harq.value.2",
10847 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10848 "Indicates HARQ results", HFILL }
10850 { &hf_nfapi_harq_data_value_3,
10851 { "Value 3", "nfapi.harq.value.3",
10852 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10853 "Indicates HARQ results", HFILL }
10855 { &hf_nfapi_harq_tb_1,
10856 { "HARQ TB1", "nfapi.harq.tb.1",
10857 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10858 "HARQ feedback of 1st TB.", HFILL }
10860 { &hf_nfapi_harq_tb_2,
10861 { "HARQ TB2", "nfapi.harq.tb.2",
10862 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10863 "HARQ feedback of 2nd TB.", HFILL }
10865 { &hf_nfapi_harq_tb_n,
10866 { "HARQ TB_N", "nfapi.harq.tb.n",
10867 FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10868 "HARQ feedback of Nth TB.", HFILL }
10870 { &hf_nfapi_ul_cqi,
10871 { "UL_CQI", "nfapi.ul.cqi",
10872 FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
10873 "SNR", HFILL }
10875 { &hf_nfapi_channel,
10876 { "Channel", "nfapi.channel",
10877 FT_UINT8, BASE_DEC, VALS(channel_vals), 0x0,
10878 "The channel to which this measurement refers", HFILL }
10880 { &hf_nfapi_data_offset,
10881 { "Data Offset", "nfapi.data.offset",
10882 FT_UINT16, BASE_DEC, NULL, 0x0,
10883 "Gives the PDU#i data address offset from the beginning of the 'Number of PDUs' field. An offset of 0 indicates a CRC or decoding error", HFILL }
10885 { &hf_nfapi_ri,
10886 { "RI", "nfapi.ri",
10887 FT_UINT8, BASE_DEC, NULL, 0x0,
10888 "The rank indication reported by the UE on PUSCH for aperiodic CSI.", HFILL }
10890 { &hf_nfapi_timing_advance,
10891 { "Timing Advance", "nfapi.timing.advance",
10892 FT_UINT16, BASE_DEC, NULL, 0x0,
10893 "The timing advance measured for this PDU and UE.", HFILL }
10895 { &hf_nfapi_timing_advance_r9,
10896 { "Timing Advance R9", "nfapi.timing.advance.r9",
10897 FT_UINT16, BASE_DEC, NULL, 0x0,
10898 "Timing advance used for positioning", HFILL }
10900 { &hf_nfapi_number_of_cc_reported,
10901 { "Number of CC reported", "nfapi.number.of.cc.reported",
10902 FT_UINT8, BASE_DEC, NULL, 0x0,
10903 NULL, HFILL }
10905 { &hf_nfapi_preamble,
10906 { "Preamble", "nfapi.preamble",
10907 FT_UINT8, BASE_DEC, NULL, 0x0,
10908 "The detected preamble", HFILL }
10910 { &hf_nfapi_rach_resource_type,
10911 { "RACH resource type", "nfapi.rach.resource.type",
10912 FT_UINT8, BASE_DEC, VALS(rach_resource_type_vals), 0x0,
10913 "Indicates if this indication is related to Cat-M UE and in which CE level", HFILL }
10915 { &hf_nfapi_doppler_estimation,
10916 { "Doppler estimation", "nfapi.doppler.estimation",
10917 FT_UINT16, BASE_DEC, NULL, 0x0,
10918 "FFS", HFILL }
10920 { &hf_nfapi_rb_start,
10921 { "RB Start", "nfapi.rb.start",
10922 FT_UINT8, BASE_DEC, NULL, 0x0,
10923 "The starting point of the RBs to be reported", HFILL }
10925 { &hf_nfapi_snr,
10926 { "SNR", "nfapi.snr",
10927 FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
10928 "Field size dependent on configured bandwidth SNR for RBs, each RBs report one SNR.", HFILL }
10930 { &hf_nfapi_up_pts_symbol,
10931 { "UpPTS Symbol", "nfapi.uppts.symbol",
10932 FT_UINT8, BASE_DEC, VALS(up_pts_symbol_vals), 0x0,
10933 "Indicates symbol where SRS was received. Only valid if the SRS was received in subframe 1 or 6.", HFILL }
10935 { &hf_nfapi_number_prb_per_subband,
10936 { "numPRBperSubband", "nfapi.num.prb.per.subband",
10937 FT_UINT8, BASE_DEC, NULL, 0x0,
10938 "Number of PRBs that are treated as one subband", HFILL }
10940 { &hf_nfapi_number_antennas,
10941 { "numAntennas", "nfapi.num.antennas",
10942 FT_UINT8, BASE_DEC, NULL, 0x0,
10943 "Number of physical antennas", HFILL }
10945 { &hf_nfapi_subband_index,
10946 { "subbandIndex", "nfapi.subband.index",
10947 FT_UINT8, BASE_DEC, NULL, 0x0,
10948 "Index of subband for which the following channel coefficient is applied", HFILL }
10950 { &hf_nfapi_channel_coefficient,
10951 { "Channel", "nfapi.channel.coefficient",
10952 FT_UINT16, BASE_DEC, NULL, 0x0,
10953 "Averaged channel coefficient in a subband for physical antenna #i, real 8 bits followed by imaginary 8 bits", HFILL }
10955 { &hf_nfapi_ul_rtoa,
10956 { "UL_RTOA", "nfapi.ul.rtoa",
10957 FT_UINT16, BASE_DEC, NULL, 0x0,
10958 "UL relative time of arrival used for network based positioning", HFILL }
10960 { &hf_nfapi_frequency_band_indicator,
10961 { "Frequency Band Indicator", "nfapi.frequency.band.indicator",
10962 FT_UINT16, BASE_DEC, NULL, 0x0,
10963 "The E-UTRA band for which the carrierList applies.", HFILL }
10965 { &hf_nfapi_measurement_period,
10966 { "Measurement Period", "nfapi.measurement.period",
10967 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10968 "The length of time to measure RSSI over, in units of 1ms.", HFILL }
10970 { &hf_nfapi_bandwidth,
10971 { "Bandwidth", "nfapi.bandwidth",
10972 FT_UINT8, BASE_DEC, NULL, 0x0,
10973 "The bandwidth (in resource blocks) over which the RSSI is measured.", HFILL }
10975 { &hf_nfapi_timeout,
10976 { "Timeout", "nfapi.timeout",
10977 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10978 "The timeout value after which the PNF should abort the procedure in units of 1ms. The value of 0 indicates that the PNF should attempt to complete the procedure without any VNF-imposed timeout.", HFILL }
10980 { &hf_nfapi_number_of_earfcns,
10981 { "Number of EARFCNs", "nfapi.number.of.earfcns",
10982 FT_UINT8, BASE_DEC, NULL, 0x0,
10983 "The number of EARFCNs which should be measured. In the case that no EARFCN (value 0) is specified, all valid EARFCNs for the specified bandwidth in the band shall be measured, in order of ascending EARCFN.", HFILL }
10985 { &hf_nfapi_uarfcn,
10986 { "UARFCN", "nfapi.uarfcn",
10987 FT_UINT16, BASE_DEC, NULL, 0x0,
10988 "UARFCN to be measured.", HFILL }
10990 { &hf_nfapi_number_of_uarfcns,
10991 { "Number of UARFCNs", "nfapi.number.of.uarfcn",
10992 FT_UINT8, BASE_DEC, NULL, 0x0,
10993 "The number of UARFCNs which should be measured. In the case that no UARFCN (value 0) is specified, all UARFCNs in the band shall be measured, in order of ascending UARCFN.", HFILL }
10995 { &hf_nfapi_arfcn,
10996 { "ARFCN", "nfapi.arfcn",
10997 FT_UINT16, BASE_DEC, NULL, 0x0,
10998 "The ARFCN to be measured", HFILL }
11000 { &hf_nfapi_arfcn_direction,
11001 { "Direction", "nfapi.arfcn.direction",
11002 FT_UINT8, BASE_DEC, VALS(arfcn_direction_vals), 0x0,
11003 "The link direction to be measured", HFILL }
11005 { &hf_nfapi_number_of_arfcns,
11006 { "Number of ARFCNs", "nfapi.number.of.arfcn",
11007 FT_UINT8, BASE_DEC, NULL, 0x0,
11008 "The number of ARFCNs which should be measured. In the case that no ARFCN (value 0) is specified, all ARFCNs in the band shall be measured, in order of ascending ARCFN.", HFILL }
11010 { &hf_nfapi_rssi,
11011 { "RSSI", "nfapi.rssi",
11012 FT_INT16, BASE_CUSTOM, CF_FUNC(rssi_conversion_fn), 0x0,
11013 "The list of RSSI values of the carriers measured, in the order of the list of the original request.", HFILL }
11015 { &hf_nfapi_number_of_rssi,
11016 { "Number of RSSI", "nfapi.number.of.rssi",
11017 FT_UINT16, BASE_DEC, NULL, 0x0,
11018 "The number of RSSI results returned in the following array.", HFILL }
11020 { &hf_nfapi_pci,
11021 { "PCI", "nfapi.pci",
11022 FT_UINT16, BASE_DEC, NULL, 0x0,
11023 "The PCI for cell which should be searched", HFILL }
11025 { &hf_nfapi_measurement_bandwidth,
11026 { "Measurement Bandwidth", "nfapi.measurement.bandwidth",
11027 FT_UINT8, BASE_DEC, NULL, 0x0,
11028 "The number of resource blocks which should be used for measuring RSRP", HFILL }
11030 { &hf_nfapi_exhaustive_search,
11031 { "Exhaustive Search", "nfapi.exhaustive.search",
11032 FT_UINT8, BASE_DEC, VALS(exhustive_search_vals), 0x0,
11033 "NMM should try to find all cells on the carrier", HFILL }
11035 { &hf_nfapi_number_of_pci,
11036 { "Number of PCI", "nfapi.number.of.pci",
11037 FT_UINT8, BASE_DEC, NULL, 0x0,
11038 "The number of cells in the PCI list. If 0 all cells on the carrier should be found. Otherwise, depending on exhaustiveSearch flag, only the given pciList is searched or the pciList is used for indicating a priority list. Range: 0 to MAX_PCI_LIST.", HFILL }
11040 { &hf_nfapi_psc,
11041 { "PSC", "nfapi.psc",
11042 FT_UINT16, BASE_DEC, NULL, 0x0,
11043 "The PSC for cells which should be searched.", HFILL }
11045 { &hf_nfapi_number_of_psc,
11046 { "Number of PSC", "nfapi.number.of.psc",
11047 FT_UINT8, BASE_DEC, NULL, 0x0,
11048 "The number of cells in the PSC list. If 0 all cells on the carrier should be found. Otherwise, depending on Exhaustive Search flag, only the given PSC list is searched or the PSC list is used for indicating a priority list. Range: 0 to MAX_PSC_LIST.", HFILL }
11050 { &hf_nfapi_rsrp,
11051 { "RSRP", "nfapi.rsrp",
11052 FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11053 "The measured RSRP value in units of -1dB", HFILL }
11055 { &hf_nfapi_rsrq,
11056 { "RSRQ", "nfapi.rsrq",
11057 FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11058 "The measured RSRQ value in units of -1dB", HFILL }
11060 { &hf_nfapi_number_of_lte_cells_found,
11061 { "Number of LTE Cells Found", "nfapi.number.of.lte.cells.found",
11062 FT_UINT16, BASE_DEC, NULL, 0x0,
11063 "The number of LTE cells indicated in this message.", HFILL }
11065 { &hf_nfapi_rscp,
11066 { "RSCP", "nfapi.rscp",
11067 FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11068 "The measured RSCP value in units of -1dB", HFILL }
11070 { &hf_nfapi_enco,
11071 { "EcNo", "nfapi.ecno",
11072 FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11073 "The measured RSCP value in units of -1dB", HFILL }
11075 { &hf_nfapi_number_of_utran_cells_found,
11076 { "Number of UTRAN Cells Found", "nfapi.number.of.utran.cells.found",
11077 FT_UINT16, BASE_DEC, NULL, 0x0,
11078 "The number of LTE cells indicated in this message", HFILL }
11080 { &hf_nfapi_bsic,
11081 { "BSIC", "nfapi.bsic",
11082 FT_UINT8, BASE_DEC, NULL, 0x0,
11083 "The BSIC of the cell which the NMM synchronized to", HFILL }
11085 { &hf_nfapi_rxlev,
11086 { "RxLev", "nfapi.rxlev",
11087 FT_UINT8, BASE_DEC, NULL, 0x0,
11088 "The measured RxLev value", HFILL }
11090 { &hf_nfapi_rxqual,
11091 { "RxQual", "nfapi.rxqual",
11092 FT_UINT8, BASE_DEC, NULL, 0x0,
11093 "The measured RxQual value", HFILL }
11095 { &hf_nfapi_sfn_offset,
11096 { "SFN Offset", "nfapi.sfn.offset",
11097 FT_UINT32, BASE_DEC, NULL, 0x0,
11098 "The offset in us of the start of the current GSM Radio HyperFrame (i.e. FN=0) from the start of the preceding LTE Radio Frame of the PNF for SFN=0", HFILL }
11100 { &hf_nfapi_number_of_geran_cells_found,
11101 { "Number of GSM Cells Found", "nfapi.number.of.geran.cells.found",
11102 FT_UINT16, BASE_DEC, NULL, 0x0,
11103 "The number of GSM cells indicated in this message", HFILL }
11105 { &hf_nfapi_number_of_tx_antenna,
11106 { "Number of Tx Antenna", "nfapi.number.of.tx.antenna",
11107 FT_UINT8, BASE_DEC, NULL, 0x0,
11108 "The number of Tx Antenna detected for the cell", HFILL }
11110 { &hf_nfapi_mib,
11111 { "MIB", "nfapi.mib",
11112 FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11113 "The MIB read from the specified cell.", HFILL }
11115 { &hf_nfapi_phich_configuration,
11116 { "PHICH Configuration", "nfapi.phich.configuration",
11117 FT_UINT8, BASE_DEC, NULL, 0x0,
11118 "The PHICH-Config of the cell", HFILL }
11120 { &hf_nfapi_retry_count,
11121 { "retryCount", "nfapi.retry.count",
11122 FT_UINT8, BASE_DEC, NULL, 0x0,
11123 "The number of SIB1 repetition periods for which decoding of SIB1 should be retried.", HFILL }
11125 { &hf_nfapi_sib1,
11126 { "SIB1", "nfapi.sib1",
11127 FT_BYTES, BASE_NONE, NULL, 0x0,
11128 NULL, HFILL }
11130 { &hf_nfapi_si_periodicity,
11131 { "SI Periodicity", "nfapi.si.periodicity",
11132 FT_UINT8, BASE_DEC, NULL, 0x0,
11133 "The SI Periodicity of the requested SIBs, with the first element being for SIB2, the next for SIB3, etc, encoded as follows", HFILL }
11135 { &hf_nfapi_si_index,
11136 { "SI Index", "nfapi.si.index",
11137 FT_UINT8, BASE_DEC, NULL, 0x0,
11138 "The Index of this SIB in the SIB1 SchedulingInfoList", HFILL }
11140 { &hf_nfapi_number_of_si_periodicity,
11141 { "Number of SI Periodicity", "nfapi.number.of.si.periodicity",
11142 FT_UINT8, BASE_DEC, NULL, 0x0,
11143 "The number of System Information periodicity values in the following array", HFILL }
11145 { &hf_nfapi_si_window_length,
11146 { "SI Window Length", "nfapi.si.window.length",
11147 FT_UINT8, BASE_DEC, NULL, 0x0,
11148 "The SI window in units of 1ms", HFILL }
11150 { &hf_nfapi_sib_type,
11151 { "SIB Type", "nfapi.sib.type",
11152 FT_UINT8, BASE_DEC, NULL, 0x0,
11153 "The SIB type", HFILL }
11155 { &hf_nfapi_sib,
11156 { "SIB", "nfapi.sib",
11157 FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11158 "The SIB element read from the specified cell.", HFILL }
11160 { &hf_nfapi_si,
11161 { "SI", "nfapi.si",
11162 FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11163 "The SI element read from the specified cell.", HFILL }
11165 { &hf_nfapi_pnf_search_state,
11166 { "State", "nfapi.state",
11167 FT_BYTES, BASE_NONE, NULL, 0x0,
11168 "A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
11170 { &hf_nfapi_pnf_broadcast_state,
11171 { "State", "nfapi.state",
11172 FT_BYTES, BASE_NONE, NULL, 0x0,
11173 "A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
11175 { &hf_nfapi_dl_rs_tx_power,
11176 { "DL RS Tx power", "nfapi.dl.rs.tx.power",
11177 FT_UINT16, BASE_DEC, NULL, 0x0,
11178 "The DL RS Tx power measurement", HFILL }
11180 { &hf_nfapi_received_interference_power,
11181 { "Received interference power", "nfapi.received.interference.power",
11182 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
11183 "The Received interference power measurement", HFILL }
11185 { &hf_nfapi_thermal_noise_power,
11186 { "Thermal noise power", "nfapi.thermal.noise.power",
11187 FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
11188 "The Thermal noise power measurement", HFILL }
11190 { &hf_nfapi_dl_rs_tx_power_measurement,
11191 { "DL RS TX Power measurement", "nfapi.dl.rs.tx.power.measurement",
11192 FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11193 "The DL RS Tx power measurement defined", HFILL }
11195 { &hf_nfapi_received_interference_power_measurement,
11196 { "Received interference power measurement", "nfapi.received.interference.power.measurement",
11197 FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11198 NULL, HFILL }
11200 { &hf_nfapi_thermal_noise_power_measurement,
11201 { "Thermal noise power measurement", "nfapi.thermal.noise.power.measurement",
11202 FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11203 "The Thermal noise power measurement", HFILL }
11205 { &hf_nfapi_initial_partial_sf,
11206 { "Initial Partial SF", "nfapi.initial.partial.sf",
11207 FT_BOOLEAN, BASE_NONE, TFS(&initial_partial_sf_strname), 0x0,
11208 "Indicates whether the initial SF in the LBT process is full or partial", HFILL }
11210 { &hf_nfapi_lbt_mode,
11211 { "LBT Mode", "nfapi.lbt.mode",
11212 FT_BOOLEAN, BASE_NONE, TFS(&lbt_mode_strname), 0x0,
11213 "Part of multi-carrier support. Indicates whether full LBT process is carried or partial LBT process is carried (multi carrier mode B according to [9] section 15.1.5.2)", HFILL }
11215 { &hf_nfapi_lte_txop_sf,
11216 { "LTE TXOP SF", "nfapi.txop.sf",
11217 FT_UINT32, BASE_DEC, NULL, 0x0,
11218 "Indicates the LTE TXOP (TMCOT,P in [9] section 15.1.1) duration in subframes.", HFILL }
11220 { &hf_nfapi_mp_cca,
11221 { "mp cca", "nfapi.mp.cca",
11222 FT_UINT32, BASE_DEC, NULL, 0x0,
11223 "Indicates the value of the defer factor", HFILL }
11225 { &hf_nfapi_n_cca,
11226 { "n cca", "nfapi.n.cca",
11227 FT_UINT32, BASE_DEC, NULL, 0x0,
11228 "Indicates the value of LBT backoff counter", HFILL }
11230 { &hf_nfapi_offset,
11231 { "offset", "nfapi.offset",
11232 FT_UINT32, BASE_DEC, NULL, 0x0,
11233 "Indicates the LBT start time in microseconds from the beginning of the subframe scheduled by this message.", HFILL }
11235 { &hf_nfapi_result,
11236 { "result", "nfapi.result",
11237 FT_BOOLEAN, BASE_NONE, TFS(&tfs_fail_success), 0x0,
11238 "Indicates the LBT procedure result of SFN/SF:", HFILL }
11240 { &hf_nfapi_sfn_sf_end,
11241 { "SFN/SF End", "nfapi.sfn.sf.end",
11242 FT_UINT16, BASE_DEC, NULL, 0x0,
11243 "Indicates the SFN/SF by which the DRS window (Discovery signal occasion as described in [9] section 6.11A) must end. In worst case, this would be the last TXOP subframe.", HFILL }
11245 { &hf_nfapi_txop_sfn_sf_end,
11246 { "TXOP SFN/SF End", "nfapi.txop.sfn.sf.end",
11247 FT_UINT16, BASE_DEC, NULL, 0x0,
11248 "Indicates the SFN/SF by which the TXOP must end. In worst case, this would be the last TXOP subframe.", HFILL }
11250 { &hf_nfapi_txop_symbols,
11251 { "LTE TXOP symbols", "nfapi.lte.txop.symbols",
11252 FT_UINT32, BASE_DEC, NULL, 0x0,
11253 "Actual LTE TXOP in symbols", HFILL }
11257 /* Setup protocol subtree array */
11258 static int *ett[] =
11260 &ett_nfapi,
11261 &ett_nfapi_p4_p5_message_header,
11262 &ett_nfapi_p7_message_header,
11263 &ett_nfapi_tlv_tree,
11264 &ett_nfapi_tl,
11265 &ett_nfapi_pnf_phy_rf_config,
11266 &ett_nfapi_pnf_phy,
11267 &ett_nfapi_pnf_phy_rel10,
11268 &ett_nfapi_pnf_phy_rel11,
11269 &ett_nfapi_pnf_phy_rel12,
11270 &ett_nfapi_pnf_phy_rel13,
11271 &ett_nfapi_rf_bands,
11272 &ett_nfapi_bf_vectors,
11273 &ett_nfapi_csi_rs_bf_vector,
11274 &ett_nfapi_csi_rs_resource_configs,
11275 &ett_nfapi_tx_antenna_ports,
11276 &ett_nfapi_harq_ack_nack_data,
11277 &ett_nfapi_harq_data,
11278 &ett_nfapi_cc,
11279 &ett_nfapi_rbs,
11280 &ett_nfapi_antennas,
11281 &ett_nfapi_epdcch_prbs,
11282 &ett_nfapi_dl_config_request_pdu_list,
11283 &ett_nfapi_ul_config_request_pdu_list,
11284 &ett_nfapi_hi_dci0_request_pdu_list,
11285 &ett_nfapi_tx_request_pdu_list,
11286 &ett_nfapi_rx_indication_pdu_list,
11287 &ett_nfapi_harq_indication_pdu_list,
11288 &ett_nfapi_crc_indication_pdu_list,
11289 &ett_nfapi_sr_indication_pdu_list,
11290 &ett_nfapi_cqi_indication_pdu_list,
11291 &ett_nfapi_preamble_indication_pdu_list,
11292 &ett_nfapi_srs_indication_pdu_list,
11293 &ett_nfapi_lbt_dl_config_pdu_list,
11294 &ett_nfapi_lbt_dl_indication_pdu_list,
11295 &ett_nfapi_subbands,
11296 &ett_nfapi_precoding,
11297 &ett_nfapi_bf_vector_antennas,
11298 &ett_nfapi_received_interference_power_mesurement_results,
11299 &ett_nfapi_downlink_bandwidth_support,
11300 &ett_nfapi_uplink_bandwidth_support,
11301 &ett_nfapi_release_support,
11302 &ett_nfapi_downlink_modulation_support,
11303 &ett_nfapi_uplink_modulation_support,
11305 &ett_nfapi_earfcn_list,
11306 &ett_nfapi_uarfcn_list,
11307 &ett_nfapi_arfcn_list,
11308 &ett_nfapi_rssi_list,
11309 &ett_nfapi_pci_list,
11310 &ett_nfapi_psc_list,
11311 &ett_nfapi_lte_cells_found_list,
11312 &ett_nfapi_utran_cells_found_list,
11313 &ett_nfapi_geran_cells_found_list,
11314 &ett_nfapi_si_periodicity_list,
11316 /* for fragmentation support*/
11317 &ett_msg_fragment,
11318 &ett_msg_fragments
11321 static ei_register_info ei[] =
11323 { &ei_invalid_range, { "nfapi.invalid.range", PI_PROTOCOL, PI_WARN, "Invalid range", EXPFILL } },
11324 { &ei_invalid_tlv_length, { "nfapi.invalid.tlv.length", PI_PROTOCOL, PI_ERROR, "Invalid TLV length", EXPFILL } },
11327 expert_module_t* expert_nfapi;
11328 /* Register protocol */
11329 proto_nfapi = proto_register_protocol("Nfapi", "NFAPI", "nfapi");
11331 expert_nfapi = expert_register_protocol(proto_nfapi);
11332 expert_register_field_array(expert_nfapi, ei, array_length(ei));
11335 proto_register_field_array(proto_nfapi, hf, array_length(hf));
11336 proto_register_subtree_array(ett, array_length(ett));
11338 message_table = register_dissector_table("nfapi.msg_id", "NFAPI Message ID", proto_nfapi, FT_UINT16, BASE_DEC);
11340 reassembly_table_register(&ul_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
11341 reassembly_table_register(&dl_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
11343 nfapi_handle = register_dissector("nfapi", dissect_nfapi, proto_nfapi);
11347 // ----------------------------------------------------------------------------|
11349 void proto_reg_handoff_nfapi(void)
11351 dissector_handle_t handle;
11353 handle = create_dissector_handle( dissect_nfapi_ul_p7, proto_nfapi );
11354 dissector_add_uint("nfapi.msg_id", NFAPI_HARQ_INDICATION_MSG_ID, handle);
11355 dissector_add_uint("nfapi.msg_id", NFAPI_CRC_INDICATION_MSG_ID, handle);
11356 dissector_add_uint("nfapi.msg_id", NFAPI_RX_ULSCH_INDICATION_MSG_ID, handle);
11357 dissector_add_uint("nfapi.msg_id", NFAPI_RACH_INDICATION_MSG_ID, handle);
11358 dissector_add_uint("nfapi.msg_id", NFAPI_SRS_INDICATION_MSG_ID, handle);
11359 dissector_add_uint("nfapi.msg_id", NFAPI_RX_SR_INDICATION_MSG_ID, handle);
11360 dissector_add_uint("nfapi.msg_id", NFAPI_RX_CQI_INDICATION_MSG_ID, handle);
11362 handle = create_dissector_handle( dissect_nfapi_dl_p7, proto_nfapi );
11363 dissector_add_uint("nfapi.msg_id", NFAPI_DL_CONFIG_REQUEST_MSG_ID, handle);
11364 dissector_add_uint("nfapi.msg_id", NFAPI_UL_CONFIG_REQUEST_MSG_ID, handle);
11365 dissector_add_uint("nfapi.msg_id", NFAPI_HI_DCI0_REQUEST_MSG_ID, handle);
11366 dissector_add_uint("nfapi.msg_id", NFAPI_TX_REQUEST_MSG_ID, handle);
11367 dissector_add_uint("nfapi.msg_id", NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID, handle);
11368 dissector_add_uint("nfapi.msg_id", NFAPI_LBT_DL_INDICATION_MSG_ID, handle);
11370 handle = create_dissector_handle( dissect_p45_header, proto_nfapi );
11371 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_START_REQUEST_MSG_ID, handle);
11372 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_STOP_REQUEST_MSG_ID, handle);
11373 dissector_add_uint("nfapi.msg_id", NFAPI_PARAM_REQUEST_MSG_ID, handle);
11374 dissector_add_uint("nfapi.msg_id", NFAPI_START_REQUEST_MSG_ID, handle);
11375 dissector_add_uint("nfapi.msg_id", NFAPI_STOP_REQUEST_MSG_ID, handle);
11376 dissector_add_uint("nfapi.msg_id", NFAPI_NMM_STOP_REQUEST_MSG_ID, handle);
11378 handle = create_dissector_handle( dissect_p45_header_with_list, proto_nfapi );
11379 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_PARAM_REQUEST_MSG_ID, handle);
11380 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_CONFIG_REQUEST_MSG_ID, handle);
11381 dissector_add_uint("nfapi.msg_id", NFAPI_MEASUREMENT_REQUEST_MSG_ID, handle);
11383 handle = create_dissector_handle( dissect_p45_header_with_error, proto_nfapi );
11384 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_CONFIG_RESPONSE_MSG_ID, handle);
11385 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_START_RESPONSE_MSG_ID, handle);
11386 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_STOP_RESPONSE_MSG_ID, handle);
11387 dissector_add_uint("nfapi.msg_id", NFAPI_CONFIG_RESPONSE_MSG_ID, handle);
11388 dissector_add_uint("nfapi.msg_id", NFAPI_START_RESPONSE_MSG_ID, handle);
11389 dissector_add_uint("nfapi.msg_id", NFAPI_STOP_RESPONSE_MSG_ID, handle);
11391 handle = create_dissector_handle( dissect_p45_header_with_p4_error, proto_nfapi );
11392 dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_RESPONSE_MSG_ID, handle);
11393 dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_RESPONSE_MSG_ID, handle);
11394 dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID, handle);
11395 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID, handle);
11396 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID, handle);
11397 dissector_add_uint("nfapi.msg_id", NFAPI_NMM_STOP_RESPONSE_MSG_ID, handle);
11399 handle = create_dissector_handle( dissect_p45_header_with_error_and_list, proto_nfapi );
11400 dissector_add_uint("nfapi.msg_id", NFAPI_PNF_PARAM_RESPONSE_MSG_ID, handle);
11401 dissector_add_uint("nfapi.msg_id", NFAPI_MEASUREMENT_RESPONSE_MSG_ID, handle);
11403 handle = create_dissector_handle( dissect_p45_header_with_p4_error_and_list, proto_nfapi );
11404 dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_INDICATION_MSG_ID, handle);
11405 dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_INDICATION_MSG_ID, handle);
11406 dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID, handle);
11407 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID, handle);
11408 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID, handle);
11410 handle = create_dissector_handle( dissect_p45_header_with_rat_type_list, proto_nfapi );
11411 dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_REQUEST_MSG_ID, handle);
11412 dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_REQUEST_MSG_ID, handle);
11413 dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID, handle);
11414 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID, handle);
11415 dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID, handle);
11417 dissector_add_uint("nfapi.msg_id", NFAPI_CONFIG_REQUEST_MSG_ID, create_dissector_handle( dissect_p45_config_request_msg_id, proto_nfapi ));
11418 dissector_add_uint("nfapi.msg_id", NFAPI_PARAM_RESPONSE_MSG_ID, create_dissector_handle( dissect_p45_param_response_msg_id, proto_nfapi ));
11419 dissector_add_uint("nfapi.msg_id", NFAPI_DL_NODE_SYNC_MSG_ID, create_dissector_handle( dissect_p7_dl_node_sync_msg_id, proto_nfapi ));
11420 dissector_add_uint("nfapi.msg_id", NFAPI_UL_NODE_SYNC_MSG_ID, create_dissector_handle( dissect_p7_ul_node_sync_msg_id, proto_nfapi ));
11421 dissector_add_uint("nfapi.msg_id", NFAPI_TIMING_INFO_MSG_ID, create_dissector_handle( dissect_p7_timing_info_msg_id, proto_nfapi ));
11423 dissector_add_for_decode_as("sctp.port", nfapi_handle);
11424 dissector_add_for_decode_as("udp.port", nfapi_handle);
11429 * Editor modelines - https://www.wireshark.org/tools/modelines.html
11431 * Local variables:
11432 * c-basic-offset: 8
11433 * tab-width: 8
11434 * indent-tabs-mode: t
11435 * End:
11437 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
11438 * :indentSize=8:tabSize=8:noTabs=false: