Coverage Report

Created: 2025-08-04 07:15

/src/wireshark/epan/dissectors/packet-nfapi.c
Line
Count
Source (jump to first uncovered line)
1
/* packet-nfapi.c
2
 * Routines for Network Function Application Platform Interface (nFAPI) dissection
3
 * Copyright 2017 Cisco Systems, Inc.
4
 *
5
 * Wireshark - Network traffic analyzer
6
 * By Gerald Combs <gerald@wireshark.org>
7
 * Copyright 1998 Gerald Combs
8
 *
9
 * SPDX-License-Identifier: GPL-2.0-or-later
10
 *
11
 * References:
12
 * SCF082.09.04  http://scf.io/en/documents/082_-_nFAPI_and_FAPI_specifications.php
13
 *
14
 */
15
16
#include "config.h"
17
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>
25
26
void proto_register_nfapi(void);
27
void proto_reg_handoff_nfapi(void);
28
29
#define NFAPI_HEADER_LENGTH 8
30
#define NFAPI_P7_HEADER_LENGTH 16
31
32
static const unit_name_string khz_100_units_db = { " (100)khz", NULL };
33
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,
49
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,
68
69
  NFAPI_DL_NODE_SYNC_MSG_ID = 0x0180,
70
  NFAPI_UL_NODE_SYNC_MSG_ID,
71
  NFAPI_TIMING_INFO_MSG_ID,
72
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;
91
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 },
103
};
104
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 },
118
};
119
120
static const value_string nfapi_rat_type_vals[] = {
121
  { 0, "LTE" },
122
  { 1, "UTRAN" },
123
  { 2, "GERAN" },
124
  { 0, NULL },
125
};
126
127
typedef enum{
128
  UN_ALIGNED_SYNCHRONIZATION = 0,
129
  INTERNAL_PNF_FRAME_ALIGNMENT,
130
  ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION
131
} nfapi_sync_mode_e;
132
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 },
138
};
139
140
typedef enum {
141
  NONE = 0,
142
  GPS,
143
  GLONASS,
144
  BEIDOU
145
} location_mode_e;
146
147
static const value_string location_mode_vals[] = {
148
  { NONE, "NONE" },
149
  { GPS, "GPS" },
150
  { GLONASS, "GLONASS" },
151
  { BEIDOU, "BeiDou" },
152
  { 0, NULL }
153
};
154
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 }
160
};
161
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 }
169
};
170
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 }
177
};
178
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 }
183
};
184
185
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 }
190
};
191
192
static const value_string nfapi_phy_state_vals[] = {
193
  { 0, "IDLE" },
194
  { 1, "CONFIGURED" },
195
  { 2, "RUNNING" },
196
  { 0, NULL },
197
};
198
199
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",
204
};
205
206
static const true_false_string nfapi_control_type_string_name = {
207
  "CQI/PMI",
208
  "RI",
209
};
210
211
static const true_false_string cyclic_prefix_type_strname = {
212
  "CP_NORMAL",
213
  "CP_EXTENDED"
214
};
215
216
static const true_false_string support_strname = {
217
  "No Support",
218
  "Support"
219
};
220
221
static const true_false_string partial_sf_support_strname =
222
{
223
  "Start partial SF support",
224
  "End partial SF support"
225
};
226
227
static const true_false_string phich_duration_strname = {
228
  "PHICH_D_NORMAL",
229
  "PHICH_D_EXTENDED"
230
};
231
232
static const true_false_string high_speed_flag_strname = {
233
  "HS_UNRESTRICTED_SET",
234
  "HS_RESTRICTED_SET"
235
};
236
237
static const true_false_string hopping_mode_strname = {
238
  "HM_INTER_SF",
239
  "HM_INTRA_INTER_SF"
240
};
241
242
static const true_false_string srs_simult_tx_strname = {
243
  "No Simultaneous Transmission",
244
  "Simultaneous Transmission"
245
};
246
247
static const true_false_string crc_flag_strname = {
248
  "CRC_ERROR",
249
  "CRC_CORRECT"
250
};
251
252
static const true_false_string hi_value_strname = {
253
  "HI_NACK",
254
  "HI_ACK"
255
};
256
257
static const true_false_string flag_tb2_strname = {
258
  "HI_NOT_PRESENT",
259
  "HI_PRESENT"
260
};
261
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)"
265
};
266
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"
270
};
271
272
static const true_false_string initial_partial_sf_strname = {
273
  "Full SF",
274
  "Partial SF"
275
};
276
277
static const true_false_string lbt_mode_strname = {
278
  "Full LBT",
279
  "Partial LBT"
280
};
281
282
static const true_false_string data_report_mode_vals = {
283
  "Crc reported in CRC.indication",
284
  "Crc reported in RX.indication"
285
};
286
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"
290
};
291
292
static const true_false_string cross_carrier_scheduling_flag_strname = {
293
  "Carrier indicator field is not valid",
294
  "Carrier indicator field is valid"
295
};
296
297
static const true_false_string srs_flag_strname = {
298
  "SRS request field is not valid",
299
  "SRS request field is valid"
300
};
301
static const true_false_string srs_request_strname = {
302
  "SRS not requested",
303
  "SRS requested"
304
};
305
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"
309
};
310
311
static const true_false_string prs_cyclic_prefix_type_strname = {
312
  "normal cyclic prefix",
313
  "extended cyclic prefix"
314
};
315
316
static const true_false_string prs_muting_strname = {
317
  "no muting",
318
  "muting"
319
};
320
321
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 }
333
};
334
335
static const value_string nfapi_duplex_mode_vals[] = {
336
  { 0, "TDD" },
337
  { 1, "FDD" },
338
  { 2, "HD-FDD" },
339
  { 0, NULL }
340
};
341
342
static const value_string modulation_vals[] = {
343
  { 2, "QPSK" },
344
  { 4, "16QAM" },
345
  { 6, "64QAM" },
346
  { 8, "256QAM" },
347
  { 0, NULL }
348
};
349
350
static const value_string pch_modulation_vals[] = {
351
  { 0, "QPSK" },
352
  { 0, NULL }
353
};
354
355
static const value_string ue_mode_vals[] = {
356
  { 0, "non LC/CE UE" },
357
  { 1, "LC/CE UE" },
358
  { 0, NULL }
359
};
360
361
static const value_string csi_rs_class_vals[] = {
362
  { 0, "not used" },
363
  { 1, "Class A" },
364
  { 2, "Class B" },
365
  { 0, NULL }
366
};
367
368
static const value_string csi_rs_cdm_type_vals[] = {
369
  { 0, "cdm 2" },
370
  { 1, "cdm 4" },
371
  { 0, NULL }
372
};
373
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 }
379
};
380
381
static const value_string combs_vals[] = {
382
  { 0, "2 TC" },
383
  { 1, "4 TC" },
384
  { 0, NULL }
385
};
386
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 }
396
};
397
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 }
414
};
415
416
static const value_string ul_transmission_scheme_vals[] = {
417
  { 0, "SINGLE_ANTENNA_PORT_10" },
418
  { 1, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
419
  { 0, NULL },
420
};
421
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 }
437
};
438
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 }
446
};
447
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 }
454
};
455
456
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 }
467
};
468
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 }
481
};
482
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 }
501
};
502
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 }
511
};
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 }
519
};
520
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 }
527
};
528
529
static const value_string local_distributed_vals[] = {
530
  { 0, "localized" },
531
  { 1, "distributed" },
532
  { 0, NULL }
533
};
534
535
static const value_string transport_block_to_codeword_swap_flag_vals[] = {
536
  { 0, "no swapping" },
537
  { 1, "swapped" },
538
  { 0, NULL }
539
};
540
541
static const value_string ngap_vals[] = {
542
  { 0, "Ngap1" },
543
  { 1, "Ngap2" },
544
  { 0, NULL }
545
};
546
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 }
552
};
553
554
static const value_string true_false_vals[] = {
555
  { 0, "false" },
556
  { 1, "true" },
557
  { 0, NULL }
558
};
559
560
static const value_string exhustive_search_vals[] = {
561
  { 0, "non-exhaustive search" },
562
  { 1, "exhaustive search" },
563
  { 0, NULL }
564
};
565
566
static const value_string not_used_enabled_vals[] = {
567
  { 0, "not used" },
568
  { 1, "enabled" },
569
  { 0, NULL }
570
};
571
572
static const value_string hopping_vals[] = {
573
  { 0, "no hopping" },
574
  { 1, "hopping enabled" },
575
  { 0, NULL }
576
};
577
578
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 }
585
};
586
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 }
592
};
593
594
static const value_string primary_cells_type_vals[] = {
595
  { 1, "TDD" },
596
  { 2, "FDD" },
597
  { 3, "HD_FDD" },
598
  { 0, NULL }
599
};
600
601
static const value_string ul_rssi_supported_vals[] = {
602
  { 0, "Uplink RSSI not supported" },
603
  { 1, "Uplink RSSI supported" },
604
  { 0, NULL }
605
};
606
607
static const value_string nprb_vals[] = {
608
  { 0, "2" },
609
  { 1, "3" },
610
  { 0, NULL }
611
};
612
613
static const value_string nmm_modes_supported_vals[] =
614
{
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 }
621
};
622
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 }
628
};
629
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 }
635
};
636
637
638
static const value_string paging_direct_indication_differtiation_flag_vals[] = {
639
  { 0, "Direct Information" },
640
  { 1, "Paging" },
641
  { 0, NULL }
642
};
643
644
static const value_string ul_tx_mode_vals[] = {
645
  { 0, "SISO/MIMO" },
646
  { 1, "MIMO" },
647
  { 0, NULL }
648
};
649
650
static const value_string n_srs_vals[] = {
651
  { 0, "No overlap" },
652
  { 1, "Overlap" },
653
  { 0, NULL }
654
};
655
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 }
660
};
661
662
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 }
668
};
669
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 }
676
};
677
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 }
683
};
684
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 }
690
};
691
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 }
697
};
698
699
static const value_string ce_mode_vals[] = {
700
  { 1, "CEModeA" },
701
  { 2, "CEModeB" },
702
  { 0, NULL }
703
};
704
705
706
static const value_string csi_request_vals[] = {
707
  { 0, "Aperiodic CSI not requested" },
708
  { 1, "Aperiodic CSI requested" },
709
  { 0, NULL }
710
};
711
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 }
721
};
722
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 }
730
};
731
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 }
741
};
742
743
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 }
751
};
752
753
static const value_string channel_vals[] = {
754
  { 0, "PUCCH" },
755
  { 1, "PUSCH" },
756
  { 0, NULL }
757
};
758
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 }
766
};
767
768
static const value_string up_pts_symbol_vals[] = {
769
  { 0, "Symbol 0" },
770
  { 1, "Symbol 1" },
771
  { 0, NULL }
772
};
773
774
static const value_string arfcn_direction_vals[] = {
775
  { 0, "DL" },
776
  { 1, "UL" },
777
  { 0, NULL }
778
};
779
780
static int proto_nfapi;
781
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;
839
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;
947
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;
961
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;
1062
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;
1162
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;
1413
1414
static const value_string message_id_vals[] =
1415
{
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" },
1430
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" },
1449
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" },
1453
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" },
1471
1472
  { 0, NULL },
1473
};
1474
1475
static dissector_handle_t nfapi_handle;
1476
static dissector_table_t message_table;
1477
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
1486
};
1487
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
1496
};
1497
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
1507
};
1508
1509
typedef void(*tlv_decode)(ptvcursor_t * ptvc, packet_info* pinfo);
1510
1511
typedef struct
1512
{
1513
  uint16_t tag_id;
1514
  char* name;
1515
  tlv_decode decode;
1516
} tlv_t;
1517
1518
static void dissect_tlv_list(ptvcursor_t * ptvc, packet_info* pinfo, int len);
1519
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)
1521
0
{
1522
0
  if (count > 0)
1523
0
  {
1524
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "%s", name);
1525
1526
0
    for (unsigned i = 0; i < count; ++i)
1527
0
    {
1528
0
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "[%u]", i);
1529
0
      decode(ptvc, pinfo);
1530
0
      ptvcursor_pop_subtree(ptvc);
1531
0
    }
1532
1533
0
    ptvcursor_pop_subtree(ptvc);
1534
0
  }
1535
0
}
1536
1537
static void dissect_pnf_param_general_value(ptvcursor_t * ptvc, packet_info* pinfo)
1538
0
{
1539
0
  proto_item* item;
1540
0
  uint32_t test_value;
1541
1542
  // nFAPI Sync Mode
1543
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sync_mode, 1, ENC_BIG_ENDIAN, &test_value);
1544
0
  if (test_value > 2)
1545
0
  {
1546
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nfapi sync mode value [0..2]");
1547
0
  }
1548
1549
  // Location Mode
1550
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_location_mode, 1, ENC_BIG_ENDIAN, &test_value);
1551
0
  if (test_value > 3)
1552
0
  {
1553
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid location mode value [0..3]");
1554
0
  }
1555
1556
0
  ptvcursor_add(ptvc, hf_nfapi_location_coordinates, 2, ENC_BIG_ENDIAN|ENC_NA);
1557
0
  ptvcursor_add(ptvc, hf_nfapi_dl_config_timing, 4, ENC_BIG_ENDIAN);
1558
0
  ptvcursor_add(ptvc, hf_nfapi_tx_timing, 4, ENC_BIG_ENDIAN);
1559
0
  ptvcursor_add(ptvc, hf_nfapi_ul_config_timing, 4, ENC_BIG_ENDIAN);
1560
0
  ptvcursor_add(ptvc, hf_nfapi_hi_dci0_timing, 4, ENC_BIG_ENDIAN);
1561
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_number_phys, 2, ENC_BIG_ENDIAN);
1562
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_total_bandwidth, 2, ENC_BIG_ENDIAN);
1563
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_dl_layers, 1, ENC_BIG_ENDIAN);
1564
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_ul_layers, 1, ENC_BIG_ENDIAN);
1565
1566
  // Shared Bands
1567
0
  ptvcursor_add(ptvc, hf_nfapi_shared_bands, 1, ENC_BIG_ENDIAN);
1568
1569
  // Shared PA
1570
0
  ptvcursor_add(ptvc, hf_nfapi_shared_pa, 1, ENC_BIG_ENDIAN);
1571
1572
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_total_power, 2, ENC_BIG_ENDIAN);
1573
0
  ptvcursor_add(ptvc, hf_nfapi_oui, 3, ENC_HOST_ENDIAN);
1574
0
}
1575
static void dissect_pnf_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1576
0
{
1577
0
  ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1578
0
}
1579
1580
static void dissect_pnf_phy_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1581
0
{
1582
0
  proto_item* item;
1583
0
  uint32_t array_size, test_value;
1584
0
  uint64_t test_value64;
1585
1586
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1587
1588
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN, &array_size);
1589
0
  dissect_array_value(ptvc, pinfo, "RF Config List", ett_nfapi_pnf_phy, array_size, dissect_pnf_rf_config_instance_value);
1590
1591
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_exclusions, 2, ENC_BIG_ENDIAN, &array_size);
1592
0
  dissect_array_value(ptvc, pinfo, "RF Exclusion List", ett_nfapi_pnf_phy, array_size, dissect_pnf_rf_config_instance_value);
1593
1594
  // Downlink Channel Bandwidth Supported
1595
0
  item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1596
0
                      hf_nfapi_downlink_channel_bandwidth_supported, ett_nfapi_downlink_bandwidth_support, dl_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
1597
0
  if (test_value64 > 0x3F)
1598
0
  {
1599
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink channel bandwidth supported bits [0..0x3F]");
1600
0
  }
1601
0
  ptvcursor_advance(ptvc, 2);
1602
1603
  // Uplink Channel Bandwidth Supported
1604
0
  item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1605
0
                      hf_nfapi_uplink_channel_bandwidth_supported, ett_nfapi_uplink_bandwidth_support, ul_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
1606
0
  if (test_value64 > 0x3F)
1607
0
  {
1608
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink channel bandwidth supported bits [0..0x3F]");
1609
0
  }
1610
0
  ptvcursor_advance(ptvc, 2);
1611
1612
  // Number of DL layers supported
1613
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_dl_layers_supported, 1, ENC_BIG_ENDIAN, &test_value);
1614
0
  switch (test_value)
1615
0
  {
1616
0
  case 1:
1617
0
  case 2:
1618
0
  case 4:
1619
0
  case 8:
1620
0
    break;
1621
0
  default:
1622
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of dl layers supported value [1, 2, 4, 8]");
1623
0
    break;
1624
0
  }
1625
1626
  // Number of DL layers supported
1627
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ul_layers_supported, 1, ENC_BIG_ENDIAN, &test_value);
1628
0
  switch (test_value)
1629
0
  {
1630
0
  case 1:
1631
0
  case 2:
1632
0
  case 4:
1633
0
  case 8:
1634
0
    break;
1635
0
  default:
1636
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ul layers supported value [1, 2, 4, 8]");
1637
0
    break;
1638
0
  }
1639
1640
  // Maximum 3GPP Release Supported
1641
0
  item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
1642
0
                      hf_nfapi_maximum_3gpp_release_supported, ett_nfapi_release_support, maximum_3gpp_release_supported_fields, ENC_BIG_ENDIAN, &test_value64);
1643
0
  if (test_value64 > 0x3F)
1644
0
  {
1645
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maximum 3GPP release supported value [0..0x3F]");
1646
0
  }
1647
0
  ptvcursor_advance(ptvc, 2);
1648
1649
  // NMM Modes Supported
1650
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nmm_modes_supported, 1, ENC_BIG_ENDIAN, &test_value);
1651
0
  if (test_value > 3)
1652
0
  {
1653
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm modes supported value [0..3]");
1654
0
  }
1655
0
}
1656
1657
static void dissect_pnf_phy_value(ptvcursor_t * ptvc, packet_info* pinfo)
1658
0
{
1659
0
  uint32_t num_phy;
1660
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1661
0
  dissect_array_value(ptvc, pinfo, "PHY List", ett_nfapi_pnf_phy, num_phy, dissect_pnf_phy_instance_value);
1662
0
}
1663
1664
static void dissect_pnf_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
1665
0
{
1666
0
  proto_item* item;
1667
0
  uint32_t test_value;
1668
1669
0
  ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1670
0
  ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
1671
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_transmit_power, 2, ENC_BIG_ENDIAN);
1672
0
  ptvcursor_add(ptvc, hf_nfapi_minimum_transmit_power, 2, ENC_BIG_ENDIAN);
1673
1674
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_antennas_supported, 1, ENC_BIG_ENDIAN, &test_value);
1675
0
  switch (test_value)
1676
0
  {
1677
0
  case 1:
1678
0
  case 2:
1679
0
  case 4:
1680
0
  case 8:
1681
0
    break;
1682
0
  default:
1683
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of supported antennas [1, 2, 4, 8]");
1684
0
    break;
1685
0
  }
1686
1687
0
  ptvcursor_add(ptvc, hf_nfapi_minimum_downlink_frequency, 4, ENC_BIG_ENDIAN);
1688
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_downlink_frequency, 4, ENC_BIG_ENDIAN);
1689
0
  ptvcursor_add(ptvc, hf_nfapi_minimum_uplink_frequency, 4, ENC_BIG_ENDIAN);
1690
0
  ptvcursor_add(ptvc, hf_nfapi_maximum_uplink_frequency, 4, ENC_BIG_ENDIAN);
1691
0
}
1692
1693
1694
static void dissect_pnf_rf_value(ptvcursor_t * ptvc, packet_info* pinfo)
1695
0
{
1696
0
  uint32_t num_rf;
1697
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN, &num_rf);
1698
0
  dissect_array_value(ptvc, pinfo, "RF List", ett_nfapi_pnf_phy_rf_config, num_rf, dissect_pnf_rf_config_value);
1699
0
}
1700
1701
static void dissect_pnf_phy_rel10_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1702
0
{
1703
0
  proto_item* item;
1704
0
  uint32_t test_value;
1705
1706
  // PHY Config Index
1707
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1708
1709
  // Transmission mode 7 supported
1710
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode7_supported, 2, ENC_BIG_ENDIAN, &test_value);
1711
0
  if (test_value > 1)
1712
0
  {
1713
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 7 supported value [0..1]");
1714
0
  }
1715
1716
  // Two antennas ports for PUCCH
1717
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode8_supported, 2, ENC_BIG_ENDIAN, &test_value);
1718
0
  if (test_value > 1)
1719
0
  {
1720
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 8 supported value [0..1]");
1721
0
  }
1722
1723
  // Transmission mode 8 supported
1724
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_two_antennas_ports_for_pucch, 2, ENC_BIG_ENDIAN, &test_value);
1725
0
  if (test_value > 1)
1726
0
  {
1727
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid two antennas ports for pucch value [0..1]");
1728
0
  }
1729
1730
  // Transmission mode 9 supported
1731
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_9_supported, 2, ENC_BIG_ENDIAN, &test_value);
1732
0
  if (test_value > 1)
1733
0
  {
1734
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 9 supported value [0..1]");
1735
0
  }
1736
1737
  // Simultaneous PUCCH PUSCH
1738
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_simultaneous_pucch_pusch, 2, ENC_BIG_ENDIAN, &test_value);
1739
0
  if (test_value > 1)
1740
0
  {
1741
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid simultaneous pucch pusch supported value [0..1]");
1742
0
  }
1743
1744
  // Four layer Tx with TM3 and TM4
1745
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_four_layer_tx_with_tm3_and_tm4, 2, ENC_BIG_ENDIAN, &test_value);
1746
0
  if (test_value > 1)
1747
0
  {
1748
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid four layer tx with tm3 and tm4 value [0..1]");
1749
0
  }
1750
0
}
1751
1752
static void dissect_pnf_phy_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
1753
0
{
1754
0
  uint32_t num_phy;
1755
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1756
0
  dissect_array_value(ptvc, pinfo, "PHY Rel 10 List", ett_nfapi_pnf_phy_rel10, num_phy, dissect_pnf_phy_rel10_instance_value);
1757
0
}
1758
1759
static void dissect_pnf_phy_rel11_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1760
0
{
1761
0
  proto_item* item;
1762
0
  uint32_t test_value;
1763
1764
  // PHY Config Index
1765
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1766
1767
  // ePDCCH supported
1768
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_supported, 2, ENC_BIG_ENDIAN, &test_value);
1769
0
  if (test_value > 1)
1770
0
  {
1771
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch supported value [0..1]");
1772
0
  }
1773
1774
  // Multi ACK CSI reporting
1775
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_ack_csi_reporting, 2, ENC_BIG_ENDIAN, &test_value);
1776
0
  if (test_value > 1)
1777
0
  {
1778
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi ack csi reporting value [0..1]");
1779
0
  }
1780
1781
  // PUCCH Tx diversity with channel selection
1782
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_tx_diversity_with_channel_selection, 2, ENC_BIG_ENDIAN, &test_value);
1783
0
  if (test_value > 1)
1784
0
  {
1785
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch tx diversity with channel selection value [0..1]");
1786
0
  }
1787
1788
  // UL CoMP supported
1789
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_comp_supported, 2, ENC_BIG_ENDIAN, &test_value);
1790
0
  if (test_value > 1)
1791
0
  {
1792
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul comp supported value [0..1]");
1793
0
  }
1794
1795
  // Transmission mode 5 supported
1796
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_5_supported, 2, ENC_BIG_ENDIAN, &test_value);
1797
0
  if (test_value > 1)
1798
0
  {
1799
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 5 supported value [0..1]");
1800
0
  }
1801
0
}
1802
1803
static void dissect_pnf_phy_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
1804
0
{
1805
0
  uint32_t num_phy;
1806
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1807
0
  dissect_array_value(ptvc, pinfo, "PHY Rel 11 List", ett_nfapi_pnf_phy_rel11, num_phy, dissect_pnf_phy_rel11_instance_value);
1808
0
}
1809
1810
static void dissect_pnf_phy_rel12_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1811
0
{
1812
0
  proto_item* item;
1813
0
  uint32_t test_value;
1814
1815
  // PHY Config Index
1816
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1817
1818
  // CSI subframe set
1819
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_subframe_set, 2, ENC_BIG_ENDIAN, &test_value);
1820
0
  if (test_value > 1)
1821
0
  {
1822
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi subframe set value [0..1]");
1823
0
  }
1824
1825
  // Enhanced 4TX codebook
1826
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_enhanced_4tx_codebook, 2, ENC_BIG_ENDIAN, &test_value);
1827
0
  if (test_value > 1)
1828
0
  {
1829
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid enhanced 4TX codebook value [0..1]");
1830
0
  }
1831
1832
  // DRS supported
1833
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drs_supported, 2, ENC_BIG_ENDIAN, &test_value);
1834
0
  if (test_value > 1)
1835
0
  {
1836
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drs supported value [0..1]");
1837
0
  }
1838
1839
  // UL 64QAM supported
1840
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_64qam_supported, 2, ENC_BIG_ENDIAN, &test_value);
1841
0
  if (test_value > 1)
1842
0
  {
1843
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul 64 QAM supported value [0..1]");
1844
0
  }
1845
1846
  // Transmission mode 10 supported
1847
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode_10_supported, 2, ENC_BIG_ENDIAN, &test_value);
1848
0
  if (test_value > 1)
1849
0
  {
1850
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 10 supported value [0..1]");
1851
0
  }
1852
1853
  // Alternative TBS indices
1854
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_alternative_tbs_indices, 2, ENC_BIG_ENDIAN, &test_value);
1855
0
  if (test_value > 1)
1856
0
  {
1857
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alternative tbs indices supported value [0..1]");
1858
0
  }
1859
0
}
1860
1861
static void dissect_pnf_phy_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
1862
0
{
1863
0
  uint32_t num_phy;
1864
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1865
0
  dissect_array_value(ptvc, pinfo, "PHY Rel 12 List", ett_nfapi_pnf_phy_rel12, num_phy, dissect_pnf_phy_rel12_instance_value);
1866
0
}
1867
1868
static void dissect_pnf_phy_rel13_instance_value(ptvcursor_t * ptvc, packet_info* pinfo)
1869
0
{
1870
0
  proto_item* item;
1871
0
  uint32_t test_value;
1872
1873
  // PHY Config Index
1874
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1875
1876
  // PUCCH format 4 supported
1877
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_format_4_supported, 2, ENC_BIG_ENDIAN, &test_value);
1878
0
  if (test_value > 1)
1879
0
  {
1880
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 4 supported value [0..1]");
1881
0
  }
1882
1883
  // PUCCH format 5 supported
1884
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_format_5_supported, 2, ENC_BIG_ENDIAN, &test_value);
1885
0
  if (test_value > 1)
1886
0
  {
1887
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 5 supported value [0..1]");
1888
0
  }
1889
1890
  // More than 5 CA support
1891
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_more_than_5_ca_supported, 2, ENC_BIG_ENDIAN, &test_value);
1892
0
  if (test_value > 1)
1893
0
  {
1894
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid more than 5 ca supported value [0..1]");
1895
0
  }
1896
1897
  // LAA supported
1898
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_supported, 2, ENC_BIG_ENDIAN, &test_value);
1899
0
  if (test_value > 1)
1900
0
  {
1901
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa supported value [0..1]");
1902
0
  }
1903
1904
  // LAA ending in DwPTS supported
1905
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_ending_in_dwpts_supported, 2, ENC_BIG_ENDIAN, &test_value);
1906
0
  if (test_value > 1)
1907
0
  {
1908
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa ending in dwpts supported value [0..1]");
1909
0
  }
1910
1911
  // LAA starting in second slot Supported
1912
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_laa_starting_in_second_slot_supported, 2, ENC_BIG_ENDIAN, &test_value);
1913
0
  if (test_value > 1)
1914
0
  {
1915
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa starting in second slot supported value [0..1]");
1916
0
  }
1917
1918
  // Beamforming Supported
1919
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_beamforming_supported, 2, ENC_BIG_ENDIAN, &test_value);
1920
0
  if (test_value > 1)
1921
0
  {
1922
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid beamforming supported value [0..1]");
1923
0
  }
1924
1925
  // CSI-RS enhancements supported
1926
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1927
0
  if (test_value > 1)
1928
0
  {
1929
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs enhancements supported value [0..1]");
1930
0
  }
1931
1932
  // DMRS enhancements supported
1933
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1934
0
  if (test_value > 1)
1935
0
  {
1936
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms enhancements supported value [0..1]");
1937
0
  }
1938
1939
  // SRS enhancements supported
1940
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_enhancements_supported, 2, ENC_BIG_ENDIAN, &test_value);
1941
0
  if (test_value > 1)
1942
0
  {
1943
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs enhancements supported value [0..1]");
1944
0
  }
1945
1946
0
}
1947
1948
static void dissect_pnf_phy_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
1949
0
{
1950
0
  uint32_t num_phy;
1951
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_phy);
1952
0
  dissect_array_value(ptvc, pinfo, "PHY Rel 13 List", ett_nfapi_pnf_phy_rel13, num_phy, dissect_pnf_phy_rel13_instance_value);
1953
0
}
1954
1955
static void dissect_pnf_phy_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1956
0
{
1957
0
  ptvcursor_add(ptvc, hf_nfapi_phy_rf_config_info_phy_id, 2, ENC_BIG_ENDIAN);
1958
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
1959
0
  ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
1960
0
}
1961
static void dissect_pnf_phy_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
1962
0
{
1963
0
  uint32_t num_configs;
1964
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN, &num_configs);
1965
0
  dissect_array_value(ptvc, pinfo, "PHY RF Config List", ett_nfapi_pnf_phy_rf_config, num_configs, dissect_pnf_phy_rf_config_instance_value);
1966
0
}
1967
1968
static void dissect_dl_rs_tx_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
1969
0
{
1970
0
  uint32_t test_value;
1971
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_rs_tx_power, 2, ENC_BIG_ENDIAN, &test_value);
1972
1973
0
  if (!(test_value >= 1 && test_value <= 255))
1974
0
  {
1975
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
1976
0
  }
1977
0
}
1978
static void dissect_received_interference_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
1979
0
{
1980
0
  uint32_t test_value;
1981
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_received_interference_power, 2, ENC_BIG_ENDIAN, &test_value);
1982
1983
0
  if (!(test_value >= 1 && test_value <= 255))
1984
0
  {
1985
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
1986
0
  }
1987
0
}
1988
static void dissect_thermal_noise_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1989
0
{
1990
0
  ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power, 2, ENC_BIG_ENDIAN);
1991
0
}
1992
static void dissect_dl_rs_tx_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1993
0
{
1994
0
  ptvcursor_add(ptvc, hf_nfapi_dl_rs_tx_power_measurement, 2, ENC_BIG_ENDIAN);
1995
0
}
1996
1997
static void dissect_received_interference_power_result_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
1998
0
{
1999
0
  ptvcursor_add(ptvc, hf_nfapi_received_interference_power_measurement, 2, ENC_BIG_ENDIAN);
2000
0
}
2001
static void dissect_received_interference_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo)
2002
0
{
2003
0
  uint32_t num_resource_block;
2004
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 2, ENC_BIG_ENDIAN, &num_resource_block);
2005
0
  dissect_array_value(ptvc, pinfo, "Results", ett_nfapi_received_interference_power_mesurement_results, num_resource_block, dissect_received_interference_power_result_value);
2006
0
}
2007
static void dissect_thermal_noise_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2008
0
{
2009
0
  ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power_measurement, 2, ENC_BIG_ENDIAN);
2010
0
}
2011
static void dissect_duplex_mode_value(ptvcursor_t * ptvc, packet_info* pinfo)
2012
0
{
2013
0
  uint32_t test_value;
2014
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_duplex_mode, 2, ENC_BIG_ENDIAN, &test_value);
2015
2016
0
  if (test_value > 2)
2017
0
  {
2018
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid duplex mode [0..2]");
2019
0
  }
2020
0
}
2021
static void dissect_pcfich_power_offset_value(ptvcursor_t* ptvc, packet_info *pinfo)
2022
0
{
2023
0
  uint32_t test_value;
2024
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pcfich_power_offset, 2, ENC_BIG_ENDIAN, &test_value);
2025
2026
0
  if (test_value > 10000)
2027
0
  {
2028
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid power level [0..10000]");
2029
0
  }
2030
0
}
2031
static void dissect_pb_value(ptvcursor_t * ptvc, packet_info* pinfo)
2032
0
{
2033
0
  uint32_t test_value;
2034
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pb, 2, ENC_BIG_ENDIAN, &test_value);
2035
2036
0
  if (test_value > 3)
2037
0
  {
2038
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power allocation Index [0..3]");
2039
0
  }
2040
0
}
2041
2042
static void dissect_dl_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2043
0
{
2044
0
  ptvcursor_add(ptvc, hf_nfapi_dl_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
2045
2046
0
}
2047
static void dissect_ul_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2048
0
{
2049
0
  ptvcursor_add(ptvc, hf_nfapi_ul_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
2050
0
}
2051
static void dissect_dl_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo)
2052
0
{
2053
0
  uint32_t test_value;
2054
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
2055
2056
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 || test_value == 75 || test_value == 100))
2057
0
  {
2058
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth value [6, 15, 25, 50, 75, 100]");
2059
0
  }
2060
0
}
2061
static void dissect_ul_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo)
2062
0
{
2063
0
  uint32_t test_value;
2064
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_uplink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
2065
2066
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 || test_value == 75 || test_value == 100))
2067
0
  {
2068
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth value [6, 15, 25, 50, 75, 100]");
2069
0
  }
2070
0
}
2071
static void dissect_reference_signal_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
2072
0
{
2073
0
  uint32_t test_value;
2074
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_reference_signal_power, 2, ENC_BIG_ENDIAN, &test_value);
2075
2076
0
  if (test_value > 255)
2077
0
  {
2078
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid reference signal power [0..255]");
2079
0
  }
2080
2081
0
}
2082
static void dissect_tx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo)
2083
0
{
2084
0
  uint32_t test_value;
2085
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tx_antenna_ports, 2, ENC_BIG_ENDIAN, &test_value);
2086
2087
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2088
0
  {
2089
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports value [1, 2, 4, 8, 16]");
2090
0
  }
2091
0
}
2092
static void dissect_rx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo)
2093
0
{
2094
0
  uint32_t test_value;
2095
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rx_antenna_ports, 2, ENC_BIG_ENDIAN, &test_value);
2096
2097
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2098
0
  {
2099
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rx antenna ports value [1, 2, 4, 8, 16]");
2100
0
  }
2101
0
}
2102
static void dissect_phich_resource_value(ptvcursor_t * ptvc, packet_info* pinfo)
2103
0
{
2104
0
  uint32_t test_value;
2105
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phich_resource, 2, ENC_BIG_ENDIAN, &test_value);
2106
2107
0
  if (test_value > 3)
2108
0
  {
2109
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich resource value [0..3]");
2110
0
  }
2111
0
}
2112
static void dissect_phich_duration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2113
0
{
2114
0
  ptvcursor_add(ptvc, hf_nfapi_phich_duration, 2, ENC_BIG_ENDIAN);
2115
0
}
2116
static void dissect_phich_power_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2117
0
{
2118
0
  uint32_t test_value;
2119
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phich_power_offset, 2, ENC_BIG_ENDIAN, &test_value);
2120
2121
0
  if (test_value > 10000)
2122
0
  {
2123
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich power offset value [0..10000]");
2124
0
  }
2125
0
}
2126
static void dissect_psch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo)
2127
0
{
2128
0
  uint32_t test_value;
2129
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_primary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN, &test_value);
2130
2131
0
  if (test_value > 10000)
2132
0
  {
2133
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary synchronization signal epre/eprers value [0..10000]");
2134
0
  }
2135
0
}
2136
static void dissect_physical_cell_id_value(ptvcursor_t * ptvc, packet_info* pinfo)
2137
0
{
2138
0
  uint32_t test_value;
2139
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_physical_cell_id, 2, ENC_BIG_ENDIAN, &test_value);
2140
2141
0
  if (test_value > 503)
2142
0
  {
2143
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid physical cell id [0..503]");
2144
0
  }
2145
0
}
2146
static void dissect_ssch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo)
2147
0
{
2148
0
  uint32_t test_value;
2149
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_secondary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN, &test_value);
2150
2151
0
  if (test_value > 10000)
2152
0
  {
2153
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid secondary synchronization signal epre/eprers value [0..10000]");
2154
0
  }
2155
0
}
2156
static void dissect_prach_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2157
0
{
2158
0
  uint32_t test_value;
2159
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2160
2161
0
  if (test_value > 63)
2162
0
  {
2163
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach configuration Index [0..63]");
2164
0
  }
2165
0
}
2166
static void dissect_prach_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2167
0
{
2168
0
  uint32_t test_value;
2169
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_root_sequence_index, 2, ENC_BIG_ENDIAN, &test_value);
2170
2171
0
  if (test_value > 837)
2172
0
  {
2173
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach root sequence Index [0..837]");
2174
0
  }
2175
0
}
2176
static void dissect_prach_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2177
0
{
2178
0
  uint32_t test_value;
2179
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2180
2181
  // How do differentiate between fdd 0..6 and tdd 0..15 ranges?
2182
0
  if (test_value > 15)
2183
0
  {
2184
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid zero correlation zone configuration [0..15]");
2185
0
  }
2186
0
}
2187
static void dissect_prach_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2188
0
{
2189
0
  ptvcursor_add(ptvc, hf_nfapi_high_speed_flag, 2, ENC_BIG_ENDIAN);
2190
0
}
2191
static void dissect_prach_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2192
0
{
2193
0
  uint32_t test_value;
2194
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2195
2196
  // How to determine the ul channel bandwidth?
2197
0
  if (test_value > (100 -6))
2198
0
  {
2199
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach frequency offset value [0..94]");
2200
0
  }
2201
0
}
2202
static void dissect_pusch_hopping_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2203
0
{
2204
0
  ptvcursor_add(ptvc, hf_nfapi_hopping_mode, 2, ENC_BIG_ENDIAN);
2205
0
}
2206
static void dissect_pusch_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2207
0
{
2208
0
  uint32_t test_value;
2209
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2210
2211
0
  if (test_value > 98)
2212
0
  {
2213
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch hopping offset value [0..98]");
2214
0
  }
2215
0
}
2216
static void dissect_pusch_number_of_subbands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2217
0
{
2218
0
  uint32_t test_value;
2219
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 2, ENC_BIG_ENDIAN, &test_value);
2220
2221
0
  if (!(test_value >= 1 && test_value <= 4))
2222
0
  {
2223
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of sub-bands [1..4]");
2224
0
  }
2225
0
}
2226
static void dissect_pucch_delta_pucch_shift_value(ptvcursor_t * ptvc, packet_info* pinfo)
2227
0
{
2228
0
  uint32_t test_value;
2229
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_pucch_shift, 2, ENC_BIG_ENDIAN, &test_value);
2230
2231
0
  if (!(test_value >= 1 && test_value <= 3))
2232
0
  {
2233
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta pucch shift [1..3]");
2234
0
  }
2235
0
}
2236
static void dissect_pucch_n_cqi_rb_value(ptvcursor_t * ptvc, packet_info* pinfo)
2237
0
{
2238
0
  uint32_t test_value;
2239
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_cqi_rb, 2, ENC_BIG_ENDIAN, &test_value);
2240
2241
0
  if (test_value > 98)
2242
0
  {
2243
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n cqi rb value [0..98]");
2244
0
  }
2245
0
}
2246
static void dissect_pucch_n_an_cs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2247
0
{
2248
0
  uint32_t test_value;
2249
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_an_cs, 2, ENC_BIG_ENDIAN, &test_value);
2250
2251
0
  if (test_value > 7)
2252
0
  {
2253
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n an cs value [0..7]");
2254
0
  }
2255
0
}
2256
static void dissect_pucch_n1_pucch_an_value(ptvcursor_t * ptvc, packet_info* pinfo)
2257
0
{
2258
0
  uint32_t test_value;
2259
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n1_pucch_an, 2, ENC_BIG_ENDIAN, &test_value);
2260
2261
0
  if (test_value > 2047)
2262
0
  {
2263
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n1pucch an value [0..2047]");
2264
0
  }
2265
0
}
2266
static void dissect_srs_bandwidth_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2267
0
{
2268
0
  uint32_t test_value;
2269
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2270
2271
0
  if (test_value > 7)
2272
0
  {
2273
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth configuration value [0..7]");
2274
0
  }
2275
0
}
2276
static void dissect_srs_max_uppts_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2277
0
{
2278
0
  ptvcursor_add(ptvc, hf_nfapi_max_up_pts, 2, ENC_BIG_ENDIAN);
2279
0
}
2280
static void dissect_srs_subframe_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2281
0
{
2282
0
  uint32_t test_value;
2283
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_subframe_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2284
2285
0
  if (test_value > 15)
2286
0
  {
2287
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs subframe configuration value [0..15]");
2288
0
  }
2289
0
}
2290
static void dissect_srs_acknack_srs_sim_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2291
0
{
2292
0
  ptvcursor_add(ptvc, hf_nfapi_srs_acknack_srs_simultaneous_transmission, 2, ENC_BIG_ENDIAN);
2293
0
}
2294
static void dissect_uplink_rs_hopping_value(ptvcursor_t * ptvc, packet_info* pinfo)
2295
0
{
2296
0
  uint32_t test_value;
2297
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_uplink_rs_hopping, 2, ENC_BIG_ENDIAN, &test_value);
2298
2299
0
  if (test_value > 2)
2300
0
  {
2301
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink rs hopping value [0..2]");
2302
0
  }
2303
0
}
2304
static void dissect_group_assignment_value(ptvcursor_t * ptvc, packet_info* pinfo)
2305
0
{
2306
0
  uint32_t test_value;
2307
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_group_assignment, 2, ENC_BIG_ENDIAN, &test_value);
2308
2309
0
  if (test_value > 29)
2310
0
  {
2311
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid group assignment value [0..29]");
2312
0
  }
2313
0
}
2314
static void dissect_cyclic_shift_1_for_drms_value(ptvcursor_t * ptvc, packet_info* pinfo)
2315
0
{
2316
0
  uint32_t test_value;
2317
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_1_for_drms, 2, ENC_BIG_ENDIAN, &test_value);
2318
2319
0
  if (test_value > 7)
2320
0
  {
2321
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 1 for drms value [0..7]");
2322
0
  }
2323
0
}
2324
static void dissect_tdd_subframe_assignment_value(ptvcursor_t * ptvc, packet_info* pinfo)
2325
0
{
2326
0
  uint32_t test_value;
2327
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_subframe_assignment, 2, ENC_BIG_ENDIAN, &test_value);
2328
2329
0
  if (test_value > 6)
2330
0
  {
2331
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tdd subframe assignment value [0..6]");
2332
0
  }
2333
0
}
2334
static void dissect_tdd_subframe_patterns_value(ptvcursor_t * ptvc, packet_info* pinfo)
2335
0
{
2336
0
  uint32_t test_value;
2337
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_special_subframe_patterns, 2, ENC_BIG_ENDIAN, &test_value);
2338
2339
0
  if (test_value > 9)
2340
0
  {
2341
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid special subframe pattern value [0..9]");
2342
0
  }
2343
0
}
2344
static void dissect_laa_ed_threashold_for_lbt_for_pdsch_value(ptvcursor_t * ptvc, packet_info* pinfo)
2345
0
{
2346
0
  uint32_t test_value;
2347
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ed_threshold_for_lbt_for_pdsch, 2, ENC_BIG_ENDIAN, &test_value);
2348
2349
0
  if (test_value > 70)
2350
0
  {
2351
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for pdsch value [0..70]");
2352
0
  }
2353
0
}
2354
static void dissect_laa_ed_threashold_for_lbt_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2355
0
{
2356
0
  uint32_t test_value;
2357
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ed_threshold_for_lbt_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2358
2359
0
  if (test_value > 70)
2360
0
  {
2361
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for drs value [0..70]");
2362
0
  }
2363
0
}
2364
static void dissect_laa_pd_threshold_value(ptvcursor_t * ptvc, packet_info* pinfo)
2365
0
{
2366
0
  uint32_t test_value;
2367
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pd_threshold, 2, ENC_BIG_ENDIAN, &test_value);
2368
2369
0
  if (test_value > 70 && test_value != 65535)
2370
0
  {
2371
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pd threshold value [0..70, 65536]");
2372
0
  }
2373
0
}
2374
static void dissect_laa_multi_carrier_type_value(ptvcursor_t * ptvc, packet_info* pinfo)
2375
0
{
2376
0
  uint32_t test_value;
2377
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_carrier_type, 2, ENC_BIG_ENDIAN, &test_value);
2378
2379
0
  if (test_value > 4)
2380
0
  {
2381
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi carrier type [0..4]");
2382
0
  }
2383
0
}
2384
static void dissect_laa_multi_carrier_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2385
0
{
2386
0
  ptvcursor_add(ptvc, hf_nfapi_multi_carrier_tx, 2, ENC_BIG_ENDIAN);
2387
0
}
2388
static void dissect_laa_multi_carrier_freeze_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2389
0
{
2390
0
  ptvcursor_add(ptvc, hf_nfapi_multi_carrier_freeze, 2, ENC_BIG_ENDIAN);
2391
0
}
2392
static void dissect_laa_tx_antenna_port_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2393
0
{
2394
0
  uint32_t test_value;
2395
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tx_antenna_ports_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2396
2397
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4))
2398
0
  {
2399
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports for drs value [1, 2, 4]");
2400
0
  }
2401
0
}
2402
static void dissect_laa_transmission_power_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo)
2403
0
{
2404
0
  uint32_t test_value;
2405
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power_for_drs, 2, ENC_BIG_ENDIAN, &test_value);
2406
2407
0
  if (test_value > 10000)
2408
0
  {
2409
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for drs [0..10000]");
2410
0
  }
2411
0
}
2412
static void dissect_emtc_pbch_repeitions_enabled_r13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2413
0
{
2414
0
  ptvcursor_add(ptvc, hf_nfapi_pbch_repetitions_enabled_r13, 2, ENC_BIG_ENDIAN);
2415
0
}
2416
static void dissect_emtc_prach_cat_m_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
2417
0
{
2418
0
  uint32_t test_value;
2419
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_cat_m_root_sequence_index, 2, ENC_BIG_ENDIAN, &test_value);
2420
2421
0
  if (test_value > 837)
2422
0
  {
2423
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m root sequence Index value [0..837]");
2424
0
  }
2425
0
}
2426
static void dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo)
2427
0
{
2428
0
  uint32_t test_value;
2429
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_cat_m_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN, &test_value);
2430
2431
0
  if (test_value > 15)
2432
0
  {
2433
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m zero correlation zone configuration value [0..15]");
2434
0
  }
2435
0
}
2436
static void dissect_emtc_prach_cat_m_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2437
0
{
2438
0
  ptvcursor_add(ptvc, hf_nfapi_prach_cat_m_high_speed_flag, 2, ENC_BIG_ENDIAN);
2439
0
}
2440
static void dissect_emtc_prach_ce_level_0_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2441
0
{
2442
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_enable, 2, ENC_BIG_ENDIAN);
2443
0
}
2444
static void dissect_emtc_prach_ce_level_0_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2445
0
{
2446
0
  uint32_t test_value;
2447
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2448
2449
0
  if (test_value > 63)
2450
0
  {
2451
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 configuration Index value [0..63]");
2452
0
  }
2453
0
}
2454
static void dissect_emtc_prach_ce_level_0_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2455
0
{
2456
0
  uint32_t test_value;
2457
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2458
2459
0
  if (test_value > (100 - 6))
2460
0
  {
2461
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 frequency offset value [0..94]");
2462
0
  }
2463
0
}
2464
static void dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2465
0
{
2466
0
  uint32_t test_value;
2467
0
  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);
2468
2469
0
  if (!( test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2470
0
       test_value == 64 || test_value == 128))
2471
0
  {
2472
0
    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]");
2473
0
  }
2474
0
}
2475
static void dissect_emtc_ce_level_0_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2476
0
{
2477
0
  uint32_t test_value;
2478
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2479
2480
0
  if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2481
0
      test_value == 64 || test_value == 128 || test_value == 256))
2482
0
  {
2483
0
    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]");
2484
0
  }
2485
0
}
2486
static void dissect_emtc_preach_ce_level_0_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2487
0
{
2488
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_hopping_enabled, 2, ENC_BIG_ENDIAN);
2489
0
}
2490
static void dissect_emtc_preach_ce_level_0_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2491
0
{
2492
0
  uint32_t test_value;
2493
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_0_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2494
2495
0
  if (test_value > 94)
2496
0
  {
2497
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 hopping offset value [0..94]");
2498
0
  }
2499
0
}
2500
static void dissect_emtc_prach_ce_level_1_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2501
0
{
2502
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_enable, 2, ENC_BIG_ENDIAN);
2503
0
}
2504
static void dissect_emtc_prach_ce_level_1_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2505
0
{
2506
0
  uint32_t test_value;
2507
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2508
2509
0
  if (test_value > 63)
2510
0
  {
2511
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 configuration Index value [0..63]");
2512
0
  }
2513
0
}
2514
static void dissect_emtc_prach_ce_level_1_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2515
0
{
2516
0
  uint32_t test_value;
2517
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2518
2519
0
  if (test_value > (100 - 6))
2520
0
  {
2521
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 frequency offset value [0..94]");
2522
0
  }
2523
0
}
2524
static void dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2525
0
{
2526
0
  uint32_t test_value;
2527
0
  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);
2528
2529
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2530
0
    test_value == 64 || test_value == 128))
2531
0
  {
2532
0
    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]");
2533
0
  }
2534
0
}
2535
static void dissect_emtc_ce_level_1_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2536
0
{
2537
0
  uint32_t test_value;
2538
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2539
2540
0
  if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2541
0
    test_value == 64 || test_value == 128 || test_value == 256))
2542
0
  {
2543
0
    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]");
2544
0
  }
2545
0
}
2546
static void dissect_emtc_preach_ce_level_1_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2547
0
{
2548
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_hopping_enabled, 2, ENC_BIG_ENDIAN);
2549
0
}
2550
static void dissect_emtc_preach_ce_level_1_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2551
0
{
2552
0
  uint32_t test_value;
2553
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_1_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2554
2555
0
  if (test_value > 94)
2556
0
  {
2557
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 hopping offset value [0..94]");
2558
0
  }
2559
0
}
2560
static void dissect_emtc_prach_ce_level_2_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2561
0
{
2562
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_enable, 2, ENC_BIG_ENDIAN);
2563
0
}
2564
static void dissect_emtc_prach_ce_level_2_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2565
0
{
2566
0
  uint32_t test_value;
2567
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2568
2569
0
  if (test_value > 63)
2570
0
  {
2571
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration Index value [0..63]");
2572
0
  }
2573
0
}
2574
static void dissect_emtc_prach_ce_level_2_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2575
0
{
2576
0
  uint32_t test_value;
2577
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2578
2579
0
  if (test_value > (100 - 6))
2580
0
  {
2581
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 frequency offset value [0..94]");
2582
0
  }
2583
0
}
2584
static void dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2585
0
{
2586
0
  uint32_t test_value;
2587
0
  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);
2588
2589
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2590
0
    test_value == 64 || test_value == 128))
2591
0
  {
2592
0
    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]");
2593
0
  }
2594
0
}
2595
static void dissect_emtc_ce_level_2_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2596
0
{
2597
0
  uint32_t test_value;
2598
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2599
2600
0
  if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2601
0
    test_value == 64 || test_value == 128 || test_value == 256))
2602
0
  {
2603
0
    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]");
2604
0
  }
2605
0
}
2606
static void dissect_emtc_preach_ce_level_2_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2607
0
{
2608
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_hopping_enabled, 2, ENC_BIG_ENDIAN);
2609
0
}
2610
static void dissect_emtc_preach_ce_level_2_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2611
0
{
2612
0
  uint32_t test_value;
2613
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_2_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2614
2615
0
  if (test_value > 94)
2616
0
  {
2617
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 hopping offset value [0..94]");
2618
0
  }
2619
0
}
2620
static void dissect_emtc_prach_ce_level_3_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2621
0
{
2622
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_enable, 2, ENC_BIG_ENDIAN);
2623
0
}
2624
static void dissect_emtc_prach_ce_level_3_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2625
0
{
2626
0
  uint32_t test_value;
2627
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_configuration_index, 2, ENC_BIG_ENDIAN, &test_value);
2628
2629
0
  if (test_value > 63)
2630
0
  {
2631
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration Index value [0..63]");
2632
0
  }
2633
0
}
2634
static void dissect_emtc_prach_ce_level_3_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2635
0
{
2636
0
  uint32_t test_value;
2637
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_frequency_offset, 2, ENC_BIG_ENDIAN, &test_value);
2638
2639
0
  if (test_value > (100 - 6))
2640
0
  {
2641
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 frequency offset value [0..94]");
2642
0
  }
2643
0
}
2644
static void dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo)
2645
0
{
2646
0
  uint32_t test_value;
2647
0
  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);
2648
2649
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2650
0
    test_value == 64 || test_value == 128))
2651
0
  {
2652
0
    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]");
2653
0
  }
2654
0
}
2655
static void dissect_emtc_ce_level_3_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
2656
0
{
2657
0
  uint32_t test_value;
2658
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN, &test_value);
2659
2660
0
  if (!(test_value == 0xFFF || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16 || test_value == 32 ||
2661
0
    test_value == 64 || test_value == 128 || test_value == 256))
2662
0
  {
2663
0
    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]");
2664
0
  }
2665
0
}
2666
static void dissect_emtc_preach_ce_level_3_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2667
0
{
2668
0
  ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_hopping_enabled, 2, ENC_BIG_ENDIAN);
2669
0
}
2670
static void dissect_emtc_preach_ce_level_3_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo)
2671
0
{
2672
0
  uint32_t test_value;
2673
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_ce_level_3_hopping_offset, 2, ENC_BIG_ENDIAN, &test_value);
2674
2675
0
  if (test_value > 94)
2676
0
  {
2677
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 hopping offset value [0..94]");
2678
0
  }
2679
0
}
2680
static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value(ptvcursor_t * ptvc, packet_info* pinfo)
2681
0
{
2682
0
  uint32_t test_value;
2683
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a, 2, ENC_BIG_ENDIAN, &test_value);
2684
2685
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 5 || test_value == 10 || test_value == 20))
2686
0
  {
2687
0
    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]");
2688
0
  }
2689
0
}
2690
static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value(ptvcursor_t * ptvc, packet_info* pinfo)
2691
0
{
2692
0
  uint32_t test_value;
2693
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b, 2, ENC_BIG_ENDIAN, &test_value);
2694
2695
0
  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))
2696
0
  {
2697
0
    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]");
2698
0
  }
2699
0
}
2700
static void dissect_dl_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2701
0
{
2702
0
  uint64_t test_value64;
2703
0
  proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2704
0
          hf_nfapi_dl_bandwidth_support, ett_nfapi_downlink_bandwidth_support, dl_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
2705
0
  if (test_value64 > 0x3F)
2706
0
  {
2707
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth supported bits [0..0x3F]");
2708
0
  }
2709
2710
0
  ptvcursor_advance(ptvc, 2);
2711
0
}
2712
static void dissect_ul_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2713
0
{
2714
0
  uint64_t test_value64;
2715
0
  proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2716
0
          hf_nfapi_ul_bandwidth_support, ett_nfapi_uplink_bandwidth_support, ul_bandwidth_support_fields, ENC_BIG_ENDIAN, &test_value64);
2717
0
  if (test_value64 > 0x3F)
2718
0
  {
2719
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth supported bits [0..0x3F]");
2720
0
  }
2721
2722
0
  ptvcursor_advance(ptvc, 2);
2723
2724
0
}
2725
static void dissect_dl_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo)
2726
0
{
2727
0
  static int * const dl_modulation_support_fields[] = {
2728
0
    &hf_nfapi_dl_modulation_support_qpsk,
2729
0
    &hf_nfapi_dl_modulation_support_16qam,
2730
0
    &hf_nfapi_dl_modulation_support_64qam,
2731
0
    &hf_nfapi_dl_modulation_support_256qam,
2732
0
    NULL
2733
0
  };
2734
2735
0
  uint64_t test_value64;
2736
0
  proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2737
0
          hf_nfapi_dl_modulation_support, ett_nfapi_downlink_modulation_support, dl_modulation_support_fields, ENC_BIG_ENDIAN, &test_value64);
2738
2739
0
  if (test_value64 > 0xF)
2740
0
  {
2741
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink modulation support bit [0..0xF]");
2742
0
  }
2743
2744
0
  ptvcursor_advance(ptvc, 2);
2745
0
}
2746
static void dissect_ul_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo)
2747
0
{
2748
0
  static int * const ul_modulation_support_fields[] = {
2749
0
    &hf_nfapi_ul_modulation_support_qpsk,
2750
0
    &hf_nfapi_ul_modulation_support_16qam,
2751
0
    &hf_nfapi_ul_modulation_support_64qam,
2752
0
    NULL
2753
0
  };
2754
2755
0
  uint64_t test_value64;
2756
0
  proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2757
0
          hf_nfapi_ul_modulation_support, ett_nfapi_uplink_modulation_support, ul_modulation_support_fields, ENC_BIG_ENDIAN, &test_value64);
2758
2759
0
  if (test_value64 > 0x7)
2760
0
  {
2761
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink modulation support bit [0..0x7]");
2762
0
  }
2763
2764
0
  ptvcursor_advance(ptvc, 2);
2765
0
}
2766
static void dissect_phy_antenna_capability_value(ptvcursor_t * ptvc, packet_info* pinfo)
2767
0
{
2768
0
  uint32_t test_value;
2769
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phy_antenna_capability, 2, ENC_BIG_ENDIAN, &test_value);
2770
2771
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 || test_value == 8 || test_value == 16))
2772
0
  {
2773
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy antenna capability [1, 2, 4, 8, 16]");
2774
0
  }
2775
0
}
2776
static void dissect_release_capability_value(ptvcursor_t * ptvc, packet_info* pinfo)
2777
0
{
2778
0
  uint64_t test_value64;
2779
0
  proto_item* item = proto_tree_add_bitmask_ret_uint64(ptvcursor_tree(ptvc), ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc),
2780
0
                      hf_nfapi_release_capability, ett_nfapi_release_support, maximum_3gpp_release_supported_fields, ENC_BIG_ENDIAN, &test_value64);
2781
0
  if (test_value64 > 0x3F)
2782
0
  {
2783
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid release capability value [0..0x3F]");
2784
0
  }
2785
2786
0
  ptvcursor_advance(ptvc, 2);
2787
0
}
2788
static void dissect_mbsfn_value(ptvcursor_t * ptvc, packet_info *pinfo _U_)
2789
0
{
2790
0
  ptvcursor_add(ptvc, hf_nfapi_mbsfn_capability, 2, ENC_BIG_ENDIAN);
2791
0
}
2792
static void dissect_laa_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2793
0
{
2794
0
  ptvcursor_add(ptvc, hf_nfapi_laa_capability, 2, ENC_BIG_ENDIAN);
2795
2796
0
}
2797
static void dissect_laa_pd_sensing_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2798
0
{
2799
0
  ptvcursor_add(ptvc, hf_nfapi_pd_sensing_lbt_support, 2, ENC_BIG_ENDIAN);
2800
0
}
2801
static void dissect_laa_multi_carrier_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo)
2802
0
{
2803
0
  uint32_t test_value;
2804
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_multi_carrier_lbt_support, 2, ENC_BIG_ENDIAN, &test_value);
2805
2806
0
  if (test_value > 0xF)
2807
0
  {
2808
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi carrier LBT support bit [0..0xF]");
2809
0
  }
2810
0
}
2811
static void dissect_laa_partial_sf_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2812
0
{
2813
0
  ptvcursor_add(ptvc, hf_nfapi_partial_sf_support, 2, ENC_BIG_ENDIAN);
2814
0
}
2815
static void dissect_data_report_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2816
0
{
2817
0
  ptvcursor_add(ptvc, hf_nfapi_data_report_mode, 2, ENC_BIG_ENDIAN);
2818
0
}
2819
static void dissect_sfn_sf_value(ptvcursor_t * ptvc, packet_info* pinfo)
2820
0
{
2821
0
  uint32_t test_value;
2822
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sfnsf, 2, ENC_BIG_ENDIAN, &test_value);
2823
2824
0
  uint32_t sfn = test_value >> 0x4;
2825
0
  uint32_t sf = test_value & 0x000F;
2826
0
  if (sfn > 1023 || sf > 9)
2827
0
  {
2828
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sfn/sf value sfn:%u [0..1023] sf:%u [0..9]", sfn, sf);
2829
0
  }
2830
0
}
2831
static void dissect_phy_state_value(ptvcursor_t * ptvc, packet_info* pinfo)
2832
0
{
2833
0
  uint32_t test_value;
2834
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_phy_state, 2, ENC_BIG_ENDIAN, &test_value);
2835
2836
0
  if (test_value > 2)
2837
0
  {
2838
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy state [0..2]");
2839
0
  }
2840
0
}
2841
static void dissect_p7_vnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2842
0
{
2843
0
  ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv4, 4, ENC_NA);
2844
0
}
2845
static void dissect_p7_vnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2846
0
{
2847
0
  ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv6, 16, ENC_NA);
2848
0
}
2849
static void dissect_p7_vnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2850
0
{
2851
0
  ptvcursor_add(ptvc, hf_nfapi_vnf_port, 2, ENC_BIG_ENDIAN);
2852
0
}
2853
static void dissect_p7_pnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2854
0
{
2855
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv4, 4, ENC_NA);
2856
0
}
2857
static void dissect_p7_pnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2858
0
{
2859
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv6, 16, ENC_NA);
2860
0
}
2861
static void dissect_p7_pnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2862
0
{
2863
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_port, 2, ENC_BIG_ENDIAN);
2864
0
}
2865
static void dissect_downlink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2866
0
{
2867
0
  ptvcursor_add(ptvc, hf_nfapi_dl_ue_per_sf, 1, ENC_BIG_ENDIAN);
2868
0
}
2869
static void dissect_uplink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2870
0
{
2871
0
  ptvcursor_add(ptvc, hf_nfapi_ul_ue_per_sf, 1, ENC_BIG_ENDIAN);
2872
0
}
2873
static void dissect_rf_band_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2874
0
{
2875
0
  ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
2876
0
}
2877
static void dissect_rf_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2878
0
{
2879
0
  uint32_t count;
2880
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2881
0
  dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2882
0
}
2883
static void dissect_timing_window_value(ptvcursor_t * ptvc, packet_info* pinfo)
2884
0
{
2885
0
  uint32_t test_value;
2886
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_window, 1, ENC_BIG_ENDIAN, &test_value);
2887
2888
0
  if (test_value > 30)
2889
0
  {
2890
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing window value [0..30]");
2891
0
  }
2892
0
}
2893
static void dissect_timing_info_mode_value(ptvcursor_t * ptvc, packet_info* pinfo)
2894
0
{
2895
0
  uint32_t test_value;
2896
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_info_mode, 1, ENC_BIG_ENDIAN, &test_value);
2897
2898
0
  if (test_value > 0x3)
2899
0
  {
2900
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info mode [0..0x3]");
2901
0
  }
2902
0
}
2903
static void dissect_timing_info_period_value(ptvcursor_t * ptvc, packet_info* pinfo)
2904
0
{
2905
0
  uint32_t test_value;
2906
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_info_period, 1, ENC_BIG_ENDIAN, &test_value);
2907
2908
0
  if (!(test_value >= 1 && test_value <= 255))
2909
0
  {
2910
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info period [1..255]");
2911
0
  }
2912
0
}
2913
static void dissect_maximum_transmit_power_value(ptvcursor_t * ptvc, packet_info* pinfo)
2914
0
{
2915
0
  uint32_t test_value;
2916
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_maximum_transmit_power_2, 2, ENC_BIG_ENDIAN, &test_value);
2917
2918
0
  if (test_value > 700)
2919
0
  {
2920
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maximum transmit power [0..700]");
2921
0
  }
2922
0
}
2923
static void dissect_earfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
2924
0
{
2925
0
  ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
2926
0
}
2927
static void dissect_nmm_gsm_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2928
0
{
2929
0
  uint32_t count;
2930
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2931
0
  dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2932
0
}
2933
static void dissect_nmm_umts_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2934
0
{
2935
0
  uint32_t count;
2936
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2937
0
  dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2938
0
}
2939
static void dissect_nmm_lte_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo)
2940
0
{
2941
0
  uint32_t count;
2942
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN, &count);
2943
0
  dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
2944
0
}
2945
static void dissect_nmm_uplink_rssi_supported_value(ptvcursor_t * ptvc, packet_info* pinfo)
2946
0
{
2947
0
  uint32_t test_value;
2948
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nmm_uplink_rssi_supported, 1, ENC_BIG_ENDIAN, &test_value);
2949
2950
0
  if (test_value > 1)
2951
0
  {
2952
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm uplink rssi supported value [0..1]");
2953
0
  }
2954
0
}
2955
static void dissect_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
2956
0
{
2957
0
  uint32_t size;
2958
0
  ptvcursor_add(ptvc, hf_nfapi_dl_config_pdu_type, 1, ENC_BIG_ENDIAN);
2959
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
2960
2961
0
  unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
2962
0
  dissect_tlv_list(ptvc, pinfo, pdu_end);
2963
0
}
2964
static void dissect_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
2965
0
{
2966
0
  proto_item* item;
2967
0
  uint32_t test_value, number_of_dcis_value, number_of_pdus_value;
2968
2969
  // Number of PDCCH OFDM symbols
2970
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdcch_ofdm_symbols, 1, ENC_BIG_ENDIAN, &test_value);
2971
0
  if (test_value > 4)
2972
0
  {
2973
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdcch ofdm symbols value [0..4]");
2974
0
  }
2975
2976
  // Number of DCIs
2977
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_dci, 1, ENC_BIG_ENDIAN, &number_of_dcis_value);
2978
2979
  // Number of PDUs
2980
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &number_of_pdus_value);
2981
0
  if (number_of_pdus_value > 514)
2982
0
  {
2983
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [0..514]");
2984
0
  }
2985
2986
  // Number of PDSCH RNTIs
2987
0
  ptvcursor_add(ptvc, hf_nfapi_number_pdsch_rnti, 1, ENC_BIG_ENDIAN);
2988
2989
  // Transmission power for PCFICH
2990
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power_pcfich, 2, ENC_BIG_ENDIAN, &test_value);
2991
0
  if (test_value > 10000)
2992
0
  {
2993
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for pcfich value [0..10000]");
2994
0
  }
2995
2996
0
  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);
2997
0
}
2998
static void dissect_dl_config_request_bch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
2999
0
{
3000
0
  proto_item* item;
3001
0
  uint32_t test_value;
3002
3003
  // Length
3004
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3005
3006
  // PDU index
3007
0
  ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3008
3009
  // Transmission power
3010
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3011
0
  if (test_value > 10000)
3012
0
  {
3013
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3014
0
  }
3015
3016
0
}
3017
static void dissect_dl_config_request_dl_dci_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3018
0
{
3019
0
  proto_item* item;
3020
0
  uint32_t test_value;
3021
3022
  // DCI format
3023
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
3024
0
  if (test_value > 9)
3025
0
  {
3026
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..9]");
3027
0
  }
3028
3029
  // CCE index
3030
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN, &test_value);
3031
0
  if (test_value > 88)
3032
0
  {
3033
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce Index value [0..88]");
3034
0
  }
3035
3036
  // Aggregation level
3037
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
3038
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 ||
3039
0
      test_value == 8 || test_value == 16 || test_value == 32))
3040
0
  {
3041
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8, 16, 32]");
3042
0
  }
3043
3044
  // RNTI
3045
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
3046
0
  if (test_value < 1)
3047
0
  {
3048
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
3049
0
  }
3050
3051
  // Resource allocation type
3052
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3053
0
  if (test_value > 1)
3054
0
  {
3055
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
3056
0
  }
3057
3058
  // Virtual resource block assignment flag
3059
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3060
0
  if (test_value > 1)
3061
0
  {
3062
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
3063
0
  }
3064
3065
  // Resource block coding
3066
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3067
3068
  // MCS_1
3069
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN, &test_value);
3070
0
  if (test_value > 31)
3071
0
  {
3072
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
3073
0
  }
3074
3075
  // Redundancy version_1
3076
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version_1, 1, ENC_BIG_ENDIAN, &test_value);
3077
0
  if (test_value > 3)
3078
0
  {
3079
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 1 value [0..3]");
3080
0
  }
3081
3082
  // New data indicator_1
3083
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator_1, 1, ENC_BIG_ENDIAN, &test_value);
3084
0
  if (test_value > 3)
3085
0
  {
3086
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 1 value [0..1]");
3087
0
  }
3088
3089
  // Transport block to codeword swap flag
3090
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN, &test_value);
3091
0
  if (test_value > 3)
3092
0
  {
3093
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
3094
0
  }
3095
3096
  // MCS_2
3097
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN, &test_value);
3098
0
  if (test_value > 31)
3099
0
  {
3100
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
3101
0
  }
3102
3103
  // Redundancy version_2
3104
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version_2, 1, ENC_BIG_ENDIAN, &test_value);
3105
0
  if (test_value > 3)
3106
0
  {
3107
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 2 value [0..3]");
3108
0
  }
3109
3110
  // New Data indicator_2
3111
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator_2, 1, ENC_BIG_ENDIAN, &test_value);
3112
0
  if (test_value > 3)
3113
0
  {
3114
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 2 value [0..1]");
3115
0
  }
3116
3117
  // HARQ process
3118
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
3119
0
  if (test_value > 3)
3120
0
  {
3121
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
3122
0
  }
3123
3124
  // TPMI
3125
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
3126
0
  if (test_value > 3)
3127
0
  {
3128
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..3]");
3129
0
  }
3130
3131
  // PMI
3132
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN, &test_value);
3133
0
  if (test_value > 2)
3134
0
  {
3135
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..2]");
3136
0
  }
3137
3138
  // Precoding information
3139
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_precoding_information, 1, ENC_BIG_ENDIAN, &test_value);
3140
0
  if (test_value > 2)
3141
0
  {
3142
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid precoding information value [0..15]");
3143
0
  }
3144
3145
  // TPC
3146
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
3147
0
  if (test_value > 3)
3148
0
  {
3149
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
3150
0
  }
3151
3152
  // Downlink assignment index
3153
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
3154
0
  if (test_value > 15)
3155
0
  {
3156
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment value [0..15]");
3157
0
  }
3158
3159
  // NGAP
3160
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3161
0
  if (test_value > 1)
3162
0
  {
3163
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3164
0
  }
3165
3166
  // Transport block size index
3167
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_size_index, 1, ENC_BIG_ENDIAN, &test_value);
3168
0
  if (test_value > 31)
3169
0
  {
3170
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block size Index value [0..31]");
3171
0
  }
3172
3173
  // Downlink power offset
3174
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_power_offset, 1, ENC_BIG_ENDIAN, &test_value);
3175
0
  if (test_value > 1)
3176
0
  {
3177
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power offset value [0..1]");
3178
0
  }
3179
3180
  // Allocate PRACH flag
3181
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN, &test_value);
3182
0
  if (test_value > 1)
3183
0
  {
3184
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
3185
0
  }
3186
3187
  // Preamble index
3188
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN, &test_value);
3189
0
  if (test_value > 63)
3190
0
  {
3191
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble Index value [0..63]");
3192
0
  }
3193
3194
  // PRACH mask index
3195
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN, &test_value);
3196
0
  if (test_value > 15)
3197
0
  {
3198
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask Index value [0..15]");
3199
0
  }
3200
3201
  // RNTI type
3202
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
3203
0
  if (!(test_value >= 1 && test_value <= 3))
3204
0
  {
3205
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [1..3]");
3206
0
  }
3207
3208
  // Transmission power
3209
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3210
0
  if (test_value > 10000)
3211
0
  {
3212
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value value [0..10000]");
3213
0
  }
3214
3215
0
}
3216
static void dissect_dl_config_request_dl_dci_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3217
0
{
3218
0
  proto_item* item;
3219
0
  uint32_t test_value;
3220
3221
  // MCCH flag
3222
0
  ptvcursor_add(ptvc, hf_nfapi_mcch_flag, 1, ENC_BIG_ENDIAN);
3223
3224
  // MCCH change notification
3225
0
  ptvcursor_add(ptvc, hf_nfapi_mcch_change_notification, 1, ENC_BIG_ENDIAN);
3226
3227
  // Scrambling identity
3228
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_scrambling_identity, 1, ENC_BIG_ENDIAN, &test_value);
3229
0
  if (test_value > 1)
3230
0
  {
3231
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid scrambling identity value [0..1]");
3232
0
  }
3233
3234
0
}
3235
static void dissect_dl_config_request_dl_dci_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3236
0
{
3237
0
  proto_item* item;
3238
0
  uint32_t test_value;
3239
3240
  // Cross carrier scheduling flag
3241
0
  ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
3242
3243
  // Carrier indicator
3244
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN, &test_value);
3245
0
  if (test_value > 7)
3246
0
  {
3247
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
3248
0
  }
3249
3250
  // SRS flag
3251
0
  ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
3252
3253
  // SRS request
3254
0
  ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
3255
3256
  // Antenna ports, scrambling and layers
3257
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_ports_scrambling_and_layers, 1, ENC_BIG_ENDIAN, &test_value);
3258
0
  if (test_value > 15)
3259
0
  {
3260
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports scrambling and layers value [0..15]");
3261
0
  }
3262
3263
  // Total DCI length including padding
3264
0
  ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
3265
3266
  // N_DL_RB
3267
  // TODO : This is missing from the encoder....
3268
  //ptvcursor_add(ptvc, hf_nfapi_n_dl_rb, 1, ENC_BIG_ENDIAN);
3269
0
}
3270
static void dissect_dl_config_request_dl_dci_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3271
0
{
3272
0
  proto_item* item;
3273
0
  uint32_t test_value;
3274
3275
  // HARQ-ACK resource offset
3276
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_ack_resource_offset, 1, ENC_BIG_ENDIAN, &test_value);
3277
0
  if (test_value > 3)
3278
0
  {
3279
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid hack ack resource offset value [0..3]");
3280
0
  }
3281
3282
  // PDSCH RE Mapping and Quasi-Co-Location Indicator
3283
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator, 1, ENC_BIG_ENDIAN, &test_value);
3284
0
  if (test_value > 3)
3285
0
  {
3286
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping value [0..3]");
3287
0
  }
3288
3289
0
}
3290
static void dissect_ul_dl_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3291
0
{
3292
0
  uint32_t test_value;
3293
3294
  // UL/DL configuration indication
3295
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_dl_configuration_index, 1, ENC_BIG_ENDIAN, &test_value);
3296
0
  if (!(test_value >= 1 && test_value <= 5))
3297
0
  {
3298
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul/dl configuration indication value [1..5]");
3299
0
  }
3300
0
}
3301
static void dissect_dl_config_request_dl_dci_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
3302
0
{
3303
0
  proto_item* item;
3304
0
  uint32_t test_value, count;
3305
3306
  // Primary cell type
3307
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_primary_cell_type, 1, ENC_BIG_ENDIAN, &test_value);
3308
0
  if (test_value > 2)
3309
0
  {
3310
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary cell type value [0..2]");
3311
0
  }
3312
3313
  // UL/DL configuration flag
3314
0
  ptvcursor_add(ptvc, hf_nfapi_ul_dl_configuration_flag, 1, ENC_BIG_ENDIAN);
3315
3316
  // Number of UL / DL configurations
3317
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ul_dl_configurations, 1, ENC_BIG_ENDIAN, &count);
3318
3319
0
  dissect_array_value(ptvc, pinfo, "UL/DL Configurations", ett_nfapi_pnf_phy, count, dissect_ul_dl_configuration_index_value);
3320
0
}
3321
static void dissect_dl_config_request_dl_dci_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3322
0
{
3323
0
  ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_flag, 1, ENC_BIG_ENDIAN);
3324
0
  ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_configuration, 1, ENC_BIG_ENDIAN);
3325
0
  ptvcursor_add(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN);
3326
0
  ptvcursor_add(ptvc, hf_nfapi_codebooksize_determination_r13, 1, ENC_BIG_ENDIAN);
3327
0
  ptvcursor_add(ptvc, hf_nfapi_rel13_drms_table_flag, 1, ENC_BIG_ENDIAN);
3328
0
}
3329
static void dissect_dl_config_request_mch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3330
0
{
3331
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3332
0
  ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3333
0
  ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
3334
0
  ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
3335
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3336
0
  ptvcursor_add(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN);
3337
0
  ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
3338
0
  ptvcursor_add(ptvc, hf_nfapi_mbsfn_area_id, 2, ENC_BIG_ENDIAN);
3339
0
}
3340
static void dissect_codebook_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3341
0
{
3342
0
  uint32_t test_value;
3343
3344
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN, &test_value);
3345
0
  if (test_value > 15)
3346
0
  {
3347
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [0..15]");
3348
0
  }
3349
0
}
3350
static void dissect_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3351
0
{
3352
0
  ptvcursor_add(ptvc, hf_nfapi_bf_vector_bf_value, 2, ENC_BIG_ENDIAN);
3353
0
}
3354
static void dissect_bf_vector_type_value(ptvcursor_t * ptvc, packet_info* pinfo)
3355
0
{
3356
0
  uint32_t count;
3357
3358
0
  ptvcursor_add(ptvc, hf_nfapi_bf_vector_subband_index, 1, ENC_BIG_ENDIAN);
3359
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_bf_vector_num_antennas, 1, ENC_BIG_ENDIAN, &count);
3360
0
  dissect_array_value(ptvc, pinfo, "Antennas", ett_nfapi_bf_vector_antennas, count, dissect_bf_vector_value);
3361
0
}
3362
static void dissect_dl_config_request_dlsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3363
0
{
3364
0
  proto_item* item;
3365
0
  uint32_t test_value, num_subbands, num_vectors;
3366
3367
  // Length
3368
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3369
3370
  // PDU index
3371
0
  ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3372
3373
  // RNTI
3374
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
3375
0
  if (!(test_value >= 1 /* && rnti_value <= 65535)*/))
3376
0
  {
3377
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [1..65535]");
3378
0
  }
3379
3380
  // Resource allocation type
3381
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3382
0
  if (test_value > 5)
3383
0
  {
3384
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..5]");
3385
0
  }
3386
3387
  // Virtual resource block assignment flag
3388
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3389
0
  if (test_value > 1)
3390
0
  {
3391
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block allocation assignment value [0..1]");
3392
0
  }
3393
3394
  // Resource block coding
3395
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3396
3397
  // Modulation
3398
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN, &test_value);
3399
0
  if (!(test_value == 2 || test_value == 4 || test_value == 6 || test_value == 8))
3400
0
  {
3401
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation value [2, 4, 6, 8]");
3402
0
  }
3403
3404
  // Redundancy version
3405
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
3406
0
  if (test_value > 3)
3407
0
  {
3408
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0..3]");
3409
0
  }
3410
3411
  // Transport blocks
3412
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
3413
0
  if (!(test_value >= 1 && test_value <= 2))
3414
0
  {
3415
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
3416
0
  }
3417
3418
  // Transport block to codeword swap flag
3419
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN, &test_value);
3420
0
  if (test_value > 1)
3421
0
  {
3422
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
3423
0
  }
3424
3425
  // Transmission scheme
3426
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
3427
0
  if (test_value > 13)
3428
0
  {
3429
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..13]");
3430
0
  }
3431
3432
  // Number of layers
3433
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
3434
0
  if (!(test_value >= 1 && test_value <= 8))
3435
0
  {
3436
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..8]");
3437
0
  }
3438
3439
  // Number of subbands
3440
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN, &num_subbands);
3441
0
  if (num_subbands > 13)
3442
0
  {
3443
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of subbands value [0..13]");
3444
0
  }
3445
3446
0
  dissect_array_value(ptvc, pinfo, "Subbands", ett_nfapi_subbands, num_subbands, dissect_codebook_index_value);
3447
3448
  // UE category capacity
3449
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN, &test_value);
3450
0
  if (test_value > 14)
3451
0
  {
3452
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
3453
0
  }
3454
3455
  // P-A
3456
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN, &test_value);
3457
0
  if (test_value > 7)
3458
0
  {
3459
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value [0..7]");
3460
0
  }
3461
3462
  // Delta power offset index
3463
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_power_offset_index, 1, ENC_BIG_ENDIAN, &test_value);
3464
0
  if (test_value > 1)
3465
0
  {
3466
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta power offset value [0..1]");
3467
0
  }
3468
3469
  // NGAP
3470
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3471
0
  if (test_value > 1)
3472
0
  {
3473
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3474
0
  }
3475
3476
  // NPRB
3477
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
3478
0
  if (test_value > 1)
3479
0
  {
3480
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
3481
0
  }
3482
3483
  // Transmission mode
3484
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_mode, 1, ENC_BIG_ENDIAN, &test_value);
3485
0
  if (!(test_value >= 1 && test_value <= 10))
3486
0
  {
3487
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode value [1..10]");
3488
0
  }
3489
3490
  // numBfPRBperSubband
3491
0
  ptvcursor_add(ptvc, hf_nfapi_num_bf_prb_per_subband, 1, ENC_BIG_ENDIAN);
3492
3493
  // numBfVector
3494
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN, &num_vectors);
3495
3496
0
  dissect_array_value(ptvc, pinfo, "Beamforming Vectors", ett_nfapi_bf_vectors, num_vectors, dissect_bf_vector_type_value);
3497
0
}
3498
static void dissect_csi_rs_resource_config_value(ptvcursor_t * ptvc, packet_info* pinfo)
3499
0
{
3500
0
  uint32_t test_value;
3501
3502
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_resource_config, 1, ENC_BIG_ENDIAN, &test_value);
3503
0
  if (test_value > 31)
3504
0
  {
3505
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource config value [0..31]");
3506
0
  }
3507
0
}
3508
static void dissect_dl_config_request_dlsch_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3509
0
{
3510
0
  uint32_t test_value;
3511
3512
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nscid, 1, ENC_BIG_ENDIAN, &test_value);
3513
0
  if (test_value > 1)
3514
0
  {
3515
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nscid value [0..1]");
3516
0
  }
3517
0
}
3518
static void dissect_dl_config_request_dlsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3519
0
{
3520
0
  proto_item* item;
3521
0
  uint32_t test_value, count;
3522
3523
  // CSI-RS flag
3524
0
  ptvcursor_add(ptvc, hf_nfapi_csi_rs_flag, 1, ENC_BIG_ENDIAN);
3525
3526
  // CSI-RS resource config R10
3527
0
  ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
3528
3529
  // CSI-RS zero Tx power resource config bitmap R10
3530
0
  ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
3531
3532
  // CSI-RS Number of NZP configuration
3533
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN, &count);
3534
0
  if (count > 3)
3535
0
  {
3536
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..3]");
3537
0
  }
3538
3539
  // CSI-RS configuration
3540
0
  dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
3541
3542
  // PDSCH start
3543
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_start, 1, ENC_BIG_ENDIAN, &test_value);
3544
0
  if (test_value > 4)
3545
0
  {
3546
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch start value [0..4]");
3547
0
  }
3548
3549
0
}
3550
static void dissect_dl_config_request_dlsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3551
0
{
3552
0
  proto_item* item;
3553
0
  uint32_t test_value;
3554
3555
  // DMRS Config flag
3556
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
3557
0
  if (test_value > 1)
3558
0
  {
3559
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
3560
0
  }
3561
3562
  // DMRS-Scrambling
3563
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrambling, 2, ENC_BIG_ENDIAN, &test_value);
3564
0
  if (test_value > 503)
3565
0
  {
3566
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling value [0..503]");
3567
0
  }
3568
3569
  // CSI Config flag
3570
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
3571
0
  if (test_value > 1)
3572
0
  {
3573
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi config flag value [0..1]");
3574
0
  }
3575
3576
  // CSI- Scrambling
3577
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_scrambling, 2, ENC_BIG_ENDIAN, &test_value);
3578
0
  if (test_value > 503)
3579
0
  {
3580
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi scrambling value [0..503]");
3581
0
  }
3582
3583
  // PDSCH RE mapping flag
3584
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_flag, 1, ENC_BIG_ENDIAN, &test_value);
3585
0
  if (test_value > 1)
3586
0
  {
3587
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping flag value [0..1]");
3588
0
  }
3589
3590
  // PDSCH RE mapping antenna ports
3591
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_antenna_ports, 1, ENC_BIG_ENDIAN, &test_value);
3592
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4))
3593
0
  {
3594
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping antenna ports value [1, 2, 4]");
3595
0
  }
3596
3597
  // PDSCH RE mapping freq shift
3598
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_re_mapping_freq_shift, 1, ENC_BIG_ENDIAN, &test_value);
3599
0
  if (test_value > 5)
3600
0
  {
3601
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping freq shift value [0..5]");
3602
0
  }
3603
0
}
3604
static void dissect_dl_config_request_dlsch_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
3605
0
{
3606
0
  proto_item* item;
3607
0
  uint32_t test_value;
3608
3609
  // altCQI-Table-r12
3610
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_alt_cqi_table_r12, 1, ENC_BIG_ENDIAN, &test_value);
3611
0
  if (test_value > 1)
3612
0
  {
3613
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alt cqi table r12 value [0..1]");
3614
0
  }
3615
3616
  // MaxLayers
3617
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_max_layers, 1, ENC_BIG_ENDIAN, &test_value);
3618
0
  if (!(test_value >= 1 && test_value <= 8))
3619
0
  {
3620
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid max layers value [1..8]");
3621
0
  }
3622
3623
0
  ptvcursor_add(ptvc, hf_nfapi_n_dl_harq, 1, ENC_BIG_ENDIAN);
3624
0
}
3625
static void dissect_dl_config_request_dlsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3626
0
{
3627
0
  proto_item* item;
3628
0
  uint32_t test_value;
3629
3630
  // DwPTS Symbols
3631
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN, &test_value);
3632
0
  if (!(test_value == 3 || test_value == 6 || test_value == 9 ||
3633
0
    test_value == 10 || test_value == 11 || test_value == 12 ||
3634
0
    test_value == 14))
3635
0
  {
3636
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
3637
0
  }
3638
3639
  // Initial LBT SF
3640
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN, &test_value);
3641
0
  if (test_value > 1)
3642
0
  {
3643
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
3644
0
  }
3645
3646
  // UE Type
3647
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
3648
0
  if (test_value > 2)
3649
0
  {
3650
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
3651
0
  }
3652
3653
  // PDSCH Payload Type
3654
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_payload_type, 1, ENC_BIG_ENDIAN, &test_value);
3655
0
  if (test_value > 2)
3656
0
  {
3657
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch payload type value [0..2]");
3658
0
  }
3659
3660
  // Initial transmission SF (io)
3661
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
3662
0
  if (!(test_value <= 10239 || test_value == 0xFFFF))
3663
0
  {
3664
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
3665
0
  }
3666
3667
  // Rel-13-DMRS-tabe flag
3668
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_req13_drms_table_flag, 1, ENC_BIG_ENDIAN, &test_value);
3669
0
  if (test_value > 1)
3670
0
  {
3671
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rel13 drms table flag value [0..1]");
3672
0
  }
3673
0
}
3674
static void dissect_dl_config_request_pch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
3675
0
{
3676
0
  proto_item* item;
3677
0
  uint32_t test_value;
3678
3679
  // Length
3680
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
3681
3682
  // PDU index
3683
0
  ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
3684
3685
  // P-RNTI
3686
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prnti, 2, ENC_BIG_ENDIAN, &test_value);
3687
0
  if (test_value != 0xFFFE)
3688
0
  {
3689
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prnti value [0xFFFE]");
3690
0
  }
3691
3692
  // Resource allocation type
3693
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
3694
0
  if (!(test_value == 2 || test_value == 3 || test_value == 6))
3695
0
  {
3696
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocate type value [2, 3, 6]");
3697
0
  }
3698
3699
  // Virtual resource block assignment flag
3700
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3701
0
  if (test_value > 1)
3702
0
  {
3703
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
3704
0
  }
3705
3706
  // Resource block coding
3707
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
3708
3709
  // MCS
3710
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
3711
0
  if (test_value != 0)
3712
0
  {
3713
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0]");
3714
0
  }
3715
3716
  // Redundancy version
3717
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
3718
0
  if (test_value != 0)
3719
0
  {
3720
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0]");
3721
0
  }
3722
3723
  // Number of transport blocks
3724
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
3725
0
  if (test_value != 1)
3726
0
  {
3727
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1]");
3728
0
  }
3729
3730
  // Transport block to codeword swap flag
3731
0
  ptvcursor_add(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN);
3732
3733
  // Transmission scheme
3734
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
3735
0
  if (!(test_value == 0 || test_value == 1 || test_value == 6))
3736
0
  {
3737
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission schemes value [0, 1, 6]");
3738
0
  }
3739
3740
  // Number of layers
3741
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
3742
0
  if (!(test_value >= 1 && test_value <= 4))
3743
0
  {
3744
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
3745
0
  }
3746
3747
  // Codebook index
3748
0
  ptvcursor_add(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN);
3749
3750
  // UE category capacity
3751
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN, &test_value);
3752
0
  if (test_value > 14)
3753
0
  {
3754
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
3755
0
  }
3756
3757
  // P-A
3758
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN, &test_value);
3759
0
  if (test_value > 7)
3760
0
  {
3761
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value value [0..7]");
3762
0
  }
3763
3764
  // Transmission power
3765
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3766
0
  if (test_value > 10000)
3767
0
  {
3768
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3769
0
  }
3770
3771
  // NPRB
3772
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
3773
0
  if (test_value > 1)
3774
0
  {
3775
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
3776
0
  }
3777
3778
  // NGAP
3779
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN, &test_value);
3780
0
  if (test_value > 1)
3781
0
  {
3782
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
3783
0
  }
3784
3785
0
}
3786
static void dissect_dl_config_request_pch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3787
0
{
3788
0
  proto_item* item;
3789
0
  uint32_t test_value;
3790
3791
  // UE mode
3792
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_mode, 1, ENC_BIG_ENDIAN, &test_value);
3793
0
  if (test_value > 1)
3794
0
  {
3795
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue mode value [0..1]");
3796
0
  }
3797
3798
  // Initial transmission SF (io)
3799
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
3800
0
  if (!(test_value <= 10239 || test_value == 0xFFFF))
3801
0
  {
3802
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
3803
0
  }
3804
0
}
3805
static void dissect_dl_config_request_prs_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
3806
0
{
3807
0
  proto_item* item;
3808
0
  uint32_t test_value;
3809
3810
  // Transmission power
3811
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3812
0
  if (test_value > 10000)
3813
0
  {
3814
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3815
0
  }
3816
3817
  // PRS bandwidth
3818
0
  item = ptvcursor_add_ret_uint(ptvc, hf_prs_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
3819
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
3820
0
      test_value == 50 || test_value == 75 || test_value == 100))
3821
0
  {
3822
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prs bandwidth value [6, 15, 25, 50, 75, 100]");
3823
0
  }
3824
3825
  // PRS cyclic prefix type
3826
0
  ptvcursor_add(ptvc, hf_prs_cyclic_prefix_type, 1, ENC_BIG_ENDIAN);
3827
3828
  // PRS muting
3829
0
  ptvcursor_add(ptvc, hf_prs_muting, 1, ENC_BIG_ENDIAN);
3830
0
}
3831
static void dissect_dl_config_request_csi_rs_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
3832
0
{
3833
0
  proto_item* item;
3834
0
  uint32_t test_value, count;
3835
3836
  // CSI-RS antenna port count R10
3837
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_antenna_port_count_r10, 1, ENC_BIG_ENDIAN, &test_value);
3838
0
  if (!(test_value == 1 || test_value == 2 ||
3839
0
      test_value == 4 || test_value == 8 ||
3840
0
      test_value == 12 || test_value == 16))
3841
0
  {
3842
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs antenna port count r10 value [1, 2, 4, 6, 8, 10]");
3843
0
  }
3844
3845
  // CSI-RS resource config R10
3846
0
  ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
3847
3848
  // Transmission power
3849
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
3850
0
  if (test_value > 10000)
3851
0
  {
3852
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
3853
0
  }
3854
3855
  // CSI-RS zero Tx power resource config bitmap R10
3856
0
  ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
3857
3858
  // CSI-RS Number of NZP configuration
3859
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN, &count);
3860
0
  if (count > 8)
3861
0
  {
3862
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..8]");
3863
0
  }
3864
3865
  // CSI-RS configuration
3866
0
  dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
3867
0
}
3868
static void dissect_csi_rs_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo)
3869
0
{
3870
0
  uint32_t count;
3871
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_resource_index, 1, ENC_BIG_ENDIAN, &count);
3872
0
  if (count > 7)
3873
0
  {
3874
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource Index value [0..7]");
3875
0
  }
3876
3877
  // todo : how to work out the antenna port count for the bfValue
3878
0
}
3879
static void dissect_dl_config_request_csi_rs_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3880
0
{
3881
0
  proto_item* item;
3882
0
  uint32_t test_value, class_value, count;
3883
3884
  // Class
3885
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_rs_class, 1, ENC_BIG_ENDIAN, &class_value);
3886
0
  if (class_value > 2)
3887
0
  {
3888
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid class value [0..2]");
3889
0
  }
3890
3891
  // cdmType
3892
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_type, 1, ENC_BIG_ENDIAN, &test_value);
3893
0
  if (test_value > 1)
3894
0
  {
3895
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm type value [0..1]");
3896
0
  }
3897
3898
  // numBfVector
3899
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN, &count);
3900
0
  if (!((class_value == 1 && count == 0) || (class_value == 2 && count <= 8)))
3901
0
  {
3902
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num bf vector value [0] or [0..8]");
3903
0
  }
3904
3905
0
  dissect_array_value(ptvc, pinfo, "Beamforming Vector", ett_nfapi_csi_rs_bf_vector, count, dissect_csi_rs_bf_vector_value);
3906
0
}
3907
static void dissect_epdcch_prb_index_value(ptvcursor_t * ptvc, packet_info* pinfo)
3908
0
{
3909
0
  uint32_t test_value;
3910
3911
  // EPDCCH PRB index
3912
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_prb_index, 1, ENC_BIG_ENDIAN, &test_value);
3913
0
  if (test_value > 99)
3914
0
  {
3915
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch prb_index value [0..99]");
3916
0
  }
3917
0
}
3918
static void dissect_dl_config_request_depdcch_params_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
3919
0
{
3920
0
  proto_item* item;
3921
0
  uint32_t test_value, count;
3922
3923
  // EPDCCH Resource assignment flag
3924
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_resource_assignment_flag, 1, ENC_BIG_ENDIAN, &test_value);
3925
0
  if (test_value > 1)
3926
0
  {
3927
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch resource assignment flag value [0..1]");
3928
0
  }
3929
3930
  // EPDCCH ID
3931
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_id, 2, ENC_BIG_ENDIAN, &test_value);
3932
0
  if (test_value > 503)
3933
0
  {
3934
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch id value [0..503]");
3935
0
  }
3936
3937
  // EPDCCH Start Symbol
3938
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
3939
0
  if (!(test_value >= 1 && test_value <= 4))
3940
0
  {
3941
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch start symbol value [1..4]");
3942
0
  }
3943
3944
  // EPDCCH NumPRB
3945
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_epdcch_num_prb, 1, ENC_BIG_ENDIAN, &count);
3946
0
  if (!(count == 2 || count == 4 || count == 8))
3947
0
  {
3948
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch num prb value [2, 4, 8]");
3949
0
  }
3950
3951
0
  dissect_array_value(ptvc, pinfo, "PRBs", ett_nfapi_epdcch_prbs, count, dissect_epdcch_prb_index_value);
3952
3953
0
  dissect_bf_vector_type_value(ptvc, pinfo);
3954
0
}
3955
static void dissect_dl_config_request_depdcch_params_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3956
0
{
3957
0
  proto_item* item;
3958
0
  uint32_t test_value;
3959
3960
  // DwPTS Symbols
3961
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN, &test_value);
3962
0
  if (!(test_value == 3 || test_value == 6 || test_value == 9 ||
3963
0
    test_value == 10 || test_value == 11 || test_value == 12 ||
3964
0
    test_value == 14))
3965
0
  {
3966
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
3967
0
  }
3968
3969
  // Initial LBT SF
3970
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN, &test_value);
3971
0
  if (test_value > 1)
3972
0
  {
3973
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
3974
0
  }
3975
3976
0
}
3977
static void dissect_precoding_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
3978
0
{
3979
0
  ptvcursor_add(ptvc, hf_nfapi_precoding_value, 2, ENC_BIG_ENDIAN);
3980
0
}
3981
static void dissect_dl_config_request_mpdpcch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
3982
0
{
3983
0
  proto_item* item;
3984
0
  uint32_t test_value, count;
3985
3986
  // MPDCCH Narrowband
3987
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN, &test_value);
3988
0
  if (test_value > 15)
3989
0
  {
3990
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
3991
0
  }
3992
3993
  // Number of PRB pairs
3994
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN, &test_value);
3995
0
  if (!(test_value == 2 || test_value == 4 || test_value == 6))
3996
0
  {
3997
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pair value [2, 4, 6]");
3998
0
  }
3999
4000
  // Resource Block Assignment
4001
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN, &test_value);
4002
0
  if (test_value > 14)
4003
0
  {
4004
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
4005
0
  }
4006
4007
  // MPDCCH transmission type
4008
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN, &test_value);
4009
0
  if (test_value > 1)
4010
0
  {
4011
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
4012
0
  }
4013
4014
  // Start symbol
4015
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
4016
0
  if (!(test_value >= 1 && test_value <=4))
4017
0
  {
4018
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [1..4]");
4019
0
  }
4020
4021
  // ECCE index
4022
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN, &test_value);
4023
0
  if (test_value > 22)
4024
0
  {
4025
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce Index value [0..22]");
4026
0
  }
4027
4028
  // Aggregation level
4029
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
4030
0
  if (!(test_value == 2 || test_value == 4 || test_value == 8 ||
4031
0
    test_value == 16 || test_value == 24))
4032
0
  {
4033
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
4034
0
  }
4035
4036
  // RNTI type
4037
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
4038
0
  if (test_value > 4)
4039
0
  {
4040
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0..4]");
4041
0
  }
4042
4043
  // RNTI
4044
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4045
0
  if (!(test_value >= 1))
4046
0
  {
4047
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4048
0
  }
4049
4050
  // CEMode
4051
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN, &test_value);
4052
0
  if (!(test_value >= 1 && test_value <= 2))
4053
0
  {
4054
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1..2]");
4055
0
  }
4056
4057
  // DMRS scrambling init
4058
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrabmling_init, 2, ENC_BIG_ENDIAN, &test_value);
4059
0
  if (test_value > 503)
4060
0
  {
4061
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
4062
0
  }
4063
4064
  // Initial transmission SF (io)
4065
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
4066
0
  if (!(test_value <= 10239 || test_value == 0xFFFF))
4067
0
  {
4068
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
4069
0
  }
4070
4071
  // Transmission power
4072
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
4073
0
  if (test_value > 10000)
4074
0
  {
4075
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
4076
0
  }
4077
4078
  // DCI format
4079
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
4080
0
  if (!(test_value == 10 || test_value == 11 || test_value == 12))
4081
0
  {
4082
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [10, 11, 12]");
4083
0
  }
4084
4085
  // Resource block coding
4086
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 2, ENC_BIG_ENDIAN);
4087
4088
  // MCS
4089
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
4090
0
  if (test_value > 15)
4091
0
  {
4092
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..15]");
4093
0
  }
4094
4095
  // PDSCH repetition levels
4096
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdsch_reception_levels, 1, ENC_BIG_ENDIAN, &test_value);
4097
0
  if (!(test_value >= 1 && test_value <= 8))
4098
0
  {
4099
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch repetition levels value [1..8]");
4100
0
  }
4101
4102
  // Redundancy version
4103
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
4104
0
  if (test_value > 3)
4105
0
  {
4106
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
4107
0
  }
4108
4109
  // New data indicator
4110
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indicator, 1, ENC_BIG_ENDIAN, &test_value);
4111
0
  if (test_value > 1)
4112
0
  {
4113
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
4114
0
  }
4115
4116
  // HARQ process
4117
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
4118
0
  if (test_value > 15)
4119
0
  {
4120
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
4121
0
  }
4122
4123
  // TPMI length
4124
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi_length, 1, ENC_BIG_ENDIAN, &test_value);
4125
0
  if (!(test_value == 0 || test_value == 2 || test_value == 4))
4126
0
  {
4127
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi length value [0, 2, 4]");
4128
0
  }
4129
4130
  // TPMI
4131
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
4132
0
  if (test_value > 15)
4133
0
  {
4134
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..15]");
4135
0
  }
4136
4137
  // PMI flag
4138
0
  ptvcursor_add(ptvc, hf_nfapi_pmi_flag, 1, ENC_BIG_ENDIAN);
4139
4140
  // PMI
4141
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN, &test_value);
4142
0
  if (test_value > 1)
4143
0
  {
4144
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pmi value [0..1]");
4145
0
  }
4146
4147
  // HARQ resource offset
4148
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_resource_offset, 1, ENC_BIG_ENDIAN, &test_value);
4149
0
  if (test_value > 3)
4150
0
  {
4151
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq resource offset value [0..3]");
4152
0
  }
4153
4154
  // DCI subframe repetition number
4155
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN, &test_value);
4156
0
  if (!(test_value >= 1 && test_value <= 4))
4157
0
  {
4158
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
4159
0
  }
4160
4161
  // TPC
4162
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
4163
0
  if (test_value > 3)
4164
0
  {
4165
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
4166
0
  }
4167
4168
  // Downlink assignment Index Length
4169
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index_length, 1, ENC_BIG_ENDIAN, &test_value);
4170
0
  if (!(test_value == 0 || test_value == 2 || test_value == 4))
4171
0
  {
4172
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment Index length value [0, 2, 4]");
4173
0
  }
4174
4175
  // Downlink assignment index
4176
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
4177
0
  if (test_value > 15)
4178
0
  {
4179
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment Index value [0..15]");
4180
0
  }
4181
4182
  // Allocate PRACH flag
4183
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN, &test_value);
4184
0
  if (test_value > 1)
4185
0
  {
4186
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
4187
0
  }
4188
4189
  // Preamble index
4190
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN, &test_value);
4191
0
  if (test_value > 63)
4192
0
  {
4193
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble Index value [0..63]");
4194
0
  }
4195
4196
  // PRACH mask index
4197
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN, &test_value);
4198
0
  if (test_value > 15)
4199
0
  {
4200
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask Index value [0..15]");
4201
0
  }
4202
4203
  // Starting CE Level
4204
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_starting_ce_level, 1, ENC_BIG_ENDIAN, &test_value);
4205
0
  if (test_value > 3)
4206
0
  {
4207
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting ce level value [0..3]");
4208
0
  }
4209
4210
  // SRS request
4211
0
  ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
4212
4213
  // Antenna ports and scrambling identity flag
4214
0
  ptvcursor_add(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity_flag, 1, ENC_BIG_ENDIAN);
4215
4216
  // Antenna ports and scrambling identity
4217
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity, 1, ENC_BIG_ENDIAN, &test_value);
4218
0
  if (test_value > 3)
4219
0
  {
4220
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports and scrambling identity value [0..3]");
4221
0
  }
4222
4223
  // Frequency hopping enabled flag
4224
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4225
0
  if (test_value > 1)
4226
0
  {
4227
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
4228
0
  }
4229
4230
  // Paging/Direct indication differentiation flag
4231
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_paging_direct_indication_differentiation_flag, 1, ENC_BIG_ENDIAN, &test_value);
4232
0
  if (test_value > 1)
4233
0
  {
4234
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid paging/direct indication differentiation flag value [0..1]");
4235
0
  }
4236
4237
  // Direct indication
4238
0
  ptvcursor_add(ptvc, hf_nfapi_direct_indication, 1, ENC_BIG_ENDIAN);
4239
4240
  // Total DCI length including padding
4241
0
  ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
4242
4243
  // Number of TX Antenna ports
4244
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN, &count);
4245
4246
0
  dissect_array_value(ptvc, pinfo, "Precoding", ett_nfapi_precoding, count, dissect_precoding_value);
4247
0
}
4248
static void dissect_ul_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
4249
0
{
4250
0
  proto_item* item;
4251
0
  uint32_t test_value, size;
4252
4253
  // PDU Type
4254
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_config_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
4255
0
  if (test_value > 15)
4256
0
  {
4257
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul pdu type value [0..15]");
4258
0
  }
4259
4260
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
4261
4262
0
  unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
4263
0
  dissect_tlv_list(ptvc, pinfo, pdu_end);
4264
0
}
4265
static void dissect_ul_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
4266
0
{
4267
0
  proto_item* item;
4268
0
  uint32_t test_value, num_pdu;
4269
4270
  // Number of PDUs
4271
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 1, ENC_BIG_ENDIAN, &num_pdu);
4272
4273
  // RACH/PRACH frequency resources
4274
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rach_prach_frequency_resources, 1, ENC_BIG_ENDIAN, &test_value);
4275
0
  if (test_value > 1)
4276
0
  {
4277
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach prach frequency resources value [0..1]");
4278
0
  }
4279
4280
  // SRS present
4281
0
  ptvcursor_add(ptvc, hf_nfapi_srs_present, 1, ENC_BIG_ENDIAN);
4282
4283
0
  dissect_array_value(ptvc, pinfo, "UL Config PDU List", ett_nfapi_ul_config_request_pdu_list, num_pdu, dissect_ul_config_pdu);
4284
0
}
4285
static void dissect_ul_config_ulsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4286
0
{
4287
0
  proto_item* item;
4288
0
  uint32_t test_value;
4289
4290
  // Handle
4291
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
4292
4293
  // Size
4294
0
  ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
4295
4296
  // RNTI
4297
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4298
0
  if (!(test_value >= 1))
4299
0
  {
4300
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4301
0
  }
4302
4303
  // Resource block start
4304
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
4305
0
  if (test_value > 99)
4306
0
  {
4307
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
4308
0
  }
4309
4310
  // Number of resource blocks
4311
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4312
0
  if (!(test_value >= 1 && test_value <= 100))
4313
0
  {
4314
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..100]");
4315
0
  }
4316
4317
  // Modulation type
4318
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN, &test_value);
4319
0
  if (!(test_value == 2 || test_value == 4 || test_value == 6))
4320
0
  {
4321
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation type value [2, 4, 6]");
4322
0
  }
4323
4324
  // Cyclic Shift 2 for DMRS
4325
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
4326
0
  if (test_value > 99)
4327
0
  {
4328
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
4329
0
  }
4330
4331
  // Frequency hopping enabled flag
4332
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4333
0
  if (test_value > 1)
4334
0
  {
4335
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
4336
0
  }
4337
4338
  // Frequency hopping bits
4339
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN, &test_value);
4340
0
  if (test_value > 3)
4341
0
  {
4342
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
4343
0
  }
4344
4345
  // New data indication
4346
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
4347
0
  if (test_value > 1)
4348
0
  {
4349
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
4350
0
  }
4351
4352
  // Redundancy version
4353
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
4354
0
  if (test_value > 3)
4355
0
  {
4356
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
4357
0
  }
4358
4359
  // HARQ process number
4360
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process_number, 1, ENC_BIG_ENDIAN, &test_value);
4361
0
  if (test_value > 15)
4362
0
  {
4363
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process number value [0..15]");
4364
0
  }
4365
4366
  // UL Tx mode
4367
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_tx_mode, 1, ENC_BIG_ENDIAN, &test_value);
4368
0
  if (test_value > 1)
4369
0
  {
4370
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul tx mode value [0..1]");
4371
0
  }
4372
4373
  // Current TX NB
4374
0
  ptvcursor_add(ptvc, hf_nfapi_current_tx_nb, 1, ENC_BIG_ENDIAN);
4375
4376
  // N srs
4377
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_srs, 1, ENC_BIG_ENDIAN, &test_value);
4378
0
  if (test_value > 1)
4379
0
  {
4380
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n_srs value [0..1]");
4381
0
  }
4382
0
}
4383
static void dissect_ul_config_ulsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4384
0
{
4385
0
  proto_item* item;
4386
0
  uint32_t test_value;
4387
4388
  // Resource allocation type
4389
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
4390
0
  if (test_value > 1)
4391
0
  {
4392
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
4393
0
  }
4394
4395
  // Resource block coding
4396
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
4397
4398
  // Transport blocks
4399
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4400
0
  if (!(test_value >= 1 && test_value <= 2))
4401
0
  {
4402
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
4403
0
  }
4404
4405
  // Transmission scheme
4406
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_transmission_scheme, 1, ENC_BIG_ENDIAN, &test_value);
4407
0
  if (test_value > 1)
4408
0
  {
4409
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..1]");
4410
0
  }
4411
4412
  // Number Of layers
4413
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN, &test_value);
4414
0
  if (!(test_value >= 1 && test_value <=4 ))
4415
0
  {
4416
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
4417
0
  }
4418
4419
  // Codebook Index
4420
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN, &test_value);
4421
0
  if (test_value > 23)
4422
0
  {
4423
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook Index value [0..23]");
4424
0
  }
4425
4426
  // Disable sequence hopping flag
4427
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_disable_sequence_hopping_flag, 1, ENC_BIG_ENDIAN, &test_value);
4428
0
  if (test_value > 1)
4429
0
  {
4430
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid disable sequence hopping flag value [0..1]");
4431
0
  }
4432
0
}
4433
static void dissect_ul_config_ulsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
4434
0
{
4435
0
  proto_item* item;
4436
0
  uint32_t test_value;
4437
4438
  // Virtual cell ID enabled flag
4439
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4440
0
  if (test_value > 1)
4441
0
  {
4442
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
4443
0
  }
4444
4445
  // nPUSCH Identity
4446
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_npusch_identity, 2, ENC_BIG_ENDIAN, &test_value);
4447
0
  if (test_value > 509)
4448
0
  {
4449
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npusch identity value [0..509]");
4450
0
  }
4451
4452
  // DMRS Config flag
4453
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN, &test_value);
4454
0
  if (test_value > 1)
4455
0
  {
4456
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
4457
0
  }
4458
4459
  // nDMRS-CSH Identity
4460
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ndrms_csh_identity, 2, ENC_BIG_ENDIAN, &test_value);
4461
0
  if (test_value > 509)
4462
0
  {
4463
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ndrms-csh identity value [0..509]");
4464
0
  }
4465
4466
0
}
4467
static void dissect_ul_config_ulsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4468
0
{
4469
0
  proto_item* item;
4470
0
  uint32_t test_value;
4471
4472
  // UE Type
4473
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
4474
0
  if (test_value > 2)
4475
0
  {
4476
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
4477
0
  }
4478
4479
  // Total Number of repetitions
4480
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN, &test_value);
4481
0
  if (!(test_value >= 1 && test_value <= 2048))
4482
0
  {
4483
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..2048]");
4484
0
  }
4485
4486
  // Repetition Number
4487
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN, &test_value);
4488
0
  if (!(test_value >= 1 && test_value <= 2048))
4489
0
  {
4490
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..2048]");
4491
0
  }
4492
4493
  // Initial transmission SF (io)
4494
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_sf_io, 2, ENC_BIG_ENDIAN, &test_value);
4495
0
  if (!(test_value <= 10239 || test_value == 0xFFFF))
4496
0
  {
4497
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [0..10239, 0xFFFF]");
4498
0
  }
4499
4500
  // Empty symbols due to re-tunning
4501
  // todo : decode as a bitmap
4502
0
  ptvcursor_add(ptvc, hf_nfapi_empty_symbols_due_to_retunning, 1, ENC_BIG_ENDIAN);
4503
0
}
4504
static void dissect_ul_config_init_tx_params_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4505
0
{
4506
0
  proto_item* item;
4507
0
  uint32_t test_value;
4508
4509
  // N srs initial
4510
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_srs_initial, 1, ENC_BIG_ENDIAN, &test_value);
4511
0
  if (test_value > 1)
4512
0
  {
4513
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs initial value [0..1]");
4514
0
  }
4515
4516
  // Initial number of resource blocks
4517
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
4518
0
  if (!(test_value >= 1 && test_value <= 100))
4519
0
  {
4520
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial number of resource blocks value [1..100]");
4521
0
  }
4522
4523
0
}
4524
static void dissect_ul_config_cqi_ri_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4525
0
{
4526
0
  proto_item* item;
4527
0
  uint32_t test_value;
4528
4529
  // DL CQI/PMI Size Rank = 1
4530
0
  ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_1, 1, ENC_BIG_ENDIAN);
4531
4532
  // DL CQI/PMI Size Rank>1
4533
0
  ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_greater_1, 1, ENC_BIG_ENDIAN);
4534
4535
  // RI Size
4536
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN, &test_value);
4537
0
  if (test_value > 3)
4538
0
  {
4539
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri size value [0..3]");
4540
0
  }
4541
4542
  // Delta Offset CQI
4543
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN, &test_value);
4544
0
  if (test_value > 15)
4545
0
  {
4546
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
4547
0
  }
4548
4549
  // Delta Offset RI
4550
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN, &test_value);
4551
0
  if (test_value > 15)
4552
0
  {
4553
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
4554
0
  }
4555
4556
0
}
4557
static void dissect_ul_config_cqi_ri_info_rel9_later_value(ptvcursor_t * ptvc, packet_info* pinfo)
4558
0
{
4559
0
  proto_item* item;
4560
0
  uint32_t test_value;
4561
0
  bool type;
4562
4563
  // Report type
4564
0
  ptvcursor_add_ret_boolean(ptvc, hf_nfapi_report_type, 1, ENC_BIG_ENDIAN, &type);
4565
4566
  // Delta offset CQI
4567
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN, &test_value);
4568
0
  if (test_value > 15)
4569
0
  {
4570
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
4571
0
  }
4572
4573
  // Delta offset RI
4574
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN, &test_value);
4575
0
  if (test_value > 15)
4576
0
  {
4577
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
4578
0
  }
4579
4580
0
  if (type)
4581
0
  {
4582
    // todo : encoder not right for this case.
4583
0
    ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cc, 1, ENC_BIG_ENDIAN, &test_value);
4584
4585
0
    if (!(test_value >= 1 && test_value <= 32))
4586
0
    {
4587
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of cc value [1..32]");
4588
0
    }
4589
4590
    /*
4591
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "CCs");
4592
4593
    for (int i = 0; i < num_cc; ++i)
4594
    {
4595
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", i);
4596
4597
      uint8_t ri_size = tvb_get_uint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
4598
      ptvcursor_add(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN);
4599
4600
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Rank");
4601
4602
      for (int j = 0; j < ri_size; ++j)
4603
      {
4604
        ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", j);
4605
        ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
4606
        ptvcursor_pop_subtree(ptvc);
4607
      }
4608
4609
      ptvcursor_pop_subtree(ptvc);
4610
4611
      ptvcursor_pop_subtree(ptvc);
4612
    }
4613
4614
    ptvcursor_pop_subtree(ptvc);
4615
    */
4616
0
  } else {
4617
    // DL CQI/PMI/RI size
4618
0
    ptvcursor_add(ptvc, hf_nfapi_dl_cqi_ri_pmi_size, 1, ENC_BIG_ENDIAN);
4619
4620
    // Control Type
4621
0
    ptvcursor_add(ptvc, hf_nfapi_control_type, 1, ENC_BIG_ENDIAN);
4622
0
  }
4623
0
}
4624
static void dissect_ul_config_cqi_ri_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4625
0
{
4626
0
  uint32_t test_value;
4627
4628
  // DL CQI/PMI/RI size 2
4629
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_cqi_ri_pmi_size_2, 2, ENC_BIG_ENDIAN, &test_value);
4630
0
  if (test_value < 255)
4631
0
  {
4632
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl cqi ri pmi size 2 value [>= 255]");
4633
0
  }
4634
0
}
4635
static void dissect_ul_config_harq_info_ulsch_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4636
0
{
4637
0
  proto_item* item;
4638
0
  uint32_t test_value;
4639
4640
  // HARQ Size
4641
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4642
0
  if (test_value > 21)
4643
0
  {
4644
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
4645
0
  }
4646
4647
  // Delta Offset HARQ
4648
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_harq, 1, ENC_BIG_ENDIAN, &test_value);
4649
0
  if (test_value > 15)
4650
0
  {
4651
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq value [0..15]");
4652
0
  }
4653
4654
  // ACK_NACK mode
4655
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &test_value);
4656
0
  if (test_value > 5)
4657
0
  {
4658
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
4659
0
  }
4660
0
}
4661
static void dissect_ul_config_harq_info_ulsch_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4662
0
{
4663
0
  proto_item* item;
4664
0
  uint32_t test_value;
4665
4666
  // HARQ Size 2
4667
0
  ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
4668
4669
  // Delta Offset HARQ 2
4670
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_delta_offset_harq_2, 1, ENC_BIG_ENDIAN, &test_value);
4671
0
  if (test_value > 15)
4672
0
  {
4673
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq 2 value [0..15]");
4674
0
  }
4675
0
}
4676
static void dissect_ul_config_ue_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4677
0
{
4678
0
  proto_item* item;
4679
0
  uint32_t test_value;
4680
4681
  // Handle
4682
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
4683
4684
  // RNTI
4685
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
4686
0
  if (test_value < 1)
4687
0
  {
4688
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
4689
0
  }
4690
0
}
4691
static void dissect_ul_config_ue_info_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
4692
0
{
4693
0
  proto_item* item;
4694
0
  uint32_t test_value;
4695
4696
  // Virtual cell ID enabled flag
4697
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
4698
0
  if (test_value > 1)
4699
0
  {
4700
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
4701
0
  }
4702
4703
  // nPUCCH Identity
4704
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_npucch_identity, 2, ENC_BIG_ENDIAN, &test_value);
4705
0
  if (test_value > 503)
4706
0
  {
4707
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch identity value [0..503]");
4708
0
  }
4709
4710
0
}
4711
static void dissect_ul_config_ue_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4712
0
{
4713
0
  proto_item* item;
4714
0
  uint32_t test_value;
4715
4716
  // UE Type
4717
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN, &test_value);
4718
0
  if (test_value > 2)
4719
0
  {
4720
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
4721
0
  }
4722
4723
  // Empty symbols
4724
  // todo : use bit map decoding
4725
0
  ptvcursor_add(ptvc, hf_nfapi_empty_symbols, 1, ENC_BIG_ENDIAN);
4726
4727
  // Total Number of repetitions
4728
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN, &test_value);
4729
0
  if (!(test_value >= 1 && test_value <= 32))
4730
0
  {
4731
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..32]");
4732
0
  }
4733
4734
  // Repetition Number
4735
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN, &test_value);
4736
0
  if (!(test_value >= 1 && test_value <= 32))
4737
0
  {
4738
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..32]");
4739
0
  }
4740
4741
0
}
4742
static void dissect_ul_config_cqi_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4743
0
{
4744
0
  proto_item* item;
4745
0
  uint32_t test_value;
4746
4747
  // PUCCH index
4748
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index, 2, ENC_BIG_ENDIAN, &test_value);
4749
0
  if (test_value > 1184)
4750
0
  {
4751
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index value [0..1184]");
4752
0
  }
4753
4754
  // DL CQI/PMI Size
4755
0
  ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
4756
0
}
4757
static void dissect_ul_config_cqi_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4758
0
{
4759
0
  proto_item* item;
4760
0
  uint32_t test_value;
4761
4762
  // Number of PUCCH Resources
4763
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4764
0
  if (!(test_value >= 1 && test_value <= 2))
4765
0
  {
4766
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [1..2]");
4767
0
  }
4768
4769
  //PUCCH Index P1
4770
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN, &test_value);
4771
0
  if (test_value > 1184)
4772
0
  {
4773
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index p1 value [0..1184]");
4774
0
  }
4775
0
}
4776
static void dissect_ul_config_cqi_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
4777
0
{
4778
0
  proto_item* item;
4779
0
  uint32_t test_value;
4780
4781
  // CSI_mode
4782
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_mode, 1, ENC_BIG_ENDIAN, &test_value);
4783
0
  if (test_value > 2)
4784
0
  {
4785
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi mode value [0..2]");
4786
0
  }
4787
4788
  // DL CQI/PMI Size 2
4789
0
  ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_2, 2, ENC_BIG_ENDIAN);
4790
4791
  // Starting PRB
4792
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_statring_prb, 1, ENC_BIG_ENDIAN, &test_value);
4793
0
  if (test_value > 109)
4794
0
  {
4795
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
4796
0
  }
4797
4798
  // n_PRB
4799
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
4800
0
  if (test_value > 7)
4801
0
  {
4802
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
4803
0
  }
4804
4805
  // cdm_Index
4806
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN, &test_value);
4807
0
  if (test_value > 1)
4808
0
  {
4809
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm Index value [0..1]");
4810
0
  }
4811
4812
  // N srs
4813
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN, &test_value);
4814
0
  if (test_value > 1)
4815
0
  {
4816
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
4817
0
  }
4818
4819
0
}
4820
static void dissect_ul_config_sr_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
4821
0
{
4822
0
  uint32_t test_value;
4823
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index, 1, ENC_BIG_ENDIAN, &test_value);
4824
0
  if (test_value > 2047)
4825
0
  {
4826
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index value [0..2047]");
4827
0
  }
4828
0
}
4829
static void dissect_ul_config_sr_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
4830
0
{
4831
0
  proto_item* item;
4832
0
  uint32_t test_value;
4833
4834
  // Number of PUCCH Resources
4835
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4836
0
  if (!(test_value >= 1 && test_value <= 2))
4837
0
  {
4838
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [1..2]");
4839
0
  }
4840
4841
  // PUCCH Index P1
4842
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN, &test_value);
4843
0
  if (test_value > 2047)
4844
0
  {
4845
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch Index p1 value [0..2047]");
4846
0
  }
4847
0
}
4848
static void dissect_ul_config_harq_info_uci_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4849
0
{
4850
0
  proto_item* item;
4851
0
  uint32_t test_value, ack_nack_mode_value;
4852
4853
  // HARQ size
4854
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4855
0
  if (test_value > 21)
4856
0
  {
4857
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
4858
0
  }
4859
4860
  // ACK_NACK mode
4861
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &ack_nack_mode_value);
4862
0
  if (ack_nack_mode_value > 5)
4863
0
  {
4864
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
4865
0
  }
4866
4867
  // Number of PUCCH resources
4868
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4869
0
  if (test_value > 4)
4870
0
  {
4871
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [0..4]");
4872
0
  }
4873
4874
  // n_PUCCH_1_0
4875
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4876
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
4877
0
  {
4878
0
    if (test_value > 2047)
4879
0
    {
4880
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047] (All Format 1a/1b)");
4881
0
    }
4882
0
  }
4883
0
  else if (ack_nack_mode_value == 3)
4884
0
  {
4885
0
    if (test_value > 549)
4886
0
    {
4887
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..549] (Format 3)");
4888
0
    }
4889
0
  }
4890
4891
  // n_PUCCH_1_1
4892
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN, &test_value);
4893
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
4894
0
  {
4895
0
    if (test_value > 2047)
4896
0
    {
4897
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 1 value [0..2047] (All Format 1a/1b)");
4898
0
    }
4899
0
  }
4900
4901
  // n_PUCCH_1_2
4902
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN, &test_value);
4903
0
  if (ack_nack_mode_value == 2)
4904
0
  {
4905
0
    if (test_value > 2047)
4906
0
    {
4907
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 2 value [0..2047] (All Format 1a/1b)");
4908
0
    }
4909
0
  }
4910
4911
  // n_PUCCH_1_3
4912
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN, &test_value);
4913
0
  if (ack_nack_mode_value == 2)
4914
0
  {
4915
0
    if (test_value > 2047)
4916
0
    {
4917
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 3 value [0..2047] (All Format 1a/1b)");
4918
0
    }
4919
0
  }
4920
0
}
4921
static void dissect_ul_config_harq_info_uci_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4922
0
{
4923
0
  proto_item* item;
4924
0
  uint32_t test_value;
4925
4926
  // n_PUCCH_1_0
4927
  // todo : how to work out the ack_nack mode?
4928
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4929
0
  if (test_value > 2047)
4930
0
  {
4931
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047]");
4932
0
  }
4933
4934
  // HARQ Size
4935
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &test_value);
4936
0
  if (!(test_value >= 1 && test_value <= 2))
4937
0
  {
4938
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..2]");
4939
0
  }
4940
0
}
4941
static void dissect_ul_config_harq_info_uci_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
4942
0
{
4943
0
  proto_item *item, *harq_size_item;
4944
0
  uint32_t test_value, harq_size_value, ack_nack_mode_value;
4945
4946
  // HARQ Size
4947
0
  harq_size_item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN, &harq_size_value);
4948
4949
  // ACK_NAK mode
4950
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_ack_nack_mode, 1, ENC_BIG_ENDIAN, &ack_nack_mode_value);
4951
0
  if (ack_nack_mode_value > 4)
4952
0
  {
4953
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..4]");
4954
0
  }
4955
4956
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 2)
4957
0
  {
4958
0
    if (!(harq_size_value >= 1 && harq_size_value <= 10))
4959
0
    {
4960
0
      expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [1..10] (Format 1a/1b/3)");
4961
0
    }
4962
0
  }
4963
0
  else if (ack_nack_mode_value == 3 || ack_nack_mode_value == 4)
4964
0
  {
4965
0
    if (harq_size_value != 0)
4966
0
    {
4967
0
      expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
4968
0
    }
4969
0
  }
4970
4971
  // Number of PUCCH Resources
4972
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN, &test_value);
4973
0
  if (test_value == 0 || test_value == 2)
4974
0
  {
4975
0
    if (!(harq_size_value >= 1 && harq_size_value <= 4))
4976
0
    {
4977
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..4] (Format 1a/1b/3)");
4978
0
    }
4979
0
  }
4980
0
  else if (test_value == 3 || test_value == 4)
4981
0
  {
4982
0
    if (harq_size_value != 0)
4983
0
    {
4984
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
4985
0
    }
4986
0
  }
4987
4988
  // n_PUCCH_1_0
4989
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN, &test_value);
4990
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
4991
0
  {
4992
0
    if (test_value > 2047)
4993
0
    {
4994
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..2047] (Format 1a/1b/channel selection)");
4995
0
    }
4996
0
  }
4997
0
  else if (ack_nack_mode_value == 2)
4998
0
  {
4999
0
    if (test_value > 549)
5000
0
    {
5001
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..549] (Format 3)");
5002
0
    }
5003
0
  }
5004
5005
  // n_PUCCH_1_1
5006
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN, &test_value);
5007
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5008
0
  {
5009
0
    if (test_value > 2047)
5010
0
    {
5011
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 1 value [0..2047] (Format 1a/1b/channel selection)");
5012
0
    }
5013
0
  }
5014
5015
  // n_PUCCH_1_2
5016
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN, &test_value);
5017
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5018
0
  {
5019
0
    if (test_value > 2047)
5020
0
    {
5021
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 2 value [0..2047] (Format 1a/1b/channel selection)");
5022
0
    }
5023
0
  }
5024
5025
  // n_PUCCH_1_3
5026
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN, &test_value);
5027
0
  if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
5028
0
  {
5029
0
    if (test_value > 2047)
5030
0
    {
5031
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 3 value [0..2047] (Format 1a/1b/channel selection)");
5032
0
    }
5033
0
  }
5034
0
}
5035
static void dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5036
0
{
5037
0
  proto_item* item;
5038
0
  uint32_t test_value;
5039
5040
  // Num_ant_ports
5041
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_num_ant_ports, 1, ENC_BIG_ENDIAN, &test_value);
5042
0
  if (!(test_value >= 1 && test_value <= 2))
5043
0
  {
5044
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num ant ports value [1..2]");
5045
0
  }
5046
5047
  // n_PUCCH_2_0
5048
  // todo : how to work out the ack nack mode
5049
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_0, 2, ENC_BIG_ENDIAN, &test_value);
5050
0
  if (test_value > 2047)
5051
0
  {
5052
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 0 value [0..2047]");
5053
0
  }
5054
5055
  // n_PUCCH_2_1
5056
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_1, 2, ENC_BIG_ENDIAN, &test_value);
5057
0
  if (test_value > 2047)
5058
0
  {
5059
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 1 value [0..2047]");
5060
0
  }
5061
5062
  // n_PUCCH_2_2
5063
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_2, 2, ENC_BIG_ENDIAN, &test_value);
5064
0
  if (test_value > 2047)
5065
0
  {
5066
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 2 value [0..2047]");
5067
0
  }
5068
5069
  // n_PUCCH_2_3
5070
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_pucch_2_3, 2, ENC_BIG_ENDIAN, &test_value);
5071
0
  if (test_value > 2047)
5072
0
  {
5073
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 3 value [0..2047]");
5074
0
  }
5075
5076
0
}
5077
static void dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5078
0
{
5079
0
  proto_item* item;
5080
0
  uint32_t test_value;
5081
5082
  // HARQ Size 2
5083
0
  ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
5084
5085
  // Starting PRB
5086
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_starting_prb, 1, ENC_BIG_ENDIAN, &test_value);
5087
0
  if (test_value > 109)
5088
0
  {
5089
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
5090
0
  }
5091
5092
  // n_PRB
5093
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN, &test_value);
5094
0
  if (test_value > 109)
5095
0
  {
5096
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
5097
0
  }
5098
5099
  // cdm_Index
5100
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN, &test_value);
5101
0
  if (test_value > 1)
5102
0
  {
5103
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm Index value [0..1]");
5104
0
  }
5105
5106
  // N srs
5107
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN, &test_value);
5108
0
  if (test_value > 1)
5109
0
  {
5110
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
5111
0
  }
5112
0
}
5113
static void dissect_ul_config_srs_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5114
0
{
5115
0
  proto_item* item;
5116
0
  uint32_t test_value;
5117
5118
  // Handle
5119
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
5120
5121
  // Size
5122
0
  ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
5123
5124
  // RNTI
5125
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5126
0
  if (test_value < 1)
5127
0
  {
5128
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5129
0
  }
5130
5131
  // SRS Bandwidth
5132
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
5133
0
  if (test_value > 3)
5134
0
  {
5135
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth value [0..3]");
5136
0
  }
5137
5138
  // Frequency Domain Position
5139
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_domain_position, 1, ENC_BIG_ENDIAN, &test_value);
5140
0
  if (test_value > 23)
5141
0
  {
5142
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency domain bandwidth value [0..23]");
5143
0
  }
5144
5145
  // SRS Hopping Bandwidth
5146
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_srs_hopping_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
5147
0
  if (test_value > 3)
5148
0
  {
5149
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs hopping bandwidth value [0..3]");
5150
0
  }
5151
5152
  // Transmission Comb
5153
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_comb, 1, ENC_BIG_ENDIAN, &test_value);
5154
0
  if (test_value > 3)
5155
0
  {
5156
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission comb value [0..3]");
5157
0
  }
5158
5159
  // ISRS / SRS-ConfigIndex
5160
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_i_srs, 2, ENC_BIG_ENDIAN, &test_value);
5161
0
  if (test_value > 1023)
5162
0
  {
5163
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid isrs/srs-configindex value [0..1023]");
5164
0
  }
5165
5166
  // Sounding Reference Cyclic Shift
5167
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_sounding_reference_cyclic_shift, 1, ENC_BIG_ENDIAN, &test_value);
5168
0
  if (test_value > 11)
5169
0
  {
5170
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sounding reference cyclic shift value [0..11]");
5171
0
  }
5172
0
}
5173
static void dissect_ul_config_srs_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
5174
0
{
5175
0
  uint32_t test_value;
5176
5177
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_antenna_port, 1, ENC_BIG_ENDIAN, &test_value);
5178
0
  if (test_value > 2)
5179
0
  {
5180
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna port value [0..2]");
5181
0
  }
5182
0
}
5183
static void dissect_ul_config_srs_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
5184
0
{
5185
0
  uint32_t test_value;
5186
5187
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_combs, 1, ENC_BIG_ENDIAN, &test_value);
5188
0
  if (test_value > 1)
5189
0
  {
5190
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of combs value [0..1]");
5191
0
  }
5192
0
}
5193
static void dissect_hi_dci0_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
5194
0
{
5195
0
  uint32_t test_value, size;
5196
5197
  // PDU Type
5198
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_hi_dci0_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
5199
0
  if (test_value > 3)
5200
0
  {
5201
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..3]");
5202
0
  }
5203
5204
  // PDU Size
5205
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
5206
5207
0
  unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
5208
0
  dissect_tlv_list(ptvc, pinfo, pdu_end);
5209
0
}
5210
static void dissect_hi_dci0_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
5211
0
{
5212
0
  uint32_t test_value, num_pdu;
5213
5214
  // SFN/SF
5215
0
  ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
5216
5217
  // Number of DCI
5218
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_dci_pdus, 1, ENC_BIG_ENDIAN, &num_pdu);
5219
5220
  // Number of HI
5221
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_hi_pdus, 1, ENC_BIG_ENDIAN, &test_value);
5222
0
  num_pdu += test_value;
5223
5224
0
  dissect_array_value(ptvc, pinfo, "HI DCI0 PDU List", ett_nfapi_hi_dci0_request_pdu_list, num_pdu, dissect_hi_dci0_pdu);
5225
0
}
5226
static void dissect_hi_dci0_hi_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5227
0
{
5228
0
  proto_item* item;
5229
0
  uint32_t test_value;
5230
5231
  // Resource block start
5232
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5233
0
  if (test_value > 100)
5234
0
  {
5235
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
5236
0
  }
5237
5238
  // Cyclic Shift 2 for DMRS
5239
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
5240
0
  if (test_value > 7)
5241
0
  {
5242
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
5243
0
  }
5244
5245
  // HI value
5246
0
  ptvcursor_add(ptvc, hf_nfapi_hi_value, 1, ENC_BIG_ENDIAN);
5247
5248
  // I_PHICH
5249
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_i_phich, 1, ENC_BIG_ENDIAN, &test_value);
5250
0
  if (test_value > 1)
5251
0
  {
5252
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid i phich value [0..1]");
5253
0
  }
5254
5255
  // Transmission power
5256
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5257
0
  if (test_value > 10000)
5258
0
  {
5259
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5260
0
  }
5261
5262
0
}
5263
static void dissect_hi_dci0_hi_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
5264
0
{
5265
  // Flag TB2
5266
0
  ptvcursor_add(ptvc, hf_nfapi_flag_tb2, 1, ENC_BIG_ENDIAN);
5267
5268
  // HI Value 2
5269
0
  ptvcursor_add(ptvc, hf_nfapi_hi_value_2, 1, ENC_BIG_ENDIAN);
5270
0
}
5271
static void dissect_hi_dci0_dci_ul_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5272
0
{
5273
0
  proto_item* item;
5274
0
  uint32_t test_value;
5275
5276
  // DCI format
5277
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_dci_format, 1, ENC_BIG_ENDIAN, &test_value);
5278
0
  if (test_value > 4)
5279
0
  {
5280
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..4]");
5281
0
  }
5282
5283
  // CCE index
5284
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN, &test_value);
5285
0
  if (test_value > 88)
5286
0
  {
5287
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce Index value [0..88]");
5288
0
  }
5289
5290
  // Aggregation level
5291
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
5292
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4 ||
5293
0
      test_value == 8))
5294
0
  {
5295
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8]");
5296
0
  }
5297
5298
  // RNTI
5299
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5300
0
  if (test_value < 1)
5301
0
  {
5302
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5303
0
  }
5304
5305
  // Resource block start
5306
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5307
0
  if (test_value > 100)
5308
0
  {
5309
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
5310
0
  }
5311
5312
  // Number of resource blocks
5313
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
5314
0
  if (test_value > 100)
5315
0
  {
5316
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [0..100]");
5317
0
  }
5318
5319
  // MCS_1
5320
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN, &test_value);
5321
0
  if (test_value > 31)
5322
0
  {
5323
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
5324
0
  }
5325
5326
  // Cyclic Shift 2 for DMRS
5327
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN, &test_value);
5328
0
  if (test_value > 7)
5329
0
  {
5330
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
5331
0
  }
5332
5333
  // Frequency hopping enabled flag
5334
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN, &test_value);
5335
0
  if (test_value > 1)
5336
0
  {
5337
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
5338
0
  }
5339
5340
  // Frequency hopping bits
5341
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN, &test_value);
5342
0
  if (test_value > 3)
5343
0
  {
5344
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
5345
0
  }
5346
5347
  // New Data indication_1
5348
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
5349
0
  if (test_value > 1)
5350
0
  {
5351
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
5352
0
  }
5353
5354
  // UE TX antenna selection
5355
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ue_tx_antenna_selection, 1, ENC_BIG_ENDIAN, &test_value);
5356
0
  if (test_value > 2)
5357
0
  {
5358
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue tx antenna selection value [0..2]");
5359
0
  }
5360
5361
  // TPC
5362
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
5363
0
  if (test_value > 3)
5364
0
  {
5365
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value value [0..3]");
5366
0
  }
5367
5368
  // CQI/CSI request
5369
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_cqi_csi_request, 1, ENC_BIG_ENDIAN, &test_value);
5370
0
  if (test_value > 7)
5371
0
  {
5372
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cqi csi value [0..7]");
5373
0
  }
5374
5375
  // UL index
5376
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN, &test_value);
5377
0
  if (test_value > 3)
5378
0
  {
5379
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul Index value [0..3]");
5380
0
  }
5381
5382
  // DL assignment index
5383
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
5384
0
  if (!(test_value >= 1 && test_value <= 4))
5385
0
  {
5386
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment Index value [1..4]");
5387
0
  }
5388
5389
  // TPC bitmap
5390
0
  ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
5391
5392
  // Transmission power
5393
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5394
0
  if (test_value > 10000)
5395
0
  {
5396
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5397
0
  }
5398
0
}
5399
5400
static void dissect_hi_dci0_dci_ul_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo)
5401
0
{
5402
0
  proto_item* item;
5403
0
  uint32_t test_value, number_of_antenna_ports_value;
5404
5405
  // Cross carrier scheduling flag
5406
0
  ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
5407
5408
  // Carrier indicator
5409
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN, &test_value);
5410
0
  if (test_value > 7)
5411
0
  {
5412
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
5413
0
  }
5414
5415
  // Size of CQI/CSI field
5416
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_size_of_cqi_csi_field, 1, ENC_BIG_ENDIAN, &test_value);
5417
0
  if (test_value > 2)
5418
0
  {
5419
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid size of cqi/csi field value [0..2]");
5420
0
  }
5421
5422
  // SRS flag
5423
0
  ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
5424
5425
  // SRS request
5426
0
  ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
5427
5428
  // Resource allocation flag
5429
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_flag, 1, ENC_BIG_ENDIAN, &test_value);
5430
0
  if (test_value > 1)
5431
0
  {
5432
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation flag value [0..1]");
5433
0
  }
5434
5435
  // Resource allocation type
5436
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN, &test_value);
5437
0
  if (test_value > 1)
5438
0
  {
5439
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
5440
0
  }
5441
5442
  // Resource block coding
5443
0
  ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
5444
5445
  // MCS_2
5446
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN, &test_value);
5447
0
  if (test_value > 31)
5448
0
  {
5449
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
5450
0
  }
5451
5452
  // New data indication_2
5453
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication_two, 1, ENC_BIG_ENDIAN, &test_value);
5454
0
  if (test_value > 1)
5455
0
  {
5456
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication 2 value [0..1]");
5457
0
  }
5458
5459
  // Number of antenna ports
5460
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_antenna_ports, 1, ENC_BIG_ENDIAN, &number_of_antenna_ports_value);
5461
0
  if (number_of_antenna_ports_value > 2)
5462
0
  {
5463
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of antenna ports value [0..2]");
5464
0
  }
5465
5466
  // TPMI
5467
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN, &test_value);
5468
0
  if (number_of_antenna_ports_value == 2)
5469
0
  {
5470
0
    if (test_value > 7)
5471
0
    {
5472
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..7]");
5473
0
    }
5474
0
  }
5475
0
  else if (number_of_antenna_ports_value == 4)
5476
0
  {
5477
0
    if (test_value > 63)
5478
0
    {
5479
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..63]");
5480
0
    }
5481
0
  }
5482
5483
  // Total DCI length including padding
5484
0
  ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
5485
5486
  // N_UL_RB
5487
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_n_ul_rb, 1, ENC_BIG_ENDIAN, &test_value);
5488
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 || test_value == 50 ||
5489
0
    test_value == 75 || test_value == 100))
5490
0
  {
5491
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n ul rb value [6, 15, 25, 50, 75, 100]");
5492
0
  }
5493
0
}
5494
static void dissect_hi_dci0_dci_ul_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo)
5495
0
{
5496
0
  proto_item* item;
5497
0
  uint32_t test_value;
5498
5499
  // PSCCH Resource
5500
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pscch_resource, 1, ENC_BIG_ENDIAN, &test_value);
5501
0
  if (test_value > 0x3F)
5502
0
  {
5503
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pscch resource value [0..0x3F]");
5504
0
  }
5505
5506
  // Time resource pattern
5507
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_time_resource_pattern, 1, ENC_BIG_ENDIAN, &test_value);
5508
0
  if (test_value > 0x7F)
5509
0
  {
5510
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid time resource pattern value [0..0x7F]");
5511
0
  }
5512
5513
0
}
5514
static void dissect_hi_dci0_mdpcch_dci_ul_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
5515
0
{
5516
0
  proto_item* item;
5517
0
  uint32_t test_value, dci_format_value, count;
5518
5519
  // MPDCCH Narrowband
5520
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN, &test_value);
5521
0
  if (test_value > 15)
5522
0
  {
5523
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
5524
0
  }
5525
5526
  // Number of PRB pairs
5527
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN, &test_value);
5528
0
  if (!(test_value == 2 || test_value == 4 || test_value == 6))
5529
0
  {
5530
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pairs value [2, 4, 6]");
5531
0
  }
5532
5533
  // Resource Block Assignment
5534
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN, &test_value);
5535
0
  if (test_value > 14)
5536
0
  {
5537
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
5538
0
  }
5539
5540
  // MPDCCH transmission type
5541
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN, &test_value);
5542
0
  if (test_value > 1)
5543
0
  {
5544
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
5545
0
  }
5546
5547
  // Start symbol
5548
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN, &test_value);
5549
0
  if (!(test_value >= 1 && test_value <=4))
5550
0
  {
5551
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [0..1]");
5552
0
  }
5553
5554
  // ECCE index
5555
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN, &test_value);
5556
0
  if (test_value > 22)
5557
0
  {
5558
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce Index value [0..22]");
5559
0
  }
5560
5561
  // Aggregation level
5562
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN, &test_value);
5563
0
  if (!(test_value == 2 || test_value == 4 || test_value == 8 ||
5564
0
    test_value == 16 || test_value == 24))
5565
0
  {
5566
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
5567
0
  }
5568
5569
  // RNTI type
5570
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN, &test_value);
5571
0
  if (!(test_value == 0 || test_value == 4))
5572
0
  {
5573
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0, 4]");
5574
0
  }
5575
5576
  // RNTI
5577
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5578
0
  if (test_value < 1)
5579
0
  {
5580
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5581
0
  }
5582
5583
  // CEMode
5584
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN, &test_value);
5585
0
  if (!(test_value == 1 || test_value == 2))
5586
0
  {
5587
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1,2]");
5588
0
  }
5589
5590
  // DMRS scrambling init
5591
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_drms_scrambling_init, 2, ENC_BIG_ENDIAN, &test_value);
5592
0
  if (test_value < 503)
5593
0
  {
5594
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
5595
0
  }
5596
5597
  // Initial transmission SF (io)
5598
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN, &test_value);
5599
0
  if (!(test_value <= 10239 || test_value == 0xFFFF))
5600
0
  {
5601
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
5602
0
  }
5603
5604
  // Transmission power
5605
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN, &test_value);
5606
0
  if (test_value > 10000)
5607
0
  {
5608
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
5609
0
  }
5610
5611
  // DCI format
5612
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mpdcch_ul_dci_format, 1, ENC_BIG_ENDIAN, &dci_format_value);
5613
0
  if (!(dci_format_value == 1 || dci_format_value == 2 || dci_format_value == 4 || dci_format_value == 5))
5614
0
  {
5615
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [1, 2, 4, 5]");
5616
0
  }
5617
5618
  // Resource block start
5619
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN, &test_value);
5620
0
  if (test_value > 99)
5621
0
  {
5622
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
5623
0
  }
5624
5625
  // Number of resource blocks
5626
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &test_value);
5627
0
  if (!(test_value >= 1 && test_value <= 6))
5628
0
  {
5629
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..6]");
5630
0
  }
5631
5632
  // MCS
5633
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN, &test_value);
5634
0
  if (test_value > 15)
5635
0
  {
5636
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0..15]");
5637
0
  }
5638
5639
  // PUSCH repetition levels
5640
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_pusch_repetition_levels, 1, ENC_BIG_ENDIAN, &test_value);
5641
0
  if (dci_format_value == 4)
5642
0
  {
5643
0
    if (!(test_value >= 1 && test_value <= 4))
5644
0
    {
5645
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..4]");
5646
0
    }
5647
0
  }
5648
0
  else if (dci_format_value == 5)
5649
0
  {
5650
0
    if (!(test_value >= 1 && test_value <= 8))
5651
0
    {
5652
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..8]");
5653
0
    }
5654
0
  }
5655
5656
  // Frequency hopping flag
5657
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_frequency_hopping_flag, 1, ENC_BIG_ENDIAN, &test_value);
5658
0
  if (test_value > 1)
5659
0
  {
5660
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping flag value [0..1]");
5661
0
  }
5662
5663
  // New Data indication
5664
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN, &test_value);
5665
0
  if (test_value > 1)
5666
0
  {
5667
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
5668
0
  }
5669
5670
  // HARQ process
5671
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN, &test_value);
5672
0
  if (test_value > 7)
5673
0
  {
5674
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..7]");
5675
0
  }
5676
5677
  // Redundancy version
5678
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN, &test_value);
5679
0
  if (test_value > 3)
5680
0
  {
5681
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
5682
0
  }
5683
5684
  // TPC
5685
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN, &test_value);
5686
0
  if (test_value > 3)
5687
0
  {
5688
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
5689
0
  }
5690
5691
  // CSI request
5692
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_csi_request, 1, ENC_BIG_ENDIAN, &test_value);
5693
0
  if (test_value > 1)
5694
0
  {
5695
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi request value [0..1]");
5696
0
  }
5697
5698
  // UL index
5699
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN, &test_value);
5700
0
  if (test_value > 3)
5701
0
  {
5702
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul Index value [0..3]");
5703
0
  }
5704
5705
  // DAI presence flag
5706
0
  ptvcursor_add(ptvc, hf_nfapi_dai_presence_flag, 1, ENC_BIG_ENDIAN);
5707
5708
  // DL assignment index
5709
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN, &test_value);
5710
0
  if (!(test_value >=1 && test_value <= 4))
5711
0
  {
5712
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment value [1, 2, 3, 4]");
5713
0
  }
5714
5715
  // SRS request
5716
0
  ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
5717
5718
  // DCI subframe repetition number
5719
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN, &test_value);
5720
0
  if (!(test_value >= 1 && test_value <= 4))
5721
0
  {
5722
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
5723
0
  }
5724
5725
  //TPC bitmap
5726
0
  ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
5727
5728
  // Total DCI length including padding
5729
0
  ptvcursor_add(ptvc, hf_nfapi_total_dci_length_include_padding, 1, ENC_BIG_ENDIAN);
5730
5731
  // Number of TX Antenna ports
5732
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN, &count);
5733
5734
0
  dissect_array_value(ptvc, pinfo, "TX Antenna Ports", ett_nfapi_tx_antenna_ports, count, dissect_precoding_value);
5735
0
}
5736
static void dissect_rx_ue_info_value(ptvcursor_t * ptvc, packet_info* pinfo)
5737
0
{
5738
0
  uint32_t test_value;
5739
5740
  // Handle
5741
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
5742
5743
  // RNTI
5744
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
5745
0
  if (test_value < 1)
5746
0
  {
5747
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
5748
0
  }
5749
0
}
5750
static void dissect_rx_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
5751
0
{
5752
0
  proto_item* item;
5753
0
  uint32_t test_value;
5754
5755
  // Length
5756
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
5757
5758
  // Data offset
5759
0
  ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
5760
5761
  // UL_CQI
5762
0
  ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
5763
5764
  // Timing advance
5765
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
5766
0
  if (test_value > 63)
5767
0
  {
5768
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
5769
0
  }
5770
0
}
5771
static void dissect_rx_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
5772
0
{
5773
0
  uint32_t test_value;
5774
5775
  // Timing advance R9
5776
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
5777
0
  if (test_value > 7690)
5778
0
  {
5779
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance r9 value [0..7690]");
5780
0
  }
5781
5782
0
}
5783
static void dissect_harq_indication_data_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5784
0
{
5785
0
  proto_item* item;
5786
0
  uint32_t test_value;
5787
5788
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5789
0
  if (!(test_value >= 1 && test_value <= 7))
5790
0
  {
5791
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5792
0
  }
5793
5794
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN, &test_value);
5795
0
  if (!(test_value >= 1 && test_value <= 7))
5796
0
  {
5797
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
5798
0
  }
5799
0
}
5800
static void dissect_harq_indication_data_format_1a_1b_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5801
0
{
5802
0
  uint32_t test_value;
5803
5804
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5805
0
  if (!(test_value >= 1 && test_value <= 7))
5806
0
  {
5807
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5808
0
  }
5809
0
}
5810
static void dissect_harq_indication_data_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo)
5811
0
{
5812
0
  proto_item* item;
5813
0
  uint32_t test_value;
5814
5815
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5816
0
  if (!(test_value >= 1 && test_value <= 7))
5817
0
  {
5818
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5819
0
  }
5820
5821
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN, &test_value);
5822
0
  if (!(test_value >= 1 && test_value <= 7))
5823
0
  {
5824
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
5825
0
  }
5826
5827
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_2, 1, ENC_BIG_ENDIAN, &test_value);
5828
0
  if (!(test_value >= 1 && test_value <= 7))
5829
0
  {
5830
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 2 [1..7]");
5831
0
  }
5832
5833
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_3, 1, ENC_BIG_ENDIAN, &test_value);
5834
0
  if (!(test_value >= 1 && test_value <= 7))
5835
0
  {
5836
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 3 [1..7]");
5837
0
  }
5838
5839
0
}
5840
static void dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo)
5841
0
{
5842
0
  uint32_t test_value;
5843
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5844
0
  if (!(test_value >= 1 && test_value <= 7))
5845
0
  {
5846
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5847
0
  }
5848
0
}
5849
static void dissect_harq_indication_data_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5850
0
{
5851
0
  uint32_t test_value;
5852
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN, &test_value);
5853
5854
0
  if (test_value > 4)
5855
0
  {
5856
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
5857
0
  }
5858
0
}
5859
static void dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo)
5860
0
{
5861
0
  uint32_t test_value;
5862
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN, &test_value);
5863
0
  if (test_value > 4)
5864
0
  {
5865
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
5866
0
  }
5867
0
}
5868
static void dissect_harq_indication_data_channel_selection_value(ptvcursor_t * ptvc, packet_info* pinfo)
5869
0
{
5870
0
  uint32_t test_value;
5871
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5872
0
  if (!(test_value >= 1 && test_value <= 7))
5873
0
  {
5874
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5875
0
  }
5876
0
}
5877
static void dissect_harq_indication_data_format_3_value(ptvcursor_t * ptvc, packet_info* pinfo)
5878
0
{
5879
0
  uint32_t test_value;
5880
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5881
0
  if (!(test_value >= 1 && test_value <= 7))
5882
0
  {
5883
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5884
0
  }
5885
0
}
5886
static void dissect_harq_indication_data_format_4_value(ptvcursor_t * ptvc, packet_info* pinfo)
5887
0
{
5888
0
  uint32_t test_value;
5889
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5890
0
  if (!(test_value >= 1 && test_value <= 7))
5891
0
  {
5892
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5893
0
  }
5894
0
}
5895
static void dissect_harq_indication_data_format_5_value(ptvcursor_t * ptvc, packet_info* pinfo)
5896
0
{
5897
0
  uint32_t test_value;
5898
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN, &test_value);
5899
0
  if (!(test_value >= 1 && test_value <= 7))
5900
0
  {
5901
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
5902
0
  }
5903
0
}
5904
static void dissect_harq_indication_rel8_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5905
0
{
5906
0
  proto_item* item;
5907
0
  uint32_t test_value, mode;
5908
5909
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
5910
0
  if (mode > 4)
5911
0
  {
5912
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
5913
0
  }
5914
5915
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &test_value);
5916
0
  if (!(test_value >= 1 && test_value <= 4))
5917
0
  {
5918
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
5919
0
  }
5920
5921
0
  switch (mode)
5922
0
  {
5923
0
    case 0:
5924
0
    {
5925
0
      dissect_harq_indication_data_bundling_value(ptvc, pinfo);
5926
0
      break;
5927
0
    }
5928
0
    case 1:
5929
0
    {
5930
0
      dissect_harq_indication_data_multplexing_value(ptvc, pinfo);
5931
0
      break;
5932
0
    }
5933
0
    case 2:
5934
0
    {
5935
0
      dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
5936
0
      break;
5937
0
    }
5938
0
  };
5939
0
}
5940
static void dissect_harq_indication_rel9_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
5941
0
{
5942
0
  proto_item* item;
5943
0
  uint32_t mode, i, count;
5944
5945
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
5946
0
  if (mode > 4)
5947
0
  {
5948
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
5949
0
  }
5950
5951
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &count);
5952
0
  if (mode == 0 || mode == 1)
5953
0
  {
5954
0
    if (!(count >= 1 && count <= 4))
5955
0
    {
5956
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
5957
0
    }
5958
0
  }
5959
0
  else if (mode == 3)
5960
0
  {
5961
0
    if (!(count >= 1 && count <= 8))
5962
0
    {
5963
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
5964
0
    }
5965
0
  }
5966
0
  else if (mode == 4)
5967
0
  {
5968
0
    if (!(count >= 1 && count <= 21))
5969
0
    {
5970
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
5971
0
    }
5972
0
  }
5973
5974
5975
0
  ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
5976
5977
0
  for (i = 0; i < count; ++i)
5978
0
  {
5979
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%u]", i);
5980
5981
0
    switch (mode)
5982
0
    {
5983
0
      case 0:
5984
0
      {
5985
0
        dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
5986
0
        break;
5987
0
      }
5988
0
      case 1:
5989
0
      {
5990
0
        dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
5991
0
        break;
5992
0
      }
5993
0
      case 2:
5994
0
      {
5995
0
        dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvc, pinfo);
5996
0
        break;
5997
0
      }
5998
0
      case 3:
5999
0
      {
6000
0
        dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
6001
0
        break;
6002
0
      }
6003
0
      case 4:
6004
0
      {
6005
0
        dissect_harq_indication_data_format_3_value(ptvc, pinfo);
6006
0
        break;
6007
0
      }
6008
0
    };
6009
6010
0
    ptvcursor_pop_subtree(ptvc);
6011
0
  }
6012
6013
0
  ptvcursor_pop_subtree(ptvc);
6014
0
}
6015
static void dissect_harq_indication_rel13_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6016
0
{
6017
0
  proto_item* item;
6018
0
  uint32_t mode, i, count;
6019
6020
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN, &mode);
6021
0
  if (mode > 6)
6022
0
  {
6023
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..6]");
6024
0
  }
6025
6026
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN, &count);
6027
0
  if (mode == 0 || mode == 1)
6028
0
  {
6029
0
    if (!(count >= 1 && count <= 4))
6030
0
    {
6031
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
6032
0
    }
6033
0
  }
6034
0
  else if (mode == 3)
6035
0
  {
6036
0
    if (!(count >= 1 && count <= 8))
6037
0
    {
6038
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
6039
0
    }
6040
0
  }
6041
0
  else if (mode == 4)
6042
0
  {
6043
0
    if (!(count >= 1 && count <= 21))
6044
0
    {
6045
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
6046
0
    }
6047
0
  }
6048
0
  else if (mode == 5 || mode == 6)
6049
0
  {
6050
0
    if (count < 22)
6051
0
    {
6052
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [>= 22]");
6053
0
    }
6054
6055
0
  }
6056
6057
0
  ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
6058
6059
0
  for (i = 0; i < count; ++i)
6060
0
  {
6061
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%u]", i);
6062
6063
0
    switch (mode)
6064
0
    {
6065
0
      case 0:
6066
0
      {
6067
0
        dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
6068
0
        break;
6069
0
      }
6070
0
      case 1:
6071
0
      {
6072
0
        dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
6073
0
        break;
6074
0
      }
6075
0
      case 2:
6076
0
      {
6077
0
        dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
6078
0
        break;
6079
0
      }
6080
0
      case 3:
6081
0
      {
6082
0
        dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
6083
0
        break;
6084
0
      }
6085
0
      case 4:
6086
0
      {
6087
0
        dissect_harq_indication_data_format_3_value(ptvc, pinfo);
6088
0
        break;
6089
0
      }
6090
0
      case 5:
6091
0
      {
6092
0
        dissect_harq_indication_data_format_4_value(ptvc, pinfo);
6093
0
        break;
6094
0
      }
6095
0
      case 6:
6096
0
      {
6097
0
        dissect_harq_indication_data_format_5_value(ptvc, pinfo);
6098
0
        break;
6099
0
      }
6100
0
    };
6101
6102
0
    ptvcursor_pop_subtree(ptvc);
6103
0
  }
6104
6105
0
  ptvcursor_pop_subtree(ptvc);
6106
0
}
6107
static void dissect_harq_indication_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6108
0
{
6109
0
  proto_item* item;
6110
0
  uint32_t test_value;
6111
6112
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_1, 1, ENC_BIG_ENDIAN, &test_value);
6113
0
  if (!(test_value >= 1 && test_value <= 7))
6114
0
  {
6115
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 1 [1..7]");
6116
0
  }
6117
6118
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_2, 1, ENC_BIG_ENDIAN, &test_value);
6119
0
  if (!(test_value >= 1 && test_value <= 7))
6120
0
  {
6121
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 2 [1..7]");
6122
0
  }
6123
6124
0
}
6125
static void dissect_harq_tb_value(ptvcursor_t * ptvc, packet_info* pinfo)
6126
0
{
6127
0
  uint32_t test_value;
6128
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_harq_tb_n, 1, ENC_BIG_ENDIAN, &test_value);
6129
6130
0
  if (!(test_value >= 1 && test_value <= 7))
6131
0
  {
6132
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb n [1..7]");
6133
0
  }
6134
0
}
6135
static void dissect_harq_indication_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6136
0
{
6137
0
  uint32_t harq_mode_value, count;
6138
6139
  // Mode
6140
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN, &harq_mode_value);
6141
0
  if (harq_mode_value > 2)
6142
0
  {
6143
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..2]");
6144
0
  }
6145
6146
  // Number of ACK/NACK
6147
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN, &count);
6148
6149
0
  if (harq_mode_value == 0)
6150
0
  {
6151
0
    if (!(count >=1 && count <= 2))
6152
0
    {
6153
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
6154
0
    }
6155
0
  }
6156
0
  else if (harq_mode_value == 1)
6157
0
  {
6158
0
    if (!(count >= 1 && count <= 4))
6159
0
    {
6160
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
6161
0
    }
6162
6163
0
  }
6164
0
  else if (harq_mode_value == 2)
6165
0
  {
6166
0
    if (!(count >= 1 && count <= 10))
6167
0
    {
6168
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
6169
0
    }
6170
6171
0
  }
6172
6173
0
  dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
6174
0
}
6175
static void dissect_harq_indication_rel13_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6176
0
{
6177
0
  uint32_t harq_mode_value, count;
6178
6179
  // Mode
6180
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN, &harq_mode_value);
6181
0
  if (harq_mode_value > 4)
6182
0
  {
6183
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..4]");
6184
0
  }
6185
6186
  // Number of ACK/NACK
6187
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN, &count);
6188
6189
0
  if (harq_mode_value == 0)
6190
0
  {
6191
0
    if (!(count >= 1 && count <= 2))
6192
0
    {
6193
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
6194
0
    }
6195
0
  }
6196
0
  else if (harq_mode_value == 1)
6197
0
  {
6198
0
    if (!(count >= 1 && count <= 4))
6199
0
    {
6200
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
6201
0
    }
6202
6203
0
  }
6204
0
  else if (harq_mode_value == 2)
6205
0
  {
6206
0
    if (!(count >= 1 && count <= 10))
6207
0
    {
6208
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
6209
0
    }
6210
0
  }
6211
0
  else if (harq_mode_value == 3 || harq_mode_value == 4)
6212
0
  {
6213
0
    if (count < 22)
6214
0
    {
6215
0
      expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [>= 22]");
6216
0
    }
6217
0
  }
6218
6219
0
  dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
6220
0
}
6221
static void dissect_ul_cqi_information_value(ptvcursor_t * ptvc, packet_info* pinfo)
6222
0
{
6223
0
  proto_item* item;
6224
0
  uint32_t test_value;
6225
6226
  // UL_CQI
6227
0
  ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6228
6229
  // Channel
6230
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_channel, 1, ENC_BIG_ENDIAN, &test_value);
6231
0
  if (test_value > 1)
6232
0
  {
6233
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid channel value [0..1]");
6234
0
  }
6235
0
}
6236
static void dissect_crc_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6237
0
{
6238
0
  ptvcursor_add(ptvc, hf_nfapi_crc_flag, 1, ENC_BIG_ENDIAN);
6239
0
}
6240
static void dissect_rx_cqi_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6241
0
{
6242
0
  proto_item* item;
6243
0
  uint32_t test_value;
6244
6245
  //Length
6246
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
6247
6248
  // Data Offset
6249
0
  ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
6250
6251
  // UL_CQI
6252
0
  ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6253
6254
  // RI
6255
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN, &test_value);
6256
0
  if (test_value > 8)
6257
0
  {
6258
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
6259
0
  }
6260
6261
  // Timing Advance
6262
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6263
0
  if (test_value > 63)
6264
0
  {
6265
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
6266
0
  }
6267
0
}
6268
static void dissect_ri_value(ptvcursor_t * ptvc, packet_info* pinfo)
6269
0
{
6270
0
  uint32_t test_value;
6271
6272
  // RI
6273
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN, &test_value);
6274
0
  if (test_value > 8)
6275
0
  {
6276
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
6277
0
  }
6278
0
}
6279
static void dissect_rx_cqi_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6280
0
{
6281
0
  proto_item* item;
6282
0
  uint32_t test_value, count;
6283
6284
  // Length
6285
0
  ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
6286
6287
  // Data Offset
6288
0
  ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
6289
6290
  // UL_CQI
6291
0
  ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
6292
6293
  // Number of CC reported
6294
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cc_reported, 1, ENC_BIG_ENDIAN, &count);
6295
0
  if (!(count >= 1 && count <= 5))
6296
0
  {
6297
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of CC reported value [1..5]");
6298
0
  }
6299
6300
0
  dissect_array_value(ptvc, pinfo, "CC List", ett_nfapi_cc, count, dissect_ri_value);
6301
6302
  // Timing Advance
6303
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6304
0
  if (test_value > 63)
6305
0
  {
6306
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
6307
0
  }
6308
6309
  // Timing Advance R9
6310
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6311
0
  if (test_value > 7690)
6312
0
  {
6313
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6314
0
  }
6315
0
}
6316
static void dissect_rach_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6317
0
{
6318
0
  proto_item* item;
6319
0
  uint32_t test_value;
6320
6321
  // RNTI
6322
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN, &test_value);
6323
0
  if (test_value < 1)
6324
0
  {
6325
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
6326
0
  }
6327
6328
  // Preamble
6329
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_preamble, 1, ENC_BIG_ENDIAN, &test_value);
6330
0
  if (test_value > 63)
6331
0
  {
6332
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble value [0..63]");
6333
0
  }
6334
6335
  // Timing Advance
6336
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6337
0
  if (test_value > 1282)
6338
0
  {
6339
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
6340
0
  }
6341
6342
0
}
6343
static void dissect_rach_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6344
0
{
6345
0
  uint32_t test_value;
6346
6347
  // Timing Advance R9
6348
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6349
0
  if (test_value > 7690)
6350
0
  {
6351
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6352
0
  }
6353
0
}
6354
static void dissect_rach_indication_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6355
0
{
6356
0
  uint32_t test_value;
6357
6358
  // RACH resource type
6359
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_rach_resource_type, 1, ENC_BIG_ENDIAN, &test_value);
6360
0
  if (test_value > 4)
6361
0
  {
6362
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach resource type value [0..4]");
6363
0
  }
6364
0
}
6365
static void dissect_snr_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6366
0
{
6367
  // SNR
6368
0
  ptvcursor_add(ptvc, hf_nfapi_snr, 1, ENC_BIG_ENDIAN);
6369
0
}
6370
static void dissect_srs_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo)
6371
0
{
6372
0
  proto_item* item;
6373
0
  uint32_t test_value, count;
6374
6375
  // Doppler estimation
6376
0
  ptvcursor_add(ptvc, hf_nfapi_doppler_estimation, 2, ENC_BIG_ENDIAN);
6377
6378
  // Timing Advance
6379
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN, &test_value);
6380
0
  if (test_value > 1282)
6381
0
  {
6382
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
6383
0
  }
6384
6385
  // Number of resource blocks
6386
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN, &count);
6387
6388
  // RB start
6389
0
  ptvcursor_add(ptvc, hf_nfapi_rb_start, 1, ENC_BIG_ENDIAN);
6390
6391
6392
0
  dissect_array_value(ptvc, pinfo, "RB List", ett_nfapi_rbs, count, dissect_snr_value);
6393
0
}
6394
static void dissect_srs_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo)
6395
0
{
6396
0
  uint32_t test_value;
6397
6398
  // Timing Advance R9
6399
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN, &test_value);
6400
0
  if (test_value > 7690)
6401
0
  {
6402
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
6403
0
  }
6404
0
}
6405
static void dissect_srs_indication_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo)
6406
0
{
6407
0
  uint32_t test_value;
6408
6409
  // UpPTS Symbol
6410
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_up_pts_symbol, 1, ENC_BIG_ENDIAN, &test_value);
6411
0
  if (test_value > 1)
6412
0
  {
6413
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid up pts symbol value [0..1]");
6414
0
  }
6415
6416
0
}
6417
static void dissect_tdd_channel_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6418
0
{
6419
0
  uint32_t i, j, num_subbands, num_phy_ant;
6420
6421
  // numPRBperSubband
6422
0
  ptvcursor_add(ptvc, hf_nfapi_number_prb_per_subband, 1, ENC_BIG_ENDIAN);
6423
6424
  // Number of subbands
6425
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN, &num_subbands);
6426
6427
  // numAntennas
6428
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_antennas, 1, ENC_BIG_ENDIAN, &num_phy_ant);
6429
6430
0
  ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "Subbands");
6431
6432
0
  for (i = 0; i < num_subbands; ++i)
6433
0
  {
6434
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "[%u]", i);
6435
6436
    // subbandIndex
6437
0
    ptvcursor_add(ptvc, hf_nfapi_subband_index, 1, ENC_BIG_ENDIAN);
6438
6439
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "Physical Antennas");
6440
6441
0
    for (j = 0; j < num_phy_ant; ++j)
6442
0
    {
6443
0
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "[%u]", j);
6444
6445
      // Channel
6446
0
      ptvcursor_add(ptvc, hf_nfapi_channel_coefficient, 2, ENC_BIG_ENDIAN);
6447
6448
0
      ptvcursor_pop_subtree(ptvc);
6449
0
    }
6450
6451
0
    ptvcursor_pop_subtree(ptvc);
6452
6453
0
    ptvcursor_pop_subtree(ptvc);
6454
0
  }
6455
6456
0
  ptvcursor_pop_subtree(ptvc);
6457
0
}
6458
static void dissect_srs_indication_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo)
6459
0
{
6460
0
  uint32_t test_value;
6461
6462
  //UL_RTOA
6463
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_ul_rtoa, 2, ENC_BIG_ENDIAN, &test_value);
6464
0
  if (test_value > 4800)
6465
0
  {
6466
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul rtoa value [0..4800]");
6467
0
  }
6468
0
}
6469
static void dissect_lbt_dl_config_request_pdsch_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6470
0
{
6471
0
  proto_item* item;
6472
0
  uint32_t test_value;
6473
6474
  // Handle
6475
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6476
6477
  // nCCA
6478
0
  ptvcursor_add(ptvc, hf_nfapi_mp_cca, 4, ENC_BIG_ENDIAN);
6479
6480
  // NCCA
6481
0
  ptvcursor_add(ptvc, hf_nfapi_n_cca, 4, ENC_BIG_ENDIAN);
6482
6483
  // Offset
6484
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN, &test_value);
6485
0
  if (test_value > 999)
6486
0
  {
6487
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
6488
0
  }
6489
6490
  // LTE TXOP SF
6491
0
  ptvcursor_add(ptvc, hf_nfapi_lte_txop_sf, 4, ENC_BIG_ENDIAN);
6492
6493
  // TXOP SFN/SF End
6494
0
  ptvcursor_add(ptvc, hf_nfapi_txop_sfn_sf_end, 2, ENC_BIG_ENDIAN);
6495
6496
  // LBT mode
6497
0
  ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
6498
0
}
6499
static void dissect_lbt_dl_config_request_drs_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo)
6500
0
{
6501
0
  proto_item* item;
6502
0
  uint32_t test_value;
6503
6504
  // Handle
6505
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6506
6507
  // Offset
6508
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN, &test_value);
6509
0
  if (test_value > 999)
6510
0
  {
6511
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
6512
0
  }
6513
6514
  // SFN/SF End
6515
0
  ptvcursor_add(ptvc, hf_nfapi_sfn_sf_end, 2, ENC_BIG_ENDIAN);
6516
6517
  // LBT mode
6518
0
  ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
6519
0
}
6520
static void dissect_lbt_dl_config_request_pdsch_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6521
0
{
6522
  // Handle
6523
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6524
6525
  // result
6526
0
  ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
6527
6528
  // LTE TXOP symbols
6529
0
  ptvcursor_add(ptvc, hf_nfapi_txop_symbols, 4, ENC_BIG_ENDIAN);
6530
6531
  // Initial Partial SF
6532
0
  ptvcursor_add(ptvc, hf_nfapi_initial_partial_sf, 4, ENC_BIG_ENDIAN);
6533
0
}
6534
static void dissect_lbt_dl_config_request_drs_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6535
0
{
6536
  // Handle
6537
0
  ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
6538
6539
  // result
6540
0
  ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
6541
0
}
6542
static void dissect_tx_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6543
0
{
6544
0
  uint32_t len;
6545
6546
  // PDU length
6547
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_length, 2, ENC_BIG_ENDIAN, &len);
6548
6549
  // PDU index
6550
0
  ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
6551
6552
  // PDU#N
6553
0
  ptvcursor_add(ptvc, hf_nfapi_pdu, len, ENC_NA);
6554
0
}
6555
static void dissect_tx_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6556
0
{
6557
0
  uint32_t num_pdu;
6558
6559
  // Number of PDUs
6560
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6561
6562
0
  dissect_array_value(ptvc, pinfo, "TX PDU List", ett_nfapi_tx_request_pdu_list, num_pdu, dissect_tx_pdu);
6563
0
}
6564
static void dissect_harq_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6565
0
{
6566
0
  uint32_t instance_len;
6567
6568
  // Instance Length
6569
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6570
6571
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6572
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6573
0
}
6574
static void dissect_harq_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6575
0
{
6576
0
  uint32_t num_pdu;
6577
6578
  // Number of HARQs
6579
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_harqs, 2, ENC_BIG_ENDIAN, &num_pdu);
6580
6581
0
  dissect_array_value(ptvc, pinfo, "HARQ PDU List", ett_nfapi_harq_indication_pdu_list, num_pdu, dissect_harq_indication_pdu);
6582
0
}
6583
static void dissect_crc_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6584
0
{
6585
0
  uint32_t instance_len;
6586
6587
  // Instance Length
6588
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6589
6590
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6591
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6592
0
}
6593
static void dissect_crc_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6594
0
{
6595
0
  uint32_t num_pdu;
6596
6597
  // Number of CRCs
6598
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_crcs, 2, ENC_BIG_ENDIAN, &num_pdu);
6599
0
  dissect_array_value(ptvc, pinfo, "CRC PDU List", ett_nfapi_crc_indication_pdu_list, num_pdu, dissect_crc_indication_pdu);
6600
0
}
6601
static void dissect_sr_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6602
0
{
6603
0
  uint32_t instance_len;
6604
6605
  // Instance Length
6606
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6607
6608
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6609
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6610
0
}
6611
static void dissect_rx_sr_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6612
0
{
6613
0
  uint32_t num_pdu;
6614
6615
  // Number of SRs
6616
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_srs, 2, ENC_BIG_ENDIAN, &num_pdu);
6617
6618
0
  dissect_array_value(ptvc, pinfo, "SR PDU List", ett_nfapi_sr_indication_pdu_list, num_pdu, dissect_sr_indication_pdu);
6619
0
}
6620
static void dissect_cqi_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6621
0
{
6622
0
  uint32_t instance_len;
6623
6624
  // Instance Length
6625
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6626
6627
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6628
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6629
0
}
6630
static void dissect_rx_cqi_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6631
0
{
6632
0
  uint32_t i, num_pdu;
6633
0
  uint16_t* lengths = NULL;
6634
6635
  // Number of PDUs
6636
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_cqi, 2, ENC_BIG_ENDIAN, &num_pdu);
6637
6638
6639
0
  tvbuff_t* tvb = ptvcursor_tvbuff(ptvc);
6640
0
  uint32_t tmp_offset = ptvcursor_current_offset(ptvc);
6641
6642
0
  if (num_pdu > 0)
6643
0
  {
6644
0
    lengths = (uint16_t*)wmem_alloc0(pinfo->pool, num_pdu * 2);
6645
0
  }
6646
6647
0
  for (i = 0; i < num_pdu; ++i)
6648
0
  {
6649
0
    uint32_t instance_len = tvb_get_ntohs(tvb, tmp_offset);
6650
0
    tmp_offset += 2;
6651
0
    uint32_t pdu_end = tmp_offset + instance_len;
6652
6653
0
    while (tmp_offset < pdu_end)
6654
0
    {
6655
0
      uint16_t tlv_id = tvb_get_ntohs(tvb, tmp_offset);
6656
0
      tmp_offset += 2;
6657
0
      uint16_t tlv_len = tvb_get_ntohs(tvb, tmp_offset);
6658
0
      tmp_offset += 2;
6659
6660
0
      if (tlv_id == 0x202F)
6661
0
      {
6662
0
        lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
6663
0
      }
6664
0
      else if (tlv_id == 0x2030)
6665
0
      {
6666
0
        lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
6667
0
      }
6668
6669
0
      tmp_offset += tlv_len;
6670
0
    }
6671
0
  }
6672
6673
0
  dissect_array_value(ptvc, pinfo, "CQI PDU List", ett_nfapi_cqi_indication_pdu_list, num_pdu, dissect_cqi_indication_pdu);
6674
6675
0
  for (i = 0; i < num_pdu; ++i)
6676
0
  {
6677
0
    ptvcursor_add(ptvc, hf_nfapi_pdu, lengths[i], ENC_NA);
6678
0
  }
6679
0
}
6680
static void dissect_preamble_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6681
0
{
6682
0
  uint32_t instance_len;
6683
6684
  // Instance Length
6685
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6686
6687
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6688
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6689
0
}
6690
static void dissect_rach_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6691
0
{
6692
0
  uint32_t num_pdu;
6693
6694
  // Number of Preambles
6695
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_preambles, 2, ENC_BIG_ENDIAN, &num_pdu);
6696
0
  dissect_array_value(ptvc, pinfo, "Preamble PDU List", ett_nfapi_preamble_indication_pdu_list, num_pdu, dissect_preamble_indication_pdu);
6697
0
}
6698
static void dissect_srs_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6699
0
{
6700
0
  uint32_t instance_len;
6701
6702
  // Instance Length
6703
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN, &instance_len);
6704
0
  uint32_t instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
6705
0
  dissect_tlv_list(ptvc, pinfo, instance_end);
6706
0
}
6707
static void dissect_srs_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6708
0
{
6709
0
  uint32_t num_pdu;
6710
6711
  // Number of UEs
6712
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_srss, 1, ENC_BIG_ENDIAN, &num_pdu);
6713
0
  dissect_array_value(ptvc, pinfo, "SRS PDU List", ett_nfapi_srs_indication_pdu_list, num_pdu, dissect_srs_indication_pdu);
6714
0
}
6715
static void dissect_lbt_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6716
0
{
6717
0
  uint32_t test_value, size;
6718
6719
  // PDU Type
6720
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_lbt_dl_req_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
6721
0
  if (test_value > 1)
6722
0
  {
6723
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
6724
0
  }
6725
6726
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
6727
0
  unsigned pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
6728
6729
0
  dissect_tlv_list(ptvc, pinfo, pdu_end);
6730
0
}
6731
static void dissect_lbt_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6732
0
{
6733
0
  uint32_t num_pdu;
6734
6735
  // Number of PDUs
6736
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6737
0
  if (!(num_pdu >= 1 && num_pdu <= 2))
6738
0
  {
6739
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
6740
0
  }
6741
6742
0
  dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_config_pdu_list, num_pdu, dissect_lbt_dl_config_pdu);
6743
0
}
6744
static void dissect_lbt_dl_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo)
6745
0
{
6746
0
  uint32_t test_value, size;
6747
6748
  // PDU Type
6749
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_lbt_dl_ind_pdu_type, 1, ENC_BIG_ENDIAN, &test_value);
6750
0
  if (test_value > 1)
6751
0
  {
6752
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
6753
0
  }
6754
6755
  // PDU Size
6756
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN, &size);
6757
0
  uint32_t pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
6758
0
  dissect_tlv_list(ptvc, pinfo, pdu_end);
6759
0
}
6760
static void dissect_lbt_indication_message_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
6761
0
{
6762
0
  uint32_t num_pdu;
6763
6764
  // Number of PDUs
6765
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &num_pdu);
6766
0
  if (!(num_pdu >= 1 && num_pdu <= 2))
6767
0
  {
6768
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
6769
0
  }
6770
6771
0
  dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_indication_pdu_list, num_pdu, dissect_lbt_dl_indication_pdu);
6772
0
}
6773
static void dissect_lte_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6774
0
{
6775
0
  uint32_t test_value, num_earfcns;
6776
6777
  // Frequency Band Indicator
6778
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6779
6780
  // Measurement Period
6781
0
  ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6782
6783
  // Bandwidth
6784
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth, 1, ENC_BIG_ENDIAN, &test_value);
6785
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
6786
0
    test_value == 50 || test_value == 75 || test_value == 100))
6787
0
  {
6788
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
6789
0
  }
6790
6791
  // Timeout
6792
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6793
6794
  // Number of EARFCNs
6795
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_earfcns, 1, ENC_BIG_ENDIAN, &num_earfcns);
6796
6797
0
  dissect_array_value(ptvc, pinfo, "EARFCNs", ett_nfapi_earfcn_list, num_earfcns, dissect_earfcn_value);
6798
0
}
6799
static void dissect_uarfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6800
0
{
6801
  // UARFCN
6802
0
  ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
6803
0
}
6804
static void dissect_utran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6805
0
{
6806
0
  uint32_t num_uarfcns;
6807
6808
  // Frequency Band Indicator
6809
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6810
6811
  // Measurement Period
6812
0
  ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6813
6814
  // Timeout
6815
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6816
6817
  // Number of UARFCNs
6818
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_uarfcns, 1, ENC_BIG_ENDIAN, &num_uarfcns);
6819
6820
0
  dissect_array_value(ptvc, pinfo, "UARFCNs", ett_nfapi_uarfcn_list, num_uarfcns, dissect_uarfcn_value);
6821
0
}
6822
static void dissect_arfcn_dir_value(ptvcursor_t * ptvc, packet_info* pinfo)
6823
0
{
6824
0
  uint32_t test_value;
6825
6826
  // ARFCN
6827
0
  ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6828
6829
  // Direction
6830
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_arfcn_direction, 1, ENC_BIG_ENDIAN, &test_value);
6831
0
  if (test_value > 1)
6832
0
  {
6833
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid direction value [0..1]");
6834
0
  }
6835
6836
0
}
6837
static void dissect_geran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
6838
0
{
6839
0
  uint32_t num_arfcns;
6840
6841
  // Frequency Band Indicator
6842
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
6843
6844
  // Measurement Period
6845
0
  ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
6846
6847
  // Timeout
6848
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6849
6850
  // Number of ARFCNs
6851
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN, &num_arfcns);
6852
6853
0
  dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcns, dissect_arfcn_dir_value);
6854
0
}
6855
static void dissect_rssi_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6856
0
{
6857
  // RSSI
6858
0
  ptvcursor_add(ptvc, hf_nfapi_rssi, 2, ENC_BIG_ENDIAN);
6859
0
}
6860
static void dissect_rssi_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6861
0
{
6862
0
  uint32_t num_rssi;
6863
6864
  // Number of RSSI
6865
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_rssi, 2, ENC_BIG_ENDIAN, &num_rssi);
6866
6867
0
  dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_rssi_list, num_rssi, dissect_rssi_value);
6868
0
}
6869
static void dissect_pci_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6870
0
{
6871
  // PCI
6872
0
  ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
6873
0
}
6874
static void dissect_lte_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6875
0
{
6876
0
  uint32_t num_pci;
6877
6878
  // EARFCN
6879
0
  ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
6880
6881
  // Measurement Bandwidth
6882
0
  ptvcursor_add(ptvc, hf_nfapi_measurement_bandwidth, 1, ENC_BIG_ENDIAN);
6883
6884
  // Exhaustive Search
6885
0
  ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
6886
6887
  // Timeout
6888
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6889
6890
  // Number of PCI
6891
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_pci, 1, ENC_BIG_ENDIAN, &num_pci);
6892
6893
0
  dissect_array_value(ptvc, pinfo, "PCIs", ett_nfapi_pci_list, num_pci, dissect_pci_value);
6894
0
}
6895
static void dissect_psc_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6896
0
{
6897
  // PSC
6898
0
  ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
6899
0
}
6900
static void dissect_utran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6901
0
{
6902
0
  uint32_t num_psc;
6903
6904
  // UARFCN
6905
0
  ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
6906
6907
  // Exhaustive Search
6908
0
  ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
6909
6910
  // Timeout
6911
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6912
6913
  // Number of PSC
6914
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_psc, 1, ENC_BIG_ENDIAN, &num_psc);
6915
6916
0
  dissect_array_value(ptvc, pinfo, "PSCs", ett_nfapi_psc_list, num_psc, dissect_psc_value);
6917
0
}
6918
static void dissect_arfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6919
0
{
6920
  // ARFCN
6921
0
  ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6922
0
}
6923
static void dissect_geran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo)
6924
0
{
6925
0
  uint32_t num_arfcn;
6926
6927
  // Timeout
6928
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
6929
6930
  // Number of ARFCN
6931
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN, &num_arfcn);
6932
6933
0
  dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcn, dissect_arfcn_value);
6934
0
}
6935
6936
static void dissect_lte_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6937
0
{
6938
  // PCI
6939
0
  ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
6940
6941
  // RSRP
6942
0
  ptvcursor_add(ptvc, hf_nfapi_rsrp, 1, ENC_BIG_ENDIAN);
6943
6944
  // RSRQ
6945
0
  ptvcursor_add(ptvc, hf_nfapi_rsrq, 1, ENC_BIG_ENDIAN);
6946
6947
  // Frequency Offset
6948
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6949
0
}
6950
static void dissect_lte_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6951
0
{
6952
0
  uint32_t num_lte_cells;
6953
6954
  // Number of LTE Cells Found
6955
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_lte_cells_found, 2, ENC_BIG_ENDIAN, &num_lte_cells);
6956
0
  dissect_array_value(ptvc, pinfo, "LTE Cells Found", ett_nfapi_lte_cells_found_list, num_lte_cells, dissect_lte_cell_found_value);
6957
0
}
6958
static void dissect_utran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6959
0
{
6960
  // PSC
6961
0
  ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
6962
6963
  // RSCP
6964
0
  ptvcursor_add(ptvc, hf_nfapi_rscp, 1, ENC_BIG_ENDIAN);
6965
6966
  // EcN0
6967
0
  ptvcursor_add(ptvc, hf_nfapi_enco, 1, ENC_BIG_ENDIAN);
6968
6969
  // Frequency Offset
6970
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6971
0
}
6972
static void dissect_utran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
6973
0
{
6974
0
  uint32_t num_utran_cells;
6975
6976
  // Number of UTRAN Cells Found
6977
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_utran_cells_found, 2, ENC_BIG_ENDIAN, &num_utran_cells);
6978
0
  dissect_array_value(ptvc, pinfo, "UTRAN Cells Found", ett_nfapi_utran_cells_found_list, num_utran_cells, dissect_utran_cell_found_value);
6979
0
}
6980
static void dissect_geran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
6981
0
{
6982
  // ARFCN
6983
0
  ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
6984
6985
  // BSIC
6986
0
  ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
6987
6988
  // RxLev
6989
0
  ptvcursor_add(ptvc, hf_nfapi_rxlev, 1, ENC_BIG_ENDIAN);
6990
6991
  // RxQual
6992
0
  ptvcursor_add(ptvc, hf_nfapi_rxqual, 1, ENC_BIG_ENDIAN);
6993
6994
  // Frequency Offset
6995
0
  ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
6996
6997
  // SFN Offset
6998
0
  ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
6999
0
}
7000
static void dissect_geran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
7001
0
{
7002
0
  uint32_t num_geran_cells;
7003
7004
  // Number of GSM Cells Found
7005
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_geran_cells_found, 2, ENC_BIG_ENDIAN, &num_geran_cells);
7006
0
  dissect_array_value(ptvc, pinfo, "GERAN Cells Found", ett_nfapi_geran_cells_found_list, num_geran_cells, dissect_geran_cell_found_value);
7007
0
}
7008
static void dissect_pnf_cell_search_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7009
0
{
7010
0
  unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7011
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_search_state, len, ENC_NA);
7012
0
}
7013
static void dissect_pnf_cell_broadcast_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7014
0
{
7015
0
  unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7016
0
  ptvcursor_add(ptvc, hf_nfapi_pnf_broadcast_state, len, ENC_NA);
7017
0
}
7018
static void dissect_lte_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7019
0
{
7020
  // EARFCN
7021
0
  ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7022
7023
  // PCI
7024
0
  ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7025
7026
  // Timeout
7027
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7028
0
}
7029
static void dissect_utran_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7030
0
{
7031
  // UARFCN
7032
0
  ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
7033
7034
  // PSC
7035
0
  ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
7036
7037
  // Timeout
7038
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7039
0
}
7040
static void dissect_lte_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo)
7041
0
{
7042
0
  uint32_t test_value;
7043
7044
  // Number of Tx Antenna
7045
0
  proto_item* item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7046
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4))
7047
0
  {
7048
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7049
0
  }
7050
7051
  // MIB[MIB Length]
7052
0
  ptvcursor_add(ptvc, hf_nfapi_mib, 2, ENC_BIG_ENDIAN|ENC_NA);
7053
7054
  // SFN Offset
7055
0
  ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
7056
0
}
7057
static void dissect_utran_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7058
0
{
7059
  // MIB[MIB Length]
7060
0
  ptvcursor_add(ptvc, hf_nfapi_mib, 2, ENC_BIG_ENDIAN|ENC_NA);
7061
7062
  // SFN Offset
7063
0
  ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
7064
0
}
7065
static void dissect_lte_system_information_schedule_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
7066
0
{
7067
0
  proto_item* item;
7068
0
  uint32_t test_value;
7069
7070
  // EARFCN
7071
0
  ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7072
7073
  // PCI
7074
0
  ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7075
7076
  // Bandwidth
7077
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
7078
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
7079
0
    test_value == 50 || test_value == 75 || test_value == 100))
7080
0
  {
7081
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
7082
0
  }
7083
7084
  // PHICH Configuration
7085
  // todo : phich bit decode
7086
0
  ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
7087
7088
  // Number of Tx Antenna
7089
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7090
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4))
7091
0
  {
7092
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7093
0
  }
7094
7095
  // retryCount
7096
0
  ptvcursor_add(ptvc, hf_nfapi_retry_count, 1, ENC_BIG_ENDIAN);
7097
7098
  // Timeout
7099
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7100
0
}
7101
static void dissect_lte_system_information_schedule_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7102
0
{
7103
  // this needs to be SIB 1
7104
0
  unsigned len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7105
0
  ptvcursor_add(ptvc, hf_nfapi_sib1, len, ENC_NA);
7106
0
}
7107
static void dissect_si_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo)
7108
0
{
7109
0
  proto_item* item;
7110
0
  uint32_t test_value;
7111
7112
  // SI Periodicity
7113
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_periodicity, 1, ENC_BIG_ENDIAN, &test_value);
7114
0
  if (test_value > 7)
7115
0
  {
7116
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si periodicity value [0..7]");
7117
0
  }
7118
7119
  // SI Index
7120
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_index, 1, ENC_BIG_ENDIAN, &test_value);
7121
0
  if (test_value > 32)
7122
0
  {
7123
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si Index value [0..32]");
7124
0
  }
7125
0
}
7126
7127
static void dissect_lte_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo)
7128
0
{
7129
0
  proto_item* item;
7130
0
  uint32_t test_value, si_priodicity;
7131
7132
  // EARFCN
7133
0
  ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
7134
7135
  // PCI
7136
0
  ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
7137
7138
  // Downlink channel bandwidth
7139
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN, &test_value);
7140
0
  if (!(test_value == 6 || test_value == 15 || test_value == 25 ||
7141
0
    test_value == 50 || test_value == 75 || test_value == 100))
7142
0
  {
7143
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
7144
0
  }
7145
7146
  // PHICH Configuration
7147
0
  ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
7148
7149
  // Number of Tx Antenna
7150
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN, &test_value);
7151
0
  if (!(test_value == 1 || test_value == 2 || test_value == 4))
7152
0
  {
7153
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
7154
0
  }
7155
7156
  // Number of SI Periodicity
7157
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_of_si_periodicity, 1, ENC_BIG_ENDIAN, &si_priodicity);
7158
7159
0
  dissect_array_value(ptvc, pinfo, "Number SI Periodicity", ett_nfapi_si_periodicity_list, si_priodicity, dissect_si_periodicity_value);
7160
7161
  // SI Window Length
7162
0
  item = ptvcursor_add_ret_uint(ptvc, hf_nfapi_si_window_length, 1, ENC_BIG_ENDIAN, &test_value);
7163
0
  if (!(test_value == 1 || test_value == 2 || test_value == 5 || test_value == 10 ||
7164
0
      test_value == 15 || test_value == 20 || test_value == 40))
7165
0
  {
7166
0
    expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si window length value [1, 2, 5, 10, 15, 20, 40]");
7167
0
  }
7168
7169
  // Timeout
7170
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7171
0
}
7172
static void dissect_utran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7173
0
{
7174
  // UARFCN
7175
0
  ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
7176
7177
  // PSC
7178
0
  ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
7179
7180
  // Timeout
7181
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7182
0
}
7183
static void dissect_geran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7184
0
{
7185
  // ARFCN
7186
0
  ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
7187
7188
  // BSIC
7189
0
  ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
7190
7191
  // Timeout
7192
0
  ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
7193
0
}
7194
static void dissect_lte_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7195
0
{
7196
  // SIB Type
7197
0
  ptvcursor_add(ptvc, hf_nfapi_sib_type, 1, ENC_BIG_ENDIAN);
7198
7199
  // SIB[SIB Length]
7200
0
  ptvcursor_add(ptvc, hf_nfapi_sib, 2, ENC_BIG_ENDIAN|ENC_NA);
7201
0
}
7202
static void dissect_utran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7203
0
{
7204
  // SIB[SIB Length]
7205
0
  ptvcursor_add(ptvc, hf_nfapi_sib, 2, ENC_BIG_ENDIAN|ENC_NA);
7206
0
}
7207
static void dissect_geran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7208
0
{
7209
  // SI[SI Length]
7210
0
  ptvcursor_add(ptvc, hf_nfapi_si, 2, ENC_BIG_ENDIAN|ENC_NA);
7211
0
}
7212
7213
static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_);
7214
7215
// Important the tags must be in numerical order so that they can be indexed correctly
7216
static const tlv_t nfapi_tags[] =
7217
{
7218
  { 0x1000, "PNF Param General", dissect_pnf_param_general_value },
7219
  { 0x1001, "PNF PHY", dissect_pnf_phy_value },
7220
  { 0x1002, "PNF RF", dissect_pnf_rf_value },
7221
  { 0x1003, "PNF PHY RF Config", dissect_pnf_phy_rf_config_value },
7222
  { 0x1004, "DL RS Tx power", dissect_dl_rs_tx_power_value },
7223
  { 0x1005, "Received interference power", dissect_received_interference_power_value },
7224
  { 0x1006, "Thermal noise power", dissect_thermal_noise_power_value },
7225
  { 0x1007, "DL RS TX Power measurement", dissect_dl_rs_tx_power_measurement_value },
7226
  { 0x1008, "Received Interference power measurement", dissect_received_interference_power_measurement_value },
7227
  { 0x1009, "Thermal noise power measurement", dissect_thermal_noise_power_measurement_value },
7228
  { 0x100A, "PNF PHY Rel 10", dissect_pnf_phy_rel10_value },
7229
  { 0x100B, "PNF PHY Rel 11", dissect_pnf_phy_rel11_value },
7230
  { 0x100C, "PNF PHY Rel 12", dissect_pnf_phy_rel12_value },
7231
  { 0x100D, "PNF PHY Rel 13", dissect_pnf_phy_rel13_value },
7232
};
7233
7234
static const tlv_t configuration_tags[] =
7235
{
7236
  { 0x0000, NULL, NULL },
7237
  { 0x0001, "Subframe config - Duplex Mode", dissect_duplex_mode_value },
7238
  { 0x0002, "Subframe config - PCFICH power offset TLV", dissect_pcfich_power_offset_value },
7239
  { 0x0003, "Subframe config - P-B", dissect_pb_value },
7240
  { 0x0004, "Subframe config - DL cyclic prefix type", dissect_dl_cyclic_prefix_value },
7241
  { 0x0005, "Subframe config - UL cyclic prefix type", dissect_ul_cyclic_prefix_value },
7242
  { 0x0006, NULL, NULL },
7243
  { 0x0007, NULL, NULL },
7244
  { 0x0008, NULL, NULL },
7245
  { 0x0009, NULL, NULL },
7246
  { 0x000A, "RF config - Downlink channel bandwidth", dissect_dl_channel_bandwidth_value },
7247
  { 0x000B, "RF config - Uplink channel bandwidth", dissect_ul_channel_bandwidth_value },
7248
  { 0x000C, "RF config - Reference signal power", dissect_reference_signal_power_value },
7249
  { 0x000D, "RF config - Tx antenna ports", dissect_tx_antenna_ports_value },
7250
  { 0x000E, "RF config - Rx Antenna ports", dissect_rx_antenna_ports_value },
7251
  { 0x000F, NULL, NULL },
7252
  { 0x0010, NULL, NULL },
7253
  { 0x0011, NULL, NULL },
7254
  { 0x0012, NULL, NULL },
7255
  { 0x0013, NULL, NULL },
7256
  { 0x0014, "PHICH config - PHICH resource", dissect_phich_resource_value },
7257
  { 0x0015, "PHICH config - PHICH duration", dissect_phich_duration_value },
7258
  { 0x0016, "PHICH config - PHICH power offset", dissect_phich_power_offset_value },
7259
  { 0x0017, NULL, NULL },
7260
  { 0x0018, NULL, NULL },
7261
  { 0x0019, NULL, NULL },
7262
  { 0x001A, NULL, NULL },
7263
  { 0x001B, NULL, NULL },
7264
  { 0x001C, NULL, NULL },
7265
  { 0x001D, NULL, NULL },
7266
  { 0x001E, "SCH config - Primary synchronization signal EPRE/EPRERS", dissect_psch_synch_signal_epre_eprers_value },
7267
  { 0x001F, "SCH config - Secondary synchronization signal EPRE/EPRERS", dissect_ssch_synch_signal_epre_eprers_value },
7268
  { 0x0020, "SCH config - Physical Cell Id", dissect_physical_cell_id_value },
7269
  { 0x0021, NULL, NULL },
7270
  { 0x0022, NULL, NULL },
7271
  { 0x0023, NULL, NULL },
7272
  { 0x0024, NULL, NULL },
7273
  { 0x0025, NULL, NULL },
7274
  { 0x0026, NULL, NULL },
7275
  { 0x0027, NULL, NULL },
7276
  { 0x0028, "PRACH config - Configuration Index", dissect_prach_configuration_index_value },
7277
  { 0x0029, "PRACH config - Root sequence Index", dissect_prach_root_sequence_index_value },
7278
  { 0x002A, "PRACH config - Zero correlation zone configuration", dissect_prach_zero_correlation_zone_configuration_value },
7279
  { 0x002B, "PRACH config - High speed flag", dissect_prach_high_speed_flag_value },
7280
  { 0x002C, "PRACH config - Frequency offset", dissect_prach_frequency_offset_value },
7281
  { 0x002D, NULL, NULL },
7282
  { 0x002E, NULL, NULL },
7283
  { 0x002F, NULL, NULL },
7284
  { 0x0030, NULL, NULL },
7285
  { 0x0031, NULL, NULL },
7286
  { 0x0032, "PUSCH config - Hopping mode", dissect_pusch_hopping_mode_value },
7287
  { 0x0033, "PUSCH config - Hopping offset", dissect_pusch_hopping_offset_value },
7288
  { 0x0034, "PUSCH config - Number of sub-bands", dissect_pusch_number_of_subbands_value },
7289
  { 0x0035, NULL, NULL },
7290
  { 0x0036, NULL, NULL },
7291
  { 0x0037, NULL, NULL },
7292
  { 0x0038, NULL, NULL },
7293
  { 0x0039, NULL, NULL },
7294
  { 0x003A, NULL, NULL },
7295
  { 0x003B, NULL, NULL },
7296
  { 0x003C, "PUCCH config - Delta PUCCH Shift", dissect_pucch_delta_pucch_shift_value },
7297
  { 0x003D, "PUCCH config - N_CQI RB", dissect_pucch_n_cqi_rb_value },
7298
  { 0x003E, "PUCCH config - N_AN CS", dissect_pucch_n_an_cs_value },
7299
  { 0x003F, "PUCCH config - N1Pucch-AN", dissect_pucch_n1_pucch_an_value },
7300
  { 0x0040, NULL, NULL },
7301
  { 0x0041, NULL, NULL },
7302
  { 0x0042, NULL, NULL },
7303
  { 0x0043, NULL, NULL },
7304
  { 0x0044, NULL, NULL },
7305
  { 0x0045, NULL, NULL },
7306
  { 0x0046, "SRS config - Bandwidth configuration", dissect_srs_bandwidth_configuration_value },
7307
  { 0x0047, "SRS config - MaxUpPTS", dissect_srs_max_uppts_value },
7308
  { 0x0048, "SRS config - SRS subframe configuration", dissect_srs_subframe_configuration_value },
7309
  { 0x0049, "SRS config - SRS AckNack SRS simultaneous transmission", dissect_srs_acknack_srs_sim_tx_value },
7310
  { 0x004A, NULL, NULL },
7311
  { 0x004B, NULL, NULL },
7312
  { 0x004C, NULL, NULL },
7313
  { 0x004D, NULL, NULL },
7314
  { 0x004E, NULL, NULL },
7315
  { 0x004F, NULL, NULL },
7316
  { 0x0050, "Uplink reference signal config - Uplink RS hopping", dissect_uplink_rs_hopping_value },
7317
  { 0x0051, "Uplink reference signal config - Group assignment (delta sequence-shift pattern)", dissect_group_assignment_value },
7318
  { 0x0052, "Uplink reference signal config - Cyclic Shift 1 for DMRS", dissect_cyclic_shift_1_for_drms_value },
7319
  { 0x0053, NULL, NULL },
7320
  { 0x0054, NULL, NULL },
7321
  { 0x0055, NULL, NULL },
7322
  { 0x0056, NULL, NULL },
7323
  { 0x0057, NULL, NULL },
7324
  { 0x0058, NULL, NULL },
7325
  { 0x0059, NULL, NULL },
7326
  { 0x005A, "TDD frame structure config - Subframe assignment", dissect_tdd_subframe_assignment_value },
7327
  { 0x005B, "TDD frame structure config - Special sub-frame patterns", dissect_tdd_subframe_patterns_value },
7328
  { 0x005C, NULL, NULL },
7329
  { 0x005D, NULL, NULL },
7330
  { 0x005E, NULL, NULL },
7331
  { 0x005F, NULL, NULL },
7332
  { 0x0060, NULL, NULL },
7333
  { 0x0061, NULL, NULL },
7334
  { 0x0062, NULL, NULL },
7335
  { 0x0063, NULL, NULL },
7336
  { 0x0064, "LAA config - ED Threshold for LBT for PDSCH", dissect_laa_ed_threashold_for_lbt_for_pdsch_value },
7337
  { 0x0065, "LAA config - ED Threshold for LBT for DRS", dissect_laa_ed_threashold_for_lbt_for_drs_value },
7338
  { 0x0066, "LAA config - PD Threshold", dissect_laa_pd_threshold_value },
7339
  { 0x0067, "LAA config - Multi carrier type", dissect_laa_multi_carrier_type_value },
7340
  { 0x0068, "LAA config - Multi carrier TX", dissect_laa_multi_carrier_tx_value },
7341
  { 0x0069, "LAA config - Multi carrier freeze", dissect_laa_multi_carrier_freeze_value },
7342
  { 0x006A, "LAA config - Tx antenna ports for DRS", dissect_laa_tx_antenna_port_for_drs_value },
7343
  { 0x006B, "LAA config - Transmission power for DRS", dissect_laa_transmission_power_for_drs_value },
7344
  { 0x006C, NULL, NULL },
7345
  { 0x006D, NULL, NULL },
7346
  { 0x006E, NULL, NULL },
7347
  { 0x006F, NULL, NULL },
7348
  { 0x0070, NULL, NULL },
7349
  { 0x0071, NULL, NULL },
7350
  { 0x0072, NULL, NULL },
7351
  { 0x0073, NULL, NULL },
7352
  { 0x0074, NULL, NULL },
7353
  { 0x0075, NULL, NULL },
7354
  { 0x0076, NULL, NULL },
7355
  { 0x0077, NULL, NULL },
7356
  { 0x0078, "eMTC config - PBCH Repetitions enable R13", dissect_emtc_pbch_repeitions_enabled_r13_value },
7357
  { 0x0079, "eMTC config - PRACH CAT-M Root sequence Index", dissect_emtc_prach_cat_m_root_sequence_index_value },
7358
  { 0x007A, "eMTC config - PRACH CAT-M Zero correlation zone configuration", dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value },
7359
  { 0x007B, "eMTC config - PRACH CAT-M High speed flag", dissect_emtc_prach_cat_m_high_speed_flag_value },
7360
  { 0x007C, "eMTC config - PRACH CE level #0 Enable", dissect_emtc_prach_ce_level_0_enabled_value },
7361
  { 0x007D, "eMTC config - PRACH CE level #0 Configuration Index", dissect_emtc_prach_ce_level_0_configuration_offset_value },
7362
  { 0x007E, "eMTC config - PRACH CE level #0 Frequency offset", dissect_emtc_prach_ce_level_0_frequency_offset_value },
7363
  { 0x007F, "eMTC config - PRACH CE level #0 Number of repetitions per attempt", dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value },
7364
  { 0x0080, "eMTC config - CE level #0 Starting subframe periodicity", dissect_emtc_ce_level_0_starting_subframe_periodicity_value },
7365
  { 0x0081, "eMTC config - PRACH CE level #0 Hopping Enable", dissect_emtc_preach_ce_level_0_hopping_enabled_value },
7366
  { 0x0082, "eMTC config - PRACH CE level #0 Hopping Offset", dissect_emtc_preach_ce_level_0_hopping_offset_value },
7367
  { 0x0083, "eMTC config - PRACH CE level #1 Enable", dissect_emtc_prach_ce_level_1_enabled_value },
7368
  { 0x0084, "eMTC config - PRACH CE level #1 Configuration Index", dissect_emtc_prach_ce_level_1_configuration_offset_value },
7369
  { 0x0085, "eMTC config - PRACH CE level #1 Frequency offset", dissect_emtc_prach_ce_level_1_frequency_offset_value },
7370
  { 0x0086, "eMTC config - PRACH CE level #1 Number of repetitions per attempt", dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value },
7371
  { 0x0087, "eMTC config - CE level #1 Starting subframe periodicity", dissect_emtc_ce_level_1_starting_subframe_periodicity_value },
7372
  { 0x0088, "eMTC config - PRACH CE level #1 Hopping Enable", dissect_emtc_preach_ce_level_1_hopping_enabled_value },
7373
  { 0x0089, "eMTC config - PRACH CE level #1 Hopping Offset", dissect_emtc_preach_ce_level_1_hopping_offset_value },
7374
  { 0x008A, "eMTC config - PRACH CE level #2 Enable", dissect_emtc_prach_ce_level_2_enabled_value },
7375
  { 0x008B, "eMTC config - PRACH CE level #2 Configuration Index", dissect_emtc_prach_ce_level_2_configuration_offset_value },
7376
  { 0x008C, "eMTC config - PRACH CE level #2 Frequency offset", dissect_emtc_prach_ce_level_2_frequency_offset_value },
7377
  { 0x008D, "eMTC config - PRACH CE level #2 Number of repetitions per attempt", dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value },
7378
  { 0x008E, "eMTC config - CE level #2 Starting subframe periodicity", dissect_emtc_ce_level_2_starting_subframe_periodicity_value },
7379
  { 0x008F, "eMTC config - PRACH CE level #2 Hopping Enable", dissect_emtc_preach_ce_level_2_hopping_enabled_value },
7380
  { 0x0090, "eMTC config - PRACH CE level #2 Hopping Offset", dissect_emtc_preach_ce_level_2_hopping_offset_value },
7381
  { 0x0091, "eMTC config - PRACH CE level #3 Enable", dissect_emtc_prach_ce_level_3_enabled_value },
7382
  { 0x0092, "eMTC config - PRACH CE level #3 Configuration Index", dissect_emtc_prach_ce_level_3_configuration_offset_value },
7383
  { 0x0093, "eMTC config - PRACH CE level #3 Frequency offset", dissect_emtc_prach_ce_level_3_frequency_offset_value },
7384
  { 0x0094, "eMTC config - PRACH CE level #3 Number of repetitions per attempt", dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value },
7385
  { 0x0095, "eMTC config - CE level #3 Starting subframe periodicity", dissect_emtc_ce_level_3_starting_subframe_periodicity_value },
7386
  { 0x0096, "eMTC config - PRACH CE level #3 Hopping Enable", dissect_emtc_preach_ce_level_3_hopping_enabled_value },
7387
  { 0x0097, "eMTC config - PRACH CE level #3 Hopping Offset", dissect_emtc_preach_ce_level_3_hopping_offset_value },
7388
  { 0x0098, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeA", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value },
7389
  { 0x0099, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeB", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value },
7390
  { 0x009A, NULL, NULL },
7391
  { 0x009B, NULL, NULL },
7392
  { 0x009C, NULL, NULL },
7393
  { 0x009D, NULL, NULL },
7394
  { 0x009E, NULL, NULL },
7395
  { 0x009F, NULL, NULL },
7396
  { 0x00A0, NULL, NULL },
7397
  { 0x00A1, NULL, NULL },
7398
  { 0x00A2, NULL, NULL },
7399
  { 0x00A3, NULL, NULL },
7400
  { 0x00A4, NULL, NULL },
7401
  { 0x00A5, NULL, NULL },
7402
  { 0x00A6, NULL, NULL },
7403
  { 0x00A7, NULL, NULL },
7404
  { 0x00A8, NULL, NULL },
7405
  { 0x00A9, NULL, NULL },
7406
  { 0x00AA, NULL, NULL },
7407
  { 0x00AB, NULL, NULL },
7408
  { 0x00AC, NULL, NULL },
7409
  { 0x00AD, NULL, NULL },
7410
  { 0x00AE, NULL, NULL },
7411
  { 0x00AF, NULL, NULL },
7412
  { 0x00B0, NULL, NULL },
7413
  { 0x00B1, NULL, NULL },
7414
  { 0x00B2, NULL, NULL },
7415
  { 0x00B3, NULL, NULL },
7416
  { 0x00B4, NULL, NULL },
7417
  { 0x00B5, NULL, NULL },
7418
  { 0x00B6, NULL, NULL },
7419
  { 0x00B7, NULL, NULL },
7420
  { 0x00B8, NULL, NULL },
7421
  { 0x00B9, NULL, NULL },
7422
  { 0x00BA, NULL, NULL },
7423
  { 0x00BB, NULL, NULL },
7424
  { 0x00BC, NULL, NULL },
7425
  { 0x00BD, NULL, NULL },
7426
  { 0x00BE, NULL, NULL },
7427
  { 0x00BF, NULL, NULL },
7428
  { 0x00C0, NULL, NULL },
7429
  { 0x00C1, NULL, NULL },
7430
  { 0x00C2, NULL, NULL },
7431
  { 0x00C3, NULL, NULL },
7432
  { 0x00C4, NULL, NULL },
7433
  { 0x00C5, NULL, NULL },
7434
  { 0x00C6, NULL, NULL },
7435
  { 0x00C7, NULL, NULL },
7436
  { 0x00C8, "Layer 2/3 - Downlink Bandwidth Support", dissect_dl_bandwidth_support_value },
7437
  { 0x00C9, "Layer 2/3 - Uplink Bandwidth Support", dissect_ul_bandwidth_support_value },
7438
  { 0x00CA, "Layer 2/3 - Downlink modulation support", dissect_dl_modulation_value },
7439
  { 0x00CB, "Layer 2/3 - Uplink modulation support", dissect_ul_modulation_value },
7440
  { 0x00CC, "Layer 2/3 - PHY antenna capability", dissect_phy_antenna_capability_value },
7441
  { 0x00CD, "Layer 2/3 - Release capability", dissect_release_capability_value },
7442
  { 0x00CE, "Layer 2/3 - MBSFN capability", dissect_mbsfn_value },
7443
  { 0x00CF, NULL, NULL },
7444
  { 0x00D0, NULL, NULL },
7445
  { 0x00D1, "LAA Capability - LAA support", dissect_laa_support_value },
7446
  { 0x00D2, "LAA Capability - PD sensing LBT support", dissect_laa_pd_sensing_lbt_support_value },
7447
  { 0x00D3, "LAA Capability - Multi carrier LBT support", dissect_laa_multi_carrier_lbt_support_value },
7448
  { 0x00D4, "LAA Capability - Partial SF support", dissect_laa_partial_sf_support_value },
7449
  { 0x00D5, NULL, NULL },
7450
  { 0x00D6, NULL, NULL },
7451
  { 0x00D7, NULL, NULL },
7452
  { 0x00D8, NULL, NULL },
7453
  { 0x00D9, NULL, NULL },
7454
  { 0x00DA, NULL, NULL },
7455
  { 0x00DB, NULL, NULL },
7456
  { 0x00DC, NULL, NULL },
7457
  { 0x00DD, NULL, NULL },
7458
  { 0x00DE, NULL, NULL },
7459
  { 0x00DF, NULL, NULL },
7460
  { 0x00E0, NULL, NULL },
7461
  { 0x00E1, NULL, NULL },
7462
  { 0x00E2, NULL, NULL },
7463
  { 0x00E3, NULL, NULL },
7464
  { 0x00E4, NULL, NULL },
7465
  { 0x00E5, NULL, NULL },
7466
  { 0x00E6, NULL, NULL },
7467
  { 0x00E7, NULL, NULL },
7468
  { 0x00E8, NULL, NULL },
7469
  { 0x00E9, NULL, NULL },
7470
  { 0x00EA, NULL, NULL },
7471
  { 0x00EB, NULL, NULL },
7472
  { 0x00EC, NULL, NULL },
7473
  { 0x00ED, NULL, NULL },
7474
  { 0x00EE, NULL, NULL },
7475
  { 0x00EF, NULL, NULL },
7476
  { 0x00F0, "Layer 2/3 - Data report mode", dissect_data_report_mode_value },
7477
  { 0x00F1, "Layer 2/3 - SFN/SF", dissect_sfn_sf_value },
7478
  { 0x00F2, NULL, NULL },
7479
  { 0x00F3, NULL, NULL },
7480
  { 0x00F4, NULL, NULL },
7481
  { 0x00F5, NULL, NULL },
7482
  { 0x00F6, NULL, NULL },
7483
  { 0x00F7, NULL, NULL },
7484
  { 0x00F8, NULL, NULL },
7485
  { 0x00F9, NULL, NULL },
7486
  { 0x00FA, "Layer 1 - PHY state", dissect_phy_state_value },
7487
  { 0x00FB, NULL, NULL },
7488
  { 0x00FC, NULL, NULL },
7489
  { 0x00FD, NULL, NULL },
7490
  { 0x00FE, NULL, NULL },
7491
  { 0x00FF, NULL, NULL },
7492
  { 0x0100, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv4_value },
7493
  { 0x0101, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv6_value },
7494
  { 0x0102, "NFAPI - P7 Port", dissect_p7_vnf_port_value },
7495
  { 0x0103, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv4_value },
7496
  { 0x0104, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv6_value },
7497
  { 0x0105, "NFAPI - P7 Port", dissect_p7_pnf_port_value },
7498
  { 0x0106, NULL, NULL },
7499
  { 0x0107, NULL, NULL },
7500
  { 0x0108, NULL, NULL },
7501
  { 0x0109, NULL, NULL },
7502
  { 0x010A, "NFAPI - Downlink UEs per Subframe", dissect_downlink_ues_per_subframe_value },
7503
  { 0x010B, "NFAPI - Uplink UEs per Subframe", dissect_uplink_ues_per_subframe_value },
7504
  { 0x010C, NULL, NULL },
7505
  { 0x010D, NULL, NULL },
7506
  { 0x010E, NULL, NULL },
7507
  { 0x010F, NULL, NULL },
7508
  { 0x0110, NULL, NULL },
7509
  { 0x0111, NULL, NULL },
7510
  { 0x0112, NULL, NULL },
7511
  { 0x0113, NULL, NULL },
7512
  { 0x0114, "NFAPI - nFAPI RF Bands", dissect_rf_bands_value },
7513
  { 0x0115, NULL, NULL },
7514
  { 0x0116, NULL, NULL },
7515
  { 0x0117, NULL, NULL },
7516
  { 0x0118, NULL, NULL },
7517
  { 0x0119, NULL, NULL },
7518
  { 0x011A, NULL, NULL },
7519
  { 0x011B, NULL, NULL },
7520
  { 0x011C, NULL, NULL },
7521
  { 0x011D, NULL, NULL },
7522
  { 0x011E, "NFAPI - Timing window", dissect_timing_window_value },
7523
  { 0x011F, "NFAPI - Timing info mode", dissect_timing_info_mode_value },
7524
  { 0x0120, "NFAPI - Timing info period", dissect_timing_info_period_value },
7525
  { 0x0121, NULL, NULL },
7526
  { 0x0122, NULL, NULL },
7527
  { 0x0123, NULL, NULL },
7528
  { 0x0124, NULL, NULL },
7529
  { 0x0125, NULL, NULL },
7530
  { 0x0126, NULL, NULL },
7531
  { 0x0127, NULL, NULL },
7532
  { 0x0128, "NFAPI - Maximum Transmit Power", dissect_maximum_transmit_power_value },
7533
  { 0x0129, "NFAPI - EARFCN", dissect_earfcn_value },
7534
  { 0x012A, NULL, NULL },
7535
  { 0x012B, NULL, NULL },
7536
  { 0x012C, NULL, NULL },
7537
  { 0x012D, NULL, NULL },
7538
  { 0x012E, NULL, NULL },
7539
  { 0x012F, NULL, NULL },
7540
  { 0x0130, "NFAPI - NMM GSM Frequency Bands", dissect_nmm_gsm_frequency_bands_value },
7541
  { 0x0131, "NFAPI - NMM UMTS Frequency Bands", dissect_nmm_umts_frequency_bands_value },
7542
  { 0x0132, "NFAPI - NMM LTE Frequency Bands", dissect_nmm_lte_frequency_bands_value },
7543
  { 0x0133, "NFAPI - NMM Uplink RSSI supported", dissect_nmm_uplink_rssi_supported_value },
7544
};
7545
7546
static const tlv_t p7_tags[] =
7547
{
7548
  { 0x2000, "DL Config Request Body", dissect_dl_config_request_body_value },
7549
  { 0x2001, "DL DCI PDU Release 8", dissect_dl_config_request_dl_dci_pdu_rel8_value },
7550
  { 0x2002, "DL DCI PDU Release 9", dissect_dl_config_request_dl_dci_pdu_rel9_value },
7551
  { 0x2003, "DL DCI PDU Release 10", dissect_dl_config_request_dl_dci_pdu_rel10_value },
7552
  { 0x2004, "BCH PDU Release 8", dissect_dl_config_request_bch_pdu_rel8_value },
7553
  { 0x2005, "MCH PDU Release 8", dissect_dl_config_request_mch_pdu_rel8_value },
7554
  { 0x2006, "DLSCH PDU Release 8", dissect_dl_config_request_dlsch_pdu_rel8_value },
7555
  { 0x2007, "DLSCH PDU Release 9", dissect_dl_config_request_dlsch_pdu_rel9_value },
7556
  { 0x2008, "DLSCH PDU Release 10", dissect_dl_config_request_dlsch_pdu_rel10_value },
7557
  { 0x2009, "PCH PDU Release 8", dissect_dl_config_request_pch_pdu_rel8_value },
7558
  { 0x200A, "PRS PDU Release 9", dissect_dl_config_request_prs_pdu_rel9_value },
7559
  { 0x200B, "CSI-RS PDU Release 10", dissect_dl_config_request_csi_rs_pdu_rel10_value },
7560
  { 0x200C, "UL Config Request Body", dissect_ul_config_request_body_value },
7561
  { 0x200D, "ULSCH PDU Release 8", dissect_ul_config_ulsch_pdu_rel8_value },
7562
  { 0x200E, "ULSCH PDU Release 10", dissect_ul_config_ulsch_pdu_rel10_value },
7563
  { 0x200F, "Initial Transmission Parameters Release 8", dissect_ul_config_init_tx_params_rel8_value },
7564
  { 0x2010, "CQI RI Information Release 8", dissect_ul_config_cqi_ri_info_rel8_value },
7565
  { 0x2011, "CQI RI Information Release 9 or later", dissect_ul_config_cqi_ri_info_rel9_later_value },
7566
  { 0x2012, "HARQ Information (ULSCH) Release 10", dissect_ul_config_harq_info_ulsch_rel10_value },
7567
  { 0x2013, "UE Information Release 8", dissect_ul_config_ue_info_rel8_value },
7568
  { 0x2014, "CQI Information Release 8", dissect_ul_config_cqi_info_rel8_value },
7569
  { 0x2015, "CQI Information Release 10", dissect_ul_config_cqi_info_rel10_value },
7570
  { 0x2016, "SR Information Release 8", dissect_ul_config_sr_info_rel8_value },
7571
  { 0x2017, "SR Information Release 10", dissect_ul_config_sr_info_rel10_value },
7572
  { 0x2018, "HARQ Information (UCI) Release 10 TDD", dissect_ul_config_harq_info_uci_rel10_tdd_value },
7573
  { 0x2019, "HARQ Information (UCI) Release 8 FDD", dissect_ul_config_harq_info_uci_rel8_fdd_value },
7574
  { 0x201A, "HARQ Information (UCI) Release 9 or later FDD", dissect_ul_config_harq_info_uci_rel9_later_fdd_value },
7575
  { 0x201B, "SRS Information Release 8", dissect_ul_config_srs_info_rel8_value },
7576
  { 0x201C, "SRS Information Release 10", dissect_ul_config_srs_info_rel10_value },
7577
  { 0x201D, "HI DCI0 Request Body", dissect_hi_dci0_request_body_value },
7578
  { 0x201E, "HI PDU Release 8", dissect_hi_dci0_hi_rel8_value },
7579
  { 0x201F, "HI PDU Release 10", dissect_hi_dci0_hi_rel10_value },
7580
  { 0x2020, "DCI UL PDU Release 8", dissect_hi_dci0_dci_ul_rel8_value },
7581
  { 0x2021, "DCI UL PDU Release 10", dissect_hi_dci0_dci_ul_rel10_value },
7582
  { 0x2022, "Tx Request Body", dissect_tx_request_body_value },
7583
  { 0x2023, "RX Indication Body", dissect_rx_indication_body_value },
7584
  { 0x2024, "RX PDU Release 8", dissect_rx_indication_rel8_value },
7585
  { 0x2025, "RX PDU Release 9", dissect_rx_indication_rel9_value },
7586
  { 0x2026, "HARQ Indication Body", dissect_harq_indication_body_value },
7587
  { 0x2027, "HARQ PDU Release 8 TDD", dissect_harq_indication_rel8_tdd_value },
7588
  { 0x2028, "HARQ PDU Release 9 or later TDD", dissect_harq_indication_rel9_later_tdd_value },
7589
  { 0x2029, "HARQ PDU Release 8 FDD", dissect_harq_indication_rel8_fdd_value },
7590
  { 0x202A, "HARQ PDU Release 9 or later FDD", dissect_harq_indication_rel9_later_fdd_value },
7591
  { 0x202B, "CRC Indication Body", dissect_crc_indication_body_value },
7592
  { 0x202C, "CRC PDU Release 8", dissect_crc_indication_rel8_value },
7593
  { 0x202D, "RX SR Indication Body", dissect_rx_sr_indication_body_value },
7594
  { 0x202E, "RX CQI Indication Body", dissect_rx_cqi_indication_body_value },
7595
  { 0x202F, "CQI PDU Release 8", dissect_rx_cqi_indication_rel8_value },
7596
  { 0x2030, "CQI PDU Release 9", dissect_rx_cqi_indication_rel9_value },
7597
  { 0x2031, "RACH Indication Body", dissect_rach_indication_body_value },
7598
  { 0x2032, "Preamble PDU Release 8", dissect_rach_indication_rel8_value },
7599
  { 0x2033, "Preamble PDU Release 9", dissect_rach_indication_rel9_value },
7600
  { 0x2034, "SRS Indication Body", dissect_srs_indication_body_value },
7601
  { 0x2035, "SRS PDU Release 8", dissect_srs_indication_rel8_value },
7602
  { 0x2036, "SRS PDU Release 9", dissect_srs_indication_rel9_value },
7603
  { 0x2037, "SRS PDU Release 10 TDD", dissect_srs_indication_rel10_tdd_value },
7604
  { 0x2038, "RX UE Information", dissect_rx_ue_info_value },
7605
  { 0x2039, "DL DCI PDU Release 11", dissect_dl_config_request_dl_dci_pdu_rel11_value },
7606
  { 0x203A, "DL DCI PDU Release 12", dissect_dl_config_request_dl_dci_pdu_rel12_value },
7607
  { 0x203B, "DL DCI PDU Release 13", dissect_dl_config_request_dl_dci_pdu_rel13_value },
7608
  { 0x203C, "DLSCH PDU Release 11", dissect_dl_config_request_dlsch_pdu_rel11_value },
7609
  { 0x203D, "DLSCH PDU Release 12", dissect_dl_config_request_dlsch_pdu_rel12_value },
7610
  { 0x203E, "DLSCH PDU Release 13", dissect_dl_config_request_dlsch_pdu_rel13_value },
7611
  { 0x203F, "PCH PDU Release 13", dissect_dl_config_request_pch_pdu_rel13_value },
7612
  { 0x2040, "CSI-RS PDU Release 13", dissect_dl_config_request_csi_rs_pdu_rel13_value },
7613
  { 0x2041, "depdcch PDU Release 11 Parameters", dissect_dl_config_request_depdcch_params_rel11_value },
7614
  { 0x2042, "depdcch PDU Release 13 Parameters", dissect_dl_config_request_depdcch_params_rel13_value },
7615
  { 0x2043, "ULSCH PDU Release 11", dissect_ul_config_ulsch_pdu_rel11_value },
7616
  { 0x2044, "ULSCH PDU Release 13", dissect_ul_config_ulsch_pdu_rel13_value },
7617
  { 0x2045, "CQI RI Information Release 13", dissect_ul_config_cqi_ri_info_rel13_value },
7618
  { 0x2046, "HARQ Information (ULSCH) Release 13", dissect_ul_config_harq_info_ulsch_rel13_value },
7619
  { 0x2047, "UE Information Release 11", dissect_ul_config_ue_info_rel11_value },
7620
  { 0x2048, "UE Information Release 13", dissect_ul_config_ue_info_rel13_value },
7621
  { 0x2049, "CQI Information Release 13", dissect_ul_config_cqi_info_rel13_value },
7622
  { 0x204A, "HARQ Information (UCI) Release 11 FDD/TDD", dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value },
7623
  { 0x204B, "HARQ Information (UCI) Release 13 FDD/TDD", dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value },
7624
  { 0x204C, "SRS Information Release 13", dissect_ul_config_srs_info_rel13_value },
7625
  { 0x204D, "DCI UL PDU Release 12", dissect_hi_dci0_dci_ul_rel12_value },
7626
  { 0x204E, "MDPCCH DCI UL PDU Release 13", dissect_hi_dci0_mdpcch_dci_ul_rel13_value },
7627
  { 0x204F, "HARQ PDU Release 13 or later TDD", dissect_harq_indication_rel13_later_tdd_value },
7628
  { 0x2050, "HARQ PDU Release 13 or later FDD", dissect_harq_indication_rel13_later_fdd_value },
7629
  { 0x2051, "Preamble PDU Release 13", dissect_rach_indication_rel13_value },
7630
  { 0x2052, "UL CQI Information", dissect_ul_cqi_information_value },
7631
  { 0x2053, "SRS PDU Release 11", dissect_srs_indication_rel11_value },
7632
  { 0x2054, "TDD Channel Measurement", dissect_tdd_channel_measurement_value },
7633
  { 0x2055, "LBT DL Config Request Body", dissect_lbt_dl_config_request_body_value },
7634
  { 0x2056, "LBT PDSCH Req PDU Release 13", dissect_lbt_dl_config_request_pdsch_req_rel13_value },
7635
  { 0x2057, "LBT DRS req PDU Release 13", dissect_lbt_dl_config_request_drs_req_rel13_value },
7636
  { 0x2058, "LBT DL Indication Message Body", dissect_lbt_indication_message_body_value },
7637
  { 0x2059, "LBT PDSCH Resp PDU Release 13", dissect_lbt_dl_config_request_pdsch_resp_rel13_value },
7638
  { 0x205A, "LBT DRS Resp PDU Release 13", dissect_lbt_dl_config_request_drs_resp_rel13_value },
7639
  { 0x205B, "MPDCCH PDU Release 13", dissect_dl_config_request_mpdpcch_pdu_rel13_value },
7640
};
7641
7642
static const tlv_t p4_tags[] =
7643
{
7644
  { 0x3000, "LTE RSSI Request", dissect_lte_rssi_request_value },
7645
  { 0x3001, "UTRAN RSSI Request", dissect_utran_rssi_request_value },
7646
  { 0x3002, "GERAN RSSI Request", dissect_geran_rssi_request_value },
7647
  { 0x3003, "RSSI Indication", dissect_rssi_indication_value },
7648
  { 0x3004, "LTE CELL SEARCH Request", dissect_lte_cell_search_value },
7649
  { 0x3005, "UTRAN CELL SEARCH Request", dissect_utran_cell_search_value },
7650
  { 0x3006, "GERAN CELL SEARCH Request", dissect_geran_cell_search_value },
7651
  { 0x3007, "LTE CELL SEARCH Indication", dissect_lte_cell_search_indication_value },
7652
  { 0x3008, "UTRAN CELL SEARCH Indication", dissect_utran_cell_search_indication_value },
7653
  { 0x3009, "GERAN CELL SEARCH Indication", dissect_geran_cell_search_indication_value },
7654
  { 0x300A, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
7655
  { 0x300B, "LTE BROADCAST DETECT Request", dissect_lte_broadcast_detect_request_value },
7656
  { 0x300C, "UTRAN BROADCAST DETECT Request", dissect_utran_broadcast_detect_request_value },
7657
  { 0x300D, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
7658
  { 0x300E, "LTE BROADCAST DETECT Indication", dissect_lte_broadcast_detect_indication_value },
7659
  { 0x300F, "UTRAN BROADCAST DETECT Indication", dissect_utran_broadcast_detect_indication_value },
7660
  { 0x3010, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7661
  { 0x3011, "LTE SYSTEM INFORMATION SCHEDULE Request", dissect_lte_system_information_schedule_request_value },
7662
  { 0x3012, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7663
  { 0x3013, "LTE SYSTEM INFORMATION SCHEDULE Indication", dissect_lte_system_information_schedule_indication_value },
7664
  { 0x3014, "LTE SYSTEM INFORMATION Request", dissect_lte_system_information_request_value },
7665
  { 0x3015, "UTRAN SYSTEM INFORMATION Request", dissect_utran_system_information_request_value },
7666
  { 0x3016, "GERAN SYSTEM INFORMATION Request", dissect_geran_system_information_request_value },
7667
  { 0x3017, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
7668
  { 0x3018, "LTE SYSTEM INFORMATION Indication", dissect_lte_system_information_indication_value },
7669
  { 0x3019, "UTRAN SYSTEM INFORMATION Indication", dissect_utran_system_information_indication_value },
7670
  { 0x301A, "GERAN SYSTEM INFORMATION Indication", dissect_geran_system_information_indication_value },
7671
};
7672
7673
7674
static const tlv_t* look_up_tlv(int tag_id)
7675
0
{
7676
0
  const tlv_t* tlv = NULL;
7677
7678
0
  static const int num_configuration_tags = array_length(configuration_tags);
7679
0
  static const int num_nfapi_tags = array_length(nfapi_tags);
7680
0
  static const int num_p7_tags = array_length(p7_tags);
7681
0
  static const int num_p4_tags = array_length(p4_tags);
7682
7683
0
  if (tag_id >= 0x0000 && tag_id <= (0x0000 + num_configuration_tags - 1)) // 0x0133)
7684
0
  {
7685
0
    tlv = &configuration_tags[tag_id];
7686
0
  }
7687
0
  else if (tag_id >= 0x1000 && tag_id <= (0x1000 + num_nfapi_tags - 1)) // 0x100D)
7688
0
  {
7689
0
    tlv = &nfapi_tags[tag_id - 0x1000];
7690
0
  }
7691
0
  else if (tag_id >= 0x2000 && tag_id <= (0x2000 + num_p7_tags - 1)) //0x205B)
7692
0
  {
7693
0
    tlv = &p7_tags[tag_id - 0x2000];
7694
0
  }
7695
0
  else if (tag_id >= 0x3000 && tag_id <= (0x3000 + num_p4_tags - 1)) // 0x301A)
7696
0
  {
7697
0
    tlv = &p4_tags[tag_id - 0x3000];
7698
0
  }
7699
0
  return tlv;
7700
0
}
7701
7702
7703
static proto_item* dissect_tl_header(ptvcursor_t * ptvc, packet_info* pinfo _U_)
7704
0
{
7705
0
  ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tl, "TL");
7706
0
  ptvcursor_add(ptvc, hf_nfapi_tl_tag, 2, ENC_BIG_ENDIAN);
7707
0
  proto_item* item = ptvcursor_add(ptvc, hf_nfapi_tl_length, 2, ENC_BIG_ENDIAN);
7708
0
  ptvcursor_pop_subtree(ptvc);
7709
7710
0
  return item;
7711
0
}
7712
7713
static void dissect_tlv_list(ptvcursor_t* ptvc, packet_info* pinfo, int len)
7714
0
{
7715
0
  while (ptvcursor_current_offset(ptvc) < len)
7716
0
  {
7717
0
    uint16_t tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7718
0
    uint16_t tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
7719
7720
0
    const tlv_t* tlv = look_up_tlv(tlv_id);
7721
7722
0
    if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
7723
0
    {
7724
0
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "%s", tlv->name);
7725
0
      proto_item* tlv_length_item = dissect_tl_header(ptvc, pinfo);
7726
7727
      // There are rare cases where the len of the tlv is 0.
7728
0
      if (tlv_len > 0)
7729
0
      {
7730
7731
0
        if (tlv->decode != NULL)
7732
0
        {
7733
          // Create a sub buff with the correct length, so we can detect reading off the end
7734
0
          tvbuff_t* sub_tvbuff = tvb_new_subset_length(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), tlv_len);
7735
0
          ptvcursor_t* sub_ptvc = ptvcursor_new(pinfo->pool, ptvcursor_tree(ptvc), sub_tvbuff, 0);
7736
7737
0
          tlv->decode(sub_ptvc, pinfo);
7738
7739
0
          if (ptvcursor_current_offset(sub_ptvc) != tlv_len)
7740
0
          {
7741
            // error in the tlv length
7742
0
            expert_add_info_format(pinfo, tlv_length_item, &ei_invalid_tlv_length, "TLV length does not match decoded length");
7743
0
          }
7744
7745
0
          ptvcursor_free(sub_ptvc);
7746
0
        }
7747
7748
0
        ptvcursor_advance(ptvc, tlv_len);
7749
0
      }
7750
7751
0
      ptvcursor_pop_subtree(ptvc);
7752
0
    }
7753
0
    else
7754
0
    {
7755
0
      if (tlv_id >= 0xF000 /* && tlv_id <= 0xFFFF*/)
7756
0
      {
7757
0
        ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown Vendor Extension Tag");
7758
0
      }
7759
0
      else
7760
0
      {
7761
0
        ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown");
7762
0
      }
7763
7764
0
      dissect_tl_header(ptvc, pinfo);
7765
0
      ptvcursor_advance(ptvc, tlv_len);
7766
0
      ptvcursor_pop_subtree(ptvc);
7767
0
    }
7768
0
  }
7769
0
}
7770
7771
7772
static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo)
7773
0
{
7774
0
  uint32_t i = 0, count;
7775
0
  unsigned number_of_pdu_addr = ptvcursor_current_offset(ptvc); // *offset;
7776
0
  wmem_array_t *lengths = wmem_array_new(pinfo->pool, sizeof(uint16_t));
7777
7778
0
  ptvcursor_add_ret_uint(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN, &count);
7779
7780
0
  if (count > 0)
7781
0
  {
7782
0
    ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "RX PDU List");
7783
0
    int pdu_end = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc);
7784
7785
0
    while (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) > 0 &&
7786
0
         ptvcursor_current_offset(ptvc) < pdu_end )
7787
0
    {
7788
0
      uint16_t tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7789
      //uint16_t tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
7790
7791
0
      if (tlv_id == 0x2038)
7792
0
      {
7793
0
        if (i != 0)
7794
0
          ptvcursor_pop_subtree(ptvc);
7795
7796
0
        ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "[%u]", i);
7797
7798
0
        i++;
7799
0
      }
7800
7801
0
      char* tlv_name = "Unknown";
7802
0
      const tlv_t* tlv = look_up_tlv(tlv_id);
7803
7804
0
      if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
7805
0
      {
7806
0
        tlv_name = tlv->name;
7807
0
      }
7808
7809
0
      ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "%s", tlv_name);
7810
7811
0
      dissect_tl_header(ptvc, pinfo);
7812
7813
7814
0
      if (tlv_id == 0x2038)
7815
0
      {
7816
0
        dissect_rx_ue_info_value(ptvc, pinfo);
7817
0
      }
7818
0
      else if ((tlv_id == 0x2024) && (i > 0))
7819
0
      {
7820
0
        uint16_t val = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7821
0
        wmem_array_append_one(lengths, val);
7822
0
        ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
7823
0
        int data_offset = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
7824
0
        ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
7825
0
        ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
7826
0
        ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
7827
7828
0
        if ((data_offset > 0) && (pdu_end == (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc))))
7829
0
        {
7830
0
          pdu_end = number_of_pdu_addr + data_offset;
7831
0
        }
7832
7833
0
      }
7834
0
      else if (tlv_id == 0x2025)
7835
0
      {
7836
0
        dissect_rx_indication_rel9_value(ptvc, pinfo);
7837
0
      }
7838
7839
0
      ptvcursor_pop_subtree(ptvc);
7840
7841
0
    }
7842
7843
    // pop the last pdu index
7844
0
    ptvcursor_pop_subtree(ptvc);
7845
7846
0
    ptvcursor_pop_subtree(ptvc);
7847
0
  }
7848
7849
0
  for (i = 0; i < wmem_array_get_count(lengths); ++i)
7850
0
  {
7851
0
    ptvcursor_add(ptvc, hf_nfapi_pdu, *((uint16_t *)wmem_array_index(lengths, i)), ENC_NA);
7852
0
  }
7853
0
}
7854
7855
7856
// ----------------------------------------------------------------------------|
7857
7858
static int dissect_p45_header(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
7859
0
{
7860
0
  proto_tree* p45_tree;
7861
7862
0
  p45_tree = proto_tree_add_subtree(tree, tvb, 0, 8, ett_nfapi_p4_p5_message_header, NULL, "P4 P5 Header");
7863
7864
0
  proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_phy_id, tvb, 0, 2, ENC_BIG_ENDIAN);
7865
0
  proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_message_id, tvb, 2, 2, ENC_BIG_ENDIAN);
7866
0
  proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_message_length, tvb, 4, 2, ENC_BIG_ENDIAN);
7867
0
  proto_tree_add_item(p45_tree, hf_nfapi_p4_p5_message_header_spare, tvb, 6, 2, ENC_BIG_ENDIAN);
7868
7869
0
  return 8;
7870
0
}
7871
7872
static int dissect_p45_header_with_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7873
0
{
7874
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7875
0
  ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7876
7877
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7878
0
  ptvcursor_free(ptvc);
7879
0
  return tvb_captured_length(tvb);
7880
0
}
7881
7882
static int dissect_p45_header_with_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7883
0
{
7884
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7885
7886
0
  proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7887
7888
0
  return offset+4;
7889
0
}
7890
7891
static int dissect_p45_header_with_error_and_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7892
0
{
7893
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7894
0
  ptvcursor_t *ptvc;
7895
7896
0
  proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7897
0
  offset += 4;
7898
7899
0
  ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7900
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7901
0
  ptvcursor_free(ptvc);
7902
7903
0
  return tvb_captured_length(tvb);
7904
0
}
7905
7906
static int dissect_p45_header_with_p4_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7907
0
{
7908
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7909
7910
0
  proto_tree_add_item(tree, hf_nfapi_p4_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7911
7912
0
  return offset+4;
7913
0
}
7914
7915
static int dissect_p45_header_with_p4_error_and_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7916
0
{
7917
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7918
0
  ptvcursor_t *ptvc;
7919
7920
0
  proto_tree_add_item(tree, hf_nfapi_p4_error_code, tvb, offset, 4, ENC_BIG_ENDIAN);
7921
0
  offset += 4;
7922
7923
0
  ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7924
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7925
0
  ptvcursor_free(ptvc);
7926
7927
0
  return tvb_captured_length(tvb);
7928
0
}
7929
7930
static int dissect_p45_header_with_rat_type_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7931
0
{
7932
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7933
0
  ptvcursor_t *ptvc;
7934
7935
0
  proto_tree_add_item(tree, hf_nfapi_rat_type, tvb, offset, 1, ENC_BIG_ENDIAN);
7936
0
  offset += 1;
7937
7938
0
  ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7939
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7940
0
  ptvcursor_free(ptvc);
7941
7942
0
  return tvb_captured_length(tvb);
7943
0
}
7944
7945
static int dissect_p45_param_response_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7946
0
{
7947
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7948
0
  ptvcursor_t *ptvc;
7949
7950
0
  proto_tree_add_item(tree, hf_nfapi_error_code, tvb, offset, 1, ENC_BIG_ENDIAN);
7951
0
  offset += 1;
7952
0
  proto_tree_add_item(tree, hf_nfapi_num_tlv, tvb, offset, 1, ENC_BIG_ENDIAN);
7953
0
  offset += 1;
7954
7955
0
  ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7956
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7957
0
  ptvcursor_free(ptvc);
7958
7959
0
  return tvb_captured_length(tvb);
7960
0
}
7961
7962
static int dissect_p45_config_request_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7963
0
{
7964
0
  int offset = dissect_p45_header(tvb, pinfo, tree, data);
7965
0
  ptvcursor_t *ptvc;
7966
7967
0
  proto_tree_add_item(tree, hf_nfapi_num_tlv, tvb, offset, 1, ENC_BIG_ENDIAN);
7968
0
  offset += 1;
7969
7970
0
  ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
7971
0
  dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
7972
0
  ptvcursor_free(ptvc);
7973
7974
0
  return tvb_captured_length(tvb);
7975
0
}
7976
7977
static int dissect_p7_header(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint8_t* m, uint8_t* seg, uint8_t* seq)
7978
0
{
7979
0
  proto_tree *header_tree;
7980
0
  int offset = 0;
7981
0
  uint8_t m_seg;
7982
0
  static int * const fields[] = {
7983
0
    &hf_nfapi_p7_message_header_m,
7984
0
    &hf_nfapi_p7_message_header_segment,
7985
0
    NULL
7986
0
  };
7987
7988
0
  header_tree = proto_tree_add_subtree(tree, tvb, offset, 16, ett_nfapi_p7_message_header, NULL, "P7 Header");
7989
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_phy_id, tvb, offset, 2, ENC_BIG_ENDIAN);
7990
0
  offset += 2;
7991
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_message_id, tvb, offset, 2, ENC_BIG_ENDIAN);
7992
0
  offset += 2;
7993
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_message_length, tvb, offset, 2, ENC_BIG_ENDIAN);
7994
0
  offset += 2;
7995
7996
0
  if ((m != NULL) && (seg != NULL))
7997
0
  {
7998
0
    m_seg = tvb_get_uint8(tvb, offset);
7999
0
    *m = (m_seg & 0x80) >> 7;
8000
0
    *seg = m_seg & 0x7F;
8001
0
  }
8002
0
  proto_tree_add_bitmask_list(header_tree, tvb, offset, 1, fields, ENC_BIG_ENDIAN);
8003
0
  offset += 1;
8004
8005
0
  if (seq != NULL)
8006
0
  {
8007
0
    *seq = tvb_get_uint8(tvb, offset);
8008
0
  }
8009
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_sequence_number, tvb, offset, 1, ENC_BIG_ENDIAN);
8010
0
  offset += 1;
8011
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_checksum, tvb, offset, 4, ENC_BIG_ENDIAN);
8012
0
  offset += 4;
8013
0
  proto_tree_add_item(header_tree, hf_nfapi_p7_message_header_transmit_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN);
8014
0
  offset += 4;
8015
8016
0
  return offset;
8017
0
}
8018
8019
static int dissect_p7_dl_node_sync_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8020
0
{
8021
0
  int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8022
8023
0
  proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t1, tvb, offset, 4, ENC_BIG_ENDIAN);
8024
0
  offset += 4;
8025
0
  proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t2, tvb, offset, 4, ENC_BIG_ENDIAN);
8026
0
  offset += 4;
8027
0
  proto_tree_add_item(tree, hf_nfapi_ul_node_sync_t3, tvb, offset, 4, ENC_BIG_ENDIAN);
8028
0
  offset += 4;
8029
8030
0
  return offset;
8031
0
}
8032
8033
static int dissect_p7_ul_node_sync_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8034
0
{
8035
0
  int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8036
8037
0
  proto_tree_add_item(tree, hf_nfapi_dl_node_sync_t1, tvb, offset, 4, ENC_BIG_ENDIAN);
8038
0
  offset += 4;
8039
0
  proto_tree_add_item(tree, hf_nfapi_dl_node_sync_delta_sfn_sf, tvb, offset, 4, ENC_BIG_ENDIAN);
8040
0
  offset += 4;
8041
8042
0
  return offset;
8043
0
}
8044
8045
static int dissect_p7_timing_info_msg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8046
0
{
8047
0
  int offset = dissect_p7_header(tvb, pinfo, tree, NULL, NULL, NULL);
8048
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_last_sfn_sf, tvb, offset, 4, ENC_BIG_ENDIAN);
8049
0
  offset += 4;
8050
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_time_since_last_timing_info, tvb, offset, 4, ENC_BIG_ENDIAN);
8051
0
  offset += 4;
8052
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8053
0
  offset += 4;
8054
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8055
0
  offset += 4;
8056
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8057
0
  offset += 4;
8058
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_jitter, tvb, offset, 4, ENC_BIG_ENDIAN);
8059
0
  offset += 4;
8060
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8061
0
  offset += 4;
8062
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8063
0
  offset += 4;
8064
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8065
0
  offset += 4;
8066
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_latest_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8067
0
  offset += 4;
8068
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_dl_config_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8069
0
  offset += 4;
8070
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_tx_request_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8071
0
  offset += 4;
8072
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_ul_config_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8073
0
  offset += 4;
8074
0
  proto_tree_add_item(tree, hf_nfapi_timing_info_hi_dci0_earliest_arrival, tvb, offset, 4, ENC_BIG_ENDIAN);
8075
0
  offset += 4;
8076
8077
0
  return offset;
8078
0
}
8079
8080
static reassembly_table ul_p7_reassemble_table;
8081
static reassembly_table dl_p7_reassemble_table;
8082
8083
static int hf_msg_fragments;
8084
static int hf_msg_fragment;
8085
static int hf_msg_fragment_overlap;
8086
static int hf_msg_fragment_overlap_conflicts;
8087
static int hf_msg_fragment_multiple_tails;
8088
static int hf_msg_fragment_too_long_fragment;
8089
static int hf_msg_fragment_error;
8090
static int hf_msg_fragment_count;
8091
static int hf_msg_reassembled_in;
8092
static int hf_msg_reassembled_length;
8093
static int ett_msg_fragment;
8094
static int ett_msg_fragments;
8095
8096
static const fragment_items msg_frag_items = {
8097
  /* Fragment subtrees */
8098
  &ett_msg_fragment,
8099
  &ett_msg_fragments,
8100
  /* Fragment fields */
8101
  &hf_msg_fragments,
8102
  &hf_msg_fragment,
8103
  &hf_msg_fragment_overlap,
8104
  &hf_msg_fragment_overlap_conflicts,
8105
  &hf_msg_fragment_multiple_tails,
8106
  &hf_msg_fragment_too_long_fragment,
8107
  &hf_msg_fragment_error,
8108
  &hf_msg_fragment_count,
8109
  /* Reassembled in field */
8110
  &hf_msg_reassembled_in,
8111
  /* Reassembled length field */
8112
  &hf_msg_reassembled_length,
8113
  NULL,
8114
  /* Tag */
8115
  "Message fragments"
8116
};
8117
8118
static int dissect_nfapi_ul_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8119
0
{
8120
0
  uint8_t m, seg, seq;
8121
0
  int offset;
8122
8123
0
  uint8_t save_fragmented;
8124
8125
0
  uint16_t msg_id = tvb_get_ntohs(tvb, 2);
8126
0
  uint16_t msg_len = tvb_get_ntohs(tvb, 4);
8127
8128
0
  offset = dissect_p7_header(tvb, pinfo, tree, &m, &seg, &seq);
8129
0
  save_fragmented = pinfo->fragmented;
8130
8131
0
  if (m == 1 || (m == 0 && seg > 0))
8132
0
  {
8133
0
    fragment_head *fd_head;
8134
0
    tvbuff_t *save_tvb = tvb;
8135
8136
0
    if (offset >= msg_len) {
8137
0
      return tvb_captured_length(tvb);
8138
0
    }
8139
8140
0
    pinfo->fragmented = true;
8141
8142
0
    fd_head = fragment_add_seq_check(&ul_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
8143
8144
0
    if (fd_head == NULL)
8145
0
    {
8146
0
      return tvb_captured_length(tvb);
8147
0
    }
8148
8149
0
    tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled UL P7", fd_head, &msg_frag_items, NULL, tree);
8150
0
    if (tvb)
8151
0
    {
8152
0
      offset = 0;
8153
0
      col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
8154
0
    }
8155
0
    else
8156
0
    {
8157
0
      col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
8158
0
      return tvb_captured_length(save_tvb);
8159
0
    }
8160
0
  }
8161
8162
0
  pinfo->fragmented = save_fragmented;
8163
8164
0
  switch (msg_id)
8165
0
  {
8166
0
    case NFAPI_HARQ_INDICATION_MSG_ID:
8167
0
    case NFAPI_CRC_INDICATION_MSG_ID:
8168
0
    case NFAPI_RX_ULSCH_INDICATION_MSG_ID:
8169
0
    case NFAPI_RACH_INDICATION_MSG_ID:
8170
0
    case NFAPI_SRS_INDICATION_MSG_ID:
8171
0
    case NFAPI_RX_SR_INDICATION_MSG_ID:
8172
0
    case NFAPI_RX_CQI_INDICATION_MSG_ID:
8173
0
    {
8174
0
      ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
8175
0
      ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
8176
0
      dissect_tlv_list(ptvc, pinfo, msg_len);
8177
0
      ptvcursor_free(ptvc);
8178
0
    }
8179
0
    break;
8180
8181
0
  };
8182
8183
8184
0
  return tvb_captured_length(tvb);
8185
0
}
8186
8187
static int dissect_nfapi_dl_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8188
0
{
8189
0
  uint8_t m, seg, seq;
8190
0
  int offset;
8191
8192
0
  uint8_t save_fragmented;
8193
8194
0
  uint16_t msg_id = tvb_get_ntohs(tvb, 2);
8195
0
  uint16_t msg_len = tvb_get_ntohs(tvb, 4);
8196
8197
0
  offset = dissect_p7_header(tvb, pinfo, tree, &m, &seg, &seq);
8198
0
  save_fragmented = pinfo->fragmented;
8199
8200
0
  if (m == 1 || (m == 0 && seg > 0))
8201
0
  {
8202
0
    fragment_head *fd_head;
8203
0
    tvbuff_t *save_tvb = tvb;
8204
8205
0
    if (offset >= msg_len) {
8206
0
      return tvb_captured_length(tvb);
8207
0
    }
8208
8209
0
    pinfo->fragmented = true;
8210
8211
0
    fd_head = fragment_add_seq_check(&dl_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
8212
8213
0
    if (fd_head == NULL)
8214
0
    {
8215
0
      return tvb_captured_length(tvb);
8216
0
    }
8217
8218
0
    tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled DL P7", fd_head, &msg_frag_items, NULL, tree);
8219
0
    if (tvb)
8220
0
    {
8221
0
      offset = 0;
8222
0
      col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
8223
0
    }
8224
0
    else
8225
0
    {
8226
0
      col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
8227
0
      return tvb_captured_length(save_tvb);
8228
0
    }
8229
0
  }
8230
8231
0
  pinfo->fragmented = save_fragmented;
8232
8233
0
  switch (msg_id)
8234
0
  {
8235
0
    case NFAPI_DL_CONFIG_REQUEST_MSG_ID:
8236
0
    case NFAPI_UL_CONFIG_REQUEST_MSG_ID:
8237
0
    case NFAPI_HI_DCI0_REQUEST_MSG_ID:
8238
0
    case NFAPI_TX_REQUEST_MSG_ID:
8239
0
    case NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID:
8240
0
    case NFAPI_LBT_DL_INDICATION_MSG_ID:
8241
0
    {
8242
0
      ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, tree, tvb, offset);
8243
0
      ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
8244
0
      dissect_tlv_list(ptvc, pinfo, msg_len);
8245
0
      ptvcursor_free(ptvc);
8246
0
      break;
8247
0
    }
8248
0
  }
8249
8250
0
  return tvb_captured_length(tvb);
8251
0
}
8252
8253
8254
static int dissect_nfapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8255
0
{
8256
0
  proto_tree* nfapi_tree;
8257
0
  proto_item* nfapi_item;
8258
0
  uint16_t msg_id;
8259
0
  const char* message_str;
8260
8261
0
  if (tvb_reported_length(tvb) < 4)
8262
0
    return 0;
8263
8264
0
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "NFAPI");
8265
0
  col_clear(pinfo->cinfo, COL_INFO);
8266
8267
0
  nfapi_item = proto_tree_add_item(tree, proto_nfapi, tvb, 0, -1, ENC_NA);
8268
0
  nfapi_tree = proto_item_add_subtree(nfapi_item, ett_nfapi);
8269
8270
0
  msg_id = tvb_get_ntohs(tvb, 2);
8271
0
  message_str = val_to_str_const(msg_id, message_id_vals, "Unknown");
8272
8273
  // Flag if this is a vendor extension message, could do it for P4, 5, 7
8274
0
  if (msg_id >= 0x0300 && msg_id <= 0x03FF)
8275
0
  {
8276
0
    col_append_str(pinfo->cinfo, COL_INFO, "Vendor Extension");
8277
0
    proto_item_append_text(nfapi_item, ", Vendor Extension");
8278
0
  }
8279
0
  else
8280
0
  {
8281
0
    proto_item_append_text(nfapi_item, ", %s", message_str);
8282
0
    col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", message_str);
8283
0
  }
8284
8285
0
  if (!dissector_try_uint_with_data(message_table, msg_id, tvb, pinfo, nfapi_tree, false, NULL))
8286
0
  {
8287
0
    call_data_dissector(tvb, pinfo, nfapi_tree);
8288
0
  }
8289
8290
0
  return tvb_captured_length(tvb);
8291
0
}
8292
8293
static void nfapi_tag_vals_fn(char* s, uint32_t v)
8294
0
{
8295
0
  const tlv_t* tlv = look_up_tlv(v);
8296
0
  if (tlv != 0)
8297
0
  {
8298
0
    snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", tlv->name, v);
8299
0
  }
8300
0
  else
8301
0
  {
8302
0
    snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", "Unknown", v);
8303
0
  }
8304
0
}
8305
static void neg_pow_conversion_fn(char* s, uint8_t v)
8306
0
{
8307
0
  snprintf(s, ITEM_LABEL_LENGTH, "%d dB (%d)", ((int16_t)v * (-1)), v);
8308
0
}
8309
static void power_offset_conversion_fn(char* s, uint16_t v)
8310
0
{
8311
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.001) - 6.0), v);
8312
0
}
8313
static void reference_signal_power_conversion_fn(char* s, uint16_t v)
8314
0
{
8315
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.25) - 63.75), v);
8316
0
}
8317
static void laa_threshold_conversion_fn(char* s, uint16_t v)
8318
0
{
8319
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (float)(v * -100.00), v);
8320
0
}
8321
static void max_transmit_power_2_conversion_fn(char* s, uint16_t v)
8322
0
{
8323
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1) - 10.0, v);
8324
0
}
8325
static void max_transmit_power_conversion_fn(char* s, uint16_t v)
8326
0
{
8327
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8328
0
}
8329
static void sfn_sf_conversion_fn(char* s, uint16_t v)
8330
0
{
8331
0
  snprintf(s, ITEM_LABEL_LENGTH, "%d/%d (%d)", v >> 0x4, v & 0x000F, v);
8332
0
}
8333
static void rssi_conversion_fn(char* s, uint16_t v)
8334
0
{
8335
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8336
0
}
8337
static void dl_rs_tx_pow_measment_conversion_fn(char* s, uint16_t v)
8338
0
{
8339
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
8340
0
}
8341
8342
static void ul_cqi_conversion_fn(char* s, uint16_t v)
8343
0
{
8344
0
  snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v / 2 ) - 64.0), v);
8345
0
}
8346
8347
// ----------------------------------------------------------------------------|
8348
8349
void proto_register_nfapi(void)
8350
14
{
8351
14
  static hf_register_info hf[] =
8352
14
  {
8353
14
    { &hf_msg_fragments,
8354
14
      { "Message fragments", "nfapi.fragments",
8355
14
      FT_NONE, BASE_NONE, NULL, 0x00,
8356
14
      NULL, HFILL }
8357
14
    },
8358
14
    { &hf_msg_fragment,
8359
14
      { "Message fragment", "nfapi.fragment",
8360
14
      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8361
14
      NULL, HFILL }
8362
14
    },
8363
14
    { &hf_msg_fragment_overlap,
8364
14
      { "Message fragment overlap", "nfapi.fragment.overlap",
8365
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8366
14
      NULL, HFILL }
8367
14
    },
8368
14
    { &hf_msg_fragment_overlap_conflicts,
8369
14
      { "Message fragment overlapping with conflicting data", "nfapi.fragment.overlap.conflicts",
8370
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8371
14
      NULL, HFILL }
8372
14
    },
8373
14
    { &hf_msg_fragment_multiple_tails,
8374
14
      { "Message has multiple tail fragments", "nfapi.fragment.multiple_tails",
8375
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8376
14
      NULL, HFILL }
8377
14
    },
8378
14
    { &hf_msg_fragment_too_long_fragment,
8379
14
      { "Message fragment too long", "nfapi.fragment.too_long_fragment",
8380
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8381
14
      NULL, HFILL }
8382
14
    },
8383
14
    { &hf_msg_fragment_error,
8384
14
      { "Message defragmentation error", "nfapi.fragment.error",
8385
14
      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8386
14
      NULL, HFILL }
8387
14
    },
8388
14
    { &hf_msg_fragment_count,
8389
14
      { "Message fragment count", "nfapi.fragment.count",
8390
14
      FT_UINT32, BASE_DEC, NULL, 0x00,
8391
14
      NULL, HFILL }
8392
14
    },
8393
14
    { &hf_msg_reassembled_in,
8394
14
      { "Reassembled in", "nfapi.reassembled.in",
8395
14
      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
8396
14
      NULL, HFILL }
8397
14
    },
8398
14
    { &hf_msg_reassembled_length,
8399
14
      { "Reassembled length", "nfapi.reassembled.length",
8400
14
      FT_UINT32, BASE_DEC, NULL, 0x00,
8401
14
      NULL, HFILL }
8402
14
    },
8403
14
    { &hf_nfapi_p4_p5_message_header_phy_id,
8404
14
      { "PHY ID", "nfapi.p4_p5_message_header.phy_id",
8405
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8406
14
      "Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
8407
14
    },
8408
14
    { &hf_nfapi_p4_p5_message_header_message_id,
8409
14
      { "Message ID", "nfapi.p4_p5_message_header.message_id",
8410
14
      FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
8411
14
      "The nFAPI message identity", HFILL }
8412
14
    },
8413
14
    { &hf_nfapi_p4_p5_message_header_message_length,
8414
14
      { "Message Length", "nfapi.p4_p5_message_header.message_length",
8415
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8416
14
      "The length in bytes of the message including the header", HFILL }
8417
14
    },
8418
14
    { &hf_nfapi_p4_p5_message_header_spare,
8419
14
      { "Spare", "nfapi.p4_p5_message_header.spare",
8420
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8421
14
      "Reserved field to be populated with zeros on transmission and ignored on reception", HFILL }
8422
14
    },
8423
14
    { &hf_nfapi_p7_message_header_phy_id,
8424
14
      { "Phy ID", "nfapi.p7_message_header.phy_id",
8425
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8426
14
      "Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
8427
14
    },
8428
14
    { &hf_nfapi_p7_message_header_message_id,
8429
14
      { "Message ID", "nfapi.p7.message_header.message_id",
8430
14
      FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
8431
14
      "The nFAPI message identity", HFILL }
8432
14
    },
8433
14
    { &hf_nfapi_p7_message_header_message_length,
8434
14
      { "Message Length", "nfapi.p7_message_header.message_length",
8435
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_byte_bytes), 0x0,
8436
14
      "The length in bytes of the message segment including the header", HFILL }
8437
14
    },
8438
14
    { &hf_nfapi_p7_message_header_m,
8439
14
      { "More segments", "nfapi.p7_message_header.more_segments",
8440
14
      FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
8441
14
      "A More flag indicating there are more segments to follow to complete the entire message", HFILL }
8442
14
    },
8443
14
    { &hf_nfapi_p7_message_header_segment,
8444
14
      { "Segment Number", "nfapi.p7_message_header.segment_number",
8445
14
      FT_UINT8, BASE_DEC, NULL, 0x7F,
8446
14
      "The segment number starting at zero and incrementing by one between each segment", HFILL }
8447
14
    },
8448
14
    { &hf_nfapi_p7_message_header_sequence_number,
8449
14
      { "Sequence Number", "nfapi.p7_message_header.m_segment_sequence",
8450
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
8451
14
      "The incrementing sequence number for all complete messages over the P7 nFAPI interface per PHY instance", HFILL }
8452
14
    },
8453
14
    { &hf_nfapi_p7_message_header_checksum,
8454
14
      { "Checksum", "nfapi.p7_message_header.checksum",
8455
14
      FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8456
14
      "The checksum of the whole message segment (including header) as calculated using "
8457
14
      "the CRC32c algorithm following the same method as the SCTP protocol defined in IETF RFC 4960 "
8458
14
      "The Checksum is optional to populate and must be filled with zero's when not used", HFILL }
8459
14
    },
8460
14
    { &hf_nfapi_p7_message_header_transmit_timestamp,
8461
14
      { "Transmit Timestamp", "nfapi.p7_message_header.timestamp",
8462
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
8463
14
      "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 }
8464
14
    },
8465
14
    { &hf_nfapi_tl_tag,
8466
14
      { "TLV Tag", "nfapi.tlv_tag",
8467
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(nfapi_tag_vals_fn), 0x0,
8468
14
      NULL, HFILL }
8469
14
    },
8470
14
    { &hf_nfapi_tl_length,
8471
14
      { "TLV Length", "nfapi.tlv_length",
8472
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_byte_bytes), 0x0,
8473
14
      NULL, HFILL }
8474
14
    },
8475
14
    { &hf_nfapi_error_code,
8476
14
      { "Error Code", "nfapi.error.code",
8477
14
      FT_UINT32, BASE_DEC, VALS(nfapi_error_vals), 0x0,
8478
14
      NULL, HFILL }
8479
14
    },
8480
14
    { &hf_nfapi_p4_error_code,
8481
14
      { "Error Code", "nfapi.p4_error.code",
8482
14
      FT_UINT32, BASE_DEC, VALS(nfapi_p4_error_vals), 0x0,
8483
14
      NULL, HFILL }
8484
14
    },
8485
14
    { &hf_nfapi_rat_type,
8486
14
      { "RAT Type", "nfapi.rat_type",
8487
14
      FT_UINT8, BASE_DEC, VALS(nfapi_rat_type_vals), 0x0,
8488
14
      NULL, HFILL }
8489
14
    },
8490
14
    { &hf_nfapi_num_tlv,
8491
14
      { "Number of TLV", "nfapi.param.response.num_tlv",
8492
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
8493
14
      NULL, HFILL }
8494
14
    },
8495
14
    { &hf_nfapi_phy_state,
8496
14
      { "Phy state value", "nfapi.phy.state",
8497
14
      FT_UINT16, BASE_DEC, VALS(nfapi_phy_state_vals), 0x0,
8498
14
      "Indicates the current operational state of the PHY", HFILL }
8499
14
    },
8500
14
    { &hf_nfapi_dl_ue_per_sf,
8501
14
      { "Downlink UEs per Subframe", "nfapi.dl.ue.per.sf",
8502
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
8503
14
      "The maximum number of downlink UEs per subframe supported."
8504
14
      "This is the maximum number of downlink UEs that can be scheduled per "
8505
14
      "subframe, non-inclusive of broadcast, paging and common channels.", HFILL }
8506
14
    },
8507
14
    { &hf_nfapi_ul_ue_per_sf,
8508
14
      { "Uplink UEs per Subframe", "nfapi.ul.ue.per.sf",
8509
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
8510
14
      "The maximum number of uplink UEs per subframe supported."
8511
14
      "This is the maximum number of uplink UEs that can be scheduled per "
8512
14
      "subframe, non-inclusive of common channels.", HFILL }
8513
14
    },
8514
14
    { &hf_nfapi_duplex_mode,
8515
14
      { "Duplex Mode", "nfapi.duplex.mode",
8516
14
      FT_UINT16, BASE_DEC, VALS(nfapi_duplex_mode_vals), 0x0,
8517
14
      NULL, HFILL }
8518
14
    },
8519
14
    { &hf_nfapi_dl_bandwidth_support,
8520
14
      { "Downlink bandwidth support", "nfapi.dl.bandwidth.support",
8521
14
      FT_UINT16, BASE_HEX, NULL, 0x0,
8522
14
      "The PHY downlink channel bandwidth capability (in resource blocks)", HFILL }
8523
14
    },
8524
14
    { &hf_nfapi_dl_bandwidth_support_6,
8525
14
      { "6Mhz", "nfapi.dl.bandwidth.support.6",
8526
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8527
14
      NULL, HFILL }
8528
14
    },
8529
14
    { &hf_nfapi_dl_bandwidth_support_15,
8530
14
      { "15Mhz", "nfapi.dl.bandwidth.support.15",
8531
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8532
14
      NULL, HFILL }
8533
14
    },
8534
14
    { &hf_nfapi_dl_bandwidth_support_25,
8535
14
      { "25Mhz", "nfapi.dl.bandwidth.support.25",
8536
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8537
14
      NULL, HFILL }
8538
14
    },
8539
14
    { &hf_nfapi_dl_bandwidth_support_50,
8540
14
      { "50Mhz", "nfapi.dl.bandwidth.support.50",
8541
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8542
14
      NULL, HFILL }
8543
14
    },
8544
14
    { &hf_nfapi_dl_bandwidth_support_75,
8545
14
      { "75Mhz", "nfapi.dl.bandwidth.support.75",
8546
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
8547
14
      NULL, HFILL }
8548
14
    },
8549
14
    { &hf_nfapi_dl_bandwidth_support_100,
8550
14
      { "100Mhz", "nfapi.dl.bandwidth.support.100",
8551
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
8552
14
      NULL, HFILL }
8553
14
    },
8554
14
    { &hf_nfapi_ul_bandwidth_support,
8555
14
      { "Uplink bandwidth support", "nfapi.ul.bandwidth.support",
8556
14
      FT_UINT16, BASE_HEX, NULL, 0x0,
8557
14
      "The PHY uplink channel bandwidth capability (in resource blocks)", HFILL }
8558
14
    },
8559
14
    { &hf_nfapi_ul_bandwidth_support_6,
8560
14
      { "6Mhz", "nfapi.ul.bandwidth.support.6",
8561
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8562
14
      NULL, HFILL }
8563
14
    },
8564
14
    { &hf_nfapi_ul_bandwidth_support_15,
8565
14
      { "15Mhz", "nfapi.ul.bandwidth.support.15",
8566
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8567
14
      NULL, HFILL }
8568
14
    },
8569
14
    { &hf_nfapi_ul_bandwidth_support_25,
8570
14
      { "25Mhz", "nfapi.ul.bandwidth.support.25",
8571
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8572
14
      NULL, HFILL }
8573
14
    },
8574
14
    { &hf_nfapi_ul_bandwidth_support_50,
8575
14
      { "50Mhz", "nfapi.ul.bandwidth.support.50",
8576
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8577
14
      NULL, HFILL }
8578
14
    },
8579
14
    { &hf_nfapi_ul_bandwidth_support_75,
8580
14
      { "75Mhz", "nfapi.ul.bandwidth.support.75",
8581
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
8582
14
      NULL, HFILL }
8583
14
    },
8584
14
    { &hf_nfapi_ul_bandwidth_support_100,
8585
14
      { "100Mhz", "nfapi.ul.bandwidth.support.100",
8586
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
8587
14
      NULL, HFILL }
8588
14
    },
8589
14
    { &hf_nfapi_dl_modulation_support,
8590
14
      { "Downlink modulation support", "nfapi.dl.modulation.support",
8591
14
      FT_UINT16, BASE_HEX, NULL, 0x0,
8592
14
      "The PHY downlink modulation capability", HFILL }
8593
14
    },
8594
14
    { &hf_nfapi_dl_modulation_support_qpsk,
8595
14
      { "QPSK", "nfapi.dl.modulation.support.qpsk",
8596
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8597
14
      NULL, HFILL }
8598
14
    },
8599
14
    { &hf_nfapi_dl_modulation_support_16qam,
8600
14
      { "16QAM", "nfapi.dl.modulation.support.16qam",
8601
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8602
14
      NULL, HFILL }
8603
14
    },
8604
14
    { &hf_nfapi_dl_modulation_support_64qam,
8605
14
      { "64QAM", "nfapi.dl.modulation.support.64qam",
8606
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8607
14
      NULL, HFILL }
8608
14
    },
8609
14
    { &hf_nfapi_dl_modulation_support_256qam,
8610
14
      { "256QAM", "nfapi.dl.modulation.support.256qam",
8611
14
      FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8612
14
      NULL, HFILL }
8613
14
    },
8614
14
    { &hf_nfapi_ul_modulation_support,
8615
14
      { "Uplink modulation support", "nfapi.ul.modulation.support",
8616
14
      FT_UINT16, BASE_HEX, NULL, 0x0,
8617
14
      "The PHY uplink modulation capability", HFILL }
8618
14
    },
8619
14
    { &hf_nfapi_ul_modulation_support_qpsk,
8620
14
      { "QPSK", "nfapi.ul.modulation.support.qpsk",
8621
14
      FT_BOOLEAN, 16, NULL, 0x0001,
8622
14
      NULL, HFILL }
8623
14
    },
8624
14
    { &hf_nfapi_ul_modulation_support_16qam,
8625
14
      { "16QAM", "nfapi.ul.modulation.support.16qam",
8626
14
      FT_BOOLEAN, 16, NULL, 0x0002,
8627
14
      NULL, HFILL }
8628
14
    },
8629
14
    { &hf_nfapi_ul_modulation_support_64qam,
8630
14
      { "64QAM", "nfapi.ul.modulation.support.64qam",
8631
14
      FT_BOOLEAN, 16, NULL, 0x0004,
8632
14
      NULL, HFILL }
8633
14
    },
8634
14
    { &hf_nfapi_phy_antenna_capability,
8635
14
      { "Phy Antenna capability", "nfapi.phy.antenna.capability",
8636
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8637
14
      "Number of antennas supported", HFILL }
8638
14
    },
8639
14
    { &hf_nfapi_release_capability,
8640
14
      { "Release capability", "nfapi.release.capability",
8641
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8642
14
      "Indicates which release the PHY supports", HFILL }
8643
14
    },
8644
14
    { &hf_nfapi_mbsfn_capability,
8645
14
      { "MBSFN capability", "nfapi.mbsfn.capability",
8646
14
      FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8647
14
      "Indicates support for MBSFN features", HFILL }
8648
14
    },
8649
14
    { &hf_nfapi_laa_capability,
8650
14
      { "LAA Support", "nfapi.laa.support",
8651
14
      FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8652
14
      "Indicates support for LAA features", HFILL }
8653
14
    },
8654
14
    { &hf_nfapi_pd_sensing_lbt_support,
8655
14
      { "PD sensing LBT support", "nfapi.pd.sensing.lbt.support",
8656
14
      FT_BOOLEAN, BASE_NONE, TFS(&support_strname), 0x0,
8657
14
      "Indicates support for PD sensing in L1", HFILL }
8658
14
    },
8659
14
    { &hf_nfapi_multi_carrier_lbt_support,
8660
14
      { "Multi carrier LBT support", "nfapi.multi.carrier.lbt.support",
8661
14
      FT_UINT16, BASE_DEC, VALS(nfapi_multi_carrier_lbt_support_vals), 0x0,
8662
14
      NULL, HFILL }
8663
14
    },
8664
14
    { &hf_nfapi_partial_sf_support,
8665
14
      { "Partial SF support", "nfapi.partial.sf.support",
8666
14
      FT_BOOLEAN, BASE_NONE, TFS(&partial_sf_support_strname), 0x0,
8667
14
      "Indicates support for Partial SF in L1", HFILL }
8668
14
    },
8669
14
    { &hf_nfapi_reference_signal_power,
8670
14
      { "Reference signal power", "nfapi.ref_sig_power",
8671
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(reference_signal_power_conversion_fn), 0x0,
8672
14
      "Normalized value levels (relative) to accommodate different absolute Tx Power used by eNb", HFILL }
8673
14
    },
8674
14
    { &hf_nfapi_primary_synchronization_signal_epre_eprers,
8675
14
      { "Primary synchronization signal EPRE/EPRERS", "nfapi.primary.sync.signal",
8676
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8677
14
      "The power of synchronization signal with respect to the reference signal, (PSS for LTE cell, NPSS for NB-IOT cell)", HFILL }
8678
14
    },
8679
14
    { &hf_nfapi_secondary_synchronization_signal_epre_eprers,
8680
14
      { "Secondary synchronization signal EPRE/EPRERS", "nfapi.secondary.sync.signal",
8681
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8682
14
      "The power of synchronization signal with respect to the reference signal, (SSS for LTE cell, NSSS for NB-IOT cell)", HFILL }
8683
14
    },
8684
14
    { &hf_nfapi_physical_cell_id,
8685
14
      { "Physical Cell ID", "nfapi.physical.cell.id",
8686
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8687
14
      "The Cell ID sent with the synchronization signal", HFILL }
8688
14
    },
8689
14
    { &hf_nfapi_phich_resource,
8690
14
      { "PHICH Resource", "nfapi.phich.resource",
8691
14
      FT_UINT16, BASE_DEC, VALS(nfapi_phich_resource_vals), 0x0,
8692
14
      "The number of resource element groups used for PHICH", HFILL }
8693
14
    },
8694
14
    { &hf_nfapi_phich_duration,
8695
14
      { "PHICH Duration", "nfapi.phich.duration",
8696
14
      FT_BOOLEAN, BASE_NONE, TFS(&phich_duration_strname), 0x0,
8697
14
      "The PHICH duration for MBSFN and non-MBSFN sub-frames", HFILL }
8698
14
    },
8699
14
    { &hf_nfapi_phich_power_offset,
8700
14
      { "PHICH Power Offset", "nfapi.phich.power.offset",
8701
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8702
14
      "The power per antenna of the PHICH with respect to the reference signal", HFILL }
8703
14
    },
8704
14
    { &hf_nfapi_configuration_index,
8705
14
      { "Configuration Index", "nfapi.configuration.index",
8706
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8707
14
      "Provides information about the location and format of the PRACH.", HFILL }
8708
14
    },
8709
14
    { &hf_nfapi_root_sequence_index,
8710
14
      { "Root sequence Index", "nfapi.root.sequence.index",
8711
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8712
14
      "PRACH Root sequence Index", HFILL }
8713
14
    },
8714
14
    { &hf_nfapi_zero_correlation_zone_configuration,
8715
14
      { "Zero correlation zone configuration", "nfapi.zero.correlation.zone.configuration",
8716
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8717
14
      "Equivalent to Ncs", HFILL }
8718
14
    },
8719
14
    { &hf_nfapi_high_speed_flag,
8720
14
      { "High Speed Flag", "nfapi.high.speed.flag",
8721
14
      FT_BOOLEAN, BASE_NONE, TFS(&high_speed_flag_strname), 0x0,
8722
14
      "Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
8723
14
    },
8724
14
    { &hf_nfapi_frequency_offset,
8725
14
      { "Frequency offset", "nfapi.frequency.offset",
8726
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8727
14
      "The first physical resource block available for PRACH", HFILL }
8728
14
    },
8729
14
    { &hf_nfapi_hopping_mode,
8730
14
      { "Hopping Mode", "nfapi.hopping.mode",
8731
14
      FT_BOOLEAN, BASE_NONE, TFS(&hopping_mode_strname), 0x0,
8732
14
      "If hopping is enabled indicates the type of hopping used", HFILL }
8733
14
    },
8734
14
    { &hf_nfapi_hopping_offset,
8735
14
      { "Hopping offset", "nfapi.hopping.offset",
8736
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8737
14
      "The offset used if hopping is enabled", HFILL }
8738
14
    },
8739
14
    { &hf_nfapi_delta_pucch_shift,
8740
14
      { "Delta PUCCH Shift", "nfapi.delta.pucch.shift",
8741
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8742
14
      "The cyclic shift difference", HFILL }
8743
14
    },
8744
14
    { &hf_nfapi_n_cqi_rb,
8745
14
      { "N CQI RB", "nfapi.n.cqi.rb",
8746
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8747
14
      "The bandwidth, in units of resource blocks, that is available for use by PUCCH formats 2/2a/2b transmission in each slot", HFILL }
8748
14
    },
8749
14
    { &hf_nfapi_n_an_cs,
8750
14
      { "N AN CS", "nfapi.n.an.cs",
8751
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8752
14
      "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 }
8753
14
    },
8754
14
    { &hf_nfapi_n1_pucch_an,
8755
14
      { "N1 PUCCH AN", "nfapi.n1.pucch.an",
8756
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8757
14
      NULL, HFILL }
8758
14
    },
8759
14
    { &hf_nfapi_bandwidth_configuration,
8760
14
      { "Bandwidth configuration", "nfapi.bw.configuration",
8761
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8762
14
      "The available SRS bandwidth of the cell", HFILL }
8763
14
    },
8764
14
    { &hf_nfapi_srs_subframe_configuration,
8765
14
      { "SRS subframe configuration", "nfapi.srs.subframe.configuration",
8766
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8767
14
      "The subframe configuration. Needed if semi-static configuration is held in PHY", HFILL }
8768
14
    },
8769
14
    { &hf_nfapi_uplink_rs_hopping,
8770
14
      { "Uplink RS hopping", "nfapi.uplink.rs.hopping",
8771
14
      FT_UINT16, BASE_DEC, VALS(nfapi_uplink_rs_hopping_vals), 0x0,
8772
14
      "Indicates the type of hopping to use", HFILL }
8773
14
    },
8774
14
    { &hf_nfapi_group_assignment,
8775
14
      { "Group assignment", "nfapi.group.assignment",
8776
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8777
14
      "The sequence shift pattern used if group hopping is enabled", HFILL }
8778
14
    },
8779
14
    { &hf_nfapi_cyclic_shift_1_for_drms,
8780
14
      { "Cyclic Shift 1 for DRMS", "nfapi.cyclic.shift.1.for.drms",
8781
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8782
14
      "Specifies the cyclic shift for the reference signal used in the cell.", HFILL }
8783
14
    },
8784
14
    { &hf_nfapi_subframe_assignment,
8785
14
      { "Subframe_assignment", "nfapi.subframe.assignment",
8786
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8787
14
      "For TDD mode only, indicates the DL/UL subframe structure", HFILL }
8788
14
    },
8789
14
    { &hf_nfapi_special_subframe_patterns,
8790
14
      { "Special Subframe patterns", "nfapi.special.subframe.patterns",
8791
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8792
14
      "For TDD mode only. Length of fields DwPTS, GP and UpPTS", HFILL }
8793
14
    },
8794
14
    { &hf_nfapi_ed_threshold_for_lbt_for_pdsch,
8795
14
      { "ED Threshold for LBT for PDSCH", "nfapi.ed.threshold.for.lbt.pdsch",
8796
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8797
14
      "Indicates the energy detection threshold in dBm for LBT for PDSCH", HFILL }
8798
14
    },
8799
14
    { &hf_nfapi_ed_threshold_for_lbt_for_drs,
8800
14
      { "ED Threshold for LBT for DRS", "nfapi.ed.threshold.for.lbt.for.drs",
8801
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8802
14
      "Indicates the energy detection threshold in dBm for LBT for DRS", HFILL }
8803
14
    },
8804
14
    { &hf_nfapi_pd_threshold,
8805
14
      { "PD Threshold", "nfapi.pd.threshold",
8806
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
8807
14
      "Indicates the preamble detection threshold in dBm, if the L1 capabilities support PD", HFILL }
8808
14
    },
8809
14
    { &hf_nfapi_multi_carrier_type,
8810
14
      { "Multi carrier type", "nfapi.multi.carrier.type",
8811
14
      FT_UINT16, BASE_DEC, VALS(nfapi_laa_carrier_type_vals), 0x0,
8812
14
      "Indicates multi carrier type configuration of L1 (according to L1 capabilities and L2 scheduler requirements)", HFILL }
8813
14
    },
8814
14
    { &hf_nfapi_multi_carrier_tx,
8815
14
      { "Multi carrier TX", "nfapi.multi.carrier.tx",
8816
14
      FT_BOOLEAN, BASE_NONE, TFS(&nfapi_multi_carrier_tx_strname), 0x0,
8817
14
      "Indicates multi carrier transmission configuration of L1 (according to type if supporting multi carrier)", HFILL }
8818
14
    },
8819
14
    { &hf_nfapi_multi_carrier_freeze,
8820
14
      { "Multi carrier freeze", "nfapi.multi.carrier.freeze",
8821
14
      FT_BOOLEAN, BASE_NONE, TFS(&nfapi_multi_carrier_freeze_strname), 0x0,
8822
14
      "Indicates multi carrier freeze, configuration of L1 (applicable only to type A type if supporting multi carrier)", HFILL }
8823
14
    },
8824
14
    { &hf_nfapi_tx_antenna_ports_for_drs,
8825
14
      { "Tx antenna ports for DRS", "nfapi.tx.antenna.ports.for.drs",
8826
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8827
14
      "The number of cell specific transmit antenna ports within the DRS occasions", HFILL }
8828
14
    },
8829
14
    { &hf_nfapi_transmission_power_for_drs,
8830
14
      { "Transmission power for DRS", "nfapi.transmission.power.for.drs",
8831
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
8832
14
      "Offset of cell specific Reference signals power within DRS occasions to the reference signal power", HFILL }
8833
14
    },
8834
14
    { &hf_nfapi_pbch_repetitions_enabled_r13,
8835
14
      { "PBCH Repetitions enable R13", "nfapi.pbch.repetitions.enabled_r13",
8836
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8837
14
      "Enable / Disable PBCH repetitions", HFILL }
8838
14
    },
8839
14
    { &hf_nfapi_prach_cat_m_root_sequence_index,
8840
14
      { "PRACH CAT-M Root sequence Index", "nfapi.prach.cat_m.root.sequence.index",
8841
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8842
14
      NULL, HFILL }
8843
14
    },
8844
14
    { &hf_nfapi_prach_cat_m_zero_correlation_zone_configuration,
8845
14
      { "PRACH CAT-M Zero correlation zone configuration", "nfapi.prach.cat_m.zero.correlation.zone.configuration",
8846
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8847
14
      "Equivalent to Ncs", HFILL }
8848
14
    },
8849
14
    { &hf_nfapi_prach_cat_m_high_speed_flag,
8850
14
      { "PRACH CAT-M High speed flag", "nfapi.prach.cat_m.high.speed.flag",
8851
14
      FT_BOOLEAN, BASE_NONE, TFS(&high_speed_flag_strname), 0x0,
8852
14
      "Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
8853
14
    },
8854
14
    { &hf_nfapi_prach_ce_level_0_enable,
8855
14
      { "PRACH CE level #0 Enable", "nfapi.prach.ce.level.0.enable",
8856
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8857
14
      "Enable \\ Disable CE level #0.", HFILL }
8858
14
    },
8859
14
    { &hf_nfapi_prach_ce_level_0_configuration_index,
8860
14
      { "PRACH CE level #0 Configuration Index", "nfapi.prach.ce.level.0.configuration.index",
8861
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8862
14
      "Provides information about the location and format of the PRACH", HFILL }
8863
14
    },
8864
14
    { &hf_nfapi_prach_ce_level_0_frequency_offset,
8865
14
      { "PRACH CE level #0 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset",
8866
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8867
14
      "The first physical resource block available for PRACH for each CE", HFILL }
8868
14
    },
8869
14
    { &hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt,
8870
14
      { "PRACH CE level #0 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt",
8871
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8872
14
      "Number of PRACH repetitions per attempt for each CE level", HFILL }
8873
14
    },
8874
14
    { &hf_nfapi_prach_ce_level_0_starting_subframe_periodicity,
8875
14
      { "CE level #0 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity",
8876
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8877
14
      "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8878
14
    },
8879
14
    { &hf_nfapi_prach_ce_level_0_hopping_enabled,
8880
14
      { "PRACH CE level #0 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable",
8881
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8882
14
      "Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
8883
14
    },
8884
14
    { &hf_nfapi_prach_ce_level_0_hopping_offset,
8885
14
      { "PRACH CE level #0 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset",
8886
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8887
14
      "Valid in case 'PRACH Hopping Enable' is enabled", HFILL }
8888
14
    },
8889
14
    { &hf_nfapi_prach_ce_level_1_enable,
8890
14
      { "PRACH CE level #1 Enable", "nfapi.prach.ce.level.0.enable",
8891
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8892
14
      "Enable \\ Disable CE level #1", HFILL }
8893
14
    },
8894
14
    { &hf_nfapi_prach_ce_level_1_configuration_index,
8895
14
      { "PRACH CE level #1 Configuration Index", "nfapi.prach.ce.level.1.configuration.index",
8896
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8897
14
      "Provides information about the location and format of the PRACH", HFILL }
8898
14
    },
8899
14
    { &hf_nfapi_prach_ce_level_1_frequency_offset,
8900
14
      { "PRACH CE level #1 Frequency offset", "nfapi.prach.ce.level.1.frequency_offset",
8901
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8902
14
      "The first physical resource block available for PRACH for each CE", HFILL }
8903
14
    },
8904
14
    { &hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt,
8905
14
      { "PRACH CE level #1 Number of repetitions per attempt", "nfapi.prach.ce.level.1.number.of.repetitions.per_attempt",
8906
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8907
14
      "Number of PRACH repetitions per attempt for each CE level", HFILL }
8908
14
    },
8909
14
    { &hf_nfapi_prach_ce_level_1_starting_subframe_periodicity,
8910
14
      { "CE level #1 Starting subframe periodicity", "nfapi.prach.ce.level.1.starting.subframe_periodicity",
8911
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8912
14
      "Optional.PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities),", HFILL }
8913
14
    },
8914
14
    { &hf_nfapi_prach_ce_level_1_hopping_enabled,
8915
14
      { "PRACH CE level #1 Hopping Enable", "nfapi.prach.ce.level.1.hopping_enable",
8916
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8917
14
      "Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
8918
14
    },
8919
14
    { &hf_nfapi_prach_ce_level_1_hopping_offset,
8920
14
      { "PRACH CE level #1 Hopping Offset", "nfapi.prach.ce.level.1.hopping.offset",
8921
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8922
14
      "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8923
14
    },
8924
14
    { &hf_nfapi_prach_ce_level_2_enable,
8925
14
      { "PRACH CE level #2 Enable", "nfapi.prach.ce.level.2.enable",
8926
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8927
14
      "Enable \\ Disable CE level #2", HFILL }
8928
14
    },
8929
14
    { &hf_nfapi_prach_ce_level_2_configuration_index,
8930
14
      { "PRACH CE level #2 Configuration Index", "nfapi.prach.ce.level.2.configuration.index",
8931
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8932
14
      "Provides information about the location and format of the PRACH", HFILL }
8933
14
    },
8934
14
    { &hf_nfapi_prach_ce_level_2_frequency_offset,
8935
14
      { "PRACH CE level #2 Frequency offset", "nfapi.prach.ce.level.2.frequency_offset",
8936
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8937
14
      "The first physical resource block available for PRACH for each CE", HFILL }
8938
14
    },
8939
14
    { &hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt,
8940
14
      { "PRACH CE level #2 Number of repetitions per attempt", "nfapi.prach.ce.level.2.number.of.repetitions.per_attempt",
8941
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8942
14
      "Number of PRACH repetitions per attempt for each CE level", HFILL }
8943
14
    },
8944
14
    { &hf_nfapi_prach_ce_level_2_starting_subframe_periodicity,
8945
14
      { "CE level #2 Starting subframe periodicity", "nfapi.prach.ce.level.2.starting.subframe_periodicity",
8946
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8947
14
      "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8948
14
    },
8949
14
    { &hf_nfapi_prach_ce_level_2_hopping_enabled,
8950
14
      { "PRACH CE level #2 Hopping Enable", "nfapi.prach.ce.level.2.hopping_enable",
8951
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8952
14
      "Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
8953
14
    },
8954
14
    { &hf_nfapi_prach_ce_level_2_hopping_offset,
8955
14
      { "PRACH CE level #2 Hopping Offset", "nfapi.prach.ce.level.2.hopping.offset",
8956
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8957
14
      "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8958
14
    },
8959
14
    { &hf_nfapi_prach_ce_level_3_enable,
8960
14
      { "PRACH CE level #3 Enable", "nfapi.prach.ce.level.3.enable",
8961
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8962
14
      "Enable \\ Disable CE level #3.", HFILL }
8963
14
    },
8964
14
    { &hf_nfapi_prach_ce_level_3_configuration_index,
8965
14
      { "PRACH CE level #3 Configuration Index", "nfapi.prach.ce.level.3.configuration.index",
8966
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8967
14
      "Provides information about the location and format of the PRACH.", HFILL }
8968
14
    },
8969
14
    { &hf_nfapi_prach_ce_level_3_frequency_offset,
8970
14
      { "PRACH CE level #3 Frequency offset", "nfapi.prach.ce.level.3.frequency_offset",
8971
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8972
14
      "The first physical resource block available for PRACH for each CE", HFILL }
8973
14
    },
8974
14
    { &hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt,
8975
14
      { "PRACH CE level #3 Number of repetitions per attempt", "nfapi.prach.ce.level.3.number.of.repetitions.per_attempt",
8976
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8977
14
      "Number of PRACH repetitions per attempt for each CE level", HFILL }
8978
14
    },
8979
14
    { &hf_nfapi_prach_ce_level_3_starting_subframe_periodicity,
8980
14
      { "CE level #3 Starting subframe periodicity", "nfapi.prach.ce.level.3.starting.subframe_periodicity",
8981
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8982
14
      "Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
8983
14
    },
8984
14
    { &hf_nfapi_prach_ce_level_3_hopping_enabled,
8985
14
      { "PRACH CE level #3 Hopping Enable", "nfapi.prach.ce.level.3.hopping_enable",
8986
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
8987
14
      "Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
8988
14
    },
8989
14
    { &hf_nfapi_prach_ce_level_3_hopping_offset,
8990
14
      { "PRACH CE level #3 Hopping Offset", "nfapi.prach.ce.level.3.hopping.offset",
8991
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8992
14
      "Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
8993
14
    },
8994
14
    { &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a,
8995
14
      { "PUCCH Interval-ULHoppingConfigCommonModeA", "nfapi.pucch.interval.ulhopping.config.common.mode.a",
8996
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
8997
14
      "NthULNB for UEModeA", HFILL }
8998
14
    },
8999
14
    { &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b,
9000
14
      { "PUCCH Interval-ULHoppingConfigCommonModeB", "nfapi.pucch.interval.ulhopping.config.common.mode.b",
9001
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9002
14
      "NthULNB for UEModeB", HFILL }
9003
14
    },
9004
14
    { &hf_nfapi_data_report_mode,
9005
14
      { "Data Report Mode", "nfapi.data.report.mode",
9006
14
      FT_BOOLEAN, BASE_NONE, TFS(&data_report_mode_vals), 0x0,
9007
14
      "The data report mode for the uplink data", HFILL }
9008
14
    },
9009
14
    { &hf_nfapi_sfnsf,
9010
14
      { "SFN/SF", "nfapi.sfn.sf",
9011
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
9012
14
      "The future SFN/SF subframe where the TLVs included in the message should be applied", HFILL }
9013
14
    },
9014
14
    { &hf_nfapi_max_up_pts,
9015
14
      { "Max UpPTS frames", "nfapi.max.uppts.frame",
9016
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0x0,
9017
14
      "Used for TDD only and indicates how SRS operates in UpPTS subframes", HFILL }
9018
14
    },
9019
14
    { &hf_nfapi_srs_acknack_srs_simultaneous_transmission,
9020
14
      { "SRS AckNack Simultaneous transmission", "nfapi.srs.acknack.simult.tx",
9021
14
      FT_BOOLEAN, BASE_NONE, TFS(&srs_simult_tx_strname), 0x0,
9022
14
      "Indicates if SRS and ACK/NACK can be received in the same subframe. Needed if semi-static configuration is held in PHY.", HFILL }
9023
14
    },
9024
14
    { &hf_nfapi_pnf_address_ipv4,
9025
14
      { "PNF IPV4", "nfapi.pnf.address.ipv4",
9026
14
      FT_IPv4, BASE_NONE, NULL, 0x0,
9027
14
      "The IPv4 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9028
14
    },
9029
14
    { &hf_nfapi_pnf_address_ipv6,
9030
14
      { "PNF IPV6", "nfapi.pnf.address.ipv6",
9031
14
      FT_IPv6, BASE_NONE, NULL, 0x0,
9032
14
      "The IPv6 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9033
14
    },
9034
14
    { &hf_nfapi_vnf_address_ipv4,
9035
14
      { "VNF IPV4 Address", "nfapi.vnf.address.ipv4",
9036
14
      FT_IPv4, BASE_NONE, NULL, 0x0,
9037
14
      "The IPv4 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
9038
14
    },
9039
14
    { &hf_nfapi_vnf_address_ipv6,
9040
14
      { "VNF IPV6 Address", "nfapi.vnf.address.ipv6",
9041
14
      FT_IPv6, BASE_NONE, NULL, 0x0,
9042
14
      "The IPv6 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
9043
14
    },
9044
14
    { &hf_nfapi_pnf_port,
9045
14
      { "PNF PORT value", "nfapi.config.pnf.port.value",
9046
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9047
14
      "The port of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
9048
14
    },
9049
14
    { &hf_nfapi_vnf_port,
9050
14
      { "VNF PORT value", "nfapi.config.vnf.port.value",
9051
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9052
14
      "The port of the VNF to be used by the PNF for this P7 PHY instance", HFILL } },
9053
14
    { &hf_nfapi_sync_mode,
9054
14
      { "Sync Mode", "nfapi.sync.mode",
9055
14
      FT_UINT8, BASE_DEC, VALS(nfapi_sync_mode_vals), 0x0,
9056
14
      "The method of nFAPI Synchronization supported by the PNF", HFILL }
9057
14
    },
9058
14
    { &hf_nfapi_location_mode,
9059
14
      { "Location Mode", "nfapi.location.mode",
9060
14
      FT_UINT8, BASE_DEC, VALS(location_mode_vals), 0x0,
9061
14
      "The method of location derivation supported by the PNF", HFILL }
9062
14
    },
9063
14
    { &hf_nfapi_location_coordinates,
9064
14
      { "Location Coordinates", "nfapi.location.coordinates",
9065
14
      FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
9066
14
      "The Location of the PNF. The value is formatted as the LocationCoordinates IE using BASIC-PER encoding as defined in "
9067
14
      "TS36.355 section 6.4.2. The first bit of the LocationCoordinates IE is in the LSB of the first byte of the array."
9068
14
      "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 }
9069
14
    },
9070
14
    { &hf_nfapi_pdu,
9071
14
      { "PDU", "nfapi.pdu",
9072
14
      FT_BYTES, BASE_NONE, NULL, 0x0,
9073
14
      NULL, HFILL }
9074
14
    },
9075
14
    { &hf_nfapi_dl_config_timing,
9076
14
      { "DL config Timing", "nfapi.dl.config.timing",
9077
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9078
14
      "The timing offset before the air interface subframe start that the DL_Config.request must be received at the PNF.", HFILL }
9079
14
    },
9080
14
    { &hf_nfapi_tx_timing,
9081
14
      { "Tx Timing", "nfapi.general.tx.timing",
9082
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9083
14
      "The timing offset before the air interface subframe start that the TX.request must be received at the PNF.", HFILL }
9084
14
    },
9085
14
    { &hf_nfapi_ul_config_timing,
9086
14
      { "UL Config Timing", "nfapi.ul.config.timing",
9087
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9088
14
      "The timing offset before the air interface subframe start that the UL_CONFIG.request must be received at the PNF.", HFILL }
9089
14
    },
9090
14
    { &hf_nfapi_hi_dci0_timing,
9091
14
      { "HI DCi0 Timing", "nfapi.hi.dci0.timing",
9092
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9093
14
      "The timing offset before the air interface subframe start that the HI_DCI0.request must be received at the PNF.", HFILL }
9094
14
    },
9095
14
    { &hf_nfapi_maximum_number_phys,
9096
14
      { "Maximum number of Phys", "nfapi.maximum.number.phys",
9097
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9098
14
      "The maximum number of operational PHYs supported by the PNF device.", HFILL }
9099
14
    },
9100
14
    { &hf_nfapi_maximum_total_bandwidth,
9101
14
      { "Maximum Total Bandwidth", "nfapi.maximum.total.bandwidth",
9102
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9103
14
      "The total maximum bandwidth (in units of 100kHz) supported by the PNF device.", HFILL }
9104
14
    },
9105
14
    { &hf_nfapi_maximum_total_number_dl_layers,
9106
14
      { "Maximum Total Number DL Layers", "nfapi.maximum.total.number.dl.layers",
9107
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9108
14
      "The maximum total number of downlink layers supported.", HFILL }
9109
14
    },
9110
14
    { &hf_nfapi_maximum_total_number_ul_layers,
9111
14
      { "Maximum Total Number UL Layers", "nfapi.maximum.total.number.ul.layers",
9112
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9113
14
      "The maximum total number of uplink layers supported across all available PHYs.", HFILL }
9114
14
    },
9115
14
    { &hf_nfapi_shared_bands,
9116
14
      { "Shared bands", "nfapi.shared.bands",
9117
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9118
14
      "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 }
9119
14
    },
9120
14
    { &hf_nfapi_shared_pa,
9121
14
      { "Shared pa", "nfapi.shared.pa",
9122
14
      FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9123
14
      "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 }
9124
14
    },
9125
14
    { &hf_nfapi_maximum_total_power,
9126
14
      { "Maximum total power", "nfapi.maximum.total.power",
9127
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
9128
14
      "The maximum transmit power of the PNF device summed across all PHYs.", HFILL }
9129
14
    },
9130
14
    { &hf_nfapi_oui,
9131
14
      { "OUI", "nfapi.oui",
9132
14
      FT_STRING, BASE_NONE, NULL, 0x0,
9133
14
      "The PNF OUI in the format as specified by IEEE", HFILL }
9134
14
    },
9135
14
    { &hf_nfapi_pnf_phy_number_phy,
9136
14
      { "PNF Phy Number of Phy", "nfapi.pnf.phy.number.phy",
9137
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9138
14
      "The number of PHY instances", HFILL }
9139
14
    },
9140
14
    { &hf_nfapi_pnf_phy_config_index,
9141
14
      { "PNF Phy Config Index", "nfapi.pnf.phy.config.index",
9142
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9143
14
      "The unique Index number of the PHY to permit the PNF to identify the PHY in the PNF_CONFIG.Request", HFILL }
9144
14
    },
9145
14
    { &hf_nfapi_number_of_rfs,
9146
14
      { "Number of RFs", "nfapi.pnf.rf.number.rf",
9147
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9148
14
      "The number of RF configurations", HFILL }
9149
14
    },
9150
14
    { &hf_nfapi_phy_rf_config_info_phy_id,
9151
14
      { "Phy ID", "nfapi.pnf.phy.rf.config.phy.id",
9152
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9153
14
      NULL, HFILL }
9154
14
    },
9155
14
    { &hf_nfapi_rf_config_index,
9156
14
      { "RF Config Index", "nfapi.rf_config_index",
9157
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9158
14
      "The Index number defined in the PNF RF struct that the PHY can support",
9159
14
      HFILL }
9160
14
    },
9161
14
    { &hf_nfapi_number_of_rf_exclusions,
9162
14
      { "Number of RF exclusions", "nfapi.hf_nfapi_number_of_rf_exclusions",
9163
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9164
14
      "The number of RF configurations excluded from use by this PHY", HFILL }
9165
14
    },
9166
14
    { &hf_nfapi_maximum_3gpp_release_supported,
9167
14
      { "Maximum 3gpp Release Supported", "nfapi.maximum_3gpp_release_supported",
9168
14
      FT_UINT16, BASE_HEX, NULL, 0x0,
9169
14
      "The major 3GPP releases supported", HFILL }
9170
14
    },
9171
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel8,
9172
14
      { "Release 8", "nfapi.maximum_3gpp_release_supported.rel8",
9173
14
      FT_BOOLEAN, 16, NULL, 0x0001,
9174
14
      NULL, HFILL }
9175
14
    },
9176
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel9,
9177
14
      { "Release 9", "nfapi.maximum_3gpp_release_supported.rel9",
9178
14
      FT_BOOLEAN, 16, NULL, 0x0002,
9179
14
      NULL, HFILL }
9180
14
    },
9181
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel10,
9182
14
      { "Release 10", "nfapi.maximum_3gpp_release_supported.rel10",
9183
14
      FT_BOOLEAN, 16, NULL, 0x0004,
9184
14
      NULL, HFILL }
9185
14
    },
9186
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel11,
9187
14
      { "Release 11", "nfapi.maximum_3gpp_release_supported.rel11",
9188
14
      FT_BOOLEAN, 16, NULL, 0x0008,
9189
14
      NULL, HFILL }
9190
14
    },
9191
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel12,
9192
14
      { "Release 12", "nfapi.maximum_3gpp_release_supported.rel12",
9193
14
      FT_BOOLEAN, 16, NULL, 0x0010,
9194
14
      NULL, HFILL }
9195
14
    },
9196
14
    { &hf_nfapi_maximum_3gpp_release_supported_rel13,
9197
14
      { "Release 13", "nfapi.maximum_3gpp_release_supported.rel13",
9198
14
      FT_BOOLEAN, 16, NULL, 0x0020,
9199
14
      NULL, HFILL }
9200
14
    },
9201
14
    { &hf_nfapi_downlink_channel_bandwidth_supported,
9202
14
      { "Maximum Channel Downlink Bandwidth Supported", "nfapi.downlink_channel_bandwidth_supported",
9203
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9204
14
      "The downlink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104", HFILL }
9205
14
    },
9206
14
    { &hf_nfapi_uplink_channel_bandwidth_supported,
9207
14
      { "Maximum Channel Uplink Bandwidth Supported", "nfapi.uplink_channel_bandwidth_supported",
9208
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9209
14
      "The uplink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104.", HFILL }
9210
14
    },
9211
14
    { &hf_nfapi_number_of_dl_layers_supported,
9212
14
      { "Number of DL Layers Supported", "nfapi.number_of_dl_layer_supported",
9213
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9214
14
      "The maximum number of downlink layers supported", HFILL }
9215
14
    },
9216
14
    { &hf_nfapi_number_of_ul_layers_supported,
9217
14
      { "Number of UL Layers Supported", "nfapi.number_of_ul_layer_supported",
9218
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9219
14
      "The maximum number of uplink layers supported", HFILL }
9220
14
    },
9221
14
    { &hf_nfapi_nmm_modes_supported,
9222
14
      { "NMM modes supported", "nfapi.nmm_modes_supported",
9223
14
      FT_UINT8, BASE_DEC, VALS(nmm_modes_supported_vals), 0x0,
9224
14
      "Network Monitor Modes Supported.", HFILL }
9225
14
    },
9226
14
    { &hf_nfapi_band,
9227
14
      { "Band", "nfapi.band",
9228
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9229
14
      "Band number as specified in 3GPP TS36.101", HFILL }
9230
14
    },
9231
14
    { &hf_nfapi_maximum_transmit_power_2,
9232
14
      { "Maximum transmit power", "nfapi.maximum_transmit_power",
9233
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_2_conversion_fn), 0x0,
9234
14
      "The maximum transmit power for the PHY and RF operating at the configured bandwidth as defined in 3GPP TS 36.104.", HFILL }
9235
14
    },
9236
14
    { &hf_nfapi_maximum_transmit_power,
9237
14
      { "Maximum transmit power", "nfapi.maximum_transmit_power",
9238
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
9239
14
      "The maximum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
9240
14
    },
9241
14
    { &hf_nfapi_earfcn,
9242
14
      { "EARFCN", "nfapi.earfcn",
9243
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9244
14
      "The EARFCN to be measured.", HFILL }
9245
14
    },
9246
14
    { &hf_nfapi_number_of_rf_bands,
9247
14
      { "Number of RF Bands", "nfapi.num.rf_bands",
9248
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9249
14
      "The number of RF Band instances", HFILL }
9250
14
    },
9251
14
    { &hf_nfapi_nmm_uplink_rssi_supported,
9252
14
      { "NMM Uplink RSSI supported", "nfapi.nmm.uplink.rssi.supported",
9253
14
      FT_UINT8, BASE_DEC, VALS(ul_rssi_supported_vals), 0x0,
9254
14
      "Indicates if the uplink RSSI measurements are supported by NMM.", HFILL }
9255
14
    },
9256
14
    { &hf_nfapi_minimum_transmit_power,
9257
14
      { "Minimum transmit power", "nfapi.minimum_transmit_power",
9258
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
9259
14
      "The minimum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
9260
14
    },
9261
14
    { &hf_nfapi_number_of_antennas_supported,
9262
14
      { "Number of Supported Antennas", "nfapi.number_of_antennas_supported",
9263
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9264
14
      "The maximum number of antennas supported.", HFILL }
9265
14
    },
9266
14
    { &hf_nfapi_minimum_downlink_frequency,
9267
14
      { "Minimum downlink frequency", "nfapi.minimum_downlink_frequency",
9268
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9269
14
      "The minimum supported downlink frequency in 100kHz units", HFILL }
9270
14
    },
9271
14
    { &hf_nfapi_maximum_downlink_frequency,
9272
14
      { "Maximum downlink frequency", "nfapi.maximum_downlink_frequency",
9273
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9274
14
      "The maximum supported downlink frequency in 100kHz units", HFILL }
9275
14
    },
9276
14
    { &hf_nfapi_minimum_uplink_frequency,
9277
14
      { "Minimum uplink frequency", "nfapi.minimum_uplink_frequency",
9278
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9279
14
      "The minimum supported uplink frequency in 100kHz units", HFILL }
9280
14
    },
9281
14
    { &hf_nfapi_maximum_uplink_frequency,
9282
14
      { "Maximum uplink frequency", "nfapi.maximum_uplink_frequency",
9283
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&khz_100_units_db), 0x0,
9284
14
      "The maximum supported uplink frequency in 100kHz units", HFILL }
9285
14
    },
9286
14
    { &hf_nfapi_transmission_mode7_supported,
9287
14
      { "Transmission Mode 7 Supported", "nfapi.pnf.phy_rel10.tx_mode7_supported",
9288
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9289
14
      "Indicates if PHY supports TM7 for PDSCH", HFILL }
9290
14
    },
9291
14
    { &hf_nfapi_transmission_mode8_supported,
9292
14
      { "Transmission Mode 8 Supported", "nfapi.pnf.phy_rel10.tx_mode8_supported",
9293
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9294
14
      "Indicates if PHY supports TM8 for PDSCH", HFILL }
9295
14
    },
9296
14
    { &hf_nfapi_two_antennas_ports_for_pucch,
9297
14
      { "Two antennas ports for PUCCH", "nfapi.pnf.phy_rel10.two_antennas_ports_for_pucch",
9298
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9299
14
      "Indicates if PHY supports PUCCH transmit diversity introduced in Release 10. Equivalent to two-AntennaPortsForPUCCH-r10 in TS36.306", HFILL }
9300
14
    },
9301
14
    { &hf_nfapi_transmission_mode_9_supported,
9302
14
      { "Transmission Mode 9 Supported", "nfapi.pnf.phy_rel10.tx_mode9_supported",
9303
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9304
14
      "Indicates if PHY supports TM9 for PDSCH with 8 antennas and 8 CSI. Equivalent to tm9-With-8Tx-FDD-r10 in TS36.306", HFILL }
9305
14
    },
9306
14
    { &hf_nfapi_simultaneous_pucch_pusch,
9307
14
      { "Simultaneous PUCCH PUSCH", "nfapi.pnf.simultaneous_pucch_pusch",
9308
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9309
14
      "Indicates if PHY supports UE sending simultaneous PUCCH and PUSCH introduced in Release 10. Equivalent to simultaneousPUCCH-PUSCH-r10 in TS36.306", HFILL }
9310
14
    },
9311
14
    { &hf_nfapi_four_layer_tx_with_tm3_and_tm4,
9312
14
      { "Four layer Tx with TM3 and TM4", "nfapi.pnf.phy_rel10.layer_tx_with_tm3_and_tm4",
9313
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9314
14
      "Indicates if PHY supports four layer transmission for TM3 and TM4. Equivalent to fourLayerTM3-TM4-r10 in TS36.306", HFILL }
9315
14
    },
9316
14
    { &hf_nfapi_epdcch_supported,
9317
14
      { "ePDCCH supported", "nfapi.pnf.phy_rel11.epdcch_supported",
9318
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9319
14
      "Indicates if PHY supports Enhanced PDCCH", HFILL }
9320
14
    },
9321
14
    { &hf_nfapi_multi_ack_csi_reporting,
9322
14
      { "Multi ACK CSI reporting", "nfapi.pnf.phy_rel11.multi_ack_csi_reporting",
9323
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9324
14
      "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 }
9325
14
    },
9326
14
    { &hf_nfapi_pucch_tx_diversity_with_channel_selection,
9327
14
      { "PUCCH Tx diversity with channel selection", "nfapi.pnf.phy_rel11.tx_div_with_channel_selection",
9328
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9329
14
      "Indicates if PHY supports transmit diversity for PUCCH format 1b with channel selection. Equivalent to txDiv-PUCCH1b-ChSelect in TS36.306", HFILL }
9330
14
    },
9331
14
    { &hf_nfapi_ul_comp_supported,
9332
14
      { "UL CoMP supported", "nfapi.pnf.phy_rel11.ul_comp_supported",
9333
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9334
14
      "Indicates if PHY supports UL CoMP", HFILL }
9335
14
    },
9336
14
    { &hf_nfapi_transmission_mode_5_supported,
9337
14
      { "Transmission mode 5 supported", "nfapi.pnf.phy_rel11.tx_mode5_supported",
9338
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9339
14
      "Indicates if PHY supports TM5 for PDSCH", HFILL }
9340
14
    },
9341
14
    { &hf_nfapi_csi_subframe_set,
9342
14
      { "CSI subframe set", "nfapi.pnf.phy_rel12.csi_subframe_set",
9343
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9344
14
      "Equivalent to csi-SubframeSet-r12 in TS36.306", HFILL }
9345
14
    },
9346
14
    { &hf_nfapi_enhanced_4tx_codebook,
9347
14
      { "Enhanced 4TX codebook", "nfapi.pnf.phy_rel12.enhanced_t4x_codebook",
9348
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9349
14
      "Indicates if PHY supports the enhanced 4TX codebook. Equivalent to enhanced-4TxCodebook-r12 in TS36.306", HFILL }
9350
14
    },
9351
14
    { &hf_nfapi_drs_supported,
9352
14
      { "DRS supported", "nfapi.pnf.phy_rel12.drs_supported",
9353
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9354
14
      "Indicates if PHY supports the Discovery Reference Signal", HFILL }
9355
14
    },
9356
14
    { &hf_nfapi_ul_64qam_supported,
9357
14
      { "UL 64QAM supported", "nfapi.pnf.phy_rel12.ul_64qam_supported",
9358
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9359
14
      "Indicates if PHY support 64 QAM in the uplink", HFILL }
9360
14
    },
9361
14
    { &hf_nfapi_transmission_mode_10_supported,
9362
14
      { "Transmission mode 10 supported", "nfapi.pnf.phy_rel12.tx_mode10_supported",
9363
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9364
14
      "Indicates if PHY supports TM10 for PDSCH (DL CoMP)", HFILL }
9365
14
    },
9366
14
    { &hf_nfapi_alternative_tbs_indices,
9367
14
      { "Alternative TBS indices", "nfapi.pnf.phy_rel12.alternative_tbs_indices",
9368
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9369
14
      "Indicates if PHY supports the alternate TBS indices (256 QAM).  Equivalent to alternativeTBS-Indices-r12 in TS36.306", HFILL }
9370
14
    },
9371
14
    { &hf_nfapi_pucch_format_4_supported,
9372
14
      { "PUCCH format 4 supported", "nfapi.pnf.phy_rel13.pucch_format4_supported",
9373
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9374
14
      "Indicates if PHY supports PUCCH format 4", HFILL }
9375
14
    },
9376
14
    { &hf_nfapi_pucch_format_5_supported,
9377
14
      { "PUCCH format 5 supported", "nfapi.pnf.phy_rel13.pucch_format5_supported",
9378
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9379
14
      "Indicates if PHY supports PUCCH format 5", HFILL }
9380
14
    },
9381
14
    { &hf_nfapi_more_than_5_ca_supported,
9382
14
      { "More than 5 CA support", "nfapi.pnf.phy_rel13.mode_than_5_ca_supported",
9383
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9384
14
      "Indicates if PHY supports features required for more than 5 CA support on PUSCH. Equivalent to uci-PUSCH-Ext-r13 in TS36.306", HFILL }
9385
14
    },
9386
14
    { &hf_nfapi_laa_supported,
9387
14
      { "LAA supported", "nfapi.pnf.phy_rel13.laa_supported",
9388
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9389
14
      "Indicates if PHY supports DL LAA (subframe format 3)", HFILL }
9390
14
    },
9391
14
    { &hf_nfapi_laa_ending_in_dwpts_supported,
9392
14
      { "LAA ending in DwPTS supported", "nfapi.pnf.phy_rel13.laa_ending_in_dwpts_supported",
9393
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9394
14
      "Indicates if PHY supports DL LAA ending in a DwPTS subframe. Equivalent to endingDwPTS-r13i n TS36.306", HFILL }
9395
14
    },
9396
14
    { &hf_nfapi_laa_starting_in_second_slot_supported,
9397
14
      { "LAA starting in second slot Supported", "nfapi.pnf.phy_rel13.laa_starting_in_second_slot_supported",
9398
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9399
14
      "Indicates if PHY supports DL LAA starting in the second slot in a subframe. Equivalent to secondSlotStartingPosition-r13 in TS36.306", HFILL }
9400
14
    },
9401
14
    { &hf_nfapi_beamforming_supported,
9402
14
      { "Beamforming Supported", "nfapi.pnf.phy_rel13.beamforming_supported",
9403
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9404
14
      "Indicates if PHY supports beamforming (FD-MIMO Class B). Equivalent to beamformed-r13 in TS36.306", HFILL }
9405
14
    },
9406
14
    { &hf_nfapi_csi_rs_enhancements_supported,
9407
14
      { "CSI-RS enhancements supported", "nfapi.pnf.phy_rel13.csi_rs_enhancements_supported",
9408
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9409
14
      "Indicates if PHY supports CSI-RS enhancements (FD-MIMO Class A). Equivalent to csi-RS-EnhancementsTDD-r13 in TS36.306", HFILL }
9410
14
    },
9411
14
    { &hf_nfapi_drms_enhancements_supported,
9412
14
      { "DRMS enhancements supported", "nfapi.pnf.phy_rel13.drms_enhancements_supported",
9413
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9414
14
      "Indicates if PHY supports DMRS enhancements added in Release 13. Equivalent to dmrs-Enhancements-r13 in TS36.306", HFILL }
9415
14
    },
9416
14
    { &hf_nfapi_srs_enhancements_supported,
9417
14
      { "SRS enhancements supported", "nfapi.pnf.phy_rel13.srs_enhancements_supported",
9418
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9419
14
      "Indicates if PHY supports SRS enhancements added in Release 13. Equivalent to srs-Enhancements-r13in TS36.306", HFILL }
9420
14
    },
9421
14
    { &hf_nfapi_sfn_sf,
9422
14
      { "SFN_SF", "nfapi.sfn_sf",
9423
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
9424
14
      NULL, HFILL }
9425
14
    },
9426
14
    { &hf_nfapi_number_pdcch_ofdm_symbols,
9427
14
      { "Number of PDCCH OFDM Symbols", "nfapi.number_pdcch_ofdm_symbols",
9428
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9429
14
      "The number of OFDM symbols for the PDCCH", HFILL }
9430
14
    },
9431
14
    { &hf_nfapi_number_dci,
9432
14
      { "Number of DCI", "nfapi.number_dci",
9433
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9434
14
      "The number of DCI PDUs included in this message", HFILL }
9435
14
    },
9436
14
    { &hf_nfapi_number_pdus,
9437
14
      { "Number of PDUs", "nfapi.number_pdu",
9438
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9439
14
      "Number of PDUs that are included in this message", HFILL }
9440
14
    },
9441
14
    { &hf_nfapi_number_of_harqs,
9442
14
      { "Number of HARQs", "nfapi.number_harqs",
9443
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9444
14
      "Number of HARQs included in this message", HFILL }
9445
14
    },
9446
14
    { &hf_nfapi_number_of_crcs,
9447
14
      { "Number of CRCs", "nfapi.number_crcs",
9448
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9449
14
      "Number of CRCs included in this message", HFILL }
9450
14
    },
9451
14
    { &hf_nfapi_number_of_srs,
9452
14
      { "Number of SRs", "nfapi.number_srs",
9453
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9454
14
      "Number of SRs included in this message", HFILL }
9455
14
    },
9456
14
    { &hf_nfapi_number_of_cqi,
9457
14
      { "Number of CQIs", "nfapi.number_cqi",
9458
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9459
14
      "Number of CQIs included in this message", HFILL }
9460
14
    },
9461
14
    { &hf_nfapi_number_of_preambles,
9462
14
      { "Number of Preambles", "nfapi.number_preambles",
9463
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9464
14
      "Number of RACH preambles", HFILL }
9465
14
    },
9466
14
    { &hf_nfapi_number_of_srss,
9467
14
      { "Number of SRSs", "nfapi.number_srss",
9468
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9469
14
      "Number of UEs contributing to the uplink SRS", HFILL }
9470
14
    },
9471
14
    { &hf_nfapi_lbt_dl_req_pdu_type,
9472
14
      { "LBT DL Request PDU Type", "nfapi.lbt_dl_req_pdu_type",
9473
14
      FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_req_pdu_type), 0x0,
9474
14
      NULL, HFILL }
9475
14
    },
9476
14
    { &hf_nfapi_lbt_dl_ind_pdu_type,
9477
14
      { "LBT DL Indication PDU Type", "nfapi.lbt_dl_ind_pdu_type",
9478
14
      FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_ind_pdu_type), 0x0,
9479
14
      NULL, HFILL }
9480
14
    },
9481
14
    { &hf_nfapi_number_pdsch_rnti,
9482
14
      { "Number of PDSCH RNTI", "nfapi.number_pdsch_rnti",
9483
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9484
14
      "Number of unique RNTIs sent on the PDSCH", HFILL }
9485
14
    },
9486
14
    { &hf_nfapi_transmission_power_pcfich,
9487
14
      { "Transmission Power PCFICH", "nfapi.transmission_power_pcfich",
9488
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
9489
14
      "Offset to the reference signal power.", HFILL }
9490
14
    },
9491
14
    { &hf_nfapi_dl_config_pdu_type,
9492
14
      { "PDU Type", "nfapi.pdu.type",
9493
14
      FT_UINT8, BASE_DEC, VALS(nfapi_dl_config_pdu_type_vals), 0x0,
9494
14
      "DL_CONFIG.request PDU Type", HFILL }
9495
14
    },
9496
14
    { &hf_nfapi_pdu_size,
9497
14
      { "PDU size", "nfapi.pdu.size",
9498
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9499
14
      "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 }
9500
14
    },
9501
14
    { &hf_nfapi_instance_length,
9502
14
      { "Instance length", "nfapi.instance.length",
9503
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9504
14
      "The Length in bytes of all TLVs within this instance", HFILL }
9505
14
    },
9506
14
    { &hf_nfapi_length,
9507
14
      { "PDU length", "nfapi.pdu.length",
9508
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9509
14
      "Length of PDU in bytes.", HFILL }
9510
14
    },
9511
14
    { &hf_nfapi_pdu_index,
9512
14
      { "PDU Index", "nfapi.pdu.index",
9513
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9514
14
      "The PDU Index parameter specified for each PDU", HFILL }
9515
14
    },
9516
14
    { &hf_nfapi_rnti,
9517
14
      { "RNTI", "nfapi.rnti",
9518
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9519
14
      "The RNTI used for identifying the UE when receiving the PDU", HFILL }
9520
14
    },
9521
14
    { &hf_nfapi_resource_allocation_type,
9522
14
      { "Resource Allocation Type", "nfapi.resource.allocation.type",
9523
14
      FT_UINT8, BASE_DEC, VALS(resource_allocation_type_vals), 0x0,
9524
14
      "Resource allocation type/header Valid for DCI formats : 1, 2, 2A, 2B, 2C, 2D", HFILL }
9525
14
    },
9526
14
    { &hf_nfapi_virtual_resource_block_assignment_flag,
9527
14
      { "Virtual resource block assignment flag", "nfapi.resource.block.assignment.flag",
9528
14
      FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
9529
14
      "Type of virtual resource block used Valid for DCI formats : 1A, 1B, 1D", HFILL }
9530
14
    },
9531
14
    { &hf_nfapi_resource_block_coding,
9532
14
      { "Resource block coding", "nfapi.resource.block.coding",
9533
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
9534
14
      "The encoding for the resource blocks. The coding is dependent on whether resource allocation type 0, 1, 2 is in use", HFILL }
9535
14
    },
9536
14
    { &hf_nfapi_modulation,
9537
14
      { "Modulation", "nfapi.modulation",
9538
14
      FT_UINT8, BASE_DEC, VALS(modulation_vals), 0x0,
9539
14
      NULL, HFILL }
9540
14
    },
9541
14
    { &hf_nfapi_redundancy_version,
9542
14
      { "Redundancy version", "nfapi.redundancy.version",
9543
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9544
14
      "HARQ redundancy version", HFILL }
9545
14
    },
9546
14
    { &hf_nfapi_transport_blocks,
9547
14
      { "Transport blocks", "nfapi.transport.blocks",
9548
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9549
14
      "The transport block transmitted to this RNTI", HFILL }
9550
14
    },
9551
14
    { &hf_nfapi_transport_block_to_codeword_swap_flag,
9552
14
      { "Transport block to codeword swap flag", "nfapi.transport.block.to.codeword.swap.flag",
9553
14
      FT_UINT8, BASE_DEC, VALS(transport_block_to_codeword_swap_flag_vals), 0x0,
9554
14
      "Indicates the mapping of transport block to codewords.", HFILL }
9555
14
    },
9556
14
    { &hf_nfapi_transmission_scheme,
9557
14
      { "Transmission scheme", "nfapi.transmission.scheme",
9558
14
      FT_UINT8, BASE_DEC, VALS(transmission_scheme_vals), 0x0,
9559
14
      "The MIMO mode used in the PDU", HFILL }
9560
14
    },
9561
14
    { &hf_nfapi_ul_transmission_scheme,
9562
14
      { "Transmission scheme", "nfapi.transmission.scheme",
9563
14
      FT_UINT8, BASE_DEC, VALS(ul_transmission_scheme_vals), 0x0,
9564
14
      "The MIMO mode used in the PDU", HFILL }
9565
14
    },
9566
14
    { &hf_nfapi_number_of_layers,
9567
14
      { "Number of layers", "nfapi.number.of.layers",
9568
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9569
14
      "The number of layers used in transmission", HFILL }
9570
14
    },
9571
14
    { &hf_nfapi_number_of_subbands,
9572
14
      { "Number of subbands", "nfapi.number.of.subbands",
9573
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9574
14
      "Only valid when transmission scheme = 3, 4, 5. Defines the number of subbands and "
9575
14
      "codebooks used for PMI.If value = 1 then a single PMI value is supplied which should be used over all RB", HFILL }
9576
14
    },
9577
14
    { &hf_nfapi_codebook_index,
9578
14
      { "Codebook Index", "nfapi.number.of.codebook.index",
9579
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9580
14
      "Only valid when transmission scheme = 3, 4, 5. Defines the codebook used.", HFILL }
9581
14
    },
9582
14
    { &hf_nfapi_ue_category_capacity,
9583
14
      { "UE category capacity", "nfapi.ue.category.capacity",
9584
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9585
14
      "The UE capabilities category", HFILL }
9586
14
    },
9587
14
    { &hf_nfapi_pa,
9588
14
      { "P-A", "nfapi.pa",
9589
14
      FT_UINT8, BASE_DEC, VALS(pa_vals), 0x0,
9590
14
      "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 }
9591
14
    },
9592
14
    { &hf_nfapi_delta_power_offset_index,
9593
14
      { "Delta Power offset Index", "nfapi.delta.power.offset.index",
9594
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9595
14
      "Delta power offset, value: 0..1", HFILL }
9596
14
    },
9597
14
    { &hf_nfapi_nprb,
9598
14
      { "Nprb", "nfapi.nprb",
9599
14
      FT_UINT8, BASE_DEC, VALS(nprb_vals), 0x0,
9600
14
      "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 }
9601
14
    },
9602
14
    { &hf_nfapi_transmission_mode,
9603
14
      { "Transmission Mode", "nfapi.transmission_nprb",
9604
14
      FT_UINT8, BASE_DEC, VALS(transmission_mode_vals), 0x0,
9605
14
      "Transmission mode associated with the UE", HFILL }
9606
14
    },
9607
14
    { &hf_nfapi_prnti,
9608
14
      { "P-RNTI", "nfapi.prnti",
9609
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9610
14
      "The P-RNTI associated with the paging", HFILL }
9611
14
    },
9612
14
    { &hf_nfapi_mcs,
9613
14
      { "MCS", "nfapi.mcs",
9614
14
      FT_UINT8, BASE_DEC, VALS(pch_modulation_vals), 0x0,
9615
14
      "The modulation and coding scheme for the transport block", HFILL }
9616
14
    },
9617
14
    { &hf_nfapi_number_of_transport_blocks,
9618
14
      { "Number of transport blocks", "nfapi.number_of_transport_blocks",
9619
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9620
14
      "The number of transport blocks transmitted to this RNTI", HFILL }
9621
14
    },
9622
14
    { &hf_nfapi_ue_mode,
9623
14
      { "UE Mode", "nfapi.ue.mode",
9624
14
      FT_UINT8, BASE_DEC, VALS(ue_mode_vals), 0x0,
9625
14
      NULL, HFILL }
9626
14
    },
9627
14
    { &hf_prs_bandwidth,
9628
14
      { "PRS bandwidth", "nfapi.prs.bandwidth",
9629
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9630
14
      "PRS bandwidth in resource blocks.", HFILL }
9631
14
    },
9632
14
    { &hf_prs_cyclic_prefix_type,
9633
14
      { "PRS cyclic prefix type", "nfapi.prs.cyclic.prefix.type",
9634
14
      FT_BOOLEAN, BASE_NONE, TFS(&prs_cyclic_prefix_type_strname), 0x0,
9635
14
      "The cyclic prefix used for PRS transmission", HFILL }
9636
14
    },
9637
14
    { &hf_prs_muting,
9638
14
      { "PRS muting", "nfapi.prs.muting",
9639
14
      FT_BOOLEAN, BASE_NONE, TFS(&prs_muting_strname), 0x0,
9640
14
      "PRS muting dictates if PRS REs are vacant (prsMutingInfo-r9 indicates the SF occasions)", HFILL }
9641
14
    },
9642
14
    { &hf_nfapi_num_bf_prb_per_subband,
9643
14
      { "Num of BF PRB per Subband", "nfapi.num.bf.prb.per.subband",
9644
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9645
14
      "Number of PRBs that are treated as one subband", HFILL }
9646
14
    },
9647
14
    { &hf_nfapi_num_bf_vector,
9648
14
      { "Num of BF Vector", "nfapi.num.bf.vector",
9649
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9650
14
      "Number of beam forming vectors. One beam forming vector is specified for each subband", HFILL }
9651
14
    },
9652
14
    { &hf_nfapi_csi_rs_resource_config,
9653
14
      { "CSI-RS resource config", "nfapi.csi.rs.resource.config",
9654
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9655
14
      "Indicates reference signal configuration for CSI-RS", HFILL }
9656
14
    },
9657
14
    { &hf_nfapi_bf_vector_subband_index,
9658
14
      { "BF Subband Index", "nfapi.num.bf.vector.subband.index",
9659
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9660
14
      "Index of subband for which the following beam forming vector is applied", HFILL }
9661
14
    },
9662
14
    { &hf_nfapi_bf_vector_num_antennas,
9663
14
      { "BF Num of Antennas", "nfapi.num.bf.vector.bf.value",
9664
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9665
14
      "Number of physical antennas", HFILL }
9666
14
    },
9667
14
    { &hf_nfapi_bf_vector_bf_value,
9668
14
      { "BF Value per Antenna", "nfapi.num.bf.vector.bf.value",
9669
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9670
14
      "Beam forming vector element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
9671
14
    },
9672
14
    { &hf_nfapi_nscid,
9673
14
      { "NSC id", "nfapi.nscid",
9674
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9675
14
      "Used with DCI format 2B and 2C.", HFILL }
9676
14
    },
9677
14
    { &hf_nfapi_csi_rs_flag,
9678
14
      { "CSI RS Flag", "nfapi.csi.rs.flag",
9679
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_valid_not_valid), 0x0,
9680
14
      "Indicates if parameters related to CSI-RS are valid or not.", HFILL }
9681
14
    },
9682
14
    { &hf_nfapi_csi_rs_resource_config_r10,
9683
14
      { "CSI RS resource config R10", "nfapi.csi.rs.resource_config_r10",
9684
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9685
14
      "This value is deprecated", HFILL }
9686
14
    },
9687
14
    { &hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10,
9688
14
      { "CSI-RS Number of NZP configuration", "nfapi.csi.rs.num.of.nzp.configurations",
9689
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9690
14
      "Bitmap of 16 bits. Encoding format of bitmap follows section 6.10.5.2 of 36.211", HFILL }
9691
14
    },
9692
14
    { &hf_nfapi_csi_rs_number_of_nzp_configurations,
9693
14
      { "CSI RS zero Tx Power Resource config bitmap R10", "nfapi.csi.rs.zero.tx.power.resource.config.bitmap.r10",
9694
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9695
14
      "Indicates the number of Non-Zero power CSI-RS configurations.", HFILL }
9696
14
    },
9697
14
    { &hf_nfapi_pdsch_start,
9698
14
      { "PDSCH_start", "nfapi.pdsch.start",
9699
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9700
14
      "Per UE starting OFDM symbol for the PDSCH, impacts the mapping of PDSCH to REs", HFILL }
9701
14
    },
9702
14
    { &hf_nfapi_drms_config_flag,
9703
14
      { "DMRS Config flag", "nfapi.drms.config.flag",
9704
14
      FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9705
14
      "Indicates if the DMRS Config parameter is valid", HFILL }
9706
14
    },
9707
14
    { &hf_nfapi_drms_scrambling,
9708
14
      { "DMRS Scrambling", "nfapi.drms.scrambling",
9709
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9710
14
      "The scrambling identity for UE specific reference signals.", HFILL }
9711
14
    },
9712
14
    { &hf_nfapi_csi_config_flag,
9713
14
      { "CSI Config flag", "nfapi.csi.config.flag",
9714
14
      FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9715
14
      "Indicates if the CSI Config parameter is valid", HFILL }
9716
14
    },
9717
14
    { &hf_nfapi_csi_scrambling,
9718
14
      { "CSI Scrambling", "nfapi.csi.scrambling",
9719
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9720
14
      "The scrambling identity for CSI.", HFILL }
9721
14
    },
9722
14
    { &hf_nfapi_pdsch_re_mapping_flag,
9723
14
      { "PDSCH RE mapping flag", "nfapi.pdsch.remapping.flag",
9724
14
      FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
9725
14
      "Indicates if the PDSCH RE parameters are valid.", HFILL }
9726
14
    },
9727
14
    { &hf_nfapi_pdsch_re_mapping_antenna_ports,
9728
14
      { "PDSCH RE mapping antenna ports", "nfapi.pdsch.remapping.antenna.ports",
9729
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9730
14
      "Indicates number of antennas used for PDSCH RE mapping", HFILL }
9731
14
    },
9732
14
    { &hf_nfapi_pdsch_re_mapping_freq_shift,
9733
14
      { "PDSCH RE mapping freq shift", "nfapi.pdsch.remapping.freq.shift",
9734
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9735
14
      "Indicates the frequency shift used for PDSCH RE mapping.", HFILL }
9736
14
    },
9737
14
    { &hf_nfapi_alt_cqi_table_r12,
9738
14
      { "altCQI-Table-r12", "nfapi.alt.cqi.table.r12",
9739
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9740
14
      "altCQI-Table-r12 is indicative of using an alternative MCS table for UEs supporting 256QAM."
9741
14
      "This is taken into account for calculation of soft buffer size for the transport block", HFILL }
9742
14
    },
9743
14
    { &hf_nfapi_max_layers,
9744
14
      { "MaxLayers", "nfapi.max.layers",
9745
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9746
14
      "Maximal number of negotiated / configured layers for a UE, used for the calculation of soft buffer size for the transport block", HFILL }
9747
14
    },
9748
14
    { &hf_nfapi_n_dl_harq,
9749
14
      { "N_DL_HARQ", "nfapi.n.dl.harq",
9750
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9751
14
      NULL, HFILL }
9752
14
    },
9753
14
    { &hf_nfapi_dwpts_symbols,
9754
14
      { "DwPTS Symbols", "nfapi.dwpts.symbols",
9755
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9756
14
      "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 }
9757
14
    },
9758
14
    { &hf_nfapi_initial_lbt_sf,
9759
14
      { "Initial LBT SF", "nfapi.initial.lbt.sf",
9760
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9761
14
      "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 }
9762
14
    },
9763
14
    { &hf_nfapi_ue_type,
9764
14
      { "UE Type", "nfapi.ue.type",
9765
14
      FT_UINT8, BASE_DEC, VALS(dlsch_re13_ue_type_vals), 0x0,
9766
14
      NULL, HFILL }
9767
14
    },
9768
14
    { &hf_nfapi_pdsch_payload_type,
9769
14
      { "PDSCH Payload Type", "nfapi.pdsch.payload.type",
9770
14
      FT_UINT8, BASE_DEC, VALS(dlsch_re13_pdsch_payload_type_vals), 0x0,
9771
14
      NULL, HFILL }
9772
14
    },
9773
14
    { &hf_nfapi_initial_transmission_sf,
9774
14
      { "Initial transmission SF (io)", "nfapi.init.tx.sf.io",
9775
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9776
14
      "Absolute Sub-Frame of the initial transmission", HFILL }
9777
14
    },
9778
14
    { &hf_nfapi_req13_drms_table_flag,
9779
14
      { "Rel-13-DMRS-tabe flag", "nfapi.r13.drms.table.flag",
9780
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9781
14
      "Indicates if Release 13 DMRS table is used.", HFILL }
9782
14
    },
9783
14
    { &hf_nfapi_csi_rs_resource_index,
9784
14
      { "CSI-RS resource Index", "nfapi.csi.rs.resource.index",
9785
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9786
14
      "Index of the CSI-RS resource. This is included to link bfValues to CSI-RS resources included in Release 10 parameters.", HFILL }
9787
14
    },
9788
14
    { &hf_nfapi_csi_rs_class,
9789
14
      { "Class", "nfapi.csi.rs.class",
9790
14
      FT_UINT8, BASE_DEC, VALS(csi_rs_class_vals), 0x0,
9791
14
      "Indicates CSI-RS class", HFILL }
9792
14
    },
9793
14
    { &hf_nfapi_cdm_type,
9794
14
      { "CDM Type", "nfapi.cdm.type",
9795
14
      FT_UINT8, BASE_DEC, VALS(csi_rs_cdm_type_vals), 0x0,
9796
14
      "Indicates CDM type for CSI-RS. See [36.211] section 6.10.5.2. Valid for Class A", HFILL }
9797
14
    },
9798
14
    { &hf_nfapi_epdcch_prb_index,
9799
14
      { "EPDCCH PRB Index", "nfapi.epdcch.prb.index",
9800
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9801
14
      NULL, HFILL }
9802
14
    },
9803
14
    { &hf_nfapi_epdcch_resource_assignment_flag,
9804
14
      { "EPDCCH Resource assignment flag", "nfapi.epdcch.resource.assignment.flag",
9805
14
      FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
9806
14
      "Type of virtual resource block used", HFILL }
9807
14
    },
9808
14
    { &hf_nfapi_epdcch_id,
9809
14
      { "EPDCCH ID", "nfapi.epdcch.id",
9810
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9811
14
      "EPDCCH Index- used for the scrambler initiation The DMRS scrambling sequence initialization parameter defined in[11] section 6.10.3A.1", HFILL }
9812
14
    },
9813
14
    { &hf_nfapi_epdcch_start_symbol,
9814
14
      { "EPDCCH Start Symbol", "nfapi.epdcch.start.symbol",
9815
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9816
14
      "Indicates the OFDM starting symbol for any EPDCCH and PDSCH", HFILL }
9817
14
    },
9818
14
    { &hf_nfapi_epdcch_num_prb,
9819
14
      { "EPDCCH NumPRB", "nfapi.epdcch.num.prb",
9820
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9821
14
      "Number of PRBs allocated for EPDCCH", HFILL }
9822
14
    },
9823
14
    { &hf_nfapi_precoding_value,
9824
14
      { "Precoding value", "nfapi.precoding.value",
9825
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9826
14
      "Precoding element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
9827
14
    },
9828
14
    { &hf_nfapi_mpdcch_narrowband,
9829
14
      { "MPDCCH Narrowband", "nfapi.mpdcch.narrowband",
9830
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9831
14
      "Narrowband for MPDCCH", HFILL }
9832
14
    },
9833
14
    { &hf_nfapi_number_of_prb_pairs,
9834
14
      { "Number of PRB pairs", "nfapi.number.prb.pairs",
9835
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9836
14
      "Number of PRB-pairs constituting the MPDCCH-PRB-pair set", HFILL }
9837
14
    },
9838
14
    { &hf_nfapi_resource_block_assignment,
9839
14
      { "Resource Block Assignment", "nfapi.resource.block.assignment",
9840
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9841
14
      "Combinational Index r", HFILL }
9842
14
    },
9843
14
    { &hf_nfapi_start_symbol,
9844
14
      { "Start symbol", "nfapi.start.symbol",
9845
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9846
14
      NULL, HFILL }
9847
14
    },
9848
14
    { &hf_nfapi_ecce_index,
9849
14
      { "ECCE Index", "nfapi.ecce.index",
9850
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9851
14
      "ECCE Index used to send the DCI", HFILL }
9852
14
    },
9853
14
    { &hf_nfapi_ce_mode,
9854
14
      { "CE Mode", "nfapi.ce.mode",
9855
14
      FT_UINT8, BASE_DEC, VALS(ce_mode_vals), 0x0,
9856
14
      NULL, HFILL }
9857
14
    },
9858
14
    { &hf_nfapi_drms_scrabmling_init,
9859
14
      { "DMRS scrambling init", "nfapi.drms.scrambling.init",
9860
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9861
14
      "The DMRS scrambling sequence initialization parameter defined in [11] section 6.10.3A.1", HFILL }
9862
14
    },
9863
14
    { &hf_nfapi_pdsch_reception_levels,
9864
14
      { "PDSCH repetition levels", "nfapi.pdsch.repetition.levels",
9865
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9866
14
      "Valid for DCI formats: 6-0A, 6-0B", HFILL }
9867
14
    },
9868
14
    { &hf_nfapi_new_data_indicator,
9869
14
      { "New data indicator", "nfapi.new.data.indicator",
9870
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9871
14
      "The new data indicator for the transport block", HFILL }
9872
14
    },
9873
14
    { &hf_nfapi_tpmi_length,
9874
14
      { "TPMI length", "nfapi.tpmi.length",
9875
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9876
14
      "Length of 'TPMI' field in units of bits", HFILL }
9877
14
    },
9878
14
    { &hf_nfapi_pmi_flag,
9879
14
      { "PMI flag", "nfapi.pmi.flag",
9880
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
9881
14
      "Indicates if 'PMI' field is present", HFILL }
9882
14
    },
9883
14
    { &hf_nfapi_harq_resource_offset,
9884
14
      { "HARQ resource offset", "nfapi.harq.resource.offset",
9885
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9886
14
      "HARQ-ACK resource offset used", HFILL }
9887
14
    },
9888
14
    { &hf_nfapi_dci_subframe_repetition_number,
9889
14
      { "DCI subframe repetition number", "nfapi.dci.subframe.repetition.number",
9890
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9891
14
      "Indicates the number of MPDCCH repetitions", HFILL }
9892
14
    },
9893
14
    { &hf_nfapi_downlink_assignment_index_length,
9894
14
      { "Downlink assignment Index Length", "nfapi.dl.assignment.index.length",
9895
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9896
14
      "Length of Downlink assignment Index field in units of bits.", HFILL }
9897
14
    },
9898
14
    { &hf_nfapi_starting_ce_level,
9899
14
      { "Starting CE Level", "nfapi.starting.ce.level",
9900
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9901
14
      "2 bits provide the PRACH starting CE level", HFILL }
9902
14
    },
9903
14
    { &hf_nfapi_antenna_ports_and_scrambling_identity_flag,
9904
14
      { "Antenna ports and scrambling identity flag", "nfapi.antenna.ports.and.scrambling.identity.flag",
9905
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
9906
14
      "Indicates if 'Antenna ports and scrambling identity' field is present.", HFILL }
9907
14
    },
9908
14
    { &hf_nfapi_antenna_ports_and_scrambling_identity,
9909
14
      { "Antenna ports and scrambling identity", "nfapi.antenna.ports.and.scrambling.identity",
9910
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9911
14
      "Indicates the Antenna port and, scrambling identity value", HFILL }
9912
14
    },
9913
14
    { &hf_nfapi_paging_direct_indication_differentiation_flag,
9914
14
      { "Paging/Direct indication differentiation flag", "nfapi.paging.direct.indication.differentiation.flag",
9915
14
      FT_UINT8, BASE_DEC, VALS(paging_direct_indication_differtiation_flag_vals), 0x0,
9916
14
      "Valid for DCI format 6-2", HFILL }
9917
14
    },
9918
14
    { &hf_nfapi_direct_indication,
9919
14
      { "Direct indication", "nfapi.direct.indication",
9920
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9921
14
      "Valid for DCI format 6-2", HFILL }
9922
14
    },
9923
14
    { &hf_nfapi_number_of_tx_antenna_ports,
9924
14
      { "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports",
9925
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9926
14
      "Number of TX physical antenna ports", HFILL }
9927
14
    },
9928
14
    { &hf_nfapi_transmission_power,
9929
14
      { "Transmission Power", "nfapi.transmission_power",
9930
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
9931
14
      "Offset to the reference signal power.", HFILL }
9932
14
    },
9933
14
    { &hf_nfapi_mbsfn_area_id,
9934
14
      { "MBSFN Area id", "nfapi.mbsfn.area.id",
9935
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
9936
14
      "Indicates MBSFN area ID", HFILL }
9937
14
    },
9938
14
    { &hf_nfapi_dl_dci_format,
9939
14
      { "DL DCI format", "nfapi.dl.dci.format",
9940
14
      FT_UINT8, BASE_DEC, VALS(dl_dci_format_vals), 0x0,
9941
14
      "Format of the DL DCI", HFILL }
9942
14
    },
9943
14
    { &hf_nfapi_ul_dci_format,
9944
14
      { "UL DCI format", "nfapi.ul_dci.format",
9945
14
      FT_UINT8, BASE_DEC, VALS(ul_dci_format_vals), 0x0,
9946
14
      "Format of the UL DCI", HFILL }
9947
14
    },
9948
14
    { &hf_nfapi_mpdcch_ul_dci_format,
9949
14
      { "UL DCI format", "nfapi.mpdcch.ul_dci.format",
9950
14
      FT_UINT8, BASE_DEC, VALS(mpdcch_ul_dci_format_vals), 0x0,
9951
14
      "Format of the UL DCI", HFILL }
9952
14
    },
9953
14
    { &hf_nfapi_cce_idx,
9954
14
      { "CCE Index", "nfapi.cce.index",
9955
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9956
14
      "CCE Index used to send the DCI", HFILL }
9957
14
    },
9958
14
    { &hf_nfapi_aggregation_level,
9959
14
      { "Aggregation level", "nfapi.aggregation.level",
9960
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9961
14
      "The aggregation level used", HFILL }
9962
14
    },
9963
14
    { &hf_nfapi_mcs_1,
9964
14
      { "MCS_1", "nfapi.mcs_1",
9965
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9966
14
      "The modulation and coding scheme for 1st transport block", HFILL }
9967
14
    },
9968
14
    { &hf_nfapi_mcs_2,
9969
14
      { "MCS_2", "nfapi.mcs_2",
9970
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9971
14
      "The modulation and coding scheme for 2nd transport block", HFILL }
9972
14
    },
9973
14
    { &hf_nfapi_redundancy_version_1,
9974
14
      { "Redundancy version_1", "nfapi.redundancy.version.1",
9975
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9976
14
      "The redundancy version for 1st transport block.", HFILL }
9977
14
    },
9978
14
    { &hf_nfapi_redundancy_version_2,
9979
14
      { "Redundancy version_2", "nfapi.redundancy.version.2",
9980
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9981
14
      "The redundancy version for 2nd transport block", HFILL }
9982
14
    },
9983
14
    { &hf_nfapi_new_data_indicator_1,
9984
14
      { "New data indicator_1", "nfapi.new.data.indicator.1",
9985
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9986
14
      "The new data indicator for 1st transport block.", HFILL }
9987
14
    },
9988
14
    { &hf_nfapi_new_data_indicator_2,
9989
14
      { "New data indicator_2", "nfapi.new.data.indicator.2",
9990
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9991
14
      "The new data indicator for 2nd transport block.", HFILL }
9992
14
    },
9993
14
    { &hf_nfapi_harq_process,
9994
14
      { "HARQ process", "nfapi.harq.process",
9995
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
9996
14
      "HARQ process number", HFILL }
9997
14
    },
9998
14
    { &hf_nfapi_tpmi,
9999
14
      { "TPMI", "nfapi.tpmi",
10000
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10001
14
      "The codebook Index to be used for precoding", HFILL }
10002
14
    },
10003
14
    { &hf_nfapi_pmi,
10004
14
      { "PMI", "nfapi.pmi",
10005
14
      FT_UINT8, BASE_DEC, VALS(pmi_vals), 0x0,
10006
14
      "Confirmation for precoding", HFILL }
10007
14
    },
10008
14
    { &hf_nfapi_precoding_information,
10009
14
      { "Precoding information", "nfapi.precoding.information",
10010
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10011
14
      NULL, HFILL }
10012
14
    },
10013
14
    { &hf_nfapi_tpc,
10014
14
      { "TPC", "nfapi.tpc",
10015
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10016
14
      "Tx power control command for PUCCH", HFILL }
10017
14
    },
10018
14
    { &hf_nfapi_downlink_assignment_index,
10019
14
      { "Downlink assignment Index", "nfapi.downlink.assignment.index",
10020
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10021
14
      "The downlink assignment Index. In release 8-11 this is only used in TDD mode, "
10022
14
      "value ignored for FDD. In release 12 or later a field indicating the structure "
10023
14
      "type of the primary cell is used to determine if this is valid with size 2 bits."
10024
14
      "In release 13 or later a field indicating codebooksizeDetermination - r13 = 0 is "
10025
14
      "used to determine is this field is valid with size 4 bits", HFILL }
10026
14
    },
10027
14
    { &hf_nfapi_ngap,
10028
14
      { "Ngap", "nfapi.ngap",
10029
14
      FT_UINT8, BASE_DEC, VALS(ngap_vals), 0x0,
10030
14
      "Used in virtual resource block distribution", HFILL }
10031
14
    },
10032
14
    { &hf_nfapi_transport_block_size_index,
10033
14
      { "Transport block size Index", "nfapi.transport.block.size.index",
10034
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10035
14
      "The transport block size", HFILL }
10036
14
    },
10037
14
    { &hf_nfapi_downlink_power_offset,
10038
14
      { "Downlink power offset", "nfapi.downlink.power.offset",
10039
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10040
14
      "Indicates the DL power offset type for multi-user MIMO transmission", HFILL }
10041
14
    },
10042
14
    { &hf_nfapi_allocate_prach_flag,
10043
14
      { "Allocation PRACH flag", "nfapi.allocation.prach.flag",
10044
14
      FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
10045
14
      "Indicates that PRACH procedure is initiated", HFILL }
10046
14
    },
10047
14
    { &hf_nfapi_preamble_index,
10048
14
      { "Preamble Index", "nfapi.preamble.index",
10049
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10050
14
      "The preamble Index to be used on the PRACH", HFILL }
10051
14
    },
10052
14
    { &hf_nfapi_prach_mask_index,
10053
14
      { "PRACH mask Index", "nfapi.prach.mask.index",
10054
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10055
14
      "The mask Index to be used on the PRACH", HFILL }
10056
14
    },
10057
14
    { &hf_nfapi_rnti_type,
10058
14
      { "RNTI type", "nfapi.rnti.type",
10059
14
      FT_UINT8, BASE_DEC, VALS(rnti_type_vals), 0x0,
10060
14
      NULL, HFILL }
10061
14
    },
10062
14
    { &hf_nfapi_mpdcch_rnti_type,
10063
14
      { "RNTI type", "nfapi.mpdcch.rnti.type",
10064
14
      FT_UINT8, BASE_DEC, VALS(mpdcch_rnti_type_vals), 0x0,
10065
14
      NULL, HFILL }
10066
14
    },
10067
14
    { &hf_nfapi_mcch_flag,
10068
14
      { "MCCH flag", "nfapi.mcch.flag",
10069
14
      FT_BOOLEAN, BASE_NONE, TFS(&mcch_flag_string_name), 0x0,
10070
14
      "Indicates if format 1C is being used to signal a MCCH or SC-MCCH change notification", HFILL }
10071
14
    },
10072
14
    { &hf_nfapi_mcch_change_notification,
10073
14
      { "MCCH change notification", "nfapi.mcch.change.notification",
10074
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10075
14
      "MCCH or SC-MCCH Change Notification", HFILL }
10076
14
    },
10077
14
    { &hf_nfapi_scrambling_identity,
10078
14
      { "Scrambling identity", "nfapi.scrambling.identity",
10079
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10080
14
      "Indicates the scrambling identity value NSCID", HFILL }
10081
14
    },
10082
14
    { &hf_nfapi_cross_carrier_scheduling_flag,
10083
14
      { "Cross Carrier scheduling flag", "nfapi.cross.carrier.scheduling.flag",
10084
14
      FT_BOOLEAN, BASE_NONE, TFS(&cross_carrier_scheduling_flag_strname), 0x0,
10085
14
      "Indicates if cross carrier scheduling has been enabled for the UE receiving this DCI", HFILL }
10086
14
    },
10087
14
    { &hf_nfapi_carrier_indicator,
10088
14
      { "Carrier Indicator", "nfapi.carrier.indicator",
10089
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10090
14
      "Serving Cell Index", HFILL }
10091
14
    },
10092
14
    { &hf_nfapi_srs_flag,
10093
14
      { "SRS flag", "nfapi.srs.flag",
10094
14
      FT_BOOLEAN, BASE_NONE, TFS(&srs_flag_strname), 0x0,
10095
14
      "Indicates if the SRS request parameter is valid", HFILL }
10096
14
    },
10097
14
    { &hf_nfapi_srs_request,
10098
14
      { "SRS request", "nfapi.srs.request",
10099
14
      FT_BOOLEAN, BASE_NONE, TFS(&srs_request_strname), 0x0,
10100
14
      "SRS request flag", HFILL }
10101
14
    },
10102
14
    { &hf_nfapi_antenna_ports_scrambling_and_layers,
10103
14
      { "Antenna ports scrambling and layers", "nfapi.antenna.ports.scrambling.and.layers",
10104
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10105
14
      "Indicates the Antenna port, scrambling identity value NSCID and number of layers", HFILL }
10106
14
    },
10107
14
    { &hf_nfapi_total_dci_length_including_padding,
10108
14
      { "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
10109
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10110
14
      "The total DCI length including padding bits", HFILL }
10111
14
    },
10112
14
    { &hf_nfapi_n_ul_rb,
10113
14
      { "N_UL_RB", "nfapi.n.dl.rb",
10114
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10115
14
      "BW of serving cell for which the DCI was scheduled for.  This is valid for "
10116
14
      "the case of cross carrier scheduling, for the case of a self - "
10117
14
      "scheduling(cross carrier scheduling is not valid or Carrier indicator has value '0', "
10118
14
      "the BW is the 'DL BW support' as configured in configuration phase(params) "
10119
14
      "Uplink channel bandwidth in resource blocks", HFILL }
10120
14
    },
10121
14
    { &hf_nfapi_harq_ack_resource_offset,
10122
14
      { "HARQ-ACK resource offset", "nfapi.harq.ack.resource.offset",
10123
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10124
14
      "HARQ-ACK resource offset field is present only when this format is carried by EPDCCH.", HFILL }
10125
14
    },
10126
14
    { &hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator,
10127
14
      { "PDSCH RE Mapping and Quasi-Co-Location Indicator", "nfapi.pdsch.re.mapping",
10128
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10129
14
      "Indicates the parameter set configured by the higher layers which the UE should use.", HFILL }
10130
14
    },
10131
14
    { &hf_nfapi_primary_cell_type,
10132
14
      { "Primary cell type", "nfapi.primary.cell.type",
10133
14
      FT_UINT8, BASE_DEC, VALS(primary_cells_type_vals), 0x0,
10134
14
      "Indicates the type of the primary cell.", HFILL }
10135
14
    },
10136
14
    { &hf_nfapi_ul_dl_configuration_flag,
10137
14
      { "UL/DL configuration flag", "nfapi.ul.dl.configuration.flag",
10138
14
      FT_BOOLEAN, BASE_NONE, TFS(&ul_dl_configuration_flag_strname), 0x0,
10139
14
      "Indicates if format 1C is being used to signal UL/DL configuration", HFILL }
10140
14
    },
10141
14
    { &hf_nfapi_number_of_ul_dl_configurations,
10142
14
      { "Number of UL/DL configurations", "nfapi.number.ul.dl.configurations",
10143
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10144
14
      NULL, HFILL }
10145
14
    },
10146
14
    { &hf_nfapi_ul_dl_configuration_index,
10147
14
      { "UL/DL configuration indication", "nfapi.ul.dl.configuration.indication",
10148
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10149
14
      "UL/DL configuration Index", HFILL }
10150
14
    },
10151
14
    { &hf_nfapi_laa_end_partial_sf_flag,
10152
14
      { "LAA end partial SF flag", "nfapi.laa.end.partial.sf.flag",
10153
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10154
14
      "Indicates if DCI format 1C is being used to signal LAA end partial SF (valid if end partial SF support configuration is set)", HFILL }
10155
14
    },
10156
14
    { &hf_nfapi_laa_end_partial_sf_configuration,
10157
14
      { "LAA end partial SF configuration", "nfapi.laa.end.partial.sf.configuration",
10158
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10159
14
      "If DCI format 1C scrambled by CC - RNTI is used to signal end partial SF, this field "
10160
14
      "contains LAA common information (4 bits used in [9] Table 13A-1 for configuration of "
10161
14
      "occupied OFDM symbols for current and next SF)", HFILL }
10162
14
    },
10163
14
    { &hf_nfapi_codebooksize_determination_r13,
10164
14
      { "Codebook Size Determination R13", "nfapi.codebook.size.determination.r13",
10165
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10166
14
      "Indicates if the downlink assignment Index parameter (DAI) is 4 bits", HFILL }
10167
14
    },
10168
14
    { &hf_nfapi_rel13_drms_table_flag,
10169
14
      { "Rel-13-DMRS-tabe flag", "nfapi.drms.table.flag.r13",
10170
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10171
14
      "Indicates if Release 13 DMRS table for be used", HFILL }
10172
14
    },
10173
14
    { &hf_nfapi_pscch_resource,
10174
14
      { "PSCCH Resource", "nfapi.pscch.resource",
10175
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10176
14
      "6-bits describing the resource blocks for transmitting PSCCH", HFILL }
10177
14
    },
10178
14
    { &hf_nfapi_time_resource_pattern,
10179
14
      { "Time resource pattern", "nfapi.time.resource.pattern",
10180
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10181
14
      "7-bits describing the time resource pattern Index", HFILL }
10182
14
    },
10183
14
    { &hf_nfapi_mpdcch_transmission_type,
10184
14
      { "MPDCCH transmission type", "nfapi.mpdcch.transmission.type",
10185
14
      FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
10186
14
      NULL, HFILL }
10187
14
    },
10188
14
    { &hf_nfapi_drms_scrambling_init,
10189
14
      { "DMRS scrambling init", "nfapi.drms.scrambling.init",
10190
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10191
14
      "The DMRS scrambling sequence initialization", HFILL }
10192
14
    },
10193
14
    { &hf_nfapi_pusch_repetition_levels,
10194
14
      { "PUSCH repetition levels", "nfapi.pusch.repetition.levels",
10195
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10196
14
      "Valid for DCI formats: 6-0A, 6-0B", HFILL }
10197
14
    },
10198
14
    { &hf_nfapi_frequency_hopping_flag,
10199
14
      { "Frequency hopping flag", "nfapi.frequency.hopping.flag",
10200
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10201
14
      "Indicates if hopping is being used.", HFILL }
10202
14
    },
10203
14
    { &hf_nfapi_csi_request,
10204
14
      { "CSI request", "nfapi.csi.request",
10205
14
      FT_UINT8, BASE_DEC, VALS(csi_request_vals), 0x0,
10206
14
      "Aperiodic CSI request flag", HFILL }
10207
14
    },
10208
14
    { &hf_nfapi_dai_presence_flag,
10209
14
      { "DAI presence flag", "nfapi.dia.presence.flag",
10210
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
10211
14
      "Indicates if DL assignment Index field is present in the DCI", HFILL }
10212
14
    },
10213
14
    { &hf_nfapi_total_dci_length_include_padding,
10214
14
      { "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
10215
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10216
14
      "The total DCI length including padding bits", HFILL }
10217
14
    },
10218
14
    { &hf_nfapi_csi_rs_antenna_port_count_r10,
10219
14
      { "CSI-RS antenna port count r10", "nfapi.csi.rs.antenna.port.count.r10",
10220
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10221
14
      "Indicates number of antennas used for transmission of CSI reference signal.", HFILL }
10222
14
    },
10223
14
    { &hf_nfapi_ul_config_pdu_type,
10224
14
      { "UL Config PDU Type", "nfapi.ul.config.pdu.type",
10225
14
      FT_UINT8, BASE_DEC, VALS(nfapi_ul_config_pdu_type_vals), 0x0,
10226
14
      NULL, HFILL }
10227
14
    },
10228
14
    { &hf_nfapi_rach_prach_frequency_resources,
10229
14
      { "RACH PRACH Frequency resources", "nfapi.rach.prach.frequency.resources",
10230
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10231
14
      "If semi-static information is held in the MAC", HFILL }
10232
14
    },
10233
14
    { &hf_nfapi_srs_present,
10234
14
      { "SRS present", "nfapi.srs.present",
10235
14
      FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
10236
14
      "If semi-static information is held in the MAC", HFILL }
10237
14
    },
10238
14
    { &hf_nfapi_handle,
10239
14
      { "Handle", "nfapi.handle",
10240
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10241
14
      "An opaque handle", HFILL }
10242
14
    },
10243
14
    { &hf_nfapi_pucch_index,
10244
14
      { "PUCCH Index", "nfapi.pucch.index",
10245
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10246
14
      "The PUCCH Index value", HFILL }
10247
14
    },
10248
14
    { &hf_nfapi_size,
10249
14
      { "Size", "nfapi.size",
10250
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10251
14
      "The size of the ULSCH PDU in bytes as defined by the relevant UL grant", HFILL }
10252
14
    },
10253
14
    { &hf_nfapi_resource_block_start,
10254
14
      { "Resource block start", "nfapi.resource.block.start",
10255
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10256
14
      "The starting resource block for this ULSCH allocation", HFILL }
10257
14
    },
10258
14
    { &hf_nfapi_number_of_resource_blocks,
10259
14
      { "Number of resource blocks", "nfapi.resource.blocks",
10260
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10261
14
      "The number of resource blocks allocated to this ULSCH grant", HFILL }
10262
14
    },
10263
14
    { &hf_nfapi_cyclic_shift_2_for_drms,
10264
14
      { "Cyclic Shift 2 for DRMS", "nfapi.cyclic.shift.2.for.drms",
10265
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10266
14
      "The 2nd cyclic shift for DMRS assigned to the UE in the ULSCH grant", HFILL }
10267
14
    },
10268
14
    { &hf_nfapi_frequency_hopping_enabled_flag,
10269
14
      { "Frequency hopping enabled flag", "nfapi.frequency.hopping.enabled.flag",
10270
14
      FT_UINT8, BASE_DEC, VALS(hopping_vals), 0x0,
10271
14
      "Indicates if hopping is being used", HFILL }
10272
14
    },
10273
14
    { &hf_nfapi_frequency_hopping_bits,
10274
14
      { "Frequency hopping bits", "nfapi.frequency.hopping.bits",
10275
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10276
14
      NULL, HFILL }
10277
14
    },
10278
14
    { &hf_nfapi_new_data_indication,
10279
14
      { "New Data indication", "nfapi.new.data.indication",
10280
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10281
14
      "Specify whether this received transport block is a new transmission from UE", HFILL }
10282
14
    },
10283
14
    { &hf_nfapi_harq_process_number,
10284
14
      { "HARQ Process number", "nfapi.harq.process.number",
10285
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10286
14
      NULL, HFILL }
10287
14
    },
10288
14
    { &hf_nfapi_ul_tx_mode,
10289
14
      { "UL Tx Mode", "nfapi.ul.tx.mode",
10290
14
      FT_UINT8, BASE_DEC, VALS(ul_tx_mode_vals), 0x0,
10291
14
      NULL, HFILL }
10292
14
    },
10293
14
    { &hf_nfapi_current_tx_nb,
10294
14
      { "Current Tx nb", "nfapi.current.tx.nb",
10295
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10296
14
      "The current HARQ transmission count of this transport block. Valid if frequency hopping enabled.", HFILL }
10297
14
    },
10298
14
    { &hf_nfapi_n_srs,
10299
14
      { "N SRS", "nfapi.n.srs",
10300
14
      FT_UINT8, BASE_DEC, VALS(n_srs_vals), 0x0,
10301
14
      "Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
10302
14
    },
10303
14
    { &hf_nfapi_disable_sequence_hopping_flag,
10304
14
      { "Disable sequence hopping flag", "nfapi.disable.sequence.hopping.flag",
10305
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10306
14
      "Indicates if any configured group hopping should be disabled for this UE.", HFILL }
10307
14
    },
10308
14
    { &hf_nfapi_virtual_cell_id_enabled_flag,
10309
14
      { "Virtual cell ID enabled flag", "nfapi.virtual.cell.id.enabled.flag",
10310
14
      FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
10311
14
      "Indicates if virtual cell is being used and nPUSCH identity is valid.", HFILL }
10312
14
    },
10313
14
    { &hf_nfapi_npusch_identity,
10314
14
      { "nPUSCH Identity", "nfapi.npusch.identity",
10315
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10316
14
      "Virtual cell ID for initialization of group hopping, sequence hopping and sequence shift pattern of PUSCH DMRS.", HFILL }
10317
14
    },
10318
14
    { &hf_nfapi_ndrms_csh_identity,
10319
14
      { "nDMRS-CSH Identity", "nfapi.ndrms.csh.identity",
10320
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10321
14
      "Virtual cell ID for initialization of cyclic shift hopping of PUSCH DMRS.", HFILL }
10322
14
    },
10323
14
    { &hf_nfapi_total_number_of_repetitions,
10324
14
      { "Total Number of repetitions", "nfapi.total.number.of.repetitions",
10325
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10326
14
      NULL, HFILL }
10327
14
    },
10328
14
    { &hf_nfapi_repetition_number,
10329
14
      { "Repetition Number", "nfapi.repetition.number",
10330
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10331
14
      "Current transmission number", HFILL }
10332
14
    },
10333
14
    { &hf_nfapi_initial_sf_io,
10334
14
      { "Initial transmission SF (io)", "nfapi.initial.sf.io",
10335
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10336
14
      "Absolute Sub-Frame of the initial transmission", HFILL }
10337
14
    },
10338
14
    { &hf_nfapi_empty_symbols_due_to_retunning,
10339
14
      { "Empty symbols due to re-tunning", "nfapi.empty.symbols.due.to.retunning",
10340
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10341
14
      "Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
10342
14
    },
10343
14
    { &hf_nfapi_dl_cqi_ri_pmi_size_2,
10344
14
      { "DL CQI/PMI/RI size 2", "nfapi.dl.cqi.ri.pmi.size.2",
10345
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10346
14
      "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 }
10347
14
    },
10348
14
    { &hf_nfapi_harq_size_2,
10349
14
      { "HARQ Size 2", "nfapi.harq.size2",
10350
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10351
14
      "The size of the ACK/NACK in bits.", HFILL }
10352
14
    },
10353
14
    { &hf_nfapi_delta_offset_harq_2,
10354
14
      { "Delta Offset HARQ 2", "nfapi.delta.offset.harq.2",
10355
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10356
14
      "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 }
10357
14
    },
10358
14
    { &hf_nfapi_starting_prb,
10359
14
      { "Starting PRB", "nfapi.starting.prb",
10360
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10361
14
      "The starting PRB for the PUCCH", HFILL }
10362
14
    },
10363
14
    { &hf_nfapi_antenna_port,
10364
14
      { "Antenna Port", "nfapi.antenna.port",
10365
14
      FT_UINT8, BASE_DEC, VALS(antenna_ports_vals), 0x0,
10366
14
      "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 }
10367
14
    },
10368
14
    { &hf_nfapi_number_of_combs,
10369
14
      { "Number of Combs", "nfapi.num.of.combs",
10370
14
      FT_UINT8, BASE_DEC, VALS(combs_vals), 0x0,
10371
14
      "Defines the maximum number of transmission combs (TC).", HFILL }
10372
14
    },
10373
14
    { &hf_nfapi_npucch_identity,
10374
14
      { "nPUCCH Identity", "nfapi.npucch.identity",
10375
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10376
14
      "Virtual cell ID for initialization of base sequence and cyclic shift hopping of PUCCH.", HFILL }
10377
14
    },
10378
14
    { &hf_nfapi_empty_symbols,
10379
14
      { "Empty symbols", "nfapi.empty.symbols",
10380
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10381
14
      "Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
10382
14
    },
10383
14
    { &hf_nfapi_csi_mode,
10384
14
      { "CSI_mode", "nfapi.csi.mode",
10385
14
      FT_UINT8, BASE_DEC, VALS(csi_mode_vals), 0x0,
10386
14
      NULL, HFILL }
10387
14
    },
10388
14
    { &hf_nfapi_dl_cqi_pmi_size_2,
10389
14
      { "DL CQI/PMI Size 2", "nfapi.dl.cqi.pmi.size.2",
10390
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10391
14
      "The size of the DL CQI/PMI in bits", HFILL }
10392
14
    },
10393
14
    { &hf_nfapi_statring_prb,
10394
14
      { "Starting PRB", "nfapi.starting.prb",
10395
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10396
14
      "The starting PRB for the PUCCH", HFILL }
10397
14
    },
10398
14
    { &hf_nfapi_cdm_index,
10399
14
      { "cdm_Index", "nfapi.cdm.index",
10400
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10401
14
      "Selected CDM option", HFILL }
10402
14
    },
10403
14
    { &hf_nfapi_nsrs,
10404
14
      { "N srs", "nfapi.n.srs",
10405
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10406
14
      "Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
10407
14
    },
10408
14
    { &hf_nfapi_num_ant_ports,
10409
14
      { "Num_ant_ports", "nfapi.num.ant.port",
10410
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10411
14
      "The number of antenna ports used by the UE transmit", HFILL }
10412
14
    },
10413
14
    { &hf_nfapi_n_pucch_2_0,
10414
14
      { "n_PUCCH_2_0", "nfapi.n.pucch.2.0",
10415
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10416
14
      "The PUCCH Index value for ACK/NACK HARQ resource 4 on antenna port", HFILL }
10417
14
    },
10418
14
    { &hf_nfapi_n_pucch_2_1,
10419
14
      { "n_PUCCH_2_1", "nfapi.n.pucch.2.1",
10420
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10421
14
      "HARQ resource 5", HFILL }
10422
14
    },
10423
14
    { &hf_nfapi_n_pucch_2_2,
10424
14
      { "n_PUCCH_2_2", "nfapi.n.pucch.2.2",
10425
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10426
14
      "HARQ resource 6", HFILL }
10427
14
    },
10428
14
    { &hf_nfapi_n_pucch_2_3,
10429
14
      { "n_PUCCH_2_3", "nfapi.n.pucch.2.3",
10430
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10431
14
      "HARQ resource 7", HFILL }
10432
14
    },
10433
14
    { &hf_nfapi_dl_cqi_pmi_size_rank_1,
10434
14
      { "DL CQI PMI size rank 1", "nfapi.dl.cqi.pmi.size.rank.1",
10435
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10436
14
      "The size of the DL CQI/PMI in bits in case of rank 1 report.", HFILL }
10437
14
    },
10438
14
    { &hf_nfapi_dl_cqi_pmi_size_rank_greater_1,
10439
14
      { "DL CQI PMI size rank greater 1", "nfapi.dl.cqi.pmi.size.rank.gt_1",
10440
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10441
14
      "The size of the DL CQI/PMI in bits in case of rank>1 report.", HFILL }
10442
14
    },
10443
14
    { &hf_nfapi_ri_size,
10444
14
      { "RI size", "nfapi.ri.size",
10445
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10446
14
      "The size of RI in bits", HFILL }
10447
14
    },
10448
14
    { &hf_nfapi_delta_offset_cqi,
10449
14
      { "Delta offset cqi", "nfapi.delta.offset.cqi",
10450
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10451
14
      "Delta offset for CQI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10452
14
    },
10453
14
    { &hf_nfapi_delta_offset_ri,
10454
14
      { "Delta offset ri", "nfapi.delta.offset.ri",
10455
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10456
14
      "Delta offset for RI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10457
14
    },
10458
14
    { &hf_nfapi_harq_size,
10459
14
      { "HARQ size", "nfapi.harq_size",
10460
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10461
14
      "The size of the ACK/NACK in bits", HFILL }
10462
14
    },
10463
14
    { &hf_nfapi_delta_offset_harq,
10464
14
      { "Delta offset HARQ", "nfapi.delta.offset.harq",
10465
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10466
14
      "Delta offset for HARQ. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10467
14
    },
10468
14
    { &hf_nfapi_tdd_ack_nack_mode,
10469
14
      { "ACK NACK mode", "nfapi.tdd.ack.nack.mode",
10470
14
      FT_UINT8, BASE_DEC, VALS(nfapi_tdd_ack_nack_mode_vals), 0x0,
10471
14
      "The format of the ACK/NACK response expected. For TDD only.", HFILL }
10472
14
    },
10473
14
    { &hf_nfapi_fdd_ack_nack_mode,
10474
14
      { "ACK NACK mode", "nfapi.fdd.ack.nack.mode",
10475
14
      FT_UINT8, BASE_DEC, VALS(nfapi_fdd_ack_nack_mode_vals), 0x0,
10476
14
      "The format of the ACK/NACK response expected. For TDD only.", HFILL }
10477
14
    },
10478
14
    { &hf_nfapi_n_srs_initial,
10479
14
      { "N srs initial", "nfapi.n.srs.initial",
10480
14
      FT_UINT8, BASE_DEC, VALS(n_srs_initial_vals), 0x0,
10481
14
      NULL, HFILL }
10482
14
    },
10483
14
    { &hf_nfapi_initial_number_of_resource_blocks,
10484
14
      { "Initial number of resource blocks", "nfapi.initial.number.of.resource.blocks",
10485
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10486
14
      "The number of resource blocks used in the initial transmission of this transport block.", HFILL }
10487
14
    },
10488
14
    { &hf_nfapi_dl_cqi_pmi_size,
10489
14
      { "DL cqi pmi size", "nfapi.dl.cqi.pmi.size",
10490
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10491
14
      "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 }
10492
14
    },
10493
14
    { &hf_nfapi_report_type,
10494
14
      { "Report type", "nfapi.report.type",
10495
14
      FT_BOOLEAN, BASE_NONE, TFS(&nfapi_csi_report_type_strname), 0x0,
10496
14
      "Type of CSI report", HFILL }
10497
14
    },
10498
14
    { &hf_nfapi_dl_cqi_ri_pmi_size,
10499
14
      { "DL CQI/PMI/RI size", "nfapi.dl.cqi.ri.pmi.size",
10500
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10501
14
      "The size of the DL CQI/PMI/RI/CRI in bits", HFILL }
10502
14
    },
10503
14
    { &hf_nfapi_control_type,
10504
14
      { "Control type", "nfapi.control.type",
10505
14
      FT_BOOLEAN, BASE_NONE, TFS(&nfapi_control_type_string_name), 0x0,
10506
14
      NULL, HFILL }
10507
14
    },
10508
14
    { &hf_nfapi_number_of_cc,
10509
14
      { "Number of cc", "nfapi.number.of.cc",
10510
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10511
14
      "The number of CC in the aperiodic report", HFILL }
10512
14
    },
10513
14
    { &hf_nfapi_number_of_pucch_resource,
10514
14
      { "Number of PUCCH Resource", "nfapi.number.of.pucch.resource",
10515
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10516
14
      "A value of 2 indicates that the UE is configured to transmit on two antenna ports", HFILL }
10517
14
    },
10518
14
    { &hf_nfapi_pucch_index_p1,
10519
14
      { "PUCCH Index P1", "nfapi.pucch.index.p1",
10520
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10521
14
      "The PUCCH Index value for antenna port P1", HFILL }
10522
14
    },
10523
14
    { &hf_nfapi_n_pucch_1_0,
10524
14
      { "N PUCCH 1 0", "nfapi.n.pucch.1.0",
10525
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10526
14
      "HARQ resource 0", HFILL }
10527
14
    },
10528
14
    { &hf_nfapi_n_pucch_1_1,
10529
14
      { "N PUCCH 1 1", "nfapi.n.pucch.1.1",
10530
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10531
14
      "HARQ resource 1", HFILL }
10532
14
    },
10533
14
    { &hf_nfapi_n_pucch_1_2,
10534
14
      { "N PUCCH 1 2", "nfapi.n.pucch.1.2",
10535
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10536
14
      "HARQ resource 2", HFILL }
10537
14
    },
10538
14
    { &hf_nfapi_n_pucch_1_3,
10539
14
      { "N PUCCH 1 3", "nfapi.n.pucch.1.3",
10540
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10541
14
      "HARQ resource 3", HFILL }
10542
14
    },
10543
14
    { &hf_nfapi_srs_bandwidth,
10544
14
      { "SRS Bandwidth", "nfapi.srs.bandwidth",
10545
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10546
14
      "SRS Bandwidth. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10547
14
    },
10548
14
    { &hf_nfapi_frequency_domain_position,
10549
14
      { "Frequency Domain position", "nfapi.frequency.domain.position",
10550
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10551
14
      "Frequency-domain position, NRRC This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10552
14
    },
10553
14
    { &hf_nfapi_srs_hopping_bandwidth,
10554
14
      { "SRS hopping bandwidth", "nfapi.srs.hopping.bandwidth",
10555
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10556
14
      "Configures the frequency hopping on the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10557
14
    },
10558
14
    { &hf_nfapi_transmission_comb,
10559
14
      { "Transmission comb", "nfapi.transmission.comb",
10560
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10561
14
      "Configures the frequency location of the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10562
14
    },
10563
14
    { &hf_nfapi_i_srs,
10564
14
      { "I SRS", "nfapi.i.srs",
10565
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10566
14
      "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 }
10567
14
    },
10568
14
    { &hf_nfapi_sounding_reference_cyclic_shift,
10569
14
      { "Sounding reference cyclic shift", "nfapi.sounding.reference.cyclic.shift",
10570
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10571
14
      "Configures the SRS sequence generation. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
10572
14
    },
10573
14
    { &hf_nfapi_pdu_length,
10574
14
      { "PDU length", "nfapi.pdu.length",
10575
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10576
14
      "The total length (in bytes) of the PDU description and PDU data, without the padding bytes", HFILL }
10577
14
    },
10578
14
    { &hf_nfapi_crc_flag,
10579
14
      { "CRC flag", "nfapi.crc.flag",
10580
14
      FT_BOOLEAN, BASE_NONE, TFS(&crc_flag_strname), 0x0,
10581
14
      "A flag indicating if a CRC error was detected", HFILL }
10582
14
    },
10583
14
    { &hf_nfapi_number_of_hi_pdus,
10584
14
      { "Number of HI Pdu's", "nfapi.number_of_hi_pdus",
10585
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10586
14
      "Number of HI PDUs included in this message", HFILL }
10587
14
    },
10588
14
    { &hf_nfapi_number_of_dci_pdus,
10589
14
      { "Number of DCI Pdu's", "nfapi.number_of_dci_pdus",
10590
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10591
14
      "Number of DCI PDUs included in this message", HFILL }
10592
14
    },
10593
14
    { &hf_nfapi_hi_dci0_pdu_type,
10594
14
      { "PDU Type", "nfapi.pdu_type",
10595
14
      FT_UINT8, BASE_DEC, VALS(hi_dci0_pdu_type_vals), 0x0,
10596
14
      NULL, HFILL }
10597
14
    },
10598
14
    { &hf_nfapi_hi_value,
10599
14
      { "HI Value", "nfapi.hi_value",
10600
14
      FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0,
10601
14
      "The PHICH value which is sent on the resource", HFILL }
10602
14
    },
10603
14
    { &hf_nfapi_i_phich,
10604
14
      { "i phich", "nfapi.i_phich",
10605
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10606
14
      "Is used in the calculation of the PHICH location. For TDD only", HFILL }
10607
14
    },
10608
14
    { &hf_nfapi_flag_tb2,
10609
14
      { "Flag TB2", "nfapi.flag_tb2",
10610
14
      FT_BOOLEAN, BASE_NONE, TFS(&flag_tb2_strname), 0x0,
10611
14
      "Indicates is HI is present for a second transport block", HFILL }
10612
14
    },
10613
14
    { &hf_nfapi_hi_value_2,
10614
14
      { "HI Value 2", "nfapi.hi_value_2",
10615
14
      FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0,
10616
14
      "The PHICH value for a second transport block.", HFILL }
10617
14
    },
10618
14
    { &hf_nfapi_ue_tx_antenna_selection,
10619
14
      { "UE Tx Antenna selection", "nfapi.ue_tx_antenna_selection",
10620
14
      FT_UINT8, BASE_DEC, VALS(ue_tx_antenna_selection_vals), 0x0,
10621
14
      "Indicates how the CRC is calculated on the PDCCH.", HFILL }
10622
14
    },
10623
14
    { &hf_nfapi_cqi_csi_request,
10624
14
      { "cqi csi request", "nfapi.cqi_csi_request",
10625
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10626
14
      "Aperiodic CQI request flag", HFILL }
10627
14
    },
10628
14
    { &hf_nfapi_ul_index,
10629
14
      { "UL Index", "nfapi.ul_index",
10630
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10631
14
      "Valid for TDD mode only", HFILL }
10632
14
    },
10633
14
    { &hf_nfapi_dl_assignment_index,
10634
14
      { "DL Assignment Index", "nfapi.dl_assignment_index",
10635
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10636
14
      "Valid for TDD mode only.", HFILL }
10637
14
    },
10638
14
    { &hf_nfapi_tpc_bitmap,
10639
14
      { "TPC bitmap", "nfapi.tpc_bitmap",
10640
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10641
14
      "TPC commands for PUCCH and PUSCH", HFILL }
10642
14
    },
10643
14
    { &hf_nfapi_number_of_antenna_ports,
10644
14
      { "Number of antenna ports", "nfapi.number.of.antenna.ports",
10645
14
      FT_UINT8, BASE_DEC, VALS(number_of_antenna_port_vals), 0x0,
10646
14
      "Defines number of antenna ports for this ULSCH allocation", HFILL }
10647
14
    },
10648
14
    { &hf_nfapi_size_of_cqi_csi_field,
10649
14
      { "Size of cqi csi field", "nfapi.size.of.cqi.csi.field",
10650
14
      FT_UINT8, BASE_DEC, VALS(size_of_cqi_csi_field_vals), 0x0,
10651
14
      "Indicates the size of the CQI/CSI request field", HFILL }
10652
14
    },
10653
14
    { &hf_nfapi_new_data_indication_two,
10654
14
      { "New data indication 2", "nfapi.new.data.indication.two",
10655
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10656
14
      "The new data indicator for the second transport block", HFILL }
10657
14
    },
10658
14
    { &hf_nfapi_resource_allocation_flag,
10659
14
      { "Resource allocation flag", "nfapi.resource.allocation.flag",
10660
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10661
14
      "Indicates if the Resource Allocation Type parameter is valid.", HFILL }
10662
14
    },
10663
14
    { &hf_nfapi_dl_node_sync_t1,
10664
14
      { "DL Node Sync t1", "nfapi.dl.node.sync.t1",
10665
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10666
14
      "Offset from VNF SFN/SF 0/0 time reference of the DL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
10667
14
    },
10668
14
    { &hf_nfapi_dl_node_sync_delta_sfn_sf,
10669
14
      { "DL Node Sync Delta SFN SF", "nfapi.dl.node.sync.delta_sfn_sf",
10670
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10671
14
      "The delta shift in subframes that the PNF PHY instance must update to on the next subframe boundary", HFILL }
10672
14
    },
10673
14
    { &hf_nfapi_dl_cyclic_prefix_type,
10674
14
      { "DL Cyclic Prefix type", "nfapi.dl.cyclic.prefix.type",
10675
14
      FT_BOOLEAN, BASE_NONE, TFS(&cyclic_prefix_type_strname), 0x0,
10676
14
      "Cyclic prefix type, used for DL", HFILL }
10677
14
    },
10678
14
    { &hf_nfapi_ul_cyclic_prefix_type,
10679
14
      { "UL Cyclic Prefix type", "nfapi.ul.cyclic.prefix.type",
10680
14
      FT_BOOLEAN, BASE_NONE, TFS(&cyclic_prefix_type_strname), 0x0,
10681
14
      "Cyclic prefix type, used for UL", HFILL }
10682
14
    },
10683
14
    { &hf_nfapi_downlink_channel_bandwidth,
10684
14
      { "Downlink Channel Bandwidth", "nfapi.dl.channel.bandwidth",
10685
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10686
14
      "Downlink channel bandwidth in resource blocks.", HFILL }
10687
14
    },
10688
14
    { &hf_nfapi_uplink_channel_bandwidth,
10689
14
      { "Uplink Channel Bandwidth", "nfapi.ul.channel_bandwidth",
10690
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10691
14
      "Uplink channel bandwidth in resource blocks.", HFILL }
10692
14
    },
10693
14
    { &hf_nfapi_tx_antenna_ports,
10694
14
      { "Tx Antenna Ports", "nfapi.tx.antenna.ports",
10695
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10696
14
      "The number of cell specific or NB transmit antenna ports.", HFILL }
10697
14
    },
10698
14
    { &hf_nfapi_rx_antenna_ports,
10699
14
      { "Tx Antenna Ports", "nfapi.rx.antenna.ports",
10700
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10701
14
      "The number of cell specific or NB receive antenna ports.", HFILL }
10702
14
    },
10703
14
    { &hf_nfapi_ul_node_sync_t1,
10704
14
      { "UL Node Sync t1", "nfapi.ul.node.sync.t1",
10705
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10706
14
      "The supplied t1 field in the DL Node Sync", HFILL }
10707
14
    },
10708
14
    { &hf_nfapi_ul_node_sync_t2,
10709
14
      { "UL Node Sync t2", "nfapi.ul.node.sync.t2",
10710
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10711
14
      "Offset from PNF SFN/SF 0/0 time reference of the DL Node Sync message reception at the transport layer, in microseconds.", HFILL }
10712
14
    },
10713
14
    { &hf_nfapi_ul_node_sync_t3,
10714
14
      { "UL Node Sync t3", "nfapi.ul.node.sync.t3",
10715
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10716
14
      "Offset from PNF SFN/SF 0/0 time reference of the UL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
10717
14
    },
10718
14
    { &hf_nfapi_pb,
10719
14
      { "P-B", "nfapi.pb.allocation",
10720
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10721
14
      "Refers to downlink power allocation. Value is an Index into the referenced table.", HFILL }
10722
14
    },
10723
14
    { &hf_nfapi_timing_info_last_sfn_sf,
10724
14
      { "Last SFN/SF", "nfapi.timing.info.last.sfn.sf",
10725
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10726
14
      "The completed SFN/SF at the PNF PHY instance that triggered the Timing Info message", HFILL }
10727
14
    },
10728
14
    { &hf_nfapi_timing_info_time_since_last_timing_info,
10729
14
      { "Time since last Timing Info", "nfapi.timing.info.time.since.last.timing.info",
10730
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10731
14
      "The number of ms since the last Timing Info was sent from this PNF PHY instance.", HFILL }
10732
14
    },
10733
14
    { &hf_nfapi_timing_info_dl_config_jitter,
10734
14
      { "DL Config Jitter", "nfapi.timing.info.dl.config.jitter",
10735
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10736
14
      "The inter message jitter of the DL Config message reception in microseconds", HFILL }
10737
14
    },
10738
14
    { &hf_nfapi_timing_info_tx_request_jitter,
10739
14
      { "Tx Request Jitter", "nfapi.timing.info.tx.req.jitter",
10740
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10741
14
      "The inter message jitter of the Tx Request message reception in microseconds", HFILL }
10742
14
    },
10743
14
    { &hf_nfapi_timing_info_ul_config_jitter,
10744
14
      { "UL Config Jitter", "nfapi.timing.info.ul.config.jitter",
10745
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10746
14
      "The inter message jitter of the UL Config message reception in microseconds", HFILL }
10747
14
    },
10748
14
    { &hf_nfapi_timing_info_hi_dci0_jitter,
10749
14
      { "HI_DCI0 Jitter", "nfapi.timing.info.hi.dci0.jitter",
10750
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
10751
14
      "The inter message jitter of the HI_DCI0 message reception in microseconds", HFILL }
10752
14
    },
10753
14
    { &hf_nfapi_timing_info_dl_config_latest_delay,
10754
14
      { "DL Config Latest Delay", "nfapi.timing.info.dl.config.latest.delay",
10755
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10756
14
      "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 }
10757
14
    },
10758
14
    { &hf_nfapi_timing_info_tx_request_latest_delay,
10759
14
      { "Tx Request Latest Delay", "nfapi.timing.info.tx.request.latest.delay",
10760
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10761
14
      "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 }
10762
14
    },
10763
14
    { &hf_nfapi_timing_info_ul_config_latest_delay,
10764
14
      { "UL Config Latest Delay", "nfapi.timing.info.ul.config.latest.delay",
10765
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10766
14
      "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 }
10767
14
    },
10768
14
    { &hf_nfapi_timing_info_hi_dci0_latest_delay,
10769
14
      { "HI_DCI0 Latest Delay", "nfapi.timing.info.hi.dci0.latest.delay",
10770
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10771
14
      "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 }
10772
14
    },
10773
14
    { &hf_nfapi_timing_info_dl_config_earliest_arrival,
10774
14
      { "DL Config Earliest Arrival", "nfapi.timing.info.dl.config.earliest.arrival",
10775
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10776
14
      "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 }
10777
14
    },
10778
14
    { &hf_nfapi_timing_info_tx_request_earliest_arrival,
10779
14
      { "Tx Request Earliest Arrival", "nfapi.timing.info.tx.request.earliest.arrival",
10780
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10781
14
      "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 }
10782
14
    },
10783
14
    { &hf_nfapi_timing_info_ul_config_earliest_arrival,
10784
14
      { "UL Config Earliest Arrival", "nfapi.timing.info.ul.config.earliest.arrival",
10785
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10786
14
      "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 }
10787
14
    },
10788
14
    { &hf_nfapi_timing_info_hi_dci0_earliest_arrival,
10789
14
      { "HI_DCI0 Earliest Arrival", "nfapi.timing.info.hi.dci0.earliest.arrival",
10790
14
      FT_INT32, BASE_DEC, NULL, 0x0,
10791
14
      "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 }
10792
14
    },
10793
14
    { &hf_nfapi_pcfich_power_offset,
10794
14
      { "PCFICH Power Offset", "nfapi.pcfich.power.offset",
10795
14
      FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
10796
14
      "The power per antenna of the PCFICH with respect to the reference signal.", HFILL }
10797
14
    },
10798
14
    { &hf_nfapi_timing_window,
10799
14
      { "NFAPI Timing window", "nfapi.timing.window",
10800
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10801
14
      "The window in milliseconds that the PHY must receive and queue the P7 messages.", HFILL }
10802
14
    },
10803
14
    { &hf_nfapi_timing_info_mode,
10804
14
      { "Timing Info mode", "nfapi.timing.info.mode",
10805
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10806
14
      "The configured mode of operation for the timing info message to be sent to the VNF from the PHY", HFILL }
10807
14
    },
10808
14
    { &hf_nfapi_timing_info_period,
10809
14
      { "Timing info period", "nfapi.timing.info.period",
10810
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10811
14
      "If Periodic timing mode is enabled, this defines the periodicity in subframes. This field is ignored if periodic timing mode is disabled.", HFILL }
10812
14
    },
10813
14
    { &hf_nfapi_tdd_harq_mode,
10814
14
      { "Mode", "nfapi.tdd.harq.mode",
10815
14
      FT_UINT8, BASE_DEC, VALS(tdd_harq_mode_vals), 0x0,
10816
14
      "The format of the ACK/NACK response expected", HFILL }
10817
14
    },
10818
14
    { &hf_nfapi_fdd_harq_mode,
10819
14
      { "Mode", "nfapi.fdd.harq.mode",
10820
14
      FT_UINT8, BASE_DEC, VALS(fdd_harq_mode_vals), 0x0,
10821
14
      "The format of the ACK/NACK response expected", HFILL }
10822
14
    },
10823
14
    { &hf_nfapi_number_of_ack_nack,
10824
14
      { "Number of ACK/NACK", "nfapi.num-ack-nack",
10825
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10826
14
      "The number of ACK/NACK results reported for this UE", HFILL }
10827
14
    },
10828
14
    { &hf_nfapi_harq_data_value_0,
10829
14
      { "Value 0", "nfapi.harq.value.0",
10830
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10831
14
      "Indicates HARQ results", HFILL }
10832
14
    },
10833
14
    { &hf_nfapi_harq_data_value_0_special,
10834
14
      { "Value 0", "nfapi.harq.value.0.special",
10835
14
      FT_UINT8, BASE_DEC, VALS(harq_special_value_vals), 0x0,
10836
14
      "Indicates HARQ results", HFILL }
10837
14
    },
10838
14
    { &hf_nfapi_harq_data_value_1,
10839
14
      { "Value 1", "nfapi.harq.value.1",
10840
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10841
14
      "Indicates HARQ results", HFILL }
10842
14
    },
10843
14
    { &hf_nfapi_harq_data_value_2,
10844
14
      { "Value 2", "nfapi.harq.value.2",
10845
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10846
14
      "Indicates HARQ results", HFILL }
10847
14
    },
10848
14
    { &hf_nfapi_harq_data_value_3,
10849
14
      { "Value 3", "nfapi.harq.value.3",
10850
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10851
14
      "Indicates HARQ results", HFILL }
10852
14
    },
10853
14
    { &hf_nfapi_harq_tb_1,
10854
14
      { "HARQ TB1", "nfapi.harq.tb.1",
10855
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10856
14
      "HARQ feedback of 1st TB.", HFILL }
10857
14
    },
10858
14
    { &hf_nfapi_harq_tb_2,
10859
14
      { "HARQ TB2", "nfapi.harq.tb.2",
10860
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10861
14
      "HARQ feedback of 2nd TB.", HFILL }
10862
14
    },
10863
14
    { &hf_nfapi_harq_tb_n,
10864
14
      { "HARQ TB_N", "nfapi.harq.tb.n",
10865
14
      FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
10866
14
      "HARQ feedback of Nth TB.", HFILL }
10867
14
    },
10868
14
    { &hf_nfapi_ul_cqi,
10869
14
      { "UL_CQI", "nfapi.ul.cqi",
10870
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
10871
14
      "SNR", HFILL }
10872
14
    },
10873
14
    { &hf_nfapi_channel,
10874
14
      { "Channel", "nfapi.channel",
10875
14
      FT_UINT8, BASE_DEC, VALS(channel_vals), 0x0,
10876
14
      "The channel to which this measurement refers", HFILL }
10877
14
    },
10878
14
    { &hf_nfapi_data_offset,
10879
14
      { "Data Offset", "nfapi.data.offset",
10880
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10881
14
      "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 }
10882
14
    },
10883
14
    { &hf_nfapi_ri,
10884
14
      { "RI", "nfapi.ri",
10885
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10886
14
      "The rank indication reported by the UE on PUSCH for aperiodic CSI.", HFILL }
10887
14
    },
10888
14
    { &hf_nfapi_timing_advance,
10889
14
      { "Timing Advance", "nfapi.timing.advance",
10890
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10891
14
      "The timing advance measured for this PDU and UE.", HFILL }
10892
14
    },
10893
14
    { &hf_nfapi_timing_advance_r9,
10894
14
      { "Timing Advance R9", "nfapi.timing.advance.r9",
10895
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10896
14
      "Timing advance used for positioning", HFILL }
10897
14
    },
10898
14
    { &hf_nfapi_number_of_cc_reported,
10899
14
      { "Number of CC reported", "nfapi.number.of.cc.reported",
10900
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10901
14
      NULL, HFILL }
10902
14
    },
10903
14
    { &hf_nfapi_preamble,
10904
14
      { "Preamble", "nfapi.preamble",
10905
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10906
14
      "The detected preamble", HFILL }
10907
14
    },
10908
14
    { &hf_nfapi_rach_resource_type,
10909
14
      { "RACH resource type", "nfapi.rach.resource.type",
10910
14
      FT_UINT8, BASE_DEC, VALS(rach_resource_type_vals), 0x0,
10911
14
      "Indicates if this indication is related to Cat-M UE and in which CE level", HFILL }
10912
14
    },
10913
14
    { &hf_nfapi_doppler_estimation,
10914
14
      { "Doppler estimation", "nfapi.doppler.estimation",
10915
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10916
14
      "FFS", HFILL }
10917
14
    },
10918
14
    { &hf_nfapi_rb_start,
10919
14
      { "RB Start", "nfapi.rb.start",
10920
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10921
14
      "The starting point of the RBs to be reported", HFILL }
10922
14
    },
10923
14
    { &hf_nfapi_snr,
10924
14
      { "SNR", "nfapi.snr",
10925
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
10926
14
      "Field size dependent on configured bandwidth SNR for RBs, each RBs report one SNR.", HFILL }
10927
14
    },
10928
14
    { &hf_nfapi_up_pts_symbol,
10929
14
      { "UpPTS Symbol", "nfapi.uppts.symbol",
10930
14
      FT_UINT8, BASE_DEC, VALS(up_pts_symbol_vals), 0x0,
10931
14
      "Indicates symbol where SRS was received. Only valid if the SRS was received in subframe 1 or 6.", HFILL }
10932
14
    },
10933
14
    { &hf_nfapi_number_prb_per_subband,
10934
14
      { "numPRBperSubband", "nfapi.num.prb.per.subband",
10935
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10936
14
      "Number of PRBs that are treated as one subband", HFILL }
10937
14
    },
10938
14
    { &hf_nfapi_number_antennas,
10939
14
      { "numAntennas", "nfapi.num.antennas",
10940
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10941
14
      "Number of physical antennas", HFILL }
10942
14
    },
10943
14
    { &hf_nfapi_subband_index,
10944
14
      { "subbandIndex", "nfapi.subband.index",
10945
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10946
14
      "Index of subband for which the following channel coefficient is applied", HFILL }
10947
14
    },
10948
14
    { &hf_nfapi_channel_coefficient,
10949
14
      { "Channel", "nfapi.channel.coefficient",
10950
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10951
14
      "Averaged channel coefficient in a subband for physical antenna #i, real 8 bits followed by imaginary 8 bits", HFILL }
10952
14
    },
10953
14
    { &hf_nfapi_ul_rtoa,
10954
14
      { "UL_RTOA", "nfapi.ul.rtoa",
10955
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10956
14
      "UL relative time of arrival used for network based positioning", HFILL }
10957
14
    },
10958
14
    { &hf_nfapi_frequency_band_indicator,
10959
14
      { "Frequency Band Indicator", "nfapi.frequency.band.indicator",
10960
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10961
14
      "The E-UTRA band for which the carrierList applies.", HFILL }
10962
14
    },
10963
14
    { &hf_nfapi_measurement_period,
10964
14
      { "Measurement Period", "nfapi.measurement.period",
10965
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10966
14
      "The length of time to measure RSSI over, in units of 1ms.", HFILL }
10967
14
    },
10968
14
    { &hf_nfapi_bandwidth,
10969
14
      { "Bandwidth", "nfapi.bandwidth",
10970
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10971
14
      "The bandwidth (in resource blocks) over which the RSSI is measured.", HFILL }
10972
14
    },
10973
14
    { &hf_nfapi_timeout,
10974
14
      { "Timeout", "nfapi.timeout",
10975
14
      FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
10976
14
      "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 }
10977
14
    },
10978
14
    { &hf_nfapi_number_of_earfcns,
10979
14
      { "Number of EARFCNs", "nfapi.number.of.earfcns",
10980
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10981
14
      "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 }
10982
14
    },
10983
14
    { &hf_nfapi_uarfcn,
10984
14
      { "UARFCN", "nfapi.uarfcn",
10985
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10986
14
      "UARFCN to be measured.", HFILL }
10987
14
    },
10988
14
    { &hf_nfapi_number_of_uarfcns,
10989
14
      { "Number of UARFCNs", "nfapi.number.of.uarfcn",
10990
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
10991
14
      "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 }
10992
14
    },
10993
14
    { &hf_nfapi_arfcn,
10994
14
      { "ARFCN", "nfapi.arfcn",
10995
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
10996
14
      "The ARFCN to be measured", HFILL }
10997
14
    },
10998
14
    { &hf_nfapi_arfcn_direction,
10999
14
      { "Direction", "nfapi.arfcn.direction",
11000
14
      FT_UINT8, BASE_DEC, VALS(arfcn_direction_vals), 0x0,
11001
14
      "The link direction to be measured", HFILL }
11002
14
    },
11003
14
    { &hf_nfapi_number_of_arfcns,
11004
14
      { "Number of ARFCNs", "nfapi.number.of.arfcn",
11005
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11006
14
      "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 }
11007
14
    },
11008
14
    { &hf_nfapi_rssi,
11009
14
      { "RSSI", "nfapi.rssi",
11010
14
      FT_INT16, BASE_CUSTOM, CF_FUNC(rssi_conversion_fn), 0x0,
11011
14
      "The list of RSSI values of the carriers measured, in the order of the list of the original request.", HFILL }
11012
14
    },
11013
14
    { &hf_nfapi_number_of_rssi,
11014
14
      { "Number of RSSI", "nfapi.number.of.rssi",
11015
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11016
14
      "The number of RSSI results returned in the following array.", HFILL }
11017
14
    },
11018
14
    { &hf_nfapi_pci,
11019
14
      { "PCI", "nfapi.pci",
11020
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11021
14
      "The PCI for cell which should be searched", HFILL }
11022
14
    },
11023
14
    { &hf_nfapi_measurement_bandwidth,
11024
14
      { "Measurement Bandwidth", "nfapi.measurement.bandwidth",
11025
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11026
14
      "The number of resource blocks which should be used for measuring RSRP", HFILL }
11027
14
    },
11028
14
    { &hf_nfapi_exhaustive_search,
11029
14
      { "Exhaustive Search", "nfapi.exhaustive.search",
11030
14
      FT_UINT8, BASE_DEC, VALS(exhustive_search_vals), 0x0,
11031
14
      "NMM should try to find all cells on the carrier", HFILL }
11032
14
    },
11033
14
    { &hf_nfapi_number_of_pci,
11034
14
      { "Number of PCI", "nfapi.number.of.pci",
11035
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11036
14
      "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 }
11037
14
    },
11038
14
    { &hf_nfapi_psc,
11039
14
      { "PSC", "nfapi.psc",
11040
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11041
14
      "The PSC for cells which should be searched.", HFILL }
11042
14
    },
11043
14
    { &hf_nfapi_number_of_psc,
11044
14
      { "Number of PSC", "nfapi.number.of.psc",
11045
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11046
14
      "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 }
11047
14
    },
11048
14
    { &hf_nfapi_rsrp,
11049
14
      { "RSRP", "nfapi.rsrp",
11050
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11051
14
      "The measured RSRP value in units of -1dB", HFILL }
11052
14
    },
11053
14
    { &hf_nfapi_rsrq,
11054
14
      { "RSRQ", "nfapi.rsrq",
11055
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11056
14
      "The measured RSRQ value in units of -1dB", HFILL }
11057
14
    },
11058
14
    { &hf_nfapi_number_of_lte_cells_found,
11059
14
      { "Number of LTE Cells Found", "nfapi.number.of.lte.cells.found",
11060
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11061
14
      "The number of LTE cells indicated in this message.", HFILL }
11062
14
    },
11063
14
    { &hf_nfapi_rscp,
11064
14
      { "RSCP", "nfapi.rscp",
11065
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11066
14
      "The measured RSCP value in units of -1dB", HFILL }
11067
14
    },
11068
14
    { &hf_nfapi_enco,
11069
14
      { "EcNo", "nfapi.ecno",
11070
14
      FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
11071
14
      "The measured RSCP value in units of -1dB", HFILL }
11072
14
    },
11073
14
    { &hf_nfapi_number_of_utran_cells_found,
11074
14
      { "Number of UTRAN Cells Found", "nfapi.number.of.utran.cells.found",
11075
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11076
14
      "The number of LTE cells indicated in this message", HFILL }
11077
14
    },
11078
14
    { &hf_nfapi_bsic,
11079
14
      { "BSIC", "nfapi.bsic",
11080
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11081
14
      "The BSIC of the cell which the NMM synchronized to", HFILL }
11082
14
    },
11083
14
    { &hf_nfapi_rxlev,
11084
14
      { "RxLev", "nfapi.rxlev",
11085
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11086
14
      "The measured RxLev value", HFILL }
11087
14
    },
11088
14
    { &hf_nfapi_rxqual,
11089
14
      { "RxQual", "nfapi.rxqual",
11090
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11091
14
      "The measured RxQual value", HFILL }
11092
14
    },
11093
14
    { &hf_nfapi_sfn_offset,
11094
14
      { "SFN Offset", "nfapi.sfn.offset",
11095
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11096
14
      "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 }
11097
14
    },
11098
14
    { &hf_nfapi_number_of_geran_cells_found,
11099
14
      { "Number of GSM Cells Found", "nfapi.number.of.geran.cells.found",
11100
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11101
14
      "The number of GSM cells indicated in this message", HFILL }
11102
14
    },
11103
14
    { &hf_nfapi_number_of_tx_antenna,
11104
14
      { "Number of Tx Antenna", "nfapi.number.of.tx.antenna",
11105
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11106
14
      "The number of Tx Antenna detected for the cell", HFILL }
11107
14
    },
11108
14
    { &hf_nfapi_mib,
11109
14
      { "MIB", "nfapi.mib",
11110
14
      FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11111
14
      "The MIB read from the specified cell.", HFILL }
11112
14
    },
11113
14
    { &hf_nfapi_phich_configuration,
11114
14
      { "PHICH Configuration", "nfapi.phich.configuration",
11115
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11116
14
      "The PHICH-Config of the cell", HFILL }
11117
14
    },
11118
14
    { &hf_nfapi_retry_count,
11119
14
      { "retryCount", "nfapi.retry.count",
11120
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11121
14
      "The number of SIB1 repetition periods for which decoding of SIB1 should be retried.", HFILL }
11122
14
    },
11123
14
    { &hf_nfapi_sib1,
11124
14
      { "SIB1", "nfapi.sib1",
11125
14
      FT_BYTES, BASE_NONE, NULL, 0x0,
11126
14
      NULL, HFILL }
11127
14
    },
11128
14
    { &hf_nfapi_si_periodicity,
11129
14
      { "SI Periodicity", "nfapi.si.periodicity",
11130
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11131
14
      "The SI Periodicity of the requested SIBs, with the first element being for SIB2, the next for SIB3, etc, encoded as follows", HFILL }
11132
14
    },
11133
14
    { &hf_nfapi_si_index,
11134
14
      { "SI Index", "nfapi.si.index",
11135
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11136
14
      "The Index of this SIB in the SIB1 SchedulingInfoList", HFILL }
11137
14
    },
11138
14
    { &hf_nfapi_number_of_si_periodicity,
11139
14
      { "Number of SI Periodicity", "nfapi.number.of.si.periodicity",
11140
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11141
14
      "The number of System Information periodicity values in the following array", HFILL }
11142
14
    },
11143
14
    { &hf_nfapi_si_window_length,
11144
14
      { "SI Window Length", "nfapi.si.window.length",
11145
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11146
14
      "The SI window in units of 1ms", HFILL }
11147
14
    },
11148
14
    { &hf_nfapi_sib_type,
11149
14
      { "SIB Type", "nfapi.sib.type",
11150
14
      FT_UINT8, BASE_DEC, NULL, 0x0,
11151
14
      "The SIB type", HFILL }
11152
14
    },
11153
14
    { &hf_nfapi_sib,
11154
14
      { "SIB", "nfapi.sib",
11155
14
      FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11156
14
      "The SIB element read from the specified cell.", HFILL }
11157
14
    },
11158
14
    { &hf_nfapi_si,
11159
14
      { "SI", "nfapi.si",
11160
14
      FT_UINT_BYTES, BASE_NONE, NULL, 0x0,
11161
14
      "The SI element read from the specified cell.", HFILL }
11162
14
    },
11163
14
    { &hf_nfapi_pnf_search_state,
11164
14
      { "State", "nfapi.state",
11165
14
      FT_BYTES, BASE_NONE, NULL, 0x0,
11166
14
      "A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
11167
14
    },
11168
14
    { &hf_nfapi_pnf_broadcast_state,
11169
14
      { "State", "nfapi.state",
11170
14
      FT_BYTES, BASE_NONE, NULL, 0x0,
11171
14
      "A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
11172
14
    },
11173
14
    { &hf_nfapi_dl_rs_tx_power,
11174
14
      { "DL RS Tx power", "nfapi.dl.rs.tx.power",
11175
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11176
14
      "The DL RS Tx power measurement", HFILL }
11177
14
    },
11178
14
    { &hf_nfapi_received_interference_power,
11179
14
      { "Received interference power", "nfapi.received.interference.power",
11180
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
11181
14
      "The Received interference power measurement", HFILL }
11182
14
    },
11183
14
    { &hf_nfapi_thermal_noise_power,
11184
14
      { "Thermal noise power", "nfapi.thermal.noise.power",
11185
14
      FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
11186
14
      "The Thermal noise power measurement", HFILL }
11187
14
    },
11188
14
    { &hf_nfapi_dl_rs_tx_power_measurement,
11189
14
      { "DL RS TX Power measurement", "nfapi.dl.rs.tx.power.measurement",
11190
14
      FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11191
14
      "The DL RS Tx power measurement defined", HFILL }
11192
14
    },
11193
14
    { &hf_nfapi_received_interference_power_measurement,
11194
14
      { "Received interference power measurement", "nfapi.received.interference.power.measurement",
11195
14
      FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11196
14
      NULL, HFILL }
11197
14
    },
11198
14
    { &hf_nfapi_thermal_noise_power_measurement,
11199
14
      { "Thermal noise power measurement", "nfapi.thermal.noise.power.measurement",
11200
14
      FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
11201
14
      "The Thermal noise power measurement", HFILL }
11202
14
    },
11203
14
    { &hf_nfapi_initial_partial_sf,
11204
14
      { "Initial Partial SF", "nfapi.initial.partial.sf",
11205
14
      FT_BOOLEAN, BASE_NONE, TFS(&initial_partial_sf_strname), 0x0,
11206
14
      "Indicates whether the initial SF in the LBT process is full or partial", HFILL }
11207
14
    },
11208
14
    { &hf_nfapi_lbt_mode,
11209
14
      { "LBT Mode", "nfapi.lbt.mode",
11210
14
      FT_BOOLEAN, BASE_NONE, TFS(&lbt_mode_strname), 0x0,
11211
14
      "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 }
11212
14
    },
11213
14
    { &hf_nfapi_lte_txop_sf,
11214
14
      { "LTE TXOP SF", "nfapi.txop.sf",
11215
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11216
14
      "Indicates the LTE TXOP (TMCOT,P in [9] section 15.1.1) duration in subframes.", HFILL }
11217
14
    },
11218
14
    { &hf_nfapi_mp_cca,
11219
14
      { "mp cca", "nfapi.mp.cca",
11220
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11221
14
      "Indicates the value of the defer factor", HFILL }
11222
14
    },
11223
14
    { &hf_nfapi_n_cca,
11224
14
      { "n cca", "nfapi.n.cca",
11225
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11226
14
      "Indicates the value of LBT backoff counter", HFILL }
11227
14
    },
11228
14
    { &hf_nfapi_offset,
11229
14
      { "offset", "nfapi.offset",
11230
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11231
14
      "Indicates the LBT start time in microseconds from the beginning of the subframe scheduled by this message.", HFILL }
11232
14
    },
11233
14
    { &hf_nfapi_result,
11234
14
      { "result", "nfapi.result",
11235
14
      FT_BOOLEAN, BASE_NONE, TFS(&tfs_fail_success), 0x0,
11236
14
      "Indicates the LBT procedure result of SFN/SF:", HFILL }
11237
14
    },
11238
14
    { &hf_nfapi_sfn_sf_end,
11239
14
      { "SFN/SF End", "nfapi.sfn.sf.end",
11240
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11241
14
      "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 }
11242
14
    },
11243
14
    { &hf_nfapi_txop_sfn_sf_end,
11244
14
      { "TXOP SFN/SF End", "nfapi.txop.sfn.sf.end",
11245
14
      FT_UINT16, BASE_DEC, NULL, 0x0,
11246
14
      "Indicates the SFN/SF by which the TXOP must end. In worst case, this would be the last TXOP subframe.", HFILL }
11247
14
    },
11248
14
    { &hf_nfapi_txop_symbols,
11249
14
      { "LTE TXOP symbols", "nfapi.lte.txop.symbols",
11250
14
      FT_UINT32, BASE_DEC, NULL, 0x0,
11251
14
      "Actual LTE TXOP in symbols", HFILL }
11252
14
    },
11253
14
  };
11254
11255
  /* Setup protocol subtree array */
11256
14
  static int *ett[] =
11257
14
  {
11258
14
    &ett_nfapi,
11259
14
    &ett_nfapi_p4_p5_message_header,
11260
14
    &ett_nfapi_p7_message_header,
11261
14
    &ett_nfapi_tlv_tree,
11262
14
    &ett_nfapi_tl,
11263
14
    &ett_nfapi_pnf_phy_rf_config,
11264
14
    &ett_nfapi_pnf_phy,
11265
14
    &ett_nfapi_pnf_phy_rel10,
11266
14
    &ett_nfapi_pnf_phy_rel11,
11267
14
    &ett_nfapi_pnf_phy_rel12,
11268
14
    &ett_nfapi_pnf_phy_rel13,
11269
14
    &ett_nfapi_rf_bands,
11270
14
    &ett_nfapi_bf_vectors,
11271
14
    &ett_nfapi_csi_rs_bf_vector,
11272
14
    &ett_nfapi_csi_rs_resource_configs,
11273
14
    &ett_nfapi_tx_antenna_ports,
11274
14
    &ett_nfapi_harq_ack_nack_data,
11275
14
    &ett_nfapi_harq_data,
11276
14
    &ett_nfapi_cc,
11277
14
    &ett_nfapi_rbs,
11278
14
    &ett_nfapi_antennas,
11279
14
    &ett_nfapi_epdcch_prbs,
11280
14
    &ett_nfapi_dl_config_request_pdu_list,
11281
14
    &ett_nfapi_ul_config_request_pdu_list,
11282
14
    &ett_nfapi_hi_dci0_request_pdu_list,
11283
14
    &ett_nfapi_tx_request_pdu_list,
11284
14
    &ett_nfapi_rx_indication_pdu_list,
11285
14
    &ett_nfapi_harq_indication_pdu_list,
11286
14
    &ett_nfapi_crc_indication_pdu_list,
11287
14
    &ett_nfapi_sr_indication_pdu_list,
11288
14
    &ett_nfapi_cqi_indication_pdu_list,
11289
14
    &ett_nfapi_preamble_indication_pdu_list,
11290
14
    &ett_nfapi_srs_indication_pdu_list,
11291
14
    &ett_nfapi_lbt_dl_config_pdu_list,
11292
14
    &ett_nfapi_lbt_dl_indication_pdu_list,
11293
14
    &ett_nfapi_subbands,
11294
14
    &ett_nfapi_precoding,
11295
14
    &ett_nfapi_bf_vector_antennas,
11296
14
    &ett_nfapi_received_interference_power_mesurement_results,
11297
14
    &ett_nfapi_downlink_bandwidth_support,
11298
14
    &ett_nfapi_uplink_bandwidth_support,
11299
14
    &ett_nfapi_release_support,
11300
14
    &ett_nfapi_downlink_modulation_support,
11301
14
    &ett_nfapi_uplink_modulation_support,
11302
11303
14
    &ett_nfapi_earfcn_list,
11304
14
    &ett_nfapi_uarfcn_list,
11305
14
    &ett_nfapi_arfcn_list,
11306
14
    &ett_nfapi_rssi_list,
11307
14
    &ett_nfapi_pci_list,
11308
14
    &ett_nfapi_psc_list,
11309
14
    &ett_nfapi_lte_cells_found_list,
11310
14
    &ett_nfapi_utran_cells_found_list,
11311
14
    &ett_nfapi_geran_cells_found_list,
11312
14
    &ett_nfapi_si_periodicity_list,
11313
11314
    /* for fragmentation support*/
11315
14
    &ett_msg_fragment,
11316
14
    &ett_msg_fragments
11317
14
  };
11318
11319
14
  static ei_register_info ei[] =
11320
14
  {
11321
14
    { &ei_invalid_range, { "nfapi.invalid.range", PI_PROTOCOL, PI_WARN, "Invalid range", EXPFILL } },
11322
14
    { &ei_invalid_tlv_length, { "nfapi.invalid.tlv.length", PI_PROTOCOL, PI_ERROR, "Invalid TLV length", EXPFILL } },
11323
14
  };
11324
11325
14
  expert_module_t* expert_nfapi;
11326
  /* Register protocol */
11327
14
  proto_nfapi = proto_register_protocol("Nfapi", "NFAPI", "nfapi");
11328
11329
14
  expert_nfapi = expert_register_protocol(proto_nfapi);
11330
14
  expert_register_field_array(expert_nfapi, ei, array_length(ei));
11331
11332
11333
14
  proto_register_field_array(proto_nfapi, hf, array_length(hf));
11334
14
  proto_register_subtree_array(ett, array_length(ett));
11335
11336
14
  message_table = register_dissector_table("nfapi.msg_id", "NFAPI Message ID", proto_nfapi, FT_UINT16, BASE_DEC);
11337
11338
14
  reassembly_table_register(&ul_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
11339
14
  reassembly_table_register(&dl_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
11340
11341
14
  nfapi_handle = register_dissector("nfapi", dissect_nfapi, proto_nfapi);
11342
11343
14
}
11344
11345
// ----------------------------------------------------------------------------|
11346
11347
void proto_reg_handoff_nfapi(void)
11348
14
{
11349
14
  dissector_handle_t handle;
11350
11351
14
  handle = create_dissector_handle( dissect_nfapi_ul_p7, proto_nfapi );
11352
14
  dissector_add_uint("nfapi.msg_id", NFAPI_HARQ_INDICATION_MSG_ID, handle);
11353
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CRC_INDICATION_MSG_ID, handle);
11354
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RX_ULSCH_INDICATION_MSG_ID, handle);
11355
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RACH_INDICATION_MSG_ID, handle);
11356
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SRS_INDICATION_MSG_ID, handle);
11357
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RX_SR_INDICATION_MSG_ID, handle);
11358
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RX_CQI_INDICATION_MSG_ID, handle);
11359
11360
14
  handle = create_dissector_handle( dissect_nfapi_dl_p7, proto_nfapi );
11361
14
  dissector_add_uint("nfapi.msg_id", NFAPI_DL_CONFIG_REQUEST_MSG_ID, handle);
11362
14
  dissector_add_uint("nfapi.msg_id", NFAPI_UL_CONFIG_REQUEST_MSG_ID, handle);
11363
14
  dissector_add_uint("nfapi.msg_id", NFAPI_HI_DCI0_REQUEST_MSG_ID, handle);
11364
14
  dissector_add_uint("nfapi.msg_id", NFAPI_TX_REQUEST_MSG_ID, handle);
11365
14
  dissector_add_uint("nfapi.msg_id", NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID, handle);
11366
14
  dissector_add_uint("nfapi.msg_id", NFAPI_LBT_DL_INDICATION_MSG_ID, handle);
11367
11368
14
  handle = create_dissector_handle( dissect_p45_header, proto_nfapi );
11369
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_START_REQUEST_MSG_ID, handle);
11370
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_STOP_REQUEST_MSG_ID, handle);
11371
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PARAM_REQUEST_MSG_ID, handle);
11372
14
  dissector_add_uint("nfapi.msg_id", NFAPI_START_REQUEST_MSG_ID, handle);
11373
14
  dissector_add_uint("nfapi.msg_id", NFAPI_STOP_REQUEST_MSG_ID, handle);
11374
14
  dissector_add_uint("nfapi.msg_id", NFAPI_NMM_STOP_REQUEST_MSG_ID, handle);
11375
11376
14
  handle = create_dissector_handle( dissect_p45_header_with_list, proto_nfapi );
11377
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_PARAM_REQUEST_MSG_ID, handle);
11378
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_CONFIG_REQUEST_MSG_ID, handle);
11379
14
  dissector_add_uint("nfapi.msg_id", NFAPI_MEASUREMENT_REQUEST_MSG_ID, handle);
11380
11381
14
  handle = create_dissector_handle( dissect_p45_header_with_error, proto_nfapi );
11382
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_CONFIG_RESPONSE_MSG_ID, handle);
11383
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_START_RESPONSE_MSG_ID, handle);
11384
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_STOP_RESPONSE_MSG_ID, handle);
11385
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CONFIG_RESPONSE_MSG_ID, handle);
11386
14
  dissector_add_uint("nfapi.msg_id", NFAPI_START_RESPONSE_MSG_ID, handle);
11387
14
  dissector_add_uint("nfapi.msg_id", NFAPI_STOP_RESPONSE_MSG_ID, handle);
11388
11389
14
  handle = create_dissector_handle( dissect_p45_header_with_p4_error, proto_nfapi );
11390
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_RESPONSE_MSG_ID, handle);
11391
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_RESPONSE_MSG_ID, handle);
11392
14
  dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID, handle);
11393
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID, handle);
11394
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID, handle);
11395
14
  dissector_add_uint("nfapi.msg_id", NFAPI_NMM_STOP_RESPONSE_MSG_ID, handle);
11396
11397
14
  handle = create_dissector_handle( dissect_p45_header_with_error_and_list, proto_nfapi );
11398
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PNF_PARAM_RESPONSE_MSG_ID, handle);
11399
14
  dissector_add_uint("nfapi.msg_id", NFAPI_MEASUREMENT_RESPONSE_MSG_ID, handle);
11400
11401
14
  handle = create_dissector_handle( dissect_p45_header_with_p4_error_and_list, proto_nfapi );
11402
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_INDICATION_MSG_ID, handle);
11403
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_INDICATION_MSG_ID, handle);
11404
14
  dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID, handle);
11405
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID, handle);
11406
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID, handle);
11407
11408
14
  handle = create_dissector_handle( dissect_p45_header_with_rat_type_list, proto_nfapi );
11409
14
  dissector_add_uint("nfapi.msg_id", NFAPI_RSSI_REQUEST_MSG_ID, handle);
11410
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CELL_SEARCH_REQUEST_MSG_ID, handle);
11411
14
  dissector_add_uint("nfapi.msg_id", NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID, handle);
11412
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID, handle);
11413
14
  dissector_add_uint("nfapi.msg_id", NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID, handle);
11414
11415
14
  dissector_add_uint("nfapi.msg_id", NFAPI_CONFIG_REQUEST_MSG_ID, create_dissector_handle( dissect_p45_config_request_msg_id, proto_nfapi ));
11416
14
  dissector_add_uint("nfapi.msg_id", NFAPI_PARAM_RESPONSE_MSG_ID, create_dissector_handle( dissect_p45_param_response_msg_id, proto_nfapi ));
11417
14
  dissector_add_uint("nfapi.msg_id", NFAPI_DL_NODE_SYNC_MSG_ID, create_dissector_handle( dissect_p7_dl_node_sync_msg_id, proto_nfapi ));
11418
14
  dissector_add_uint("nfapi.msg_id", NFAPI_UL_NODE_SYNC_MSG_ID, create_dissector_handle( dissect_p7_ul_node_sync_msg_id, proto_nfapi ));
11419
14
  dissector_add_uint("nfapi.msg_id", NFAPI_TIMING_INFO_MSG_ID, create_dissector_handle( dissect_p7_timing_info_msg_id, proto_nfapi ));
11420
11421
14
  dissector_add_for_decode_as("sctp.port", nfapi_handle);
11422
14
  dissector_add_for_decode_as("udp.port", nfapi_handle);
11423
14
}
11424
11425
11426
/*
11427
* Editor modelines  -  https://www.wireshark.org/tools/modelines.html
11428
*
11429
* Local variables:
11430
* c-basic-offset: 8
11431
* tab-width: 8
11432
* indent-tabs-mode: t
11433
* End:
11434
*
11435
* vi: set shiftwidth=8 tabstop=8 noexpandtab:
11436
* :indentSize=8:tabSize=8:noTabs=false:
11437
*/