/* lteenb configuration file example for NB-IoT (in-band, guard-band and standalone mode) * version 2025-07-04 * Copyright (C) 2016-2025 Amarisoft */ #define NB_MODE 0 // Values: 0: In Band, 1:Guard Band, 2:Standalone #define NB_NON_ANCHOR 0 // Values: 0 (non anchor carrier disabled), 1 (non anchor carrier enabled) #define LTE_DL_EARFCN 3350 // Values example: 3350 (FDD - 2680 MHz [Band 7]) #define N_RB_DL 25 // Values: 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz) #define N_ANTENNA_DL 1 // Values: 1 (SISO), 2 (MIMO 2x2) #define N_ANTENNA_UL 1 // Values: 1, 2 #define CHANNEL_SIM 0 // Values: 0 (channel simulator disabled), 1 (channel simulator enabled) #define NB_TM 0 // Values: 0 (normal), 1 (N-TM test mode waveform - see 3GPP 36.141-6.1.3) { /* 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=error,all.max_size=0,nas.level=debug,nas.max_size=1,s1ap.level=debug,s1ap.max_size=1,x2ap.level=debug,x2ap.max_size=1,rrc.level=debug,rrc.max_size=1", log_filename: "/tmp/enb0.log", /* Enable remote API and Web interface */ com_addr: "[::]:9001", /* RF driver configuration */ include "rf_driver/config.cfg", #if CHANNEL_SIM == 1 rf_ports: [ { channel_dl: { type: "awgn", noise_level: -30, }, } ], #endif mme_list: [ { /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ mme_addr: "127.0.1.100", }, ], /* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */ gtp_addr: "127.0.1.1", #ifdef GTP_U_BUNDLING gtp_use_packet_bundling: true, #endif /* high 20 bits of SIB1.cellIdentifier */ enb_id: 0x1A2D1, /* list of LTE cells (for NB-IoT in-band operation they must be defined here) */ #if NB_MODE == 2 cell_list: [ ], #else cell_list: [ { /* Broadcasted PLMN identities */ plmn_list: [ "00101", ], dl_earfcn: LTE_DL_EARFCN, n_id_cell: 1, cell_id: 0x01, tac: 0x0001, root_sequence_index: 204, /* PRACH root sequence index */ }, ], /* cell_list */ #endif /* default NB-IoT cell parameters */ nb_cell_default: { /* SI info */ si_value_tag: 0, /* increment modulo 32 if SI is modified */ r_sib1: 4, /* number of SIB1 repetitions */ cell_barred: false, /* SIB1.cellBarred-r13 */ intra_freq_reselection: true, /* SIB1.intraFreqReselection-r13 */ q_rx_lev_min: -70, /* SIB1.q-RxLevMin */ q_qual_min: -34, /* SIB1.q-QualMin */ p_max: 10, /* SIB1.p-Max */ si_window_length: 160, /* ms */ si_radio_frame_offset: 0, /* in frames */ si_value_tag_list_enable: true, /* enable per SIB si_value_tag */ sib_sched_list: [ { filename: "sib2_nb.asn", si_periodicity: 128, si_repetition_pattern: 2, si_value_tag: 0, /* increment modulo 4 if SIB is modified */ }, ], mac_config: { msg3_max_harq_tx: 5, ul_max_harq_tx: 5, dl_max_harq_tx: 5, ul_max_consecutive_retx: 30, /* disconnect UE if reached */ dl_max_consecutive_retx: 30, /* disconnect UE if reached */ time_alignment_timer_dedicated: 0, periodic_bsr_timer: 16, retx_bsr_timer: 64, logical_channel_sr_prohibit_timer: 0, /* 0 means released */ }, npusch_max_its: 10, /* Max turbo decoder iterations */ #if NB_MODE != 2 /* only needed if SRS is enabled in base cell */ npusch_all_symbols: false, #endif /* each coverage level corresponds to a NPRACH configuration */ coverage_levels: [ { nprach_detect_threshold: 40, /* in dB */ npdcch_ra_n_rep: 1, /* must be <= npdcch-NumRepetitions-RA-r13 */ npdsch_ra_n_rep: 1, /* number of repetition for NPDSCH with RAR */ npdsch_ra_i_tbs: 3, /* I_TBS for NPDSCH with RAR */ /* msg3 configuration */ ul_sc_spacing: 1, /* 0 = 3.75 KHz subcarrier, 1 = 15 KHz subcarrier */ msg3_n_sc: 1, /* 1, 3, 6, 12 max number of subcarriers */ msg3_single_tone_mcs: 2, /* 0-2 */ // msg3_multi_tone_mcs: 1, /* 0-2, only needed for multi-tone */ msg3_n_rep: 1, /* 1-128 number of repetitions for msg3 */ /* Paging */ npdcch_paging_n_rep: 1, /* must be <= npdcch-NumRepetitionPaging-r13 */ npdsch_paging_i_tbs: 4, npdsch_paging_n_rep: 1, /* NPDCCH User Search Space */ npdcch_uss_n_rep_max: 8, /* 1-2048 max number of NPDCCH repetition */ npdcch_uss_n_rep: 1, /* use 0 for half RB allocation, otherwise actual number of NPDCCH repetitions */ npdcch_uss_start_sf: 4, /* 1.5, 2, 4, 8, 16, 32, 48, 64 */ npdcch_uss_offset: 0, /* 0-3 */ /* NPDSCH config */ npdsch_i_tbs: 5, /* 0-12 */ npdsch_n_rep: 1, /* 1-2048 number of NPDSCH repetitions */ /* NPUSCH config */ npusch_n_sc: 12, /* 1, 3, 6, 12 max number of subcarriers */ npusch_single_tone_i_tbs: 4, /* 0-12 */ npusch_multi_tone_i_tbs: 4, /* 0-12 */ npusch_n_rep: 1, /* 1-128 number of NPUSCH repetitions */ }, ], /* eNB will use two HARQ processes in UL and DL for UE declaring two HARQ process support (UE category NB2 only) */ two_harq_support: true, /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ cipher_algo_pref: [], /* RRC integrity algorithm preference. EIA0 is always the last. */ integ_algo_pref: [2, 1], inactivity_timer: 10000, /* SRB configuration */ srb_config: { maxRetxThreshold: 32, enb_maxRetxThreshold: 32, t_PollRetransmit: 6000, enb_t_PollRetransmit: 6000, }, #if NB_TM test_mode : { type: "n_tm" }, #endif /* DRB configuration */ drb_config: "drb_nb.cfg", }, /* list of NB-IoT cells */ nb_cell_list: [ { plmn_list: [ { plmn: "00101", reserved: false }, ], cell_id: 0x02, tac: 0x0002, /* SIB1.trackingAreaCode */ n_antenna_dl: 1, n_antenna_ul: 1, #if NB_MODE == 0 operation_mode: "same_pci", #if N_RB_DL == 25 dl_prb: 17, /* DL PRB number in the base LTE cell */ ul_prb: 17, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 50 dl_prb: 19, /* DL PRB number in the base LTE cell */ ul_prb: 19, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 75 dl_prb: 17, /* DL PRB number in the base LTE cell */ ul_prb: 17, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 100 dl_prb: 19, /* DL PRB number in the base LTE cell */ ul_prb: 19, /* UL PRB number in the base LTE cell */ #endif nrs_crs_power_offset: 0, /* in dB (same_pci only) */ base_cell_id:0x01, #elif NB_MODE == 1 n_id_ncell: 37, operation_mode: "guardband", #if N_RB_DL == 25 dl_earfcn: LTE_DL_EARFCN + 24, /* DL PRB number in the base LTE cell */ #elif N_RB_DL == 50 dl_earfcn: LTE_DL_EARFCN + 48, /* DL PRB number in the base LTE cell */ #elif N_RB_DL == 75 dl_earfcn: LTE_DL_EARFCN + 69, /* DL PRB number in the base LTE cell */ #elif N_RB_DL == 100 dl_earfcn: LTE_DL_EARFCN + 93, /* DL PRB number in the base LTE cell */ #endif base_cell_id:0x01, #else n_id_ncell: 37, operation_mode: "standalone", dl_earfcn: LTE_DL_EARFCN, #endif rel13_5: true, /* release 13.5 NPBCH/BCCH scrambling changes */ #if NB_NON_ANCHOR == 1 /* Non-anchor carriers : dl and ul_prb can be chosen more freely */ non_anchor_list : [ { #if NB_MODE == 0 #if N_RB_DL == 25 dl_prb: 19, /* DL PRB number in the base LTE cell */ ul_prb: 19, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 50 dl_prb: 17, /* DL PRB number in the base LTE cell */ ul_prb: 17, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 75 dl_prb: 19, /* DL PRB number in the base LTE cell */ ul_prb: 19, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 100 dl_prb: 17, /* DL PRB number in the base LTE cell */ ul_prb: 17, /* UL PRB number in the base LTE cell */ #endif operation_mode: "same_pci", #elif NB_MODE == 1 #if N_RB_DL == 25 dl_prb: 22, /* DL PRB number in the base LTE cell */ ul_prb: 22, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 50 dl_prb: 47, /* DL PRB number in the base LTE cell */ ul_prb: 47, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 75 dl_prb: 72, /* DL PRB number in the base LTE cell */ ul_prb: 72, /* UL PRB number in the base LTE cell */ #elif N_RB_DL == 100 dl_prb: 97, /* DL PRB number in the base LTE cell */ ul_prb: 97, /* UL PRB number in the base LTE cell */ #endif operation_mode: "same_pci", #else operation_mode: "standalone", dl_earfcn: LTE_DL_EARFCN + 9, #endif cell_id: 0x03 }, ], /* Schedule one UE on anchor, the rest will be scheduled on non-anchor */ //anchor_ue_max: 1, #endif }, ], /* nbcell_list */ /* default LTE cell parameters */ #if NB_MODE == 2 cell_default: { }, #else cell_default: { n_antenna_dl: N_ANTENNA_DL, /* number of DL antennas */ n_antenna_ul: N_ANTENNA_UL, /* number of UL antennas */ n_rb_dl: N_RB_DL, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */ cyclic_prefix: "normal", phich_duration: "normal", phich_resource: "1", /* ratio of NG */ /* SIB1 */ si_value_tag: 0, /* increment modulo 32 if SI is modified */ cell_barred: false, /* SIB1.cellBarred-r13 */ intra_freq_reselection: true, /* SIB1.intraFreqReselection */ q_rx_lev_min: -70, /* SIB1.q-RxLevMin */ p_max: 10, /* maximum power allowed for the UE (dBm) */ si_window_length: 40, /* ms */ sib_sched_list: [ { filename: "sib2_3.asn", si_periodicity: 16, /* frames */ }, ], #if N_RB_DL == 6 si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */ #else si_coderate: 0.20, /* maximum code rate for SI/RA/P-RNTI messages */ #endif si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH for SI/RA/P-RNTI */ n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */ /* PDSCH dedicated config (currently same for all UEs) */ pdsch_dedicated: { #if N_ANTENNA_DL == 4 p_a: -6, #elif N_ANTENNA_DL == 2 p_a: -3, #else p_a: 0, #endif p_b: -1, /* -1 means automatic */ }, /* If defined, force for number of CCEs for UE specific PDCCH to 2^pdcch_format. Otherwise it is computed from the reported CQI. Range: 0 to 3. */ #if N_RB_DL == 6 pdcch_format: 1, #else pdcch_format: 2, #endif /* if defined, force the PDSCH MCS for all UEs. Otherwise it is computed from the reported CQI */ /* pdsch_mcs: 12, */ #if N_RB_DL == 6 prach_config_index: 15, /* subframe 9 every 20 ms */ #else prach_config_index: 4, /* subframe 4 every 10 ms */ #endif prach_freq_offset: -1, /* -1 means automatic */ /* PUCCH dedicated config (currently same for all UEs) */ pucch_dedicated: { n1_pucch_sr_count: 11, /* increase if more UEs are needed */ cqi_pucch_n_rb: 1, /* increase if more UEs are needed */ }, /* PUSCH dedicated config (currently same for all UEs) */ pusch_dedicated: { beta_offset_ack_index: 9, beta_offset_ri_index: 6, beta_offset_cqi_index: 6, }, pusch_hopping_offset: -1, /* -1 means automatic */ /* MCS for Msg3 (=CCCH RRC Connection Request) */ pusch_msg3_mcs: 0, /* this CQI value is assumed when none is received from the UE */ #if N_RB_DL == 6 initial_cqi: 5, #else initial_cqi: 3, #endif /* if defined, force the PUSCH MCS for all UEs. Otherwise it is computed from the last received SRS/PUSCH. */ // pusch_mcs: 18, dl_256qam: true, ul_64qam: true, /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ sr_period: 20, /* CQI report config */ cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */ #if N_ANTENNA_DL >= 2 /* RI reporting is done with a period of m_ri * cqi_period. m_ri = 0 (default) disables RI reporting. */ m_ri: 8, /* transmission mode */ transmission_mode: 3, #endif /* SRS dedicated config. All UEs share these parameters. srs_config_index and freq_domain_position are allocated for each UE) */ srs_dedicated: { #if N_RB_DL == 6 srs_bandwidth_config: 7, srs_bandwidth: 1, #elif N_RB_DL == 15 srs_bandwidth_config: 6, srs_bandwidth: 1, #elif N_RB_DL == 25 srs_bandwidth_config: 3, srs_bandwidth: 1, #elif N_RB_DL == 50 srs_bandwidth_config: 2, srs_bandwidth: 2, #elif N_RB_DL == 75 srs_bandwidth_config: 2, srs_bandwidth: 2, #else srs_bandwidth_config: 2, srs_bandwidth: 3, #endif srs_subframe_config: 2, /* 0 - 15 */ srs_period: 40, /* period (ms). Must be >= 40 for HD-FDD */ srs_hopping_bandwidth: 0, }, /* MAC configuration (same for all UEs) */ mac_config: { ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */ dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */ }, /* CPU load limitation */ pusch_max_its: 6, /* max number of turbo decoder iterations */ /* dynamic power control */ dpc: true, dpc_pusch_snr_target: 25, dpc_pucch_snr_target: 20, /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ cipher_algo_pref: [], /* RRC integrity algorithm preference. EIA0 is always the last. */ integ_algo_pref: [2, 1], /* (in ms) send RRC connection release after this time of network inactivity */ inactivity_timer: 10000, /* SRB configuration */ srb_config: [ { id: 1, maxRetxThreshold: 32, t_Reordering: 45, t_PollRetransmit: 60, }, { id: 2 , maxRetxThreshold: 32, t_Reordering: 45, t_PollRetransmit: 60, } ], /* DRB configuration */ drb_config: "drb.cfg", }, #endif }