diff --git a/lib/include/srsran/interfaces/enb_mac_interfaces.h b/lib/include/srsran/interfaces/enb_mac_interfaces.h index 802312610..af9838515 100644 --- a/lib/include/srsran/interfaces/enb_mac_interfaces.h +++ b/lib/include/srsran/interfaces/enb_mac_interfaces.h @@ -19,7 +19,8 @@ namespace srsenb { struct mac_args_t { - uint32_t nof_prb; ///< Needed to dimension MAC softbuffers for all cells + uint32_t nof_prb; ///< Needed to dimension MAC softbuffers for all cells + uint32_t prach_bi; ///< Backoff Indicator to prevent UE from PRACHing too fast sched_interface::sched_args_t sched; int lcid_padding; uint32_t nof_prealloc_ues; ///< Number of UE resources to pre-allocate at eNB startup diff --git a/srsenb/enb.conf.example b/srsenb/enb.conf.example index 505771a05..fe830507b 100644 --- a/srsenb/enb.conf.example +++ b/srsenb/enb.conf.example @@ -424,3 +424,4 @@ nr_pdsch_mcs=28 #rlf_min_ul_snr_estim = -2 #s1_setup_max_retries = -1 #rx_gain_offset = 62 +#mac_prach_bi = 0 diff --git a/srsenb/src/main.cc b/srsenb/src/main.cc index 33d739088..71721b4c0 100644 --- a/srsenb/src/main.cc +++ b/srsenb/src/main.cc @@ -260,6 +260,7 @@ void parse_args(all_args_t* args, int argc, char* argv[]) ("expert.rlf_min_ul_snr_estim", bpo::value(&args->stack.mac.rlf_min_ul_snr_estim)->default_value(-2), "SNR threshold in dB below which the eNB is notified with rlf ko.") ("expert.max_s1_setup_retries", bpo::value(&args->stack.s1ap.max_s1_setup_retries)->default_value(-1), "Max S1 setup retries") ("expert.rx_gain_offset", bpo::value(&args->phy.rx_gain_offset)->default_value(62), "RX Gain offset to add to rx_gain to calibrate RSRP readings") + ("expert.mac_prach_bi", bpo::value(&args->stack.mac.prach_bi)->default_value(0), "Backoff Indicator to reduce contention in the PRACH channel") // eMBMS section ("embms.enable", bpo::value(&args->stack.embms.enable)->default_value(false), "Enables MBMS in the eNB") diff --git a/srsenb/src/stack/mac/mac.cc b/srsenb/src/stack/mac/mac.cc index e56f0e879..17e036880 100644 --- a/srsenb/src/stack/mac/mac.cc +++ b/srsenb/src/stack/mac/mac.cc @@ -924,6 +924,9 @@ uint8_t* mac::assemble_rar(sched_interface::dl_sched_rar_grant_t* grants, srsran::rar_pdu* pdu = &rar_pdu_msg[rar_idx]; rar_payload[enb_cc_idx][rar_idx].clear(); pdu->init_tx(&rar_payload[enb_cc_idx][rar_idx], pdu_len); + if (args.prach_bi > 0 and args.prach_bi <= 12) { + pdu->set_backoff(args.prach_bi); + } for (uint32_t i = 0; i < nof_grants; i++) { srsran_dci_rar_pack(&grants[i].grant, grant_buffer); if (pdu->new_subh()) {