Skip to content

Commit 94271d7

Browse files
cu: Enhance common type cause
1 parent 8776550 commit 94271d7

32 files changed

+199
-142
lines changed

include/srsran/cu_cp/cu_cp_types.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ struct cu_cp_associated_qos_flow {
279279
};
280280
struct cu_cp_qos_flow_with_cause_item {
281281
qos_flow_id_t qos_flow_id = qos_flow_id_t::invalid;
282-
cause_t cause = cause_t::nulltype;
282+
cause_t cause;
283283
};
284284

285285
using cu_cp_qos_flow_failed_to_setup_item = cu_cp_qos_flow_with_cause_item;
@@ -303,7 +303,7 @@ struct cu_cp_pdu_session_res_setup_response_item {
303303
};
304304

305305
struct cu_cp_pdu_session_resource_setup_unsuccessful_transfer {
306-
cause_t cause = cause_t::nulltype;
306+
cause_t cause;
307307
optional<crit_diagnostics_t> crit_diagnostics;
308308
};
309309

@@ -319,7 +319,7 @@ struct cu_cp_pdu_session_resource_setup_response {
319319
};
320320

321321
struct cu_cp_pdu_session_res_release_cmd_transfer {
322-
cause_t cause = cause_t::nulltype;
322+
cause_t cause;
323323
};
324324

325325
struct cu_cp_pdu_session_res_to_release_item_rel_cmd {
@@ -431,13 +431,13 @@ struct cu_cp_pdu_session_resource_modify_response {
431431

432432
struct cu_cp_ngap_ue_context_release_command {
433433
ue_index_t ue_index = ue_index_t::invalid;
434-
cause_t cause = cause_t::nulltype;
434+
cause_t cause;
435435
};
436436

437437
struct cu_cp_ue_context_release_request {
438438
ue_index_t ue_index = ue_index_t::invalid;
439439
std::vector<pdu_session_id_t> pdu_session_res_list_cxt_rel_req;
440-
cause_t cause = cause_t::nulltype;
440+
cause_t cause;
441441
};
442442

443443
struct cu_cp_recommended_cell_item {

include/srsran/ngap/ngap_handover.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ struct ngap_handover_resource_allocation_response {
150150
ngap_target_ngran_node_to_source_ngran_node_transparent_container target_to_source_transparent_container;
151151

152152
// handover request failure
153-
cause_t cause = cause_t::nulltype;
153+
cause_t cause;
154154

155155
// common
156156
optional<crit_diagnostics_t> crit_diagnostics;

include/srsran/ran/cause.h

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,81 @@
1010

1111
#pragma once
1212

13+
#include "srsran/adt/variant.h"
14+
1315
namespace srsran {
1416

15-
enum class cause_t : uint8_t {
16-
radio_network = 0,
17-
transport = 1,
18-
nas = 2,
19-
protocol = 3,
20-
misc = 4,
21-
choice_exts = 5,
22-
nulltype = 6
17+
enum class cause_radio_network_t : uint8_t {
18+
unspecified = 0,
19+
txnrelocoverall_expiry,
20+
successful_ho,
21+
release_due_to_ngran_generated_reason,
22+
release_due_to_5gc_generated_reason,
23+
ho_cancelled,
24+
partial_ho,
25+
ho_fail_in_target_5_gc_ngran_node_or_target_sys,
26+
ho_target_not_allowed,
27+
tngrelocoverall_expiry,
28+
tngrelocprep_expiry,
29+
cell_not_available,
30+
unknown_target_id,
31+
no_radio_res_available_in_target_cell,
32+
unknown_local_ue_ngap_id,
33+
inconsistent_remote_ue_ngap_id,
34+
ho_desirable_for_radio_reason,
35+
time_crit_ho,
36+
res_optim_ho,
37+
reduce_load_in_serving_cell,
38+
user_inactivity,
39+
radio_conn_with_ue_lost,
40+
radio_res_not_available,
41+
invalid_qos_combination,
42+
fail_in_radio_interface_proc,
43+
interaction_with_other_proc,
44+
unknown_pdu_session_id,
45+
unkown_qos_flow_id,
46+
multiple_pdu_session_id_instances,
47+
multiple_qos_flow_id_instances,
48+
encryption_and_or_integrity_protection_algorithms_not_supported,
49+
ng_intra_sys_ho_triggered,
50+
ng_inter_sys_ho_triggered,
51+
xn_ho_triggered,
52+
not_supported_5qi_value,
53+
ue_context_transfer,
54+
ims_voice_eps_fallback_or_rat_fallback_triggered,
55+
up_integrity_protection_not_possible,
56+
up_confidentiality_protection_not_possible,
57+
slice_not_supported,
58+
ue_in_rrc_inactive_state_not_reachable,
59+
redirection,
60+
res_not_available_for_the_slice,
61+
ue_max_integrity_protected_data_rate_reason,
62+
release_due_to_cn_detected_mob
63+
};
64+
65+
enum class cause_transport_t : uint8_t { transport_res_unavailable = 0, unspecified };
66+
67+
enum class cause_nas_t : uint8_t { normal_release = 0, authentication_fail, deregister, unspecified };
68+
69+
enum class cause_protocol_t : uint8_t {
70+
transfer_syntax_error = 0,
71+
abstract_syntax_error_reject,
72+
abstract_syntax_error_ignore_and_notify,
73+
msg_not_compatible_with_receiver_state,
74+
semantic_error,
75+
abstract_syntax_error_falsely_constructed_msg,
76+
unspecified
77+
};
78+
79+
enum class cause_misc_t : uint8_t {
80+
ctrl_processing_overload = 0,
81+
not_enough_user_plane_processing_res,
82+
hardware_fail,
83+
om_intervention,
84+
unknown_plmn_or_sn_pn,
85+
unspecified
2386
};
2487

88+
using cause_t = variant<cause_radio_network_t, cause_transport_t, cause_nas_t, cause_protocol_t, cause_misc_t>;
89+
2590
} // namespace srsran

include/srsran/rrc/rrc_ue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class rrc_ue_reestablishment_proc_notifier
143143

144144
struct rrc_ue_context_release_command {
145145
ue_index_t ue_index = ue_index_t::invalid;
146-
cause_t cause = cause_t::nulltype;
146+
cause_t cause;
147147
byte_buffer rrc_release_pdu;
148148
optional<srb_id_t> srb_id;
149149
};

lib/cu_cp/du_processor/du_processor_impl.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void du_processor_impl::handle_f1_setup_request(const f1ap_f1_setup_request& req
7777
// Reject request without served cells
7878
if (request.gnb_du_served_cells_list.size() == 0) {
7979
logger.error("Not handling F1 setup without served cells");
80-
send_f1_setup_failure(cause_t::radio_network);
80+
send_f1_setup_failure(cause_radio_network_t::unspecified);
8181
return;
8282
}
8383

@@ -90,7 +90,7 @@ void du_processor_impl::handle_f1_setup_request(const f1ap_f1_setup_request& req
9090
// Forward serving cell list to RRC DU
9191
// TODO: How to handle missing optional freq and timing in meas timing config?
9292
if (!rrc_du_adapter.on_new_served_cell_list(request.gnb_du_served_cells_list)) {
93-
send_f1_setup_failure(cause_t::protocol);
93+
send_f1_setup_failure(cause_protocol_t::unspecified);
9494
return;
9595
}
9696

@@ -101,35 +101,35 @@ void du_processor_impl::handle_f1_setup_request(const f1ap_f1_setup_request& req
101101

102102
if (du_cell.cell_index == du_cell_index_t::invalid) {
103103
logger.error("Not handling F1 setup, maximum number of DU cells reached");
104-
send_f1_setup_failure(cause_t::radio_network);
104+
send_f1_setup_failure(cause_radio_network_t::unspecified);
105105
return;
106106
}
107107

108108
du_cell.cgi = served_cell.served_cell_info.nr_cgi;
109109
if (not srsran::config_helpers::is_valid(du_cell.cgi)) {
110110
logger.error("Not handling F1 setup, invalid CGI for cell {}", du_cell.cell_index);
111-
send_f1_setup_failure(cause_t::radio_network);
111+
send_f1_setup_failure(cause_radio_network_t::unspecified);
112112
return;
113113
}
114114

115115
du_cell.pci = served_cell.served_cell_info.nr_pci;
116116
if (not srsran::config_helpers::is_valid(du_cell.pci)) {
117117
logger.error("Not handling F1 setup, invalid PCI for cell {}", du_cell.pci);
118-
send_f1_setup_failure(cause_t::radio_network);
118+
send_f1_setup_failure(cause_radio_network_t::unspecified);
119119
return;
120120
}
121121

122122
if (not served_cell.served_cell_info.five_gs_tac.has_value()) {
123123
logger.error("Not handling F1 setup, missing TAC for cell {}", du_cell.cell_index);
124-
send_f1_setup_failure(cause_t::radio_network);
124+
send_f1_setup_failure(cause_radio_network_t::unspecified);
125125
return;
126126
} else {
127127
du_cell.tac = served_cell.served_cell_info.five_gs_tac.value();
128128
}
129129

130130
if (not served_cell.gnb_du_sys_info.has_value()) {
131131
logger.error("Not handling served cells without system information");
132-
send_f1_setup_failure(cause_t::radio_network);
132+
send_f1_setup_failure(cause_radio_network_t::unspecified);
133133
return;
134134
} else {
135135
// Store and unpack system information
@@ -539,7 +539,7 @@ void du_processor_impl::handle_inactivity_notification(const cu_cp_inactivity_no
539539
if (msg.ue_inactive) {
540540
cu_cp_ue_context_release_request req;
541541
req.ue_index = msg.ue_index;
542-
req.cause = cause_t::radio_network;
542+
req.cause = cause_radio_network_t::unspecified;
543543

544544
// Add PDU Session IDs
545545
auto& up_resource_manager = ue->get_up_resource_manager();

lib/cu_cp/routines/mobility/inter_cu_handover_target_routine.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "inter_cu_handover_target_routine.h"
1212
#include "../pdu_session_routine_helpers.h"
1313
#include "srsran/ngap/ngap_handover.h"
14+
#include "srsran/ran/cause.h"
1415

1516
using namespace srsran;
1617
using namespace srs_cu_cp;
@@ -338,7 +339,7 @@ inter_cu_handover_target_routine::generate_handover_resource_allocation_response
338339

339340
// ngap_ho_res_alloc_unsuccessful_transfer
340341
// cause
341-
failed_item.unsuccessful_transfer.cause = cause_t::protocol;
342+
failed_item.unsuccessful_transfer.cause = cause_protocol_t::unspecified;
342343

343344
response.pdu_session_res_failed_to_setup_list_ho_ack.emplace(failed_item.pdu_session_id, failed_item);
344345
}
@@ -347,7 +348,7 @@ inter_cu_handover_target_routine::generate_handover_resource_allocation_response
347348
} else {
348349
response.success = false;
349350
response.ue_index = request.ue_index;
350-
response.cause = cause_t::protocol;
351+
response.cause = cause_protocol_t::unspecified;
351352
}
352353

353354
return response;

lib/cu_cp/routines/mobility/inter_du_handover_routine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void inter_du_handover_routine::operator()(coro_context<async_task<cu_cp_inter_d
109109

110110
{
111111
ue_context_release_cmd.ue_index = target_ue_context_setup_response.ue_index;
112-
ue_context_release_cmd.cause = cause_t::radio_network;
112+
ue_context_release_cmd.cause = cause_radio_network_t::unspecified;
113113
CORO_AWAIT_VALUE(ue_context_release_result,
114114
target_du_f1ap_ue_ctxt_notifier.on_ue_context_release_command(ue_context_release_cmd));
115115

@@ -155,7 +155,7 @@ void inter_du_handover_routine::operator()(coro_context<async_task<cu_cp_inter_d
155155
// Remove UE context in source DU.
156156
{
157157
ue_context_release_cmd.ue_index = source_ue->get_ue_index();
158-
ue_context_release_cmd.cause = cause_t::radio_network;
158+
ue_context_release_cmd.cause = cause_radio_network_t::unspecified;
159159
CORO_AWAIT_VALUE(ue_context_release_result,
160160
source_du_f1ap_ue_ctxt_notifier.on_ue_context_release_command(ue_context_release_cmd));
161161

lib/cu_cp/routines/pdu_session_resource_modification_routine.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ void fill_modify_failed_list(cu_cp_pdu_session_resource_modify_response& re
135135
for (const auto& item : modify_request.pdu_session_res_modify_items) {
136136
cu_cp_pdu_session_resource_failed_to_modify_item failed_item;
137137
failed_item.pdu_session_id = item.pdu_session_id;
138-
failed_item.unsuccessful_transfer.cause = cause_t::misc;
138+
failed_item.unsuccessful_transfer.cause = cause_misc_t::unspecified;
139139
response_msg.pdu_session_res_failed_to_modify_list.emplace(failed_item.pdu_session_id, failed_item);
140140
}
141141
}
@@ -272,7 +272,7 @@ void mark_all_sessions_as_failed(cu_cp_pdu_session_resource_modify_response&
272272
for (const auto& modify_item : modify_request.pdu_session_res_modify_items) {
273273
cu_cp_pdu_session_resource_failed_to_modify_item failed_item;
274274
failed_item.pdu_session_id = modify_item.pdu_session_id;
275-
failed_item.unsuccessful_transfer.cause = cause_t::radio_network;
275+
failed_item.unsuccessful_transfer.cause = cause_radio_network_t::unspecified;
276276
response_msg.pdu_session_res_failed_to_modify_list.emplace(failed_item.pdu_session_id, failed_item);
277277
}
278278
}
@@ -293,7 +293,7 @@ pdu_session_resource_modification_routine::generate_pdu_session_resource_modify_
293293
for (const auto& psi : next_config.pdu_sessions_failed_to_modify_list) {
294294
cu_cp_pdu_session_resource_failed_to_modify_item failed_item;
295295
failed_item.pdu_session_id = psi;
296-
failed_item.unsuccessful_transfer.cause = cause_t::radio_network;
296+
failed_item.unsuccessful_transfer.cause = cause_radio_network_t::unspecified;
297297
response_msg.pdu_session_res_failed_to_modify_list.emplace(failed_item.pdu_session_id, failed_item);
298298
}
299299
} else {

lib/cu_cp/routines/pdu_session_resource_release_routine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void pdu_session_resource_release_routine::operator()(
7171
if (next_config.context_removal_required) {
7272
// Remove bearer context.
7373
bearer_context_release_command.ue_index = release_cmd.ue_index;
74-
bearer_context_release_command.cause = cause_t::radio_network;
74+
bearer_context_release_command.cause = cause_radio_network_t::unspecified;
7575

7676
CORO_AWAIT(e1ap_ctrl_notifier.on_bearer_context_release_command(bearer_context_release_command));
7777

@@ -108,7 +108,7 @@ async_task<void> pdu_session_resource_release_routine::request_context_release()
108108

109109
cu_cp_ue_context_release_request ue_context_release_request;
110110
ue_context_release_request.ue_index = release_cmd.ue_index;
111-
ue_context_release_request.cause = cause_t::radio_network;
111+
ue_context_release_request.cause = cause_radio_network_t::unknown_pdu_session_id;
112112
ngap_ctrl_notifier.on_ue_context_release_request(ue_context_release_request);
113113

114114
CORO_RETURN();

lib/cu_cp/routines/pdu_session_resource_setup_routine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ void fill_setup_failed_list(cu_cp_pdu_session_resource_setup_response& resp
301301
for (const auto& item : setup_msg.pdu_session_res_setup_items) {
302302
cu_cp_pdu_session_res_setup_failed_item failed_item;
303303
failed_item.pdu_session_id = item.pdu_session_id;
304-
failed_item.unsuccessful_transfer.cause = cause_t::misc;
304+
failed_item.unsuccessful_transfer.cause = cause_misc_t::unspecified;
305305
response_msg.pdu_session_res_failed_to_setup_items.emplace(failed_item.pdu_session_id, failed_item);
306306
}
307307
}
@@ -383,7 +383,7 @@ pdu_session_resource_setup_routine::handle_pdu_session_resource_setup_result(boo
383383
} else {
384384
logger.error("ue={}: \"{}\" failed.", setup_msg.ue_index, name());
385385

386-
mark_all_sessions_as_failed(response_msg, setup_msg, cause_t::radio_network);
386+
mark_all_sessions_as_failed(response_msg, setup_msg, cause_radio_network_t::unspecified);
387387
}
388388

389389
return response_msg;

0 commit comments

Comments
 (0)