blob: 89b531cf4380c75ac2dbbf70550b01855baf7688 [file] [log] [blame]
Andre Puschmann6e081aa2021-05-04 16:56:25 +02001/* OGT templated version of the lteenb configuration file for 4G and 5G NSA */
2
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +02003{
4
Pau Espin Pedrolc04528c2020-04-01 13:55:51 +02005%if enb.license_server_addr != '0.0.0.0':
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +02006 license_server: {
7 server_addr: "${enb.license_server_addr}",
8 name: "amarisoft",
9 },
Pau Espin Pedrolc04528c2020-04-01 13:55:51 +020010%endif
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020011
Pau Espin Pedrold45a29e2020-04-02 17:21:47 +020012% if enb.rf_dev_type == 'zmq':
13 /* Force sampling rate (if uncommented) */
14 sample_rate: ${enb.sample_rate},
15%endif
16
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020017 /* Log filter: syntax: layer.field=value[,...]
18
19 Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and
20 all. The 'all' layer is used to address all the layers at the
21 same time.
22
23 field values:
24
25 - 'level': the log level of each layer can be set to 'none',
26 'error', 'info' or 'debug'. Use 'debug' to log all the messages.
27
28 - 'max_size': set the maximum size of the hex dump. 0 means no
29 hex dump. -1 means no limit.
30 */
Andre Puschmann62e887d2020-06-16 14:42:28 +020031 log_options: "${enb.log_options}",
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020032 log_filename: "${enb.log_filename}",
33
Andre Puschmanndbe4bb32020-07-15 14:43:51 +020034% if enb.enable_pcap == 'true':
35 pcap: {filename:"${enb.pcap_filename}"},
36%endif
37
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020038 /* Enable remote API and Web interface */
39 com_addr: "${enb.addr}:9001",
40
41 /* RF driver configuration */
42 include "amarisoft_rf_driver.cfg",
43
Andre Puschmann955249d2020-07-01 15:44:09 +020044% if enb.enable_dl_awgn:
45 channel_dl: {
46 type: "awgn",
47 snr: ${enb.dl_awgn_snr}
48 },
49% endif
50
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020051 mme_list: [
52 {
Pau Espin Pedrol3b49d462020-06-11 13:15:53 +020053 s1ap_bind_addr: "${enb.addr}",
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020054 /* address of MME for S1AP connection. Must be modified if the MME
55 runs on a different host. */
56 mme_addr: "${enb.mme_addr}",
57 },
58 ],
59 /* GTP bind address (=address of the ethernet interface connected to
60 the MME). Must be modified if the MME runs on a different host. */
Andre Puschmann4b5a09a2020-04-14 22:24:00 +020061 gtp_addr: "${enb.gtp_bind_addr}",
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020062
63 /* high 20 bits of SIB1.cellIdentifier */
Pau Espin Pedrol491f77c2020-04-20 14:20:43 +020064 enb_id: ${enb.id},
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020065
Andre Puschmann6e081aa2021-05-04 16:56:25 +020066% if int(enb.num_nr_cells) > 0:
67 nr_support: true,
68% endif
69
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +020070 /* list of cells */
71 cell_list: [
Andre Puschmanna0e69aa2020-04-06 14:51:31 +020072
Pau Espin Pedrolf46ae222020-04-17 16:23:54 +020073%for cell in enb.cell_list:
Andre Puschmann6e081aa2021-05-04 16:56:25 +020074%if loop.index == 0:
Andre Puschmanna0e69aa2020-04-06 14:51:31 +020075 {
Pau Espin Pedrolf46ae222020-04-17 16:23:54 +020076 dl_earfcn: ${cell.dl_earfcn},
Andre Puschmann549826d2020-04-21 21:14:30 +020077 rf_port: ${cell.rf_port},
Pau Espin Pedrolf46ae222020-04-17 16:23:54 +020078 cell_id: ${cell.cell_id},
Pau Espin Pedrol154dc932020-04-20 17:02:08 +020079 n_id_cell: ${cell.pci},
Andre Puschmann0908ceb2020-09-23 17:03:21 +020080 tac: 0x0007,
Andre Puschmanna9bbbd62020-09-30 14:46:27 +020081 root_sequence_index: ${loop.index * 10 + 204}, /* PRACH root sequence index */
Andre Puschmanna0e69aa2020-04-06 14:51:31 +020082
Pau Espin Pedrol6c778742020-04-20 12:15:06 +020083 ncell_list: [
Pau Espin Pedrolef7256a2020-11-09 18:52:05 +010084%for ncell in cell.ncell_list:
85 { n_id_cell: ${ncell.pci}, dl_earfcn: ${ncell.dl_earfcn}, cell_id: ${ncell.cell_id}, tac: 7 },
Pau Espin Pedrol6c778742020-04-20 12:15:06 +020086%endfor
87 ],
88
Andre Puschmanna0e69aa2020-04-06 14:51:31 +020089 scell_list: [
Pau Espin Pedrolf46ae222020-04-17 16:23:54 +020090%for scell_id in cell.scell_list:
91 { cell_id: ${scell_id}, cross_carrier_scheduling: false, scheduling_cell_id: ${cell.cell_id}, ul_allowed: true},
92%endfor
Andre Puschmanna0e69aa2020-04-06 14:51:31 +020093 ],
Andre Puschmann6e081aa2021-05-04 16:56:25 +020094
95 nr_scell_list: [
96%for nr_scell_id in cell.nr_scell_list:
97 { cell_id: ${nr_scell_id} },
98%endfor
99 ],
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200100 },
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200101%endif
Pau Espin Pedrolf46ae222020-04-17 16:23:54 +0200102%endfor
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200103 ], /* cell_list */
104
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200105% if int(enb.num_nr_cells) > 0:
106
107 nr_cell_list: [
108
109%for nr_cell in enb.nr_cell_list:
110 %if loop.index == 0:
111 {
112 rf_port: ${nr_cell.rf_port},
113 cell_id: ${nr_cell.cell_id},
114 band: ${nr_cell.band},
115 dl_nr_arfcn: ${nr_cell.dl_nr_arfcn},
116 },
117 %endif
118%endfor
119
120 ], /* nr_cell_list */
121
122% endif
123
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200124 /* default cell parameters */
125 cell_default: {
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200126 /* Broadcasted PLMN identities */
127 plmn_list: [
Andre Puschmann5c4c0522020-07-09 15:55:04 +0200128 "${'{0:03}'.format(int(enb.mcc))}${'{0:02}'.format(int(enb.mnc))}",
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200129 ],
130
Andre Puschmannd0682ba2020-10-15 15:46:29 +0200131% if enb.get('duplex') == "tdd":
132 uldl_config: ${enb.tdd_uldl_config},
133 sp_config: ${enb.tdd_special_subframe_pattern},
134% endif
135
Andre Puschmannbf40f8c2020-04-14 14:04:32 +0200136% if int(enb.get('transmission_mode')) == 1:
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200137 n_antenna_dl: 1, /* number of DL antennas */
138 n_antenna_ul: 1, /* number of UL antennas */
Andre Puschmannbf40f8c2020-04-14 14:04:32 +0200139% else:
140 n_antenna_dl: 2, /* number of DL antennas */
141 n_antenna_ul: 2, /* number of UL antennas */
142% endif
143
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200144 n_rb_dl: ${enb.num_prb}, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
145 cyclic_prefix: "normal",
146
147 phich_duration: "normal",
148 phich_resource: "1", /* ratio of NG */
149
150 /* System Information Block type 1 */
151 sib1: "amarisoft_sib1.asn",
152
153 /* other SIBs, in same order as the scheduling list in SIB 1 */
154 sib_sched_list: [ "amarisoft_sib23.asn" ],
155
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200156% if int(enb.num_prb) == 6:
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200157 si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200158% else:
159 si_coderate: 0.20, /* maximum code rate for SI/RA/P-RNTI messages */
160% endif
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200161 si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
162 for SI/RA/P-RNTI */
163
164 n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */
165
166 /* PDSCH dedicated config (currently same for all UEs) */
167 pdsch_dedicated: {
168 p_a: 0,
169 },
170
171 /* If defined, force for number of CCEs for UE specific PDCCH to
172 2^pdcch_format. Otherwise it is computed from the reported
173 CQI. Range: 0 to 3. */
Andre Puschmann0694c302020-06-22 13:10:24 +0200174 //pdcch_format: 1,
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200175
176 /* if defined, force the PDSCH MCS for all UEs. Otherwise it is
177 computed from the reported CQI */
178 /* pdsch_mcs: 12, */
179
180 /* PUSCH dedicated config (currently same for all UEs) */
181 pusch_dedicated: {
182 beta_offset_ack_index: 9,
183 beta_offset_ri_index: 6,
184 beta_offset_cqi_index: 6,
185 },
186
187 /* MCS for Msg3 (=CCCH RRC Connection Request) */
188 pusch_msg3_mcs: 0,
189
190 /* this CQI value is assumed when none is received from the UE */
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200191% if int(enb.num_prb) == 6:
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200192 initial_cqi: 5,
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200193% else:
194 initial_cqi: 3,
195% endif
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200196
197 /* if defined, force the PUSCH MCS for all UEs. Otherwise it is
198 computed from the last received SRS/PUSCH. */
199 // pusch_mcs: 18,
200
201 transmission_mode: ${enb.transmission_mode},
202
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200203 dl_256qam: true,
204 ul_64qam: true,
205
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200206 /* Scheduling request period (ms). Must be >= 40 for HD-FDD */
207 sr_period: 20,
208
209 /* CQI report config */
Andre Puschmann0694c302020-06-22 13:10:24 +0200210 cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200211
212 /* RI reporting is done with a period of m_ri * cqi_period.
213 m_ri = 0 (default) disables RI reporting. */
Andre Puschmann487d1ef2020-05-28 15:22:18 +0200214 % if int(enb.get('transmission_mode')) > 1:
215 m_ri: 8,
216 % endif
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200217
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200218 pucch_dedicated: {
219 /* ack/nack feedback mode when carrier aggregation is
220 enabled. It can be "cs" (for at most two scells) or "pucch3"
221 (used in all cases if more than two cells). */
222 ack_nack_feedback_mode_ca: "cs",
223
224 /* TDD ack/nack feedback mode when a rel 10 UE is detected. It
225 can be "bundling", "multiplexing", "cs" or "pucch3". By
226 default is it the same as tdd_ack_nack_feedback_mode. */
Andre Puschmannd0682ba2020-10-15 15:46:29 +0200227% if enb.get('duplex') == "tdd":
228 tdd_ack_nack_feedback_mode: "bundling",
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200229 // tdd_ack_nack_feedback_mode_r10: "cs",
Andre Puschmannd0682ba2020-10-15 15:46:29 +0200230% endif
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200231
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200232 n1_pucch_sr_count: 11, /* increase if more UEs are needed */
233 cqi_pucch_n_rb: 1, /* increase if more UEs are needed */
234
Andre Puschmanna0e69aa2020-04-06 14:51:31 +0200235 /* number of PUCCH 1b CS resources. It determines
236 the maximum number of UEs that can be scheduled in one TTI
237 using carrier aggregation with PUCCH 1b CS ack/nack feedback. */
238 n1_pucch_an_cs_count: 1,
239
240 /* number of resource blocks for PUCCH 3. It determines
241 the maximum number of UEs that can be scheduled in one TTI
242 using carrier aggregation with PUCCH 3 ack/nack feedback. */
243 n3_pucch_an_n_rb: 0,
244 },
245
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200246 /* SRS dedicated config. All UEs share these
247 parameters. srs_config_index and freq_domain_position are
248 allocated for each UE) */
249 srs_dedicated: {
Andre Puschmann0694c302020-06-22 13:10:24 +0200250 srs_period: 160, /* period (ms). Must be >= 40 for HD-FDD */
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200251 srs_bandwidth: 1,
252 srs_hopping_bandwidth: 0,
253 },
254
255 /* MAC configuration (same for all UEs) */
256 mac_config: {
257 ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
258 dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
Andre Puschmann51fa9412020-09-29 23:10:53 +0200259 ul_max_consecutive_retx: 1000,
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200260 },
261
262 /* CPU load limitation */
263 pusch_max_its: 6, /* max number of turbo decoder iterations */
264
265 /* dynamic power control */
266 dpc: true,
267 dpc_pusch_snr_target: 15,
268 dpc_pucch_snr_target: 10,
269
270 /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */
Nils Fürstea8180152020-12-03 14:14:31 +0100271 cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200272 /* RRC integrity algorithm preference. EIA0 is always the last. */
Nils Fürstea8180152020-12-03 14:14:31 +0100273 integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200274
275 /* (in ms) send RRC connection release after this time of network
276 inactivity */
Andre Puschmann0cfc0842020-08-26 18:19:15 +0200277 inactivity_timer: ${enb.inactivity_timer},
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200278
279 /* SRB configuration */
280 srb_config: [
281 {
282 id: 1,
283 maxRetxThreshold: 32,
284 t_Reordering: 45,
285 t_PollRetransmit: 60,
286 },
287 {
288 id: 2 ,
289 maxRetxThreshold: 32,
290 t_Reordering: 45,
291 t_PollRetransmit: 60,
292 }
293 ],
294
295 /* DRB configuration */
296 drb_config: "amarisoft_drb.cfg",
Andre Puschmanna7f19832020-04-07 14:38:27 +0200297
298% if enb.enable_measurements:
299 /* measurement configuration */
300 meas_config_desc: {
301 a1_report_type: "${enb.a1_report_type}",
302 a1_${enb.a1_report_type}: ${enb.a1_report_value},
303 a1_hysteresis: ${enb.a1_hysteresis},
304 a1_time_to_trigger: ${enb.a1_time_to_trigger},
305 a2_report_type: "${enb.a2_report_type}",
306 a2_${enb.a2_report_type}: ${enb.a2_report_value},
307 a2_hysteresis: ${enb.a2_hysteresis},
308 a2_time_to_trigger: ${enb.a2_time_to_trigger},
309 a3_report_type: "${enb.a3_report_type}",
310 a3_offset: ${enb.a3_report_value},
311 a3_hysteresis: ${enb.a3_hysteresis},
312 a3_time_to_trigger: ${enb.a3_time_to_trigger},
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200313% if int(enb.num_nr_cells) > 0:
314 // NR events hard-coded
315 nr_b1_report_type: "rsrp",
316 nr_b1_rsrp: -100,
317 nr_b1_hysteresis: 0,
318 nr_b1_time_to_trigger: 100,
319 nr_rsrp_filter_coeff: 3
320% endif
Andre Puschmanna7f19832020-04-07 14:38:27 +0200321 },
322
323 /* measurement gap configuration */
324 meas_gap_config: "gp0",
325
326 /* if true, initiate a handover when a suitable measurement report
327 is received */
328 ho_from_meas: true,
329% endif
Pau Espin Pedrol786a6bc2020-03-30 13:51:21 +0200330 },
Andre Puschmann6e081aa2021-05-04 16:56:25 +0200331
332% if int(enb.num_nr_cells) > 0:
333 nr_cell_default: {
334 subcarrier_spacing: 15, /* kHz */
335 ssb_subcarrier_spacing: 30,
336 bandwidth: ${enb.nr_bandwidth}, /* MHz */
337 n_antenna_dl: 1,
338 n_antenna_ul: 1,
339
340 /* force the timing TA offset (optional) */
341 n_timing_advance_offset: 0,
342
343 tdd_ul_dl_config: {
344 pattern1: {
345 period: 10,
346 dl_slots: 6,
347 dl_symbols: 0,
348 ul_slots: 3,
349 ul_symbols: 0,
350 },
351 },
352 ssb_pos_bitmap: "10000000",
353 ssb_period: 20, /* in ms */
354 n_id_cell: 500,
355
356 root_sequence_index: 1, /* PRACH root sequence index */
357
358 /* Scheduling request period (slots). */
359 sr_period: 40,
360
361 dmrs_type_a_pos: 2,
362
363 /* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max;
364 allows to workaround issues with SM-G977N for example */
365 //pdsch_harq_ack_max: 2,
366
367 prach: {
368 prach_config_index: 0,
369 msg1_subcarrier_spacing: 15, /* kHz */
370 msg1_fdm: 1,
371% if int(enb.nr_bandwidth) == 10:
372 msg1_frequency_start: 1,
373% else:
374 msg1_frequency_start: 3,
375% endif
376 zero_correlation_zone_config: 0,
377 preamble_received_target_power: -110, /* in dBm */
378 preamble_trans_max: 7,
379 power_ramping_step: 4, /* in dB */
380 ra_response_window: 10, /* in slots */
381 restricted_set_config: "unrestricted_set",
382 ra_contention_resolution_timer: 64, /* in ms */
383 ssb_per_prach_occasion: 1,
384 cb_preambles_per_ssb: 8,
385 },
386
387 pdcch: {
388 common_coreset: {
389 rb_start: -1, /* -1 to have the maximum bandwidth */
390 l_crb: -1, /* -1 means all the bandwidth */
391 duration: 1,
392 precoder_granularity: "sameAsREG_bundle",
393 //dmrs_scid: 0,
394 },
395
396 dedicated_coreset: {
397 rb_start: -1, /* -1 to have the maximum bandwidth */
398 l_crb: -1, /* -1 means all the bandwidth */
399 duration: 1,
400 precoder_granularity: "sameAsREG_bundle",
401 //dmrs_scid: 0,
402 },
403
404 css: {
405 n_candidates: [ 1, 1, 1, 0, 0 ],
406 },
407 rar_al_index: 2,
408
409 uss: {
410 n_candidates: [ 0, 2, 1, 0, 0 ],
411 dci_0_1_and_1_1: false,
412 force_dci_0_0: true, // Forces DCI format 0_0 for Uplink
413 force_dci_1_0: true, // Forces DCI format 1_0 for Downlink
414 },
415 al_index: 1,
416 },
417
418 pdsch: {
419 mapping_type: "typeA",
420 start_symb: 1,
421 n_symb: 13,
422 dmrs_add_pos: 1,
423 dmrs_type: 1,
424 dmrs_max_len: 1,
425 k0: 0, /* delay in slots from DCI to PDSCH */
426 /* delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK */
427 k1: [ 8, 7, 6, 6, 5, 4],
428 mcs_table: "qam64",
429
430 rar_mcs: 2,
431 /* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed
432 * based on DL channel quality estimation */
433 /* mcs: 24, */
434 },
435
436 csi_rs: {
437 nzp_csi_rs_resource: [
438 {
439 csi_rs_id: 0,
440 n_ports: 1,
441 frequency_domain_allocation: "row2",
442 bitmap: "100000000000",
443 cdm_type: "no_cdm",
444 density: 1,
445 first_symb: 4,
446 rb_start: 0,
447 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
448 power_control_offset: 0, /* dB */
449 power_control_offset_ss: 0, /* dB */
450 scrambling_id: 0,
451 period: 80,
452 offset: 1, /* != 0 to avoid collision with SSB */
453 qcl_info_periodic_csi_rs: 0,
454 },
455#define USE_TRS
456#ifdef USE_TRS
457 /* TRS : period of 40 ms, slots 1 & 2, symbols 4 and 8 */
458 {
459 csi_rs_id: 1,
460 n_ports: 1,
461 frequency_domain_allocation: "row1",
462 bitmap: "0001",
463 cdm_type: "no_cdm",
464 density: 3,
465 first_symb: 4,
466 rb_start: 0,
467 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
468 power_control_offset: 0, /* dB */
469 power_control_offset_ss: 0, /* dB */
470 scrambling_id: 0,
471 period: 40,
472 offset: 11,
473 qcl_info_periodic_csi_rs: 0,
474 },
475 {
476 csi_rs_id: 2,
477 n_ports: 1,
478 frequency_domain_allocation: "row1",
479 bitmap: "0001",
480 cdm_type: "no_cdm",
481 density: 3,
482 first_symb: 8,
483 rb_start: 0,
484 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
485 power_control_offset: 0, /* dB */
486 power_control_offset_ss: 0, /* dB */
487 scrambling_id: 0,
488 period: 40,
489 offset: 11,
490 qcl_info_periodic_csi_rs: 0,
491 },
492 {
493 csi_rs_id: 3,
494 n_ports: 1,
495 frequency_domain_allocation: "row1",
496 bitmap: "0001",
497 cdm_type: "no_cdm",
498 density: 3,
499 first_symb: 4,
500 rb_start: 0,
501 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
502 power_control_offset: 0, /* dB */
503 power_control_offset_ss: 0, /* dB */
504 scrambling_id: 0,
505 period: 40,
506 offset: 12,
507 qcl_info_periodic_csi_rs: 0,
508 },
509 {
510 csi_rs_id: 4,
511 n_ports: 1,
512 frequency_domain_allocation: "row1",
513 bitmap: "0001",
514 cdm_type: "no_cdm",
515 density: 3,
516 first_symb: 8,
517 rb_start: 0,
518 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
519 power_control_offset: 0, /* dB */
520 power_control_offset_ss: 0, /* dB */
521 scrambling_id: 0,
522 period: 40,
523 offset: 12,
524 qcl_info_periodic_csi_rs: 0,
525 },
526#endif
527 ],
528 nzp_csi_rs_resource_set: [
529 {
530 csi_rs_set_id: 0,
531 nzp_csi_rs_resources: [ 0 ],
532 repetition: false,
533 },
534#ifdef USE_TRS
535 {
536 csi_rs_set_id: 1,
537 nzp_csi_rs_resources: [ 1, 2, 3, 4 ],
538 repetition: false,
539 trs_info: true,
540 },
541#endif
542 ],
543
544 csi_im_resource: [
545 {
546 csi_im_id: 0,
547 pattern: 1,
548 subcarrier_location: 8,
549 symbol_location: 8,
550 rb_start: 0,
551 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
552 period: 80,
553 offset: 1, /* != 0 to avoid collision with SSB */
554 },
555 ],
556 csi_im_resource_set: [
557 {
558 csi_im_set_id: 0,
559 csi_im_resources: [ 0 ],
560 }
561 ],
562 /* ZP CSI-RS to set the CSI-IM REs to zero */
563 zp_csi_rs_resource: [
564 {
565 csi_rs_id: 0,
566 frequency_domain_allocation: "row4",
567 bitmap: "100",
568 n_ports: 4,
569 cdm_type: "fd_cdm2",
570 first_symb: 8,
571 density: 1,
572 rb_start: 0,
573 l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
574 period: 80,
575 offset: 1,
576 },
577 ],
578 p_zp_csi_rs_resource_set: [
579 {
580 zp_csi_rs_resources: [ 0 ],
581 },
582 ],
583
584 csi_resource_config: [
585 {
586 csi_rsc_config_id: 0,
587 nzp_csi_rs_resource_set_list: [ 0 ],
588 resource_type: "periodic",
589 },
590 {
591 csi_rsc_config_id: 1,
592 csi_im_resource_set_list: [ 0 ],
593 resource_type: "periodic",
594 },
595#ifdef USE_TRS
596 {
597 csi_rsc_config_id: 2,
598 nzp_csi_rs_resource_set_list: [ 1 ],
599 resource_type: "periodic",
600 },
601#endif
602 ],
603 csi_report_config: [
604 {
605 resources_for_channel_measurement: 0,
606 csi_im_resources_for_interference: 1,
607 report_config_type: "periodic",
608 period: 80,
609 report_quantity: "CRI_RI_PMI_CQI",
610 cqi_table: 2,
611 subband_size: "value1",
612 },
613 ],
614 },
615
616 pucch: {
617 pucch_group_hopping: "neither",
618 hopping_id: -1, /* -1 = n_cell_id */
619 p0_nominal: -90,
620 pucch1: {
621 n_cs: 3,
622 n_occ: 3,
623 freq_hopping: false,
624 },
625 pucch2: {
626 n_symb: 2,
627 n_prb: 1,
628 freq_hopping: false,
629 simultaneous_harq_ack_csi: false,
630 max_code_rate: 0.25,
631 },
632 },
633
634 pusch: {
635 mapping_type: "typeA",
636 n_symb: 14,
637 dmrs_add_pos: 1,
638 dmrs_type: 1,
639 dmrs_max_len: 1,
640 tf_precoding: false,
641 mcs_table: "qam64", /* without transform precoding */
642 mcs_table_tp: "qam64", /* with transform precoding */
643 ldpc_max_its: 5,
644 k2: 4, /* delay in slots from DCI to PUSCH */
645 p0_nominal_with_grant: -90,
646 msg3_k2: 5,
647 msg3_mcs: 4,
648 msg3_delta_power: 0, /* in dB */
649 beta_offset_ack_index: 9,
650
651 /* hardcoded scheduling parameters */
652 n_dmrs_cdm_groups: 1,
653 n_layer: 1,
654 /* if defined, force the PUSCH MCS for all UEs. Otherwise it is
655 computed from the last received PUSCH. */
656 //mcs: 16,
657 //max_mcs: 16,
658 },
659
660 /* MAC configuration */
661 mac_config: {
662 msg3_max_harq_tx: 5,
663 ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
664 dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
665 ul_max_consecutive_retx: 30, /* disconnect UE if reached */
666 dl_max_consecutive_retx: 30, /* disconnect UE if reached */
667 periodic_bsr_timer: 20,
668 retx_bsr_timer: 320,
669 periodic_phr_timer: 500,
670 prohibit_phr_timer: 200,
671 phr_tx_power_factor_change: "dB3",
672 sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */
673 sr_trans_max: 64,
674 },
675
676 cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],
677 integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],
678
679 inactivity_timer: ${enb.inactivity_timer},
680
681 drb_config: "amarisoft_drb_nr.cfg",
682 },
683% endif
684}