stack lte,refactor: pass bearer manager instead of stack pointer to srsenb::rrc

master
Francisco Paisana 3 years ago
parent f4df55c245
commit ebd12b0778

@ -83,9 +83,10 @@ void ue_bearer_manager::add_eps_bearer(uint8_t eps_bearer_id, srsran::srsran_rat
{ {
srsran::rwlock_write_guard rw_lock(rwlock); srsran::rwlock_write_guard rw_lock(rwlock);
if (impl.add_eps_bearer(eps_bearer_id, rat, lcid)) { if (impl.add_eps_bearer(eps_bearer_id, rat, lcid)) {
logger.info("Registered EPS bearer ID %d for lcid=%d over %s-PDCP", eps_bearer_id, lcid, to_string(rat).c_str()); logger.info(
"Bearers: Registered EPS bearer ID %d for lcid=%d over %s-PDCP", eps_bearer_id, lcid, to_string(rat).c_str());
} else { } else {
logger.error("EPS bearer ID %d already registered", eps_bearer_id); logger.error("Bearers: EPS bearer ID %d already registered", eps_bearer_id);
} }
} }
@ -93,16 +94,16 @@ void ue_bearer_manager::remove_eps_bearer(uint8_t eps_bearer_id)
{ {
srsran::rwlock_write_guard rw_lock(rwlock); srsran::rwlock_write_guard rw_lock(rwlock);
if (impl.remove_eps_bearer(eps_bearer_id)) { if (impl.remove_eps_bearer(eps_bearer_id)) {
logger.info("Removed mapping for EPS bearer ID %d", eps_bearer_id); logger.info("Bearers: Removed mapping for EPS bearer ID %d", eps_bearer_id);
} else { } else {
logger.error("Can't remove EPS bearer ID %d", eps_bearer_id); logger.error("Bearers: Can't remove EPS bearer ID %d", eps_bearer_id);
} }
} }
void ue_bearer_manager::reset() void ue_bearer_manager::reset()
{ {
impl.reset(); impl.reset();
logger.info("Reset EPS bearer manager"); logger.info("Bearers: Reset EPS bearer manager");
} }
} // namespace srsue } // namespace srsue
@ -121,13 +122,13 @@ void enb_bearer_manager::add_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id, sr
} }
if (user_it->second.add_eps_bearer(eps_bearer_id, rat, lcid)) { if (user_it->second.add_eps_bearer(eps_bearer_id, rat, lcid)) {
logger.info("Registered EPS bearer ID %d for rnti=0x%x, lcid=%d over %s-PDCP", logger.info("Bearers: Registered eps-BearerID=%d for rnti=0x%x, lcid=%d over %s-PDCP",
eps_bearer_id, eps_bearer_id,
rnti, rnti,
lcid, lcid,
to_string(rat).c_str()); to_string(rat).c_str());
} else { } else {
logger.error("EPS bearer ID %d for rnti=0x%x already registered", eps_bearer_id, rnti); logger.error("Bearers: EPS bearer ID %d for rnti=0x%x already registered", eps_bearer_id, rnti);
} }
} }
@ -135,24 +136,20 @@ void enb_bearer_manager::remove_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id)
{ {
auto user_it = users_map.find(rnti); auto user_it = users_map.find(rnti);
if (user_it == users_map.end()) { if (user_it == users_map.end()) {
logger.error("No EPS bearer registered for rnti=0x%x", rnti); logger.error("Bearers: No EPS bearer registered for rnti=0x%x", rnti);
return; return;
} }
if (user_it->second.remove_eps_bearer(eps_bearer_id)) { if (user_it->second.remove_eps_bearer(eps_bearer_id)) {
logger.info("Removed mapping for EPS bearer ID %d for rnti=0x%x", eps_bearer_id, rnti); logger.info("Bearers: Removed mapping for EPS bearer ID %d for rnti=0x%x", eps_bearer_id, rnti);
} else { } else {
logger.error("Can't remove EPS bearer ID %d, rnti=0x%x", eps_bearer_id, rnti); logger.error("Bearers: Can't remove EPS bearer ID %d, rnti=0x%x", eps_bearer_id, rnti);
} }
} }
void enb_bearer_manager::rem_user(uint16_t rnti) void enb_bearer_manager::rem_user(uint16_t rnti)
{ {
if (users_map.erase(rnti)) { logger.info("Bearers: Removed rnti=0x%x from EPS bearer manager", rnti);
logger.info("Removed rnti=0x%x from EPS bearer manager", rnti);
} else {
logger.error("No EPS bearer registered for rnti=0x%x", rnti);
}
} }
bool enb_bearer_manager::has_active_radio_bearer(uint16_t rnti, uint32_t eps_bearer_id) bool enb_bearer_manager::has_active_radio_bearer(uint16_t rnti, uint32_t eps_bearer_id)

@ -41,7 +41,6 @@ class gtpu_pdcp_adapter;
class enb_stack_lte final : public enb_stack_base, class enb_stack_lte final : public enb_stack_base,
public stack_interface_phy_lte, public stack_interface_phy_lte,
public stack_interface_phy_nr, public stack_interface_phy_nr,
public stack_interface_rrc,
public srsran::thread public srsran::thread
{ {
public: public:
@ -136,11 +135,6 @@ public:
} }
void rach_detected(const rach_info_t& rach_info) override { mac_nr.rach_detected(rach_info); } void rach_detected(const rach_info_t& rach_info) override { mac_nr.rach_detected(rach_info); }
// interface for bearer manager
void add_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id, srsran::srsran_rat_t rat, uint32_t lcid) override;
void remove_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id) override;
void remove_eps_bearers(uint16_t rnti) override;
private: private:
static const int STACK_MAIN_THREAD_PRIO = 4; static const int STACK_MAIN_THREAD_PRIO = 4;
// thread loop // thread loop

@ -19,6 +19,7 @@
#include "srsenb/hdr/common/common_enb.h" #include "srsenb/hdr/common/common_enb.h"
#include "srsenb/hdr/common/rnti_pool.h" #include "srsenb/hdr/common/rnti_pool.h"
#include "srsran/adt/circular_buffer.h" #include "srsran/adt/circular_buffer.h"
#include "srsran/common/bearer_manager.h"
#include "srsran/common/buffer_pool.h" #include "srsran/common/buffer_pool.h"
#include "srsran/common/common.h" #include "srsran/common/common.h"
#include "srsran/common/stack_procedure.h" #include "srsran/common/stack_procedure.h"
@ -53,7 +54,7 @@ class rrc final : public rrc_interface_pdcp,
public rrc_eutra_interface_rrc_nr public rrc_eutra_interface_rrc_nr
{ {
public: public:
explicit rrc(stack_interface_rrc* stack_, srsran::task_sched_handle task_sched_); explicit rrc(srsran::task_sched_handle task_sched_, enb_bearer_manager& manager_);
~rrc(); ~rrc();
int32_t init(const rrc_cfg_t& cfg_, int32_t init(const rrc_cfg_t& cfg_,
@ -166,13 +167,13 @@ public:
private: private:
// args // args
srsran::task_sched_handle task_sched; srsran::task_sched_handle task_sched;
stack_interface_rrc* stack = nullptr; enb_bearer_manager& bearer_manager;
phy_interface_rrc_lte* phy = nullptr; phy_interface_rrc_lte* phy = nullptr;
mac_interface_rrc* mac = nullptr; mac_interface_rrc* mac = nullptr;
rlc_interface_rrc* rlc = nullptr; rlc_interface_rrc* rlc = nullptr;
pdcp_interface_rrc* pdcp = nullptr; pdcp_interface_rrc* pdcp = nullptr;
gtpu_interface_rrc* gtpu = nullptr; gtpu_interface_rrc* gtpu = nullptr;
s1ap_interface_rrc* s1ap = nullptr; s1ap_interface_rrc* s1ap = nullptr;
rrc_nr_interface_rrc* rrc_nr = nullptr; rrc_nr_interface_rrc* rrc_nr = nullptr;
srslog::basic_logger& logger; srslog::basic_logger& logger;

@ -98,7 +98,7 @@ enb_stack_lte::enb_stack_lte(srslog::sink& log_sink) :
rlc_nr(rlc_nr_logger), rlc_nr(rlc_nr_logger),
gtpu(&task_sched, gtpu_logger, &rx_sockets), gtpu(&task_sched, gtpu_logger, &rx_sockets),
s1ap(&task_sched, s1ap_logger, &rx_sockets), s1ap(&task_sched, s1ap_logger, &rx_sockets),
rrc(this, &task_sched), rrc(&task_sched, bearers),
rrc_nr(&task_sched), rrc_nr(&task_sched),
mac_pcap(), mac_pcap(),
pending_stack_metrics(64) pending_stack_metrics(64)
@ -335,19 +335,4 @@ void enb_stack_lte::run_thread()
} }
} }
void enb_stack_lte::add_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id, srsran::srsran_rat_t rat, uint32_t lcid)
{
bearers.add_eps_bearer(rnti, eps_bearer_id, rat, lcid);
}
void enb_stack_lte::remove_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id)
{
bearers.remove_eps_bearer(rnti, eps_bearer_id);
}
void enb_stack_lte::remove_eps_bearers(uint16_t rnti)
{
bearers.rem_user(rnti);
}
} // namespace srsenb } // namespace srsenb

@ -32,8 +32,8 @@ using namespace asn1::rrc;
namespace srsenb { namespace srsenb {
rrc::rrc(stack_interface_rrc* stack_, srsran::task_sched_handle task_sched_) : rrc::rrc(srsran::task_sched_handle task_sched_, enb_bearer_manager& manager_) :
logger(srslog::fetch_basic_logger("RRC")), stack(stack_), task_sched(task_sched_), rx_pdu_queue(128) logger(srslog::fetch_basic_logger("RRC")), bearer_manager(manager_), task_sched(task_sched_), rx_pdu_queue(128)
{} {}
rrc::~rrc() {} rrc::~rrc() {}
@ -655,7 +655,7 @@ void rrc::rem_user(uint16_t rnti)
gtpu->rem_user(rnti); gtpu->rem_user(rnti);
// Now remove RLC and PDCP // Now remove RLC and PDCP
stack->remove_eps_bearers(rnti); bearer_manager.rem_user(rnti);
rlc->rem_user(rnti); rlc->rem_user(rnti);
pdcp->rem_user(rnti); pdcp->rem_user(rnti);

@ -1443,8 +1443,8 @@ void rrc::ue::apply_rlc_rb_updates(const rr_cfg_ded_s& pending_rr_cfg)
parent->rlc->del_bearer(rnti, drb_to_lcid((lte_drb)drb_id)); parent->rlc->del_bearer(rnti, drb_to_lcid((lte_drb)drb_id));
// deregister EPS bearer // deregister EPS bearer
uint8_t eps_bearer_id = 0; // FIXME: lookup EPS bearer ID for drb_id uint8_t eps_bearer_id = parent->bearer_manager.get_lcid_bearer(rnti, drb_to_lcid((lte_drb)drb_id)).eps_bearer_id;
parent->stack->remove_eps_bearer(rnti, eps_bearer_id); parent->bearer_manager.remove_eps_bearer(rnti, eps_bearer_id);
} }
} }
for (const drb_to_add_mod_s& drb : pending_rr_cfg.drb_to_add_mod_list) { for (const drb_to_add_mod_s& drb : pending_rr_cfg.drb_to_add_mod_list) {
@ -1460,7 +1460,7 @@ void rrc::ue::apply_rlc_rb_updates(const rr_cfg_ded_s& pending_rr_cfg)
parent->rlc->add_bearer(rnti, drb.lc_ch_id, rlc_cfg); parent->rlc->add_bearer(rnti, drb.lc_ch_id, rlc_cfg);
// register EPS bearer over LTE PDCP // register EPS bearer over LTE PDCP
parent->stack->add_eps_bearer(rnti, drb.eps_bearer_id, srsran::srsran_rat_t::lte, drb.lc_ch_id); parent->bearer_manager.add_eps_bearer(rnti, drb.eps_bearer_id, srsran::srsran_rat_t::lte, drb.lc_ch_id);
} }
} }

@ -33,8 +33,8 @@ int test_erab_setup(srsran::log_sink_spy& spy, bool qci_exists)
logger.set_hex_dump_max_size(1024); logger.set_hex_dump_max_size(1024);
logger.set_level(srslog::basic_levels::info); logger.set_level(srslog::basic_levels::info);
test_dummies::enb_stack_dummy stack; enb_bearer_manager bearers;
srsenb::rrc rrc{&stack, &task_sched}; srsenb::rrc rrc{&task_sched, bearers};
mac_dummy mac; mac_dummy mac;
rlc_dummy rlc; rlc_dummy rlc;
test_dummies::pdcp_mobility_dummy pdcp; test_dummies::pdcp_mobility_dummy pdcp;

@ -57,7 +57,7 @@ const char* to_string(test_event event)
struct mobility_tester { struct mobility_tester {
explicit mobility_tester(const test_event& args_) : explicit mobility_tester(const test_event& args_) :
args(args_), logger(srslog::fetch_basic_logger("RRC")), rrc(&stack, &task_sched) args(args_), logger(srslog::fetch_basic_logger("RRC")), rrc(&task_sched, bearers)
{ {
logger.set_level(srslog::basic_levels::info); logger.set_level(srslog::basic_levels::info);
logger.set_hex_dump_max_size(1024); logger.set_hex_dump_max_size(1024);
@ -93,7 +93,7 @@ struct mobility_tester {
test_dummies::pdcp_mobility_dummy pdcp; test_dummies::pdcp_mobility_dummy pdcp;
test_dummies::phy_mobility_dummy phy; test_dummies::phy_mobility_dummy phy;
test_dummies::s1ap_mobility_dummy s1ap; test_dummies::s1ap_mobility_dummy s1ap;
test_dummies::enb_stack_dummy stack; enb_bearer_manager bearers;
gtpu_dummy gtpu; gtpu_dummy gtpu;
void tic() void tic()

@ -201,13 +201,6 @@ public:
phy_rrc_cfg_list_t last_cfg; phy_rrc_cfg_list_t last_cfg;
}; };
class enb_stack_dummy : public stack_interface_rrc
{
void add_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id, srsran::srsran_rat_t rat, uint32_t lcid) {}
void remove_eps_bearer(uint16_t rnti, uint8_t eps_bearer_id) {}
void remove_eps_bearers(uint16_t rnti){};
};
} // namespace test_dummies } // namespace test_dummies
namespace test_helpers { namespace test_helpers {

Loading…
Cancel
Save