Skip to content

Commit 9bb19c3

Browse files
FabianEckermannFabian Eckermann
authored andcommitted
cu_cp: make ue removal request awaitable
1 parent fd6ba4e commit 9bb19c3

16 files changed

+43
-54
lines changed

include/srsran/rrc/rrc_ue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ class rrc_ue_context_update_notifier
326326

327327
/// \brief Notify the CU-CP to completly remove a UE from the CU-CP.
328328
/// \param[in] ue_index The index of the UE to remove.
329-
virtual void on_ue_removal_required(ue_index_t ue_index) = 0;
329+
virtual async_task<void> on_ue_removal_required(ue_index_t ue_index) = 0;
330330
};
331331

332332
/// Interface to notify about measurements

lib/cu_cp/adapters/du_processor_adapters.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ class du_processor_cu_cp_adapter : public du_processor_cu_cp_notifier
9090
cu_cp_handler->handle_rrc_ue_creation(ue_index, rrc_ue, *ngap_du_notifier);
9191
}
9292

93-
void on_ue_removal_required(ue_index_t ue_index) override
93+
async_task<void> on_ue_removal_required(ue_index_t ue_index) override
9494
{
9595
srsran_assert(ue_removal_handler != nullptr, "CU-CP UE Removal handler must not be nullptr");
96-
ue_removal_handler->handle_ue_removal_request(ue_index);
96+
return ue_removal_handler->handle_ue_removal_request(ue_index);
9797
}
9898

9999
async_task<bool> on_ue_transfer_required(ue_index_t ue_index, ue_index_t old_ue_index) override

lib/cu_cp/adapters/rrc_ue_adapters.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class rrc_ue_cu_cp_adapter : public rrc_ue_context_update_notifier, public rrc_u
186186
return cu_cp_rrc_ue_handler->handle_ue_context_transfer(ue_index, old_ue_index);
187187
}
188188

189-
void on_ue_removal_required(ue_index_t ue_index) override
189+
async_task<void> on_ue_removal_required(ue_index_t ue_index) override
190190
{
191191
srsran_assert(ue_removal_handler != nullptr, "CU-CP UE removal handler must not be nullptr");
192192
return ue_removal_handler->handle_ue_removal_request(ue_index);

lib/cu_cp/cu_cp_impl.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "cu_cp_impl.h"
1212
#include "metrics_handler/metrics_handler_impl.h"
13+
#include "routines/ue_removal_routine.h"
1314
#include "srsran/cu_cp/cu_cp_types.h"
1415
#include "srsran/f1ap/cu_cp/f1ap_cu.h"
1516
#include "srsran/ngap/ngap_factory.h"
@@ -51,7 +52,6 @@ cu_cp_impl::cu_cp_impl(const cu_cp_configuration& config_) :
5152
conn_notifier,
5253
srslog::fetch_basic_logger("CU-CP")}),
5354
cu_up_db(cu_up_repository_config{cfg, e1ap_ev_notifier, srslog::fetch_basic_logger("CU-CP")}),
54-
routine_mng(ue_mng.get_task_sched()),
5555
controller(routine_mng, cfg.ngap_config, ngap_adapter, cu_up_db),
5656
metrics_hdlr(std::make_unique<metrics_handler_impl>(*cfg.cu_cp_executor, *cfg.timers, ue_mng, du_db))
5757
{
@@ -282,18 +282,19 @@ bool cu_cp_impl::handle_cell_config_update_request(nr_cell_id_t nci, const servi
282282
return cell_meas_mng.update_cell_config(nci, serv_cell_cfg);
283283
}
284284

285-
void cu_cp_impl::handle_ue_removal_request(ue_index_t ue_index)
285+
async_task<void> cu_cp_impl::handle_ue_removal_request(ue_index_t ue_index)
286286
{
287287
du_index_t du_index = get_du_index_from_ue_index(ue_index);
288288
cu_up_index_t cu_up_index = uint_to_cu_up_index(0); // TODO: Update when mapping from UE index to CU-UP exists
289289
auto e1_adapter = e1ap_adapters.find(cu_up_index);
290-
routine_mng.start_ue_removal_routine(ue_index,
291-
rrc_du_adapters.at(du_index),
292-
e1_adapter != e1ap_adapters.end() ? &e1_adapter->second : nullptr,
293-
f1ap_adapters.at(du_index),
294-
ngap_adapter,
295-
ue_mng,
296-
logger);
290+
291+
return launch_async<ue_removal_routine>(ue_index,
292+
rrc_du_adapters.at(du_index),
293+
e1_adapter != e1ap_adapters.end() ? &e1_adapter->second : nullptr,
294+
f1ap_adapters.at(du_index),
295+
ngap_adapter,
296+
ue_mng,
297+
logger);
297298
}
298299

299300
// private

lib/cu_cp/cu_cp_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class cu_cp_impl final : public cu_cp, public cu_cp_impl_interface, public cu_cp
7171
bool handle_cell_config_update_request(nr_cell_id_t nci, const serving_cell_meas_config& serv_cell_cfg) override;
7272

7373
// cu_cp_ue_removal_interface
74-
void handle_ue_removal_request(ue_index_t ue_index) override;
74+
async_task<void> handle_ue_removal_request(ue_index_t ue_index) override;
7575

7676
metrics_handler& get_metrics_handler() override { return *metrics_hdlr; }
7777

lib/cu_cp/cu_cp_impl_interface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ class cu_cp_ue_removal_handler
269269

270270
/// \brief Completly remove a UE from the CU-CP.
271271
/// \param[in] ue_index The index of the UE to remove.
272-
virtual void handle_ue_removal_request(ue_index_t ue_index) = 0;
272+
virtual async_task<void> handle_ue_removal_request(ue_index_t ue_index) = 0;
273273
};
274274

275275
class cu_cp_impl_interface : public cu_cp_e1ap_handler,

lib/cu_cp/du_processor/du_processor_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ du_processor_impl::handle_ue_rrc_context_creation_request(const ue_rrc_context_c
257257
du_cell_index_t pcell_index = find_cell(req.cgi.nci);
258258
if (pcell_index == du_cell_index_t::invalid) {
259259
logger.warning("ue={}: Could not find cell with NCI={}", req.ue_index, req.cgi.nci);
260-
cu_cp_notifier.on_ue_removal_required(req.ue_index);
260+
task_sched.schedule_async_task(req.ue_index, cu_cp_notifier.on_ue_removal_required(req.ue_index));
261261
return {};
262262
}
263263
const pci_t pci = cell_db.at(pcell_index).pci;

lib/cu_cp/du_processor/du_processor_impl_interface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ class du_processor_cu_cp_notifier
366366

367367
/// \brief Notify the CU-CP to completly remove a UE from the CU-CP.
368368
/// \param[in] ue_index The index of the UE to remove.
369-
virtual void on_ue_removal_required(ue_index_t ue_index) = 0;
369+
virtual async_task<void> on_ue_removal_required(ue_index_t ue_index) = 0;
370370

371371
/// \brief Notify the CU-CP to transfer and remove ue contexts.
372372
/// \param[in] ue_index The new UE index of the UE that sent the Reestablishment Request.

lib/cu_cp/routine_managers/cu_cp_routine_manager.cpp

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,9 @@
1616
using namespace srsran;
1717
using namespace srs_cu_cp;
1818

19-
cu_cp_routine_manager::cu_cp_routine_manager(ue_task_scheduler_manager& ue_task_sched_) :
20-
ue_task_sched(ue_task_sched_), main_ctrl_loop(128)
21-
{
22-
}
19+
cu_cp_routine_manager::cu_cp_routine_manager() : main_ctrl_loop(128) {}
2320

2421
bool cu_cp_routine_manager::schedule_async_task(async_task<void> task)
2522
{
2623
return main_ctrl_loop.schedule(std::move(task));
2724
}
28-
29-
void cu_cp_routine_manager::start_ue_removal_routine(ue_index_t ue_index,
30-
cu_cp_rrc_ue_removal_notifier& rrc_du_notifier,
31-
cu_cp_e1ap_ue_removal_notifier* e1ap_notifier,
32-
cu_cp_f1ap_ue_removal_notifier& f1ap_notifier,
33-
cu_cp_ngap_control_notifier& ngap_notifier,
34-
ue_manager& ue_mng,
35-
srslog::basic_logger& logger)
36-
{
37-
ue_task_sched.handle_ue_async_task(
38-
ue_index,
39-
launch_async<ue_removal_routine>(
40-
ue_index, rrc_du_notifier, e1ap_notifier, f1ap_notifier, ngap_notifier, ue_mng, logger));
41-
}

lib/cu_cp/routine_managers/cu_cp_routine_manager.h

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,12 @@ namespace srs_cu_cp {
2929
class cu_cp_routine_manager
3030
{
3131
public:
32-
explicit cu_cp_routine_manager(ue_task_scheduler_manager& ue_task_sched_);
32+
explicit cu_cp_routine_manager();
3333
~cu_cp_routine_manager() = default;
3434

3535
bool schedule_async_task(async_task<void> task);
3636

37-
void start_initial_cu_cp_setup_routine(const ngap_configuration& ngap_cfg);
38-
39-
void start_ue_removal_routine(ue_index_t ue_index,
40-
cu_cp_rrc_ue_removal_notifier& rrc_du_notifier,
41-
cu_cp_e1ap_ue_removal_notifier* e1ap_notifier,
42-
cu_cp_f1ap_ue_removal_notifier& f1ap_notifier,
43-
cu_cp_ngap_control_notifier& ngap_notifier,
44-
ue_manager& ue_mng,
45-
srslog::basic_logger& logger);
46-
4737
private:
48-
ue_task_scheduler_manager& ue_task_sched;
49-
5038
// cu-cp task event loop
5139
fifo_async_task_scheduler main_ctrl_loop;
5240
};

0 commit comments

Comments
 (0)