Make MBMS MCS configurable for the eNB.

master
Pedro Alvarez 5 years ago
parent 04961148e9
commit 51f8ba60da

@ -165,12 +165,14 @@ pusch_max_mcs = 16
# enable: Enable MBMS transmission in the eNB # enable: Enable MBMS transmission in the eNB
# m1u_multiaddr: Multicast addres the M1-U socket will register to # m1u_multiaddr: Multicast addres the M1-U socket will register to
# m1u_if_addr: Address of the inteferface the M1-U interface will listen for multicast packets. # m1u_if_addr: Address of the inteferface the M1-U interface will listen for multicast packets.
# mcs: Modulation and Coding scheme for MBMS traffic.
# #
##################################################################### #####################################################################
[embms] [embms]
#enable = false #enable = false
#m1u_multiaddr = 239.255.0.1 #m1u_multiaddr = 239.255.0.1
#m1u_if_addr = 127.0.1.201 #m1u_if_addr = 127.0.1.201
#mcs = 20

@ -35,6 +35,7 @@ typedef struct {
bool enable; bool enable;
std::string m1u_multiaddr; std::string m1u_multiaddr;
std::string m1u_if_addr; std::string m1u_if_addr;
uint16_t mcs;
} embms_args_t; } embms_args_t;
typedef struct { typedef struct {

@ -73,6 +73,7 @@ struct rrc_cfg_t {
rrc_cfg_cqi_t cqi_cfg; rrc_cfg_cqi_t cqi_cfg;
rrc_cfg_qci_t qci_cfg[MAX_NOF_QCI]; rrc_cfg_qci_t qci_cfg[MAX_NOF_QCI];
bool enable_mbsfn; bool enable_mbsfn;
uint16_t mbms_mcs;
uint32_t inactivity_timeout_ms; uint32_t inactivity_timeout_ms;
srslte::CIPHERING_ALGORITHM_ID_ENUM eea_preference_list[srslte::CIPHERING_ALGORITHM_ID_N_ITEMS]; srslte::CIPHERING_ALGORITHM_ID_ENUM eea_preference_list[srslte::CIPHERING_ALGORITHM_ID_N_ITEMS];
srslte::INTEGRITY_ALGORITHM_ID_ENUM eia_preference_list[srslte::INTEGRITY_ALGORITHM_ID_N_ITEMS]; srslte::INTEGRITY_ALGORITHM_ID_ENUM eia_preference_list[srslte::INTEGRITY_ALGORITHM_ID_N_ITEMS];

@ -955,6 +955,7 @@ int set_derived_args(all_args_t* args_, rrc_cfg_t* rrc_cfg_, phy_cfg_t* phy_cfg_
rrc_cfg_->inactivity_timeout_ms = args_->general.rrc_inactivity_timer; rrc_cfg_->inactivity_timeout_ms = args_->general.rrc_inactivity_timer;
rrc_cfg_->enable_mbsfn = args_->stack.embms.enable; rrc_cfg_->enable_mbsfn = args_->stack.embms.enable;
rrc_cfg_->mbms_mcs = args_->stack.embms.mcs;
// Check number of control symbols // Check number of control symbols
if (args_->stack.mac.sched.min_nof_ctrl_symbols > args_->stack.mac.sched.max_nof_ctrl_symbols) { if (args_->stack.mac.sched.min_nof_ctrl_symbols > args_->stack.mac.sched.max_nof_ctrl_symbols) {

@ -195,6 +195,7 @@ void parse_args(all_args_t* args, int argc, char* argv[])
("embms.enable", bpo::value<bool>(&args->stack.embms.enable)->default_value(false), "Enables MBMS in the eNB") ("embms.enable", bpo::value<bool>(&args->stack.embms.enable)->default_value(false), "Enables MBMS in the eNB")
("embms.m1u_multiaddr", bpo::value<string>(&args->stack.embms.m1u_multiaddr)->default_value("239.255.0.1"), "M1-U Multicast address the eNB joins.") ("embms.m1u_multiaddr", bpo::value<string>(&args->stack.embms.m1u_multiaddr)->default_value("239.255.0.1"), "M1-U Multicast address the eNB joins.")
("embms.m1u_if_addr", bpo::value<string>(&args->stack.embms.m1u_if_addr)->default_value("127.0.1.201"), "IP address of the interface the eNB will listen for M1-U traffic.") ("embms.m1u_if_addr", bpo::value<string>(&args->stack.embms.m1u_if_addr)->default_value("127.0.1.201"), "IP address of the interface the eNB will listen for M1-U traffic.")
("embms.mcs", bpo::value<uint16_t>(&args->stack.embms.mcs)->default_value(20), "Modulation and Coding scheme of MBMS traffic.")
; ;
// Positional options - config file location // Positional options - config file location
@ -276,7 +277,7 @@ void parse_args(all_args_t* args, int argc, char* argv[])
} }
} }
// Covert eNB Id // Convert eNB Id
std::size_t pos = {}; std::size_t pos = {};
try { try {
args->enb.enb_id = std::stoi(enb_id, &pos, 0); args->enb.enb_id = std::stoi(enb_id, &pos, 0);

@ -790,7 +790,15 @@ void rrc::configure_mbsfn_sibs(sib_type2_s* sib2_, sib_type13_r9_s* sib13_)
&byte[0], &byte[0],
3); // TODO: Check if service is set to 1 3); // TODO: Check if service is set to 1
} }
pmch_item->pmch_cfg_r9.data_mcs_r9 = 20;
uint16_t mbms_mcs = cfg.mbms_mcs;
if (mbms_mcs > 28){
mbms_mcs = 28; // TS 36.213, Table 8.6.1-1
rrc_log->warning("PMCH data MCS too high, setting it to 28\n");
}
rrc_log->debug("PMCH data MCS=%d\n", mbms_mcs);
pmch_item->pmch_cfg_r9.data_mcs_r9 = mbms_mcs;
pmch_item->pmch_cfg_r9.mch_sched_period_r9 = pmch_cfg_r9_s::mch_sched_period_r9_e_::rf64; pmch_item->pmch_cfg_r9.mch_sched_period_r9 = pmch_cfg_r9_s::mch_sched_period_r9_e_::rf64;
pmch_item->pmch_cfg_r9.sf_alloc_end_r9 = 64 * 6; pmch_item->pmch_cfg_r9.sf_alloc_end_r9 = 64 * 6;

Loading…
Cancel
Save