/* lteenb configuration file version ##VERSION## * Copyright (C) 2015-2024 Amarisoft */ { #default N_CELL 1 #define NR_SA 1 // Values: 0 (NR-NSA), 1(NR-SA) #define NR_TDD 1 // Values: 0 (FDD), 1(TDD) #define RX_ANTENNA 1 // Values: 0 (use TX connector as RX antenna in TDD), 1(use RX connector as RX antenna in TDD) #define N_RB_DL 100 // Values: 6 (1.4MHz), 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz) #define NR_BANDWIDTH 100 #define N_ANTENNA_DL 4 // Values: 1 (SISO), 2 (MIMO 2x2), 4 (MIMO 4x4) #define N_ANTENNA_UL 1 // Values: 1, 2 #define N_NR_ANTENNA_DL 4 #define CHANNEL_SIM 0 // Values: 0 (channel simulator disabled), 1 (channel simulator enabled) /* Log filter: syntax: layer.field=value[,...] Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and all. The 'all' layer is used to address all the layers at the same time. field values: - 'level': the log level of each layer can be set to 'none', 'error', 'info' or 'debug'. Use 'debug' to log all the messages. - 'max_size': set the maximum size of the hex dump. 0 means no hex dump. -1 means no limit. */ log_options: "all.level=debug,all.max_size=1", //log_options: "all.level=none,all.max_size=1,gtpu.level=debug,pdcp.level=debug,rlc.level=debug,mac.level=debug,nas.level=debug,rrc.level=debug,phy.level=debug", //log_options: "all.level=warn,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", log_filename: "/tmp/gnb0.log", /* Enable remote API and Web interface */ com_addr: "0.0.0.0:9001", rf_driver: { name: "s72", #if N_CELL == 1 transport: "ethernet", bind_interface: "eth10g1", remote_addr: "40:a6:b7:aa:c2:4b", subcarrier_spacing: 15*2, #if NR_BANDWIDTH==100 max_pdu_size: 8000, #else max_pdu_size: 1472, #endif t1a_min_cp_dl: 200, t1a_max_cp_dl: 250, t1a_min_up_dl: 200, t1a_max_up_dl: 250, ta3_max: 200, #else rf_ports: [{ transport: "ethernet", bind_interface: "eth10g1", remote_addr: "40:a6:b7:aa:c2:4b", //remote_addr: "40:a6:b7:20:45:e5", subcarrier_spacing: 15*2, #if NR_BANDWIDTH==100 max_pdu_size: 8000, #else max_pdu_size: 1472, #endif t1a_min_cp_dl: 200, t1a_max_cp_dl: 250, t1a_min_up_dl: 200, t1a_max_up_dl: 250, ta3_max: 200, }, { transport: "ethernet", bind_interface: "eth10g2", remote_addr: "40:a6:b7:aa:c2:4a", //remote_addr: "40:a6:b7:20:45:e4", subcarrier_spacing: 15*2, #if NR_BANDWIDTH==100 max_pdu_size: 8000, #else max_pdu_size: 1472, #endif t1a_min_cp_dl: 225, t1a_max_cp_dl: 275, t1a_min_up_dl: 200, t1a_max_up_dl: 250, ta3_max: 200, }], #endif }, tx_gain: 10, /* This is used as absolute output power (cf trx_driver.h/trx_s72_get_abs_tx_power) */ rx_gain: 0, rf_ports: [ { s72: { rtc_id: 0x1000, /* default = 0 */ #if NR_BANDWIDTH==100 ud_comp_hdr: 0x81, /* 0x00 (raw 16 bit) or 0x81 (block fp8) */ #else ud_comp_hdr: 0x00, /* 0x00 (raw 16 bit) or 0x81 (block fp8) */ #endif } }, #if N_CELL > 1 { s72: { rtc_id: 0x1000, /* default = 0 */ #if NR_BANDWIDTH==100 ud_comp_hdr: 0x81, /* 0x00 (raw 16 bit) or 0x81 (block fp8) */ #else ud_comp_hdr: 0x00, /* 0x00 (raw 16 bit) or 0x81 (block fp8) */ #endif } }, #endif ], amf_list: [ { /* address of AMF for NGAP connection. Must be modified if the AMF runs on a different host. */ amf_addr: "127.0.1.100", }, ], /* GTP bind address (=address of the ethernet interface connected to the AMF). Must be modified if the AMF runs on a different host. */ gtp_addr: "127.0.1.1", gnb_id_bits: 28, gnb_id: 0x12345, nr_support: true, /* list of cells */ cell_list: [], nr_cell_list: [ { rf_port: 0, cell_id: 0x01, band: 78, dl_nr_arfcn: 633408, /* 3489.42 MHz */ #if NR_BANDWIDTH==100 ssb_nr_arfcn: 630720, #else ssb_nr_arfcn: 633408, #endif #if N_CELL > 1 scell_list: [ { cell_id: 2 } ] #endif }, #if N_CELL > 1 { rf_port: 1, cell_id: 0x02, band: 78, dl_nr_arfcn: 633408, #if NR_BANDWIDTH==100 ssb_nr_arfcn: 630720, #else ssb_nr_arfcn: 633408, #endif n_id_cell: 501, scell_list: [ { cell_id: 1 } ] } #endif ], /* nr_cell_list */ #ifndef FR2 #define FR2 0 #endif nr_cell_default: { ssb_subcarrier_spacing: 30, /* KHz */ subcarrier_spacing: 15*2, /* kHz */ bandwidth: NR_BANDWIDTH, /* MHz */ n_antenna_dl: N_NR_ANTENNA_DL, n_antenna_ul: 1, n_id_cell: 500, #if !defined(TDD_CONFIG) #define TDD_CONFIG 0 #endif /* force the timing TA offset (optional) */ // n_timing_advance_offset: 39936, #if NR_TDD == 1 tdd_config: { #if TDD_CONFIG == 0 period: 10/2, /* in ms */ dl_slots: 7, dl_symbols: 6, ul_slots: 2, ul_symbols: 1, #elif TDD_CONFIG == 1 //some config #endif }, ssb_pos_bitmap: "10000000", #else ssb_pos_bitmap: "1000", #endif ssb_period: 5, /* in ms */ #if NR_SA > 0 // nr-sa plmn_list: [ { tac: 100, plmn: "00101", reserved: false, }, ], cell_barred: false, intra_freq_reselection: true, q_rx_lev_min: -70, q_qual_min: -20, p_max: 10, /* dBm */ inactivity_timer: 10000, si_window_length: 40, #endif root_sequence_index: 1, /* PRACH root sequence index */ /* Scheduling request period (slots). */ sr_period: 40, dmrs_type_a_pos: 2, prach: { #if NR_TDD == 1 prach_config_index: 160, /* format B4, subframe 9 */ msg1_subcarrier_spacing: 15*2, /* kHz */ #else prach_config_index: 16, /* subframe 1 every frame */ #endif msg1_fdm: 1, msg1_frequency_start: 0, zero_correlation_zone_config: 15, preamble_received_target_power: -110, /* in dBm */ preamble_trans_max: 7, power_ramping_step: 4, /* in dB */ ra_response_window: 20, /* in slots */ restricted_set_config: "unrestricted_set", ra_contention_resolution_timer: 64, /* in ms */ ssb_per_prach_occasion: 1, cb_preambles_per_ssb: 8, }, pdcch: { #if NR_SA > 0 //n_rb_coreset0: 48, //n_symb_coreset0: 1, search_space0_index: 0, si_al_index: 2, dedicated_coreset: { rb_start: -1, /* -1 to have the maximum bandwidth */ l_crb: -1, /* -1 means all the bandwidth */ duration: 1, precoder_granularity: "sameAsREG_bundle", }, #else common_coreset: { rb_start: -1, /* -1 to have the maximum bandwidth */ l_crb: -1, /* -1 means all the bandwidth */ duration: 1, precoder_granularity: "sameAsREG_bundle", }, #endif css: { n_candidates: [ 0, 4, 2, 1, 0 ], }, rar_al_index: 2, uss: { n_candidates: [ 8, 4, 2, 0, 0 ], dci_0_1_and_1_1: true, }, al_index: 0, }, pdsch: { mapping_type: "typeA", start_symb: 1, n_symb: 13, dmrs_add_pos: 1, dmrs_type: 1, dmrs_max_len: 1, mcs_table: "qam256", rar_mcs: 2, #if NR_SA > 0 si_mcs: 6, // nr-sa #endif }, csi_rs: { resource_auto: { nzp_csi_rs_period: 80, #if FR2 trs_presence: false, #endif }, csi_report_config: [ { report_config_type: "periodic", period: 80, }, ], }, pucch: { pucch_group_hopping: "neither", hopping_id: -1, /* -1 = n_cell_id */ p0_nominal: -90, #if !defined(USE_PUCCH_O) #define USE_PUCCH_O 0 #endif #if USE_PUCCH_O > 0 pucch0: { initial_cyclic_shift: 1, n_symb: 1, }, pucch2: { n_symb: 2, n_prb: 1, }, #else pucch1: { n_cs: 3, n_occ: 3, start_symb: 0, n_symb: 14, freq_hopping: false, }, pucch4: { occ_len: 4, bpsk: false, additional_dmrs: false, start_symb: 0, n_symb: 14, freq_hopping: true, }, #endif #if 0 > 0 n_rb_max: 0 /*floor(n_rb_ul/4)*/ #endif }, pusch: { mapping_type: "typeA", n_symb: 14, dmrs_add_pos: 1, dmrs_type: 1, dmrs_max_len: 1, tf_precoding: false, mcs_table: "qam256", /* without transform precoding */ mcs_table_tp: "qam256", /* with transform precoding */ ldpc_max_its: 5, p0_nominal_with_grant: -90, msg3_mcs: 4, msg3_delta_power: 0, /* in dB */ beta_offset_ack_index: 9, beta_offset_csi_part1_index: 7, beta_offset_csi_part2_index: 7, //mcs: 24, }, /* MAC configuration */ mac_config: { msg3_max_harq_tx: 5, ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */ dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */ ul_max_consecutive_retx: 30, /* disconnect UE if reached */ dl_max_consecutive_retx: 30, /* disconnect UE if reached */ periodic_bsr_timer: 20, retx_bsr_timer: 320, periodic_phr_timer: 500, prohibit_phr_timer: 200, phr_tx_power_factor_change: "dB3", sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */ sr_trans_max: 64, }, cipher_algo_pref: [], integ_algo_pref: [2, 1], srb3_support: false, drb_config: "drb_nr.cfg", }, nr_cell_default : { /* measurement configuration */ meas_config_desc: { a1_report_type: "rsrp", a1_rsrp: -70, a1_hysteresis: 10, a1_time_to_trigger: 320, a2_report_type: "rsrp", a2_rsrp: -110, a2_hysteresis: 0, a2_time_to_trigger: 640, nr_handover: { a3_report_type: "rsrp", a3_offset: 6, hysteresis: 0, time_to_trigger: 256 }, ssb_rsrq_filter_coeff: 3, ssb_sinr_filter_coeff: 5 }, }, nr_cell_default: { pdsch:{ cqi_adapt_amp: 3, }, }, }