Skip to content

Commit 3ee54c4

Browse files
FabianEckermannFabian Eckermann
authored andcommitted
cu_cp: handle rrc reconfiguration outcome in calling procedure
1 parent 7b25e49 commit 3ee54c4

19 files changed

+171
-42
lines changed

lib/cu_cp/cu_cp_impl.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@ async_task<bool> cu_cp_impl::handle_rrc_reestablishment_context_modification_req
235235
cu_up_db.find_cu_up_processor(uint_to_cu_up_index(0))->get_e1ap_bearer_context_manager(),
236236
du_db.get_du_processor(ue->get_du_index()).get_f1ap_interface().get_f1ap_ue_context_manager(),
237237
ue->get_rrc_ue_notifier(),
238+
get_cu_cp_rrc_ue_interface(),
239+
ue->get_task_sched(),
238240
ue->get_up_resource_manager());
239241
}
240242

@@ -415,6 +417,8 @@ cu_cp_impl::handle_new_pdu_session_resource_setup_request(cu_cp_pdu_session_reso
415417
cu_up_db.find_cu_up_processor(uint_to_cu_up_index(0))->get_e1ap_bearer_context_manager(),
416418
du_db.get_du_processor(ue->get_du_index()).get_f1ap_interface().get_f1ap_ue_context_manager(),
417419
ue->get_rrc_ue_notifier(),
420+
get_cu_cp_rrc_ue_interface(),
421+
ue->get_task_sched(),
418422
ue->get_up_resource_manager());
419423
}
420424

@@ -432,6 +436,8 @@ cu_cp_impl::handle_new_pdu_session_resource_modify_request(const cu_cp_pdu_sessi
432436
cu_up_db.find_cu_up_processor(uint_to_cu_up_index(0))->get_e1ap_bearer_context_manager(),
433437
du_db.get_du_processor(ue->get_du_index()).get_f1ap_interface().get_f1ap_ue_context_manager(),
434438
ue->get_rrc_ue_notifier(),
439+
get_cu_cp_rrc_ue_interface(),
440+
ue->get_task_sched(),
435441
ue->get_up_resource_manager());
436442
}
437443

@@ -448,8 +454,8 @@ cu_cp_impl::handle_new_pdu_session_resource_release_command(const cu_cp_pdu_sess
448454
command,
449455
cu_up_db.find_cu_up_processor(uint_to_cu_up_index(0))->get_e1ap_bearer_context_manager(),
450456
du_db.get_du_processor(ue->get_du_index()).get_f1ap_interface().get_f1ap_ue_context_manager(),
451-
ngap_entity->get_ngap_control_message_handler(),
452457
ue->get_rrc_ue_notifier(),
458+
get_cu_cp_rrc_ue_interface(),
453459
ue->get_task_sched(),
454460
ue->get_up_resource_manager());
455461
}

lib/cu_cp/routine_managers/cu_cp_routine_manager.cpp

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ async_task<cu_cp_pdu_session_resource_setup_response> cu_cp_routine_manager::sta
5858
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
5959
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
6060
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
61+
cu_cp_rrc_ue_interface& cu_cp_notifier,
62+
ue_task_scheduler& ue_task_sched,
6163
up_resource_manager& up_resource_mng)
6264
{
6365
return launch_async<pdu_session_resource_setup_routine>(setup_msg,
@@ -67,6 +69,8 @@ async_task<cu_cp_pdu_session_resource_setup_response> cu_cp_routine_manager::sta
6769
e1ap_bearer_ctxt_mng,
6870
f1ap_ue_ctxt_mng,
6971
rrc_ue_ctrl_notifier,
72+
cu_cp_notifier,
73+
ue_task_sched,
7074
up_resource_mng,
7175
logger);
7276
}
@@ -77,28 +81,36 @@ cu_cp_routine_manager::start_pdu_session_resource_modification_routine(
7781
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
7882
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
7983
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
84+
cu_cp_rrc_ue_interface& cu_cp_notifier,
85+
ue_task_scheduler& ue_task_sched,
8086
up_resource_manager& up_resource_mng)
8187
{
82-
return launch_async<pdu_session_resource_modification_routine>(
83-
modify_msg, e1ap_bearer_ctxt_mng, f1ap_ue_ctxt_mng, rrc_ue_ctrl_notifier, up_resource_mng, logger);
88+
return launch_async<pdu_session_resource_modification_routine>(modify_msg,
89+
e1ap_bearer_ctxt_mng,
90+
f1ap_ue_ctxt_mng,
91+
rrc_ue_ctrl_notifier,
92+
cu_cp_notifier,
93+
ue_task_sched,
94+
up_resource_mng,
95+
logger);
8496
}
8597

8698
async_task<cu_cp_pdu_session_resource_release_response>
8799
cu_cp_routine_manager::start_pdu_session_resource_release_routine(
88100
const cu_cp_pdu_session_resource_release_command& release_cmd,
89101
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
90102
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
91-
ngap_control_message_handler& ngap_handler,
92103
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
93-
ue_task_scheduler& task_sched,
104+
cu_cp_rrc_ue_interface& cu_cp_notifier,
105+
ue_task_scheduler& ue_task_sched,
94106
up_resource_manager& up_resource_mng)
95107
{
96108
return launch_async<pdu_session_resource_release_routine>(release_cmd,
97109
e1ap_bearer_ctxt_mng,
98110
f1ap_ue_ctxt_mng,
99-
ngap_handler,
100111
rrc_ue_ctrl_notifier,
101-
task_sched,
112+
cu_cp_notifier,
113+
ue_task_sched,
102114
up_resource_mng,
103115
logger);
104116
}
@@ -119,10 +131,19 @@ async_task<bool> cu_cp_routine_manager::start_reestablishment_context_modificati
119131
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
120132
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
121133
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
134+
cu_cp_rrc_ue_interface& cu_cp_notifier,
135+
ue_task_scheduler& ue_task_sched,
122136
up_resource_manager& ue_up_resource_manager)
123137
{
124-
return launch_async<reestablishment_context_modification_routine>(
125-
ue_index, up_sec, e1ap_bearer_ctxt_mng, f1ap_ue_ctxt_mng, rrc_ue_ctrl_notifier, ue_up_resource_manager, logger);
138+
return launch_async<reestablishment_context_modification_routine>(ue_index,
139+
up_sec,
140+
e1ap_bearer_ctxt_mng,
141+
f1ap_ue_ctxt_mng,
142+
rrc_ue_ctrl_notifier,
143+
cu_cp_notifier,
144+
ue_task_sched,
145+
ue_up_resource_manager,
146+
logger);
126147
}
127148

128149
async_task<cu_cp_inter_du_handover_response>

lib/cu_cp/routine_managers/cu_cp_routine_manager.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,26 @@ class cu_cp_routine_manager : public common_task_scheduler
4444
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
4545
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
4646
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
47+
cu_cp_rrc_ue_interface& cu_cp_notifier,
48+
ue_task_scheduler& ue_task_sched,
4749
up_resource_manager& up_resource_mng);
4850

4951
async_task<cu_cp_pdu_session_resource_release_response>
5052
start_pdu_session_resource_release_routine(const cu_cp_pdu_session_resource_release_command& release_cmd,
5153
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
5254
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
53-
ngap_control_message_handler& ngap_handler,
5455
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
55-
ue_task_scheduler& task_sched,
56+
cu_cp_rrc_ue_interface& cu_cp_notifier,
57+
ue_task_scheduler& ue_task_sched,
5658
up_resource_manager& up_resource_mng);
5759

5860
async_task<cu_cp_pdu_session_resource_modify_response>
5961
start_pdu_session_resource_modification_routine(const cu_cp_pdu_session_resource_modify_request& modify_msg,
6062
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
6163
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
6264
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
65+
cu_cp_rrc_ue_interface& cu_cp_notifier,
66+
ue_task_scheduler& ue_task_sched,
6367
up_resource_manager& up_resource_mng);
6468

6569
async_task<cu_cp_ue_context_release_complete>
@@ -74,6 +78,8 @@ class cu_cp_routine_manager : public common_task_scheduler
7478
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng,
7579
f1ap_ue_context_manager& f1ap_ue_ctxt_mng,
7680
du_processor_rrc_ue_control_message_notifier& rrc_ue_ctrl_notifier,
81+
cu_cp_rrc_ue_interface& cu_cp_notifier,
82+
ue_task_scheduler& ue_task_sched,
7783
up_resource_manager& ue_up_resource_manager);
7884

7985
async_task<cu_cp_inter_du_handover_response>

lib/cu_cp/routines/pdu_session_resource_modification_routine.cpp

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

1111
#include "pdu_session_resource_modification_routine.h"
1212
#include "pdu_session_routine_helpers.h"
13+
#include "srsran/cu_cp/ue_task_scheduler.h"
1314

1415
using namespace srsran;
1516
using namespace srsran::srs_cu_cp;
@@ -45,12 +46,16 @@ pdu_session_resource_modification_routine::pdu_session_resource_modification_rou
4546
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng_,
4647
f1ap_ue_context_manager& f1ap_ue_ctxt_mng_,
4748
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier_,
49+
cu_cp_rrc_ue_interface& cu_cp_notifier_,
50+
ue_task_scheduler& ue_task_sched_,
4851
up_resource_manager& up_resource_mng_,
4952
srslog::basic_logger& logger_) :
5053
modify_request(modify_request_),
5154
e1ap_bearer_ctxt_mng(e1ap_bearer_ctxt_mng_),
5255
f1ap_ue_ctxt_mng(f1ap_ue_ctxt_mng_),
5356
rrc_ue_notifier(rrc_ue_notifier_),
57+
cu_cp_notifier(cu_cp_notifier_),
58+
ue_task_sched(ue_task_sched_),
5459
up_resource_mng(up_resource_mng_),
5560
logger(logger_)
5661
{
@@ -170,6 +175,9 @@ void pdu_session_resource_modification_routine::operator()(
170175
// Handle RRC Reconfiguration result.
171176
if (handle_procedure_response(response_msg, modify_request, rrc_reconfig_result, logger) == false) {
172177
logger.warning("ue={}: \"{}\" RRC reconfiguration failed", modify_request.ue_index, name());
178+
// Notify NGAP to request UE context release from AMF
179+
ue_task_sched.schedule_async_task(cu_cp_notifier.handle_ue_context_release(
180+
{modify_request.ue_index, {}, ngap_cause_radio_network_t::release_due_to_ngran_generated_reason}));
173181
CORO_EARLY_RETURN(generate_pdu_session_resource_modify_response(false));
174182
}
175183
}

lib/cu_cp/routines/pdu_session_resource_modification_routine.h

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

1111
#pragma once
1212

13+
#include "../cu_cp_impl_interface.h"
1314
#include "../du_processor/du_processor.h"
1415
#include "../up_resource_manager/up_resource_manager_impl.h"
16+
#include "srsran/cu_cp/ue_task_scheduler.h"
1517
#include "srsran/e1ap/cu_cp/e1ap_cu_cp.h"
1618
#include "srsran/support/async/async_task.h"
1719

@@ -27,6 +29,8 @@ class pdu_session_resource_modification_routine
2729
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng_,
2830
f1ap_ue_context_manager& f1ap_ue_ctxt_mng_,
2931
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier_,
32+
cu_cp_rrc_ue_interface& cu_cp_notifier_,
33+
ue_task_scheduler& ue_task_sched_,
3034
up_resource_manager& up_resource_mng_,
3135
srslog::basic_logger& logger_);
3236

@@ -48,6 +52,8 @@ class pdu_session_resource_modification_routine
4852
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng; // to trigger bearer context setup at CU-UP
4953
f1ap_ue_context_manager& f1ap_ue_ctxt_mng; // to trigger UE context modification at DU
5054
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier; // to trigger RRC Reconfiguration at UE
55+
cu_cp_rrc_ue_interface& cu_cp_notifier; // to trigger UE release at CU-CP
56+
ue_task_scheduler& ue_task_sched; // to schedule UE release request
5157
up_resource_manager& up_resource_mng; // to get RRC DRB config
5258
srslog::basic_logger& logger;
5359

lib/cu_cp/routines/pdu_session_resource_release_routine.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ pdu_session_resource_release_routine::pdu_session_resource_release_routine(
1919
const cu_cp_pdu_session_resource_release_command& release_cmd_,
2020
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng_,
2121
f1ap_ue_context_manager& f1ap_ue_ctxt_mng_,
22-
ngap_control_message_handler& ngap_handler_,
2322
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier_,
23+
cu_cp_rrc_ue_interface& cu_cp_notifier_,
2424
ue_task_scheduler& task_sched_,
2525
up_resource_manager& up_resource_mng_,
2626
srslog::basic_logger& logger_) :
2727
release_cmd(release_cmd_),
2828
e1ap_bearer_ctxt_mng(e1ap_bearer_ctxt_mng_),
2929
f1ap_ue_ctxt_mng(f1ap_ue_ctxt_mng_),
30-
ngap_handler(ngap_handler_),
3130
rrc_ue_notifier(rrc_ue_notifier_),
31+
cu_cp_notifier(cu_cp_notifier_),
3232
task_sched(task_sched_),
3333
up_resource_mng(up_resource_mng_),
3434
logger(logger_)
@@ -178,13 +178,8 @@ pdu_session_resource_release_routine::handle_pdu_session_resource_release_respon
178178
logger.info("ue={}: \"{}\" failed", release_cmd.ue_index, name());
179179

180180
// Trigger UE context release request.
181-
cu_cp_ue_context_release_request req{release_cmd.ue_index};
182-
req.cause = ngap_cause_radio_network_t::radio_conn_with_ue_lost;
183-
task_sched.schedule_async_task(launch_async([ngap_notif = &ngap_handler, req](coro_context<async_task<void>>& ctx) {
184-
CORO_BEGIN(ctx);
185-
CORO_AWAIT(ngap_notif->handle_ue_context_release_request(req));
186-
CORO_RETURN();
187-
}));
181+
task_sched.schedule_async_task(cu_cp_notifier.handle_ue_context_release(
182+
{release_cmd.ue_index, {}, ngap_cause_radio_network_t::radio_conn_with_ue_lost}));
188183
}
189184

190185
return response_msg;

lib/cu_cp/routines/pdu_session_resource_release_routine.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
#pragma once
1212

13+
#include "../cu_cp_impl_interface.h"
1314
#include "../du_processor/du_processor.h"
1415
#include "../up_resource_manager/up_resource_manager_impl.h"
1516
#include "srsran/cu_cp/ue_task_scheduler.h"
1617
#include "srsran/e1ap/cu_cp/e1ap_cu_cp.h"
17-
#include "srsran/ngap/ngap.h"
1818
#include "srsran/support/async/async_task.h"
1919

2020
namespace srsran {
@@ -28,8 +28,8 @@ class pdu_session_resource_release_routine
2828
pdu_session_resource_release_routine(const cu_cp_pdu_session_resource_release_command& release_cmd_,
2929
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng_,
3030
f1ap_ue_context_manager& f1ap_ue_ctxt_mng_,
31-
ngap_control_message_handler& ngap_handler_,
3231
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier_,
32+
cu_cp_rrc_ue_interface& cu_cp_notifier_,
3333
ue_task_scheduler& task_sched_,
3434
up_resource_manager& up_resource_mng_,
3535
srslog::basic_logger& logger_);
@@ -50,9 +50,9 @@ class pdu_session_resource_release_routine
5050

5151
e1ap_bearer_context_manager& e1ap_bearer_ctxt_mng; // to trigger bearer context setup at CU-UP
5252
f1ap_ue_context_manager& f1ap_ue_ctxt_mng; // to trigger UE context modification at DU
53-
ngap_control_message_handler& ngap_handler; // to request UE release
5453
du_processor_rrc_ue_control_message_notifier& rrc_ue_notifier; // to trigger RRC Reconfiguration at UE
55-
ue_task_scheduler& task_sched; // to schedule UE release request (over NGAP)
54+
cu_cp_rrc_ue_interface& cu_cp_notifier; // to trigger UE release at CU-CP
55+
ue_task_scheduler& task_sched; // to schedule UE release request
5656
up_resource_manager& up_resource_mng; // to get RRC DRB config
5757
srslog::basic_logger& logger;
5858

0 commit comments

Comments
 (0)