|
10 | 10 |
|
11 | 11 | #pragma once |
12 | 12 |
|
13 | | -#include "srsran/cu_cp/cu_cp.h" |
14 | | -#include "srsran/cu_cp/cu_cp_types.h" |
15 | 13 | #include "srsran/f1ap/common/f1ap_common.h" |
16 | | -#include "srsran/f1ap/cu_cp/f1ap_cu.h" |
17 | 14 | #include "srsran/gateways/network_gateway.h" |
18 | 15 |
|
19 | 16 | namespace srsran { |
20 | 17 |
|
21 | | -/// \brief Generate a random gnb_cu_ue_f1ap_id |
22 | | -gnb_cu_ue_f1ap_id_t generate_random_gnb_cu_ue_f1ap_id(); |
23 | | - |
24 | | -/// \brief Generate a random gnb_du_ue_f1ap_id |
25 | | -gnb_du_ue_f1ap_id_t generate_random_gnb_du_ue_f1ap_id(); |
26 | | - |
27 | 18 | inline bool is_f1ap_pdu_packable(const asn1::f1ap::f1ap_pdu_c& pdu) |
28 | 19 | { |
29 | 20 | byte_buffer buffer; |
30 | 21 | asn1::bit_ref bref(buffer); |
31 | 22 | return pdu.pack(bref) == asn1::SRSASN_SUCCESS; |
32 | 23 | } |
33 | 24 |
|
34 | | -class dummy_f1ap_rrc_message_notifier : public srs_cu_cp::f1ap_rrc_message_notifier |
35 | | -{ |
36 | | -public: |
37 | | - dummy_f1ap_rrc_message_notifier() = default; |
38 | | - void on_new_rrc_message(asn1::unbounded_octstring<true> rrc_container) override |
39 | | - { |
40 | | - logger.info("Received RRC message"); |
41 | | - last_rrc_container = rrc_container; |
42 | | - }; |
43 | | - |
44 | | - asn1::unbounded_octstring<true> last_rrc_container; |
45 | | - |
46 | | -private: |
47 | | - srslog::basic_logger& logger = srslog::fetch_basic_logger("TEST"); |
48 | | -}; |
49 | | - |
50 | | -class dummy_f1ap_du_processor_notifier : public srs_cu_cp::f1ap_du_processor_notifier |
51 | | -{ |
52 | | -public: |
53 | | - dummy_f1ap_du_processor_notifier() : logger(srslog::fetch_basic_logger("TEST")) {} |
54 | | - |
55 | | - srs_cu_cp::du_index_t get_du_index() override { return srs_cu_cp::du_index_t::min; } |
56 | | - |
57 | | - void on_f1_setup_request_received(const srs_cu_cp::cu_cp_f1_setup_request& msg) override |
58 | | - { |
59 | | - logger.info("Received F1SetupRequest"); |
60 | | - last_f1_setup_request_msg.gnb_du_id = msg.gnb_du_id; |
61 | | - last_f1_setup_request_msg.gnb_du_name = msg.gnb_du_name; |
62 | | - last_f1_setup_request_msg.gnb_du_rrc_version = msg.gnb_du_rrc_version; |
63 | | - for (const auto& served_cell : msg.gnb_du_served_cells_list) { |
64 | | - srs_cu_cp::cu_cp_du_served_cells_item served_cell_item; |
65 | | - served_cell_item.served_cell_info.nr_cgi = served_cell.served_cell_info.nr_cgi; |
66 | | - served_cell_item.served_cell_info.nr_pci = served_cell.served_cell_info.nr_pci; |
67 | | - served_cell_item.served_cell_info.five_gs_tac = served_cell.served_cell_info.five_gs_tac; |
68 | | - served_cell_item.served_cell_info.cfg_eps_tac = served_cell.served_cell_info.cfg_eps_tac; |
69 | | - served_cell_item.served_cell_info.served_plmns = served_cell.served_cell_info.served_plmns; |
70 | | - served_cell_item.served_cell_info.nr_mode_info = served_cell.served_cell_info.nr_mode_info; |
71 | | - served_cell_item.served_cell_info.meas_timing_cfg = served_cell.served_cell_info.meas_timing_cfg.copy(); |
72 | | - |
73 | | - if (served_cell.gnb_du_sys_info.has_value()) { |
74 | | - srs_cu_cp::cu_cp_gnb_du_sys_info gnb_du_sys_info; |
75 | | - gnb_du_sys_info.mib_msg = served_cell.gnb_du_sys_info.value().mib_msg.copy(); |
76 | | - gnb_du_sys_info.sib1_msg = served_cell.gnb_du_sys_info.value().sib1_msg.copy(); |
77 | | - |
78 | | - served_cell_item.gnb_du_sys_info = gnb_du_sys_info; |
79 | | - } |
80 | | - |
81 | | - last_f1_setup_request_msg.gnb_du_served_cells_list.push_back(served_cell_item); |
82 | | - } |
83 | | - } |
84 | | - |
85 | | - srs_cu_cp::ue_creation_complete_message on_create_ue(const srs_cu_cp::f1ap_initial_ul_rrc_message& msg) override |
86 | | - { |
87 | | - logger.info("Received UeCreationRequest"); |
88 | | - last_ue_creation_request_msg = msg; |
89 | | - srs_cu_cp::ue_creation_complete_message ret = {}; |
90 | | - ret.ue_index = srs_cu_cp::ue_index_t::invalid; |
91 | | - if (ue_id < srs_cu_cp::MAX_NOF_UES_PER_DU) { |
92 | | - ret.ue_index = srs_cu_cp::uint_to_ue_index(ue_id); |
93 | | - last_created_ue_index = ret.ue_index; |
94 | | - ue_id++; |
95 | | - for (uint32_t i = 0; i < MAX_NOF_SRBS; i++) { |
96 | | - ret.srbs[i] = rx_notifier.get(); |
97 | | - } |
98 | | - } |
99 | | - return ret; |
100 | | - } |
101 | | - |
102 | | - void on_du_initiated_ue_context_release_request(const srs_cu_cp::f1ap_ue_context_release_request& req) override |
103 | | - { |
104 | | - logger.info("Received UEContextReleaseRequest"); |
105 | | - // TODO |
106 | | - } |
107 | | - |
108 | | - void set_ue_id(uint16_t ue_id_) { ue_id = ue_id_; } |
109 | | - |
110 | | - srs_cu_cp::cu_cp_f1_setup_request last_f1_setup_request_msg; |
111 | | - srs_cu_cp::f1ap_initial_ul_rrc_message last_ue_creation_request_msg; |
112 | | - optional<srs_cu_cp::ue_index_t> last_created_ue_index; |
113 | | - std::unique_ptr<dummy_f1ap_rrc_message_notifier> rx_notifier = std::make_unique<dummy_f1ap_rrc_message_notifier>(); |
114 | | - |
115 | | -private: |
116 | | - srslog::basic_logger& logger; |
117 | | - uint16_t ue_id = ue_index_to_uint(srs_cu_cp::ue_index_t::min); |
118 | | -}; |
119 | | - |
120 | 25 | /// Reusable notifier class that a) stores the received PDU for test inspection and b) |
121 | 26 | /// calls the registered PDU handler (if any). The handler can be added upon construction |
122 | 27 | /// or later via the attach_handler() method. |
@@ -160,39 +65,6 @@ class f1ap_null_notifier : public f1ap_message_notifier |
160 | 65 | } |
161 | 66 | }; |
162 | 67 |
|
163 | | -/// Reusable notifier class that a) stores the received PDU for test inspection and b) |
164 | | -/// calls the registered PDU handler (if any). The handler can be added upon construction |
165 | | -/// or later via the attach_handler() method. |
166 | | -class dummy_cu_cp_f1ap_pdu_notifier : public f1ap_message_notifier |
167 | | -{ |
168 | | -public: |
169 | | - dummy_cu_cp_f1ap_pdu_notifier(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_) : |
170 | | - logger(srslog::fetch_basic_logger("TEST")), cu_cp(cu_cp_), handler(handler_){}; |
171 | | - |
172 | | - void attach_handler(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_) |
173 | | - { |
174 | | - cu_cp = cu_cp_; |
175 | | - handler = handler_; |
176 | | - cu_cp->handle_new_du_connection(); |
177 | | - }; |
178 | | - void on_new_message(const f1ap_message& msg) override |
179 | | - { |
180 | | - logger.info("Received a PDU of type {}", msg.pdu.type().to_string()); |
181 | | - last_f1ap_msg = msg; // store msg |
182 | | - |
183 | | - if (handler != nullptr) { |
184 | | - logger.info("Forwarding PDU"); |
185 | | - handler->handle_message(msg); |
186 | | - } |
187 | | - } |
188 | | - f1ap_message last_f1ap_msg; |
189 | | - |
190 | | -private: |
191 | | - srslog::basic_logger& logger; |
192 | | - srs_cu_cp::cu_cp_interface* cu_cp = nullptr; |
193 | | - f1ap_message_handler* handler = nullptr; |
194 | | -}; |
195 | | - |
196 | 68 | /// Dummy handler just printing the received PDU. |
197 | 69 | class dummy_f1ap_message_handler : public f1ap_message_handler |
198 | 70 | { |
|
0 commit comments