Skip to content

Commit 21253be

Browse files
frankistcodebot
authored andcommitted
cu-cp: refactor f1ap ue context setup procedure
1 parent 1e8234e commit 21253be

File tree

4 files changed

+377
-385
lines changed

4 files changed

+377
-385
lines changed

lib/f1ap/cu_cp/f1ap_asn1_helpers.h

Lines changed: 0 additions & 309 deletions
Original file line numberDiff line numberDiff line change
@@ -25,315 +25,6 @@
2525
namespace srsran {
2626
namespace srs_cu_cp {
2727

28-
/// \brief Convert the UE Context Setup Request from common type to ASN.1.
29-
/// \param[out] asn1_request The ASN.1 struct to store the result.
30-
/// \param[in] request The common type UE Context Setup Request.
31-
inline void fill_asn1_ue_context_setup_request(asn1::f1ap::ue_context_setup_request_s& asn1_request,
32-
const f1ap_ue_context_setup_request& request)
33-
{
34-
// sp cell id
35-
asn1_request->sp_cell_id = nr_cgi_to_f1ap_asn1(request.sp_cell_id);
36-
37-
// serv cell idx
38-
asn1_request->serv_cell_idx = request.serv_cell_idx;
39-
40-
// sp cell ul cfg
41-
if (request.sp_cell_ul_cfg.has_value()) {
42-
asn1_request->sp_cell_ul_cfg = cell_ul_cfg_to_asn1(request.sp_cell_ul_cfg.value());
43-
}
44-
45-
// cu to du rrc info
46-
cu_to_du_rrc_info_to_asn1(asn1_request->cu_to_du_rrc_info, request.cu_to_du_rrc_info);
47-
48-
// candidate sp cell list
49-
if (!request.candidate_sp_cell_list.empty()) {
50-
asn1_request->candidate_sp_cell_list_present = true;
51-
for (const auto& candidate_cell_item : request.candidate_sp_cell_list) {
52-
asn1::protocol_ie_single_container_s<asn1::f1ap::candidate_sp_cell_item_ies_o> asn1_candidate_cell_item_container;
53-
asn1_candidate_cell_item_container.load_info_obj(ASN1_F1AP_ID_CANDIDATE_SP_CELL_ITEM);
54-
55-
auto& asn1_candidate_cell_item = asn1_candidate_cell_item_container.value().candidate_sp_cell_item();
56-
asn1_candidate_cell_item.candidate_sp_cell_id = nr_cgi_to_f1ap_asn1(candidate_cell_item.candidate_sp_cell_id);
57-
58-
asn1_request->candidate_sp_cell_list.push_back(asn1_candidate_cell_item_container);
59-
}
60-
}
61-
62-
// drx cycle
63-
if (request.drx_cycle.has_value()) {
64-
asn1_request->drx_cycle_present = true;
65-
// long drx cycle len
66-
asn1::number_to_enum(asn1_request->drx_cycle.long_drx_cycle_len, request.drx_cycle.value().long_drx_cycle_len);
67-
68-
// short drx cycle len
69-
if (request.drx_cycle.value().short_drx_cycle_len.has_value()) {
70-
asn1_request->drx_cycle.short_drx_cycle_len_present = true;
71-
asn1::number_to_enum(asn1_request->drx_cycle.short_drx_cycle_len,
72-
request.drx_cycle.value().short_drx_cycle_len.value());
73-
}
74-
75-
// short drx cycle timer
76-
if (request.drx_cycle.value().short_drx_cycle_timer.has_value()) {
77-
asn1_request->drx_cycle.short_drx_cycle_timer_present = true;
78-
asn1_request->drx_cycle.short_drx_cycle_timer = request.drx_cycle.value().short_drx_cycle_timer.value();
79-
}
80-
}
81-
82-
// res coordination transfer container
83-
if (!request.res_coordination_transfer_container.empty()) {
84-
asn1_request->res_coordination_transfer_container_present = true;
85-
asn1_request->res_coordination_transfer_container = request.res_coordination_transfer_container.copy();
86-
}
87-
88-
// scell to be setup list
89-
if (!request.scell_to_be_setup_list.empty()) {
90-
asn1_request->scell_to_be_setup_list_present = true;
91-
92-
for (const auto& scell_to_be_setup_item : request.scell_to_be_setup_list) {
93-
asn1::protocol_ie_single_container_s<asn1::f1ap::scell_to_be_setup_item_ies_o>
94-
asn1_scell_to_be_setup_item_container;
95-
asn1_scell_to_be_setup_item_container.load_info_obj(ASN1_F1AP_ID_SCELL_TO_BE_SETUP_ITEM);
96-
97-
auto& asn1_scell_to_be_setup_item = asn1_scell_to_be_setup_item_container.value().scell_to_be_setup_item();
98-
99-
f1ap_scell_to_be_setup_mod_item_to_asn1(asn1_scell_to_be_setup_item, scell_to_be_setup_item);
100-
asn1_request->scell_to_be_setup_list.push_back(asn1_scell_to_be_setup_item_container);
101-
}
102-
}
103-
104-
// srbs to be setup list
105-
if (!request.srbs_to_be_setup_list.empty()) {
106-
asn1_request->srbs_to_be_setup_list_present = true;
107-
108-
for (const auto& srbs_to_be_setup_item : request.srbs_to_be_setup_list) {
109-
asn1::protocol_ie_single_container_s<asn1::f1ap::srbs_to_be_setup_item_ies_o>
110-
asn1_srbs_to_be_setup_item_container;
111-
asn1_srbs_to_be_setup_item_container.set_item(ASN1_F1AP_ID_SRBS_TO_BE_SETUP_ITEM);
112-
auto& asn1_srbs_to_be_setup_item = asn1_srbs_to_be_setup_item_container.value().srbs_to_be_setup_item();
113-
114-
f1ap_srbs_to_be_setup_mod_item_to_asn1(asn1_srbs_to_be_setup_item, srbs_to_be_setup_item);
115-
116-
asn1_request->srbs_to_be_setup_list.push_back(asn1_srbs_to_be_setup_item_container);
117-
}
118-
}
119-
120-
// drbs to be setup list
121-
if (!request.drbs_to_be_setup_list.empty()) {
122-
asn1_request->drbs_to_be_setup_list_present = true;
123-
124-
for (const auto& drb_to_be_setup_item : request.drbs_to_be_setup_list) {
125-
asn1::protocol_ie_single_container_s<asn1::f1ap::drbs_to_be_setup_item_ies_o> asn1_drb_to_be_setup_item_container;
126-
asn1_drb_to_be_setup_item_container.load_info_obj(ASN1_F1AP_ID_DRBS_TO_BE_SETUP_ITEM);
127-
128-
f1ap_drbs_to_be_setup_mod_item_to_asn1(asn1_drb_to_be_setup_item_container.value().drbs_to_be_setup_item(),
129-
drb_to_be_setup_item);
130-
131-
asn1_request->drbs_to_be_setup_list.push_back(asn1_drb_to_be_setup_item_container);
132-
}
133-
}
134-
135-
// inactivity monitoring request
136-
if (request.inactivity_monitoring_request.has_value()) {
137-
asn1_request->inactivity_monitoring_request_present = true;
138-
asn1::bool_to_enum(asn1_request->inactivity_monitoring_request, request.inactivity_monitoring_request.value());
139-
}
140-
141-
// rat freq prio info
142-
if (request.rat_freq_prio_info.has_value()) {
143-
asn1_request->rat_freq_prio_info_present = true;
144-
asn1_request->rat_freq_prio_info = f1ap_rat_freq_prio_info_to_asn1(request.rat_freq_prio_info.value());
145-
}
146-
147-
// rrc container
148-
if (!request.rrc_container.empty()) {
149-
asn1_request->rrc_container_present = true;
150-
asn1_request->rrc_container = request.rrc_container.copy();
151-
}
152-
153-
// masked imeisv
154-
if (request.masked_imeisv.has_value()) {
155-
asn1_request->masked_imeisv_present = true;
156-
asn1_request->masked_imeisv.from_number(request.masked_imeisv.value());
157-
}
158-
159-
// serving plmn
160-
if (request.serving_plmn.has_value()) {
161-
asn1_request->serving_plmn_present = true;
162-
asn1_request->serving_plmn.from_string(request.serving_plmn.value());
163-
}
164-
165-
// gnb du ue ambr ul
166-
if (request.gnb_du_ue_ambr_ul.has_value()) {
167-
asn1_request->gnb_du_ue_ambr_ul_present = true;
168-
asn1_request->gnb_du_ue_ambr_ul = request.gnb_du_ue_ambr_ul.value();
169-
}
170-
171-
// rrc delivery status request
172-
if (request.rrc_delivery_status_request.has_value()) {
173-
asn1_request->rrc_delivery_status_request_present = true;
174-
asn1::bool_to_enum(asn1_request->rrc_delivery_status_request, request.rrc_delivery_status_request.value());
175-
}
176-
177-
// res coordination transfer info
178-
if (request.res_coordination_transfer_info.has_value()) {
179-
asn1_request->res_coordination_transfer_info_present = true;
180-
asn1_request->res_coordination_transfer_info.res_coordination_eutra_cell_info_present = false;
181-
asn1_request->res_coordination_transfer_info.m_enb_cell_id.from_number(
182-
request.res_coordination_transfer_info.value().m_enb_cell_id);
183-
}
184-
185-
// serving cell mo
186-
if (request.serving_cell_mo.has_value()) {
187-
asn1_request->serving_cell_mo_present = true;
188-
asn1_request->serving_cell_mo = request.serving_cell_mo.value();
189-
}
190-
191-
// new gnb cu ue f1ap id
192-
if (request.new_gnb_cu_ue_f1ap_id.has_value()) {
193-
asn1_request->new_gnb_cu_ue_f1ap_id_present = true;
194-
asn1_request->new_gnb_cu_ue_f1ap_id = gnb_cu_ue_f1ap_id_to_uint(request.new_gnb_cu_ue_f1ap_id.value());
195-
}
196-
197-
// ran ue id
198-
if (request.ran_ue_id.has_value()) {
199-
asn1_request->ran_ue_id_present = true;
200-
asn1_request->ran_ue_id.from_number(ran_ue_id_to_uint(request.ran_ue_id.value()));
201-
}
202-
}
203-
204-
/// \brief Convert the UE Context Setup Response from ASN.1 to common type.
205-
/// \param[out] response The common type struct to store the result.
206-
/// \param[in] asn1_response The ASN.1 UE Context Setup Response.
207-
208-
inline void fill_f1ap_ue_context_setup_response(f1ap_ue_context_setup_response& response,
209-
ue_index_t ue_index,
210-
const asn1::f1ap::ue_context_setup_resp_s& asn1_response)
211-
{
212-
response.success = true;
213-
response.ue_index = ue_index;
214-
215-
// du to cu rrc info
216-
response.du_to_cu_rrc_info.cell_group_cfg = asn1_response->du_to_cu_rrc_info.cell_group_cfg.copy();
217-
response.du_to_cu_rrc_info.meas_gap_cfg = asn1_response->du_to_cu_rrc_info.meas_gap_cfg.copy();
218-
response.du_to_cu_rrc_info.requested_p_max_fr1 = asn1_response->du_to_cu_rrc_info.requested_p_max_fr1.copy();
219-
220-
// c rnti
221-
if (asn1_response->c_rnti_present) {
222-
response.c_rnti = to_rnti(asn1_response->c_rnti);
223-
}
224-
225-
// res coordination transfer container
226-
if (asn1_response->res_coordination_transfer_container_present) {
227-
response.res_coordination_transfer_container = asn1_response->res_coordination_transfer_container.copy();
228-
}
229-
230-
// full cfg
231-
if (asn1_response->full_cfg_present) {
232-
response.full_cfg = asn1::enum_to_bool(asn1_response->full_cfg);
233-
}
234-
235-
// drbs setup list
236-
if (asn1_response->drbs_setup_list_present) {
237-
for (auto asn1_drbs_setup_list_item : asn1_response->drbs_setup_list) {
238-
auto& asn1_drb_mod_item = asn1_drbs_setup_list_item.value().drbs_setup_item();
239-
240-
f1ap_drbs_setup_mod_item drb_setup_item = asn1_to_f1ap_drbs_setup_mod_item(asn1_drb_mod_item);
241-
242-
response.drbs_setup_list.emplace(drb_setup_item.drb_id, drb_setup_item);
243-
}
244-
}
245-
246-
// srbs failed to be setup list
247-
if (asn1_response->srbs_failed_to_be_setup_list_present) {
248-
for (auto asn1_srbs_failed_setup_list_item : asn1_response->srbs_failed_to_be_setup_list) {
249-
auto& asn1_srb_failed_item = asn1_srbs_failed_setup_list_item.value().srbs_failed_to_be_setup_item();
250-
251-
f1ap_srbs_failed_to_be_setup_mod_item srb_failed_item =
252-
asn1_to_f1ap_srbs_failed_to_be_setup_mod_item(asn1_srb_failed_item);
253-
254-
response.srbs_failed_to_be_setup_list.emplace(srb_failed_item.srb_id, srb_failed_item);
255-
}
256-
}
257-
258-
// drbs failed to be setup list
259-
if (asn1_response->drbs_failed_to_be_setup_list_present) {
260-
for (auto asn1_drbs_failed_setup_list_item : asn1_response->drbs_failed_to_be_setup_list) {
261-
auto& asn1_drb_failed_item = asn1_drbs_failed_setup_list_item.value().drbs_failed_to_be_setup_item();
262-
263-
f1ap_drbs_failed_to_be_setup_mod_item drb_failed_item =
264-
asn1_to_f1ap_drbs_failed_to_be_setup_mod_item(asn1_drb_failed_item);
265-
266-
response.drbs_failed_to_be_setup_list.emplace(drb_failed_item.drb_id, drb_failed_item);
267-
}
268-
}
269-
270-
// scell failed to setup list
271-
if (asn1_response->scell_failedto_setup_list_present) {
272-
for (const auto& asn1_scell_failed_to_setup_item : asn1_response->scell_failedto_setup_list) {
273-
f1ap_scell_failed_to_setup_mod_item scell_failed_to_setup_item;
274-
275-
// scell id
276-
scell_failed_to_setup_item.scell_id =
277-
f1ap_asn1_to_nr_cgi(asn1_scell_failed_to_setup_item->scell_failedto_setup_item().scell_id);
278-
279-
// cause
280-
if (asn1_scell_failed_to_setup_item->scell_failedto_setup_item().cause_present) {
281-
scell_failed_to_setup_item.cause =
282-
f1ap_asn1_to_cause(asn1_scell_failed_to_setup_item->scell_failedto_setup_item().cause);
283-
}
284-
285-
response.scell_failed_to_setup_list.push_back(scell_failed_to_setup_item);
286-
}
287-
}
288-
289-
// Add inactivity monitoring response
290-
if (asn1_response->inactivity_monitoring_resp_present) {
291-
bool inactivity_monitoring_resp = asn1::enum_to_bool(asn1_response->inactivity_monitoring_resp);
292-
response.inactivity_monitoring_resp = inactivity_monitoring_resp;
293-
}
294-
295-
// srbs setup list
296-
if (asn1_response->srbs_setup_list_present) {
297-
for (auto asn1_srbs_setup_list_item : asn1_response->srbs_setup_list) {
298-
auto& asn1_srbs_setup_item = asn1_srbs_setup_list_item.value().srbs_setup_item();
299-
300-
f1ap_srbs_setup_mod_item srbs_setup_item = asn1_to_f1ap_srbs_setup_mod_item(asn1_srbs_setup_item);
301-
302-
response.srbs_setup_list.emplace(srbs_setup_item.srb_id, srbs_setup_item);
303-
}
304-
}
305-
}
306-
307-
/// \brief Convert the UE Context Setup Response from ASN.1 to common type.
308-
/// \param[out] response The common type struct to store the result.
309-
/// \param[in] asn1_failure The ASN.1 UE Context Setup Failure.
310-
311-
inline void fill_f1ap_ue_context_setup_response(f1ap_ue_context_setup_response& response,
312-
const asn1::f1ap::ue_context_setup_fail_s& asn1_failure)
313-
{
314-
response.success = false;
315-
316-
// cause
317-
response.cause = f1ap_asn1_to_cause(asn1_failure->cause);
318-
319-
// potential sp cell list
320-
if (asn1_failure->potential_sp_cell_list_present) {
321-
f1ap_potential_sp_cell_item potential_sp_cell_item;
322-
323-
for (const auto& asn1_potential_sp_cell_item : asn1_failure->potential_sp_cell_list) {
324-
potential_sp_cell_item.potential_sp_cell_id =
325-
f1ap_asn1_to_nr_cgi(asn1_potential_sp_cell_item->potential_sp_cell_item().potential_sp_cell_id);
326-
327-
response.potential_sp_cell_list.push_back(potential_sp_cell_item);
328-
}
329-
}
330-
331-
// crit diagnostics
332-
if (asn1_failure->crit_diagnostics_present) {
333-
// TODO: Add crit diagnostics
334-
}
335-
}
336-
33728
/// \brief Convert the UE Context Modification Request from common type to ASN.1.
33829
/// \param[out] asn1_request The ASN.1 struct to store the result.
33930
/// \param[in] request The common type UE Context Modification Request.

0 commit comments

Comments
 (0)