gnb,rrc_nr: Filling in RLC-NR DRB configs from 5QI config now.

master
Pedro Alvarez 3 years ago
parent 386b1640a9
commit bbae0ce93c

@ -15,6 +15,7 @@
#include "rrc_nr_config.h" #include "rrc_nr_config.h"
#include "srsran/asn1/rrc_nr.h" #include "srsran/asn1/rrc_nr.h"
#include "srsran/common/bearer_manager.h"
#include "srsran/common/common_nr.h" #include "srsran/common/common_nr.h"
namespace srsenb { namespace srsenb {
@ -44,6 +45,8 @@ bool compute_diff_radio_bearer_cfg(const rrc_nr_cfg_t& cfg,
/// Apply radioBearerConfig updates to CellGroupConfig /// Apply radioBearerConfig updates to CellGroupConfig
void fill_cellgroup_with_radio_bearer_cfg(const rrc_nr_cfg_t& cfg, void fill_cellgroup_with_radio_bearer_cfg(const rrc_nr_cfg_t& cfg,
uint32_t rnti,
const enb_bearer_manager& bearer_mapper,
const asn1::rrc_nr::radio_bearer_cfg_s& bearers, const asn1::rrc_nr::radio_bearer_cfg_s& bearers,
asn1::rrc_nr::cell_group_cfg_s& out); asn1::rrc_nr::cell_group_cfg_s& out);

@ -978,20 +978,17 @@ void fill_srb(const rrc_nr_cfg_t& cfg, srsran::nr_srb srb_id, asn1::rrc_nr::rlc_
} }
/// Fill DRB with parameters derived from cfg /// Fill DRB with parameters derived from cfg
void fill_drb(const rrc_nr_cfg_t& cfg, uint32_t lcid, srsran::nr_drb drb_id, asn1::rrc_nr::rlc_bearer_cfg_s& out) void fill_drb(const rrc_nr_cfg_t& cfg,
const enb_bearer_manager::radio_bearer_t& rb,
srsran::nr_drb drb_id,
asn1::rrc_nr::rlc_bearer_cfg_s& out)
{ {
out.lc_ch_id = lcid; out.lc_ch_id = rb.lcid;
out.served_radio_bearer_present = true; out.served_radio_bearer_present = true;
out.served_radio_bearer.set_drb_id() = (uint8_t)drb_id; out.served_radio_bearer.set_drb_id() = (uint8_t)drb_id;
out.rlc_cfg_present = true; out.rlc_cfg_present = true;
auto& ul_um = out.rlc_cfg.set_um_bi_dir().ul_um_rlc; out.rlc_cfg = cfg.five_qi_cfg.at(rb.five_qi).rlc_cfg;
ul_um.sn_field_len_present = true;
ul_um.sn_field_len.value = sn_field_len_um_opts::size12;
auto& dl_um = out.rlc_cfg.um_bi_dir().dl_um_rlc;
dl_um.sn_field_len_present = true;
dl_um.sn_field_len.value = sn_field_len_um_opts::size12;
dl_um.t_reassembly.value = t_reassembly_opts::ms50;
// MAC logical channel config // MAC logical channel config
out.mac_lc_ch_cfg_present = true; out.mac_lc_ch_cfg_present = true;
@ -1319,6 +1316,8 @@ bool compute_diff_radio_bearer_cfg(const rrc_nr_cfg_t& cfg,
} }
void fill_cellgroup_with_radio_bearer_cfg(const rrc_nr_cfg_t& cfg, void fill_cellgroup_with_radio_bearer_cfg(const rrc_nr_cfg_t& cfg,
const uint32_t rnti,
const enb_bearer_manager& bearer_mapper,
const asn1::rrc_nr::radio_bearer_cfg_s& bearers, const asn1::rrc_nr::radio_bearer_cfg_s& bearers,
asn1::rrc_nr::cell_group_cfg_s& out) asn1::rrc_nr::cell_group_cfg_s& out)
{ {
@ -1333,8 +1332,9 @@ void fill_cellgroup_with_radio_bearer_cfg(const rrc_nr_cfg_t&
// Add DRBs // Add DRBs
for (const drb_to_add_mod_s& drb : bearers.drb_to_add_mod_list) { for (const drb_to_add_mod_s& drb : bearers.drb_to_add_mod_list) {
out.rlc_bearer_to_add_mod_list.push_back({}); out.rlc_bearer_to_add_mod_list.push_back({});
uint32_t lcid = drb.drb_id + (int)srsran::nr_srb::count - 1; uint32_t lcid = drb.drb_id + (int)srsran::nr_srb::count - 1;
fill_drb(cfg, lcid, (srsran::nr_drb)drb.drb_id, out.rlc_bearer_to_add_mod_list.back()); enb_bearer_manager::radio_bearer_t rb = bearer_mapper.get_lcid_bearer(rnti, lcid);
fill_drb(cfg, rb, (srsran::nr_drb)drb.drb_id, out.rlc_bearer_to_add_mod_list.back());
} }
// Release DRBs // Release DRBs

@ -968,7 +968,8 @@ void rrc_nr::ue::handle_rrc_reestablishment_request(const asn1::rrc_nr::rrc_rees
// compute config and create SRB1 for new user // compute config and create SRB1 for new user
asn1::rrc_nr::radio_bearer_cfg_s dummy_radio_bearer_cfg; // just to compute difference, it's never sent to UE asn1::rrc_nr::radio_bearer_cfg_s dummy_radio_bearer_cfg; // just to compute difference, it's never sent to UE
compute_diff_radio_bearer_cfg(parent->cfg, radio_bearer_cfg, next_radio_bearer_cfg, dummy_radio_bearer_cfg); compute_diff_radio_bearer_cfg(parent->cfg, radio_bearer_cfg, next_radio_bearer_cfg, dummy_radio_bearer_cfg);
fill_cellgroup_with_radio_bearer_cfg(parent->cfg, dummy_radio_bearer_cfg, next_cell_group_cfg); fill_cellgroup_with_radio_bearer_cfg(
parent->cfg, old_rnti, *parent->bearer_mapper, dummy_radio_bearer_cfg, next_cell_group_cfg);
// send RRC Reestablishment message and restore bearer configuration // send RRC Reestablishment message and restore bearer configuration
send_connection_reest(old_ue->sec_ctx.get_ncc()); send_connection_reest(old_ue->sec_ctx.get_ncc());
@ -1061,7 +1062,8 @@ void rrc_nr::ue::send_rrc_setup()
// - Setup masterCellGroup // - Setup masterCellGroup
// - Derive master cell group config bearers // - Derive master cell group config bearers
fill_cellgroup_with_radio_bearer_cfg(parent->cfg, setup_ies.radio_bearer_cfg, next_cell_group_cfg); fill_cellgroup_with_radio_bearer_cfg(
parent->cfg, rnti, *parent->bearer_mapper, setup_ies.radio_bearer_cfg, next_cell_group_cfg);
// - Pack masterCellGroup into container // - Pack masterCellGroup into container
srsran::unique_byte_buffer_t pdu = parent->pack_into_pdu(next_cell_group_cfg, __FUNCTION__); srsran::unique_byte_buffer_t pdu = parent->pack_into_pdu(next_cell_group_cfg, __FUNCTION__);
if (pdu == nullptr) { if (pdu == nullptr) {
@ -1209,7 +1211,8 @@ void rrc_nr::ue::send_rrc_reconfiguration()
// Fill masterCellGroup // Fill masterCellGroup
cell_group_cfg_s master_cell_group; cell_group_cfg_s master_cell_group;
master_cell_group.cell_group_id = 0; master_cell_group.cell_group_id = 0;
fill_cellgroup_with_radio_bearer_cfg(parent->cfg, ies.radio_bearer_cfg, master_cell_group); fill_cellgroup_with_radio_bearer_cfg(
parent->cfg, rnti, *parent->bearer_mapper, ies.radio_bearer_cfg, master_cell_group);
// Pack masterCellGroup into container // Pack masterCellGroup into container
srsran::unique_byte_buffer_t pdu = parent->pack_into_pdu(master_cell_group, __FUNCTION__); srsran::unique_byte_buffer_t pdu = parent->pack_into_pdu(master_cell_group, __FUNCTION__);

Loading…
Cancel
Save