{ #define NR_TDD 0 // Values: 0 (NR FDD), 1(NR TDD) #define NR_TDD_CONFIG 2 // Values: FR1: 1, 2, 3, 4 (compatible with LTE TDD config 2) FR2: 10 #define N_ANTENNA_DL 1 // Values: 1 (SISO), 2 (MIMO 2x2), 4 (MIMO 4x4) #define N_ANTENNA_UL 1 // Values: 1, 2, 4 #define NR_LONG_PUCCH_FORMAT 2 // Values: 2, 3, 4 #define SDT_TSRA 0 #define SDT_REDCAP 0 #define CG_SDT 1 /* define to 1 to enable periodic SRS with N_ANTENNA_UL ports. Uplink SU-MIMO is also enabled if N_ANTENNA_UL >= 2. Not all UEs support uplink SU-MIMO. */ #define USE_SRS 0 log_options: "all.level=warn,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=debug,phy.max_size=1", log_filename: "/tmp/enb0.log", /* Enable remote API and Web interface */ com_addr: "[::]:9001", rf_driver: { name: "sdr", /* list of devices. 'dev0' is always the master. */ #if N_ANTENNA_DL >= 4 args: "dev0=/dev/sdr0,dev1=/dev/sdr1", #else args: "dev0=/dev/sdr0", #endif /* TDD: force the RX antenna on the RX connector */ rx_antenna: "rx", /* synchronisation source: none, internal, gps, external (default = none) */ // sync: "gps", }, tx_gain: 75.0, /* TX gain (in dB) */ rx_gain: 10.0, /* RX gain (in dB) */ 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", #ifdef GTP_U_BUNDLING gtp_use_packet_bundling: true, #endif gnb_id_bits: 28, gnb_id: 0x12345, en_dc_support: true, rf_ports: [ { }, ], /* list of cells */ cell_list: [], nr_cell_list: [ { rf_port: 0, cell_id: 0x01, band: 7, #if SDT_REDCAP dl_nr_arfcn: 531000, bandwidth: 40, #else dl_nr_arfcn: 536000, bandwidth: 20, #endif ssb_subcarrier_spacing: 15, /* kHz */ subcarrier_spacing: 30, /* kHz */ #if CG_SDT ssb_pos_bitmap: "1111", #else ssb_pos_bitmap: "1000", #endif ssb_period: 5, /* in ms */ n_id_cell: 500, }, ], /* nr_cell_list */ nr_cell_default: { n_antenna_dl: N_ANTENNA_DL, n_antenna_ul: N_ANTENNA_UL, ssb_period: 5, /* in ms */ n_id_cell: 500, plmn_list: [ { tac: 0, plmn: "00101", reserved: false, }, ], si_window_length: 40, cell_barred: false, intra_freq_reselection: true, q_rx_lev_min: -70, q_qual_min: -20, root_sequence_index: 1, /* PRACH root sequence index */ /* Scheduling request period (slots). */ sr_period: 40, dmrs_type_a_pos: 2, /* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max; allows to workaround issues with SM-G977N for example */ //pdsch_harq_ack_max: 2, prach: { prach_config_index: 16, /* subframe 1 every frame */ msg1_fdm: 1, msg1_frequency_start: -1, zero_correlation_zone_config: 15, preamble_received_target_power: -110, preamble_trans_max: 7, power_ramping_step: 4, ra_response_window: 20, restricted_set_config: "unrestricted_set", ra_contention_resolution_timer: 64, /* in ms */ #if CG_SDT ssb_per_prach_occasion: 4, cb_preambles_per_ssb: 4, #else ssb_per_prach_occasion: 1, cb_preambles_per_ssb: 8, #endif }, #if SDT_TSRA two_steps_prach: { shared_ro: { cb_preambles_per_ssb_per_sro: 16, }, msga_pusch: { mcs: 5, time_domain_offset: 5, l_crb: 1, po_fdm: 4, dmrs_cdm_group: "0", dmrs_n_ports: 1, }, msga_rsrp_threshold: -110, msgb_response_window: 40, msgb_mcs: 9, }, #endif prach_feature_preambles_list: [ { feature_combination: ["sdt"], preambles_per_ssb: 4, #if SDT_TSRA two_steps_prach: { msga_pusch: { time_domain_offset: 5, /* it was 4 */ l_crb: 4, po_fdm: 2, mcs: 12 } } #endif }], feature_priorities: { sdt: 1, #if SDT_REDCAP redcap: 2, #endif }, pdcch: { search_space0_index: 0, dedicated_coreset: { rb_start: -1, /* -1 to have the maximum bandwidth */ l_crb: -1, /* -1 means all the bandwidth */ duration: 0, /* 0 means to automatically set it from the coreset bandwidth */ precoder_granularity: "sameAsREG_bundle", }, css: { n_candidates: [ 0, 0, 4, 0, 0 ], }, rar_al_index: 2, si_al_index: 2, uss: { n_candidates: [ 0, 4, 0, 0, 0 ], dci_0_1_and_1_1: true, }, al_index: 1, }, pdsch: { mapping_type: "typeA", dmrs_add_pos: 1, dmrs_type: 1, dmrs_max_len: 1, /* k0 delay in slots from DCI to PDSCH: automatic setting */ /* k1 delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK: automatic setting */ mcs_table: "qam256", rar_mcs: 2, si_mcs: 6, /* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed * based on DL channel quality estimation */ /* mcs: 24, */ }, csi_rs: { resource_auto: { nzp_csi_rs_period: 80, }, csi_report_config: [ { report_config_type: "periodic", period: 80, }, ], }, pucch: { pucch_group_hopping: "neither", hopping_id: -1, /* -1 = n_cell_id */ p0_nominal: -96, #if 0 pucch0: { initial_cyclic_shift: 1, n_symb: 1, }, #else pucch1: { n_cs: 3, n_occ: 3, freq_hopping: true, #if USE_SRS && NR_TDD == 0 n_symb: 12, #endif }, #endif #if NR_LONG_PUCCH_FORMAT == 2 pucch2: { n_symb: 2, n_prb: 1, freq_hopping: true, simultaneous_harq_ack_csi: false, max_code_rate: 0.25, }, #elif NR_LONG_PUCCH_FORMAT == 3 pucch3: { bpsk: false, additional_dmrs: false, freq_hopping: true, n_prb: 1, simultaneous_harq_ack_csi: true, max_code_rate: 0.25, }, #elif NR_LONG_PUCCH_FORMAT == 4 pucch4: { occ_len: 4, bpsk: false, additional_dmrs: false, freq_hopping: true, simultaneous_harq_ack_csi: true, max_code_rate: 0.25, }, #endif }, #if USE_SRS srs: { resource_auto: { codebook: { resource_type: "periodic", period: 80, /* in slots */ } } }, #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, /* k2, msg3_k2 delay in slots from DCI to PUSCH: automatic setting */ p0_nominal_with_grant: -84, msg3_mcs: 4, msg3_delta_power: 0, /* in dB */ beta_offset_ack_index: 9, #if USE_SRS max_rank: N_ANTENNA_UL, #endif /* if defined, force the PUSCH MCS for all UEs. Otherwise it is computed from the last received PUSCH. */ /* mcs: 16, */ }, /* 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, }, #if 0 paging: { cycle: 128, n_frac: 4, pf_offset: 1, ns: 2 }, #endif rrc_inactive: { ran_paging_cycle: 32, use_full_resume_id: true, t380_mins: 10, release_timer_mins: 15, sdt: { rsrp_threshold: -110, ul_data_volume_threshold: 800, t319a: 600, session_inactivity_timer: 100, session_max_duration: 480, #if CG_SDT configured_grant: { rsrp_threshold_ssb: -110, time_alignment_timer: 1280, ssb_per_cg_pusch: 1, dmrs_ports_bitmap: "0101", grant: { l_crb: 4, mcs: 10, periodicity: 40, skip_uplink_tx_snr_threshold: 1.0, } }, #endif } }, #if SDT_REDCAP dl_bwp: [ { bwp_id: 1, dl_bwp_access: "redcap_only", dl_bwp_l_crb: 51, dl_bwp_rb_start: 54, pdcch: { css: {}, common_coreset: { rb_start: 0, l_crb: 24, duration: 2, precoder_granularity: "sameAsREG_bundle", }, dedicated_coreset: {}, uss: {} }, pdsch: {} } ], ul_bwp: [ { bwp_id: 1, ul_bwp_access: "redcap_only", prach: { msg1_frequency_start: 12 }, prach_feature_preambles_list: [ { feature_combination: ["redcap"], preamble_start: 0, preambles_per_ssb: 4, }, { feature_combination: ["redcap", "sdt"], preambles_per_ssb: 4, }, ], pucch: {}, pusch: {}, ul_bwp_l_crb: 51, ul_bwp_rb_start: 54 } ], redcap_ue: { initial_dl_bwp_id: 1, initial_ul_bwp_id: 1 }, dl_bwp_access: "normal_only", ul_bwp_access: "normal_only", meas_config_desc: { a1_report_type: "rsrp", a1_rsrp: -70, a1_hysteresis: 10, a1_time_to_trigger: 100, a2_report_type: "rsrp", a2_rsrp: -110, a2_hysteresis: 0, a2_time_to_trigger: 100, }, #endif cipher_algo_pref: [], integ_algo_pref: [2, 1], inactivity_timer: 10000, drb_config: "drb_nr_sdt.cfg", }, }