mirror of https://github.com/PentHertz/srsLTE.git
enb,rrc_nr: register DRB1 at RLC/PDCP when enabling NSA mode
This commit is contained in:
parent
296949b5f9
commit
201f29b4e5
|
@ -118,11 +118,17 @@ public:
|
||||||
int pack_secondary_cell_group_config(asn1::dyn_octstring& packed_secondary_cell_config);
|
int pack_secondary_cell_group_config(asn1::dyn_octstring& packed_secondary_cell_config);
|
||||||
int pack_nr_radio_bearer_config(asn1::dyn_octstring& packed_nr_bearer_config);
|
int pack_nr_radio_bearer_config(asn1::dyn_octstring& packed_nr_bearer_config);
|
||||||
|
|
||||||
|
int add_drb();
|
||||||
|
|
||||||
// state
|
// state
|
||||||
rrc_nr_state_t state = rrc_nr_state_t::RRC_IDLE;
|
rrc_nr_state_t state = rrc_nr_state_t::RRC_IDLE;
|
||||||
uint8_t transaction_id = 0;
|
uint8_t transaction_id = 0;
|
||||||
|
|
||||||
uint32_t drb1_lcid = 4;
|
// RRC configs for UEs
|
||||||
|
asn1::rrc_nr::cell_group_cfg_s cell_group_cfg;
|
||||||
|
asn1::rrc_nr::radio_bearer_cfg_s radio_bearer_cfg;
|
||||||
|
|
||||||
|
const uint32_t drb1_lcid = 4;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -492,7 +492,7 @@ void rrc_nr::ue::send_dl_ccch(dl_ccch_msg_s* dl_ccch_msg)
|
||||||
// Helper for the RRC Reconfiguration sender to pack hard-coded config
|
// Helper for the RRC Reconfiguration sender to pack hard-coded config
|
||||||
int rrc_nr::ue::pack_secondary_cell_group_config(asn1::dyn_octstring& packed_secondary_cell_config)
|
int rrc_nr::ue::pack_secondary_cell_group_config(asn1::dyn_octstring& packed_secondary_cell_config)
|
||||||
{
|
{
|
||||||
cell_group_cfg_s cell_group_cfg_pack;
|
auto& cell_group_cfg_pack = cell_group_cfg;
|
||||||
|
|
||||||
// RLC for DRB1 (with fixed LCID)
|
// RLC for DRB1 (with fixed LCID)
|
||||||
cell_group_cfg_pack.rlc_bearer_to_add_mod_list_present = true;
|
cell_group_cfg_pack.rlc_bearer_to_add_mod_list_present = true;
|
||||||
|
@ -1078,38 +1078,19 @@ int rrc_nr::ue::pack_rrc_reconfiguraiton(asn1::dyn_octstring& packed_rrc_reconfi
|
||||||
// Packs a hard-coded NR radio bearer config with fixed params for RLC/PDCP (for now)
|
// Packs a hard-coded NR radio bearer config with fixed params for RLC/PDCP (for now)
|
||||||
int rrc_nr::ue::pack_nr_radio_bearer_config(asn1::dyn_octstring& packed_nr_bearer_config)
|
int rrc_nr::ue::pack_nr_radio_bearer_config(asn1::dyn_octstring& packed_nr_bearer_config)
|
||||||
{
|
{
|
||||||
radio_bearer_cfg_s radio_bearer_cfg;
|
// set security config
|
||||||
radio_bearer_cfg.drb_to_add_mod_list_present = true;
|
auto& radio_bearer_cfg_pack = radio_bearer_cfg;
|
||||||
radio_bearer_cfg.drb_to_add_mod_list.resize(1);
|
radio_bearer_cfg_pack.security_cfg_present = true;
|
||||||
|
auto& sec_cfg = radio_bearer_cfg_pack.security_cfg;
|
||||||
// configure fixed DRB1
|
sec_cfg.key_to_use_present = true;
|
||||||
auto& drb_item = radio_bearer_cfg.drb_to_add_mod_list[0];
|
sec_cfg.key_to_use = asn1::rrc_nr::security_cfg_s::key_to_use_opts::secondary;
|
||||||
drb_item.drb_id = 1;
|
sec_cfg.security_algorithm_cfg_present = true;
|
||||||
drb_item.cn_assoc_present = true;
|
sec_cfg.security_algorithm_cfg.ciphering_algorithm = ciphering_algorithm_opts::nea2;
|
||||||
drb_item.cn_assoc.set_eps_bearer_id() = 5;
|
|
||||||
drb_item.pdcp_cfg_present = true;
|
|
||||||
drb_item.pdcp_cfg.ciphering_disabled_present = true;
|
|
||||||
drb_item.pdcp_cfg.drb_present = true;
|
|
||||||
drb_item.pdcp_cfg.drb.pdcp_sn_size_dl_present = true;
|
|
||||||
drb_item.pdcp_cfg.drb.pdcp_sn_size_dl = asn1::rrc_nr::pdcp_cfg_s::drb_s_::pdcp_sn_size_dl_opts::len18bits;
|
|
||||||
drb_item.pdcp_cfg.drb.pdcp_sn_size_ul_present = true;
|
|
||||||
drb_item.pdcp_cfg.drb.pdcp_sn_size_ul = asn1::rrc_nr::pdcp_cfg_s::drb_s_::pdcp_sn_size_ul_opts::len18bits;
|
|
||||||
drb_item.pdcp_cfg.drb.discard_timer_present = true;
|
|
||||||
drb_item.pdcp_cfg.drb.discard_timer = asn1::rrc_nr::pdcp_cfg_s::drb_s_::discard_timer_opts::ms100;
|
|
||||||
drb_item.pdcp_cfg.drb.hdr_compress.set_not_used();
|
|
||||||
drb_item.pdcp_cfg.t_reordering_present = true;
|
|
||||||
drb_item.pdcp_cfg.t_reordering = asn1::rrc_nr::pdcp_cfg_s::t_reordering_opts::ms0;
|
|
||||||
|
|
||||||
radio_bearer_cfg.security_cfg_present = true;
|
|
||||||
radio_bearer_cfg.security_cfg.key_to_use_present = true;
|
|
||||||
radio_bearer_cfg.security_cfg.key_to_use = asn1::rrc_nr::security_cfg_s::key_to_use_opts::secondary;
|
|
||||||
radio_bearer_cfg.security_cfg.security_algorithm_cfg_present = true;
|
|
||||||
radio_bearer_cfg.security_cfg.security_algorithm_cfg.ciphering_algorithm = ciphering_algorithm_opts::nea2;
|
|
||||||
|
|
||||||
// pack it
|
// pack it
|
||||||
packed_nr_bearer_config.resize(128);
|
packed_nr_bearer_config.resize(128);
|
||||||
asn1::bit_ref bref_pack(packed_nr_bearer_config.data(), packed_nr_bearer_config.size());
|
asn1::bit_ref bref_pack(packed_nr_bearer_config.data(), packed_nr_bearer_config.size());
|
||||||
if (radio_bearer_cfg.pack(bref_pack) != asn1::SRSASN_SUCCESS) {
|
if (radio_bearer_cfg_pack.pack(bref_pack) != asn1::SRSASN_SUCCESS) {
|
||||||
parent->logger.error("Failed to pack NR radio bearer config");
|
parent->logger.error("Failed to pack NR radio bearer config");
|
||||||
return SRSRAN_ERROR;
|
return SRSRAN_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1122,6 +1103,13 @@ int rrc_nr::ue::pack_nr_radio_bearer_config(asn1::dyn_octstring& packed_nr_beare
|
||||||
|
|
||||||
int rrc_nr::ue::handle_sgnb_addition_request(uint16_t eutra_rnti)
|
int rrc_nr::ue::handle_sgnb_addition_request(uint16_t eutra_rnti)
|
||||||
{
|
{
|
||||||
|
// Add DRB1 to RLC and PDCP
|
||||||
|
if (add_drb() != SRSRAN_SUCCESS) {
|
||||||
|
parent->logger.error("Failed to configure DRB");
|
||||||
|
parent->rrc_eutra->sgnb_addition_reject(eutra_rnti);
|
||||||
|
return SRSRAN_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
// provide hard-coded NR configs
|
// provide hard-coded NR configs
|
||||||
asn1::dyn_octstring nr_secondary_cell_group_cfg;
|
asn1::dyn_octstring nr_secondary_cell_group_cfg;
|
||||||
if (pack_rrc_reconfiguraiton(nr_secondary_cell_group_cfg) == SRSRAN_ERROR) {
|
if (pack_rrc_reconfiguraiton(nr_secondary_cell_group_cfg) == SRSRAN_ERROR) {
|
||||||
|
@ -1143,4 +1131,84 @@ int rrc_nr::ue::handle_sgnb_addition_request(uint16_t eutra_rnti)
|
||||||
return SRSRAN_SUCCESS;
|
return SRSRAN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set DRB configuration
|
||||||
|
*
|
||||||
|
* The function sets and configures all relavant fields for the DRB configuration (MAC, RLC, PDCP) in the
|
||||||
|
* cellGroupConfig and also adds the bearer to the local RLC and PDCP entities.
|
||||||
|
*
|
||||||
|
* @return int SRSRAN_SUCCESS on success
|
||||||
|
*/
|
||||||
|
int rrc_nr::ue::add_drb()
|
||||||
|
{
|
||||||
|
// RLC for DRB1 (with fixed LCID) inside cell_group_cfg
|
||||||
|
auto& cell_group_cfg_pack = cell_group_cfg;
|
||||||
|
|
||||||
|
cell_group_cfg_pack.rlc_bearer_to_add_mod_list_present = true;
|
||||||
|
cell_group_cfg_pack.rlc_bearer_to_add_mod_list.resize(1);
|
||||||
|
auto& rlc = cell_group_cfg_pack.rlc_bearer_to_add_mod_list[0];
|
||||||
|
rlc.lc_ch_id = drb1_lcid;
|
||||||
|
rlc.served_radio_bearer_present = true;
|
||||||
|
rlc.served_radio_bearer.set_drb_id();
|
||||||
|
rlc.served_radio_bearer.drb_id() = 1;
|
||||||
|
rlc.rlc_cfg_present = true;
|
||||||
|
rlc.rlc_cfg.set_um_bi_dir();
|
||||||
|
rlc.rlc_cfg.um_bi_dir().ul_um_rlc.sn_field_len_present = true;
|
||||||
|
rlc.rlc_cfg.um_bi_dir().ul_um_rlc.sn_field_len = sn_field_len_um_opts::size12;
|
||||||
|
rlc.rlc_cfg.um_bi_dir().dl_um_rlc.sn_field_len_present = true;
|
||||||
|
rlc.rlc_cfg.um_bi_dir().dl_um_rlc.sn_field_len = sn_field_len_um_opts::size12;
|
||||||
|
rlc.rlc_cfg.um_bi_dir().dl_um_rlc.t_reassembly = t_reassembly_opts::ms50;
|
||||||
|
|
||||||
|
// add RLC bearer
|
||||||
|
srsran::rlc_config_t rlc_cfg;
|
||||||
|
if (srsran::make_rlc_config_t(cell_group_cfg.rlc_bearer_to_add_mod_list[0].rlc_cfg, &rlc_cfg) != SRSRAN_SUCCESS) {
|
||||||
|
parent->logger.error("Failed to build RLC config");
|
||||||
|
return SRSRAN_ERROR;
|
||||||
|
}
|
||||||
|
parent->rlc->add_bearer(rnti, drb1_lcid, rlc_cfg);
|
||||||
|
|
||||||
|
// MAC logical channel config
|
||||||
|
rlc.mac_lc_ch_cfg_present = true;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params_present = true;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.prio = 11;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.prioritised_bit_rate =
|
||||||
|
asn1::rrc_nr::lc_ch_cfg_s::ul_specific_params_s_::prioritised_bit_rate_opts::kbps0;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.bucket_size_dur =
|
||||||
|
asn1::rrc_nr::lc_ch_cfg_s::ul_specific_params_s_::bucket_size_dur_opts::ms100;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.lc_ch_group_present = true;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.lc_ch_group = 6;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.sched_request_id_present = true;
|
||||||
|
rlc.mac_lc_ch_cfg.ul_specific_params.sched_request_id = 0;
|
||||||
|
// TODO: add LC config to MAC
|
||||||
|
|
||||||
|
// PDCP config goes into radio_bearer_cfg
|
||||||
|
auto& radio_bearer_cfg_pack = radio_bearer_cfg;
|
||||||
|
radio_bearer_cfg_pack.drb_to_add_mod_list_present = true;
|
||||||
|
radio_bearer_cfg_pack.drb_to_add_mod_list.resize(1);
|
||||||
|
|
||||||
|
// configure fixed DRB1
|
||||||
|
auto& drb_item = radio_bearer_cfg_pack.drb_to_add_mod_list[0];
|
||||||
|
drb_item.drb_id = 1;
|
||||||
|
drb_item.cn_assoc_present = true;
|
||||||
|
drb_item.cn_assoc.set_eps_bearer_id() = 5;
|
||||||
|
drb_item.pdcp_cfg_present = true;
|
||||||
|
drb_item.pdcp_cfg.ciphering_disabled_present = true;
|
||||||
|
drb_item.pdcp_cfg.drb_present = true;
|
||||||
|
drb_item.pdcp_cfg.drb.pdcp_sn_size_dl_present = true;
|
||||||
|
drb_item.pdcp_cfg.drb.pdcp_sn_size_dl = asn1::rrc_nr::pdcp_cfg_s::drb_s_::pdcp_sn_size_dl_opts::len18bits;
|
||||||
|
drb_item.pdcp_cfg.drb.pdcp_sn_size_ul_present = true;
|
||||||
|
drb_item.pdcp_cfg.drb.pdcp_sn_size_ul = asn1::rrc_nr::pdcp_cfg_s::drb_s_::pdcp_sn_size_ul_opts::len18bits;
|
||||||
|
drb_item.pdcp_cfg.drb.discard_timer_present = true;
|
||||||
|
drb_item.pdcp_cfg.drb.discard_timer = asn1::rrc_nr::pdcp_cfg_s::drb_s_::discard_timer_opts::ms100;
|
||||||
|
drb_item.pdcp_cfg.drb.hdr_compress.set_not_used();
|
||||||
|
drb_item.pdcp_cfg.t_reordering_present = true;
|
||||||
|
drb_item.pdcp_cfg.t_reordering = asn1::rrc_nr::pdcp_cfg_s::t_reordering_opts::ms0;
|
||||||
|
|
||||||
|
// Add DRB1 to PDCP
|
||||||
|
srsran::pdcp_config_t pdcp_cnfg = srsran::make_drb_pdcp_config_t(drb_item.drb_id, false, drb_item.pdcp_cfg);
|
||||||
|
parent->pdcp->add_bearer(rnti, rlc.lc_ch_id, pdcp_cnfg);
|
||||||
|
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace srsenb
|
} // namespace srsenb
|
||||||
|
|
Loading…
Reference in New Issue