@@ -245,57 +245,45 @@ bool du_processor_impl::create_rrc_ue(du_ue& ue,
245245 return true ;
246246}
247247
248- cu_cp_ue_creation_response du_processor_impl::handle_ue_creation_request (const cu_cp_ue_creation_request& msg)
248+ ue_rrc_context_creation_response
249+ du_processor_impl::handle_ue_rrc_context_creation_request (const ue_rrc_context_creation_request& req)
249250{
250- srsran_assert (config_helpers::is_valid (msg.cgi ), " ue={}: Invalid CGI" , msg.ue_index );
251- srsran_assert (msg.c_rnti != rnti_t ::INVALID_RNTI, " ue={}: Invalid C-RNTI" , msg.ue_index );
251+ srsran_assert (req.ue_index != ue_index_t ::invalid, " Invalid UE index" );
252+ srsran_assert (req.c_rnti != rnti_t ::INVALID_RNTI, " ue={}: Invalid C-RNTI" , req.ue_index );
253+ srsran_assert (config_helpers::is_valid (req.cgi ), " ue={}: Invalid CGI" , req.ue_index );
252254
253255 // Check that creation message is valid
254- du_cell_index_t pcell_index = find_cell (msg .cgi .nci );
256+ du_cell_index_t pcell_index = find_cell (req .cgi .nci );
255257 if (pcell_index == du_cell_index_t ::invalid) {
256- logger.warning (" ue={}: Could not find cell with cell_id={}" , msg.ue_index , msg.cgi .nci );
258+ logger.warning (" ue={}: Could not find cell with NCI={}" , req.ue_index , req.cgi .nci );
259+ cu_cp_notifier.on_ue_removal_required (req.ue_index );
257260 return {};
258261 }
259262 const pci_t pci = cell_db.at (pcell_index).pci ;
260263
261- // Allocate new UE index.
262- ue_index_t ue_index = msg.ue_index ;
263- if (ue_index == ue_index_t ::invalid) {
264- // It's a new UE. Allocate new UE index.
265- ue_index = allocate_new_ue_index ();
266- if (ue_index == ue_index_t ::invalid) {
267- logger.warning (" ue={}: Could not create UE context" , ue_index);
268- return {};
269- }
270- }
271-
272- // Create new UE context
273- du_ue* ue = ue_manager.set_ue_du_context (ue_index, context.id , pci, msg.c_rnti );
264+ // Create new UE RRC context
265+ du_ue* ue = ue_manager.set_ue_du_context (req.ue_index , context.id , pci, req.c_rnti );
274266 if (ue == nullptr ) {
275- logger.warning (" ue={}: Could not create UE context" , ue_index);
267+ logger.warning (" ue={}: Could not create UE context" , req. ue_index );
276268 return {};
277269 }
278-
279- // Set parameters from creation message
280270 ue->set_pcell_index (pcell_index);
281271
282272 // Create RRC UE. If the DU-to-CU-RRC-Container is empty, the UE will be rejected.
283- if (not create_rrc_ue (*ue, msg.c_rnti , msg.cgi , msg.du_to_cu_rrc_container .copy (), std::move (msg.rrc_context ))) {
284- logger.warning (" ue={}: Could not create RRC UE object" , ue_index);
285- ue_manager.remove_ue (ue_index);
273+ if (not create_rrc_ue (*ue, req.c_rnti , req.cgi , req.du_to_cu_rrc_container .copy (), std::move (req.prev_context ))) {
274+ logger.warning (" ue={}: Could not create RRC UE object" , req.ue_index );
286275 return {};
287276 }
288- rrc_ue_interface* rrc_ue = rrc->find_ue (ue_index);
289- f1ap_rrc_ue_adapters[ue_index] = {};
290- f1ap_rrc_ue_adapters.at (ue_index). connect_rrc_ue (rrc_ue-> get_ul_ccch_pdu_handler (),
291- rrc_ue->get_ul_dcch_pdu_handler ());
277+ rrc_ue_interface* rrc_ue = rrc->find_ue (req. ue_index );
278+ f1ap_rrc_ue_adapters[req. ue_index ] = {};
279+ f1ap_rrc_ue_adapters.at (req. ue_index )
280+ . connect_rrc_ue (rrc_ue-> get_ul_ccch_pdu_handler (), rrc_ue->get_ul_dcch_pdu_handler ());
292281
293282 // Signal back to F1AP that the UE was successfully created.
294- cu_cp_ue_creation_response response;
295- response.ue_index = ue_index;
296- response.f1ap_rrc_notifier = &f1ap_rrc_ue_adapters.at (ue_index);
283+ ue_rrc_context_creation_response response;
284+ response.f1ap_rrc_notifier = &f1ap_rrc_ue_adapters.at (req.ue_index );
297285
298- logger.info (" ue={} c-rnti={}: UE created" , ue->get_ue_index (), msg .c_rnti );
286+ logger.info (" ue={} c-rnti={}: UE created" , ue->get_ue_index (), req .c_rnti );
299287
300288 return response;
301289}
0 commit comments