Skip to content

Commit 348262b

Browse files
committed
fapi_adaptor: add a stop method to the MAC-FAPI adaptor. This stop method will filter the downlink data to the adaptor.
1 parent 7504b4c commit 348262b

File tree

9 files changed

+67
-1
lines changed

9 files changed

+67
-1
lines changed

include/srsran/fapi_adaptor/mac/mac_fapi_adaptor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class mac_fapi_adaptor
2323

2424
/// Returns the MAC–FAPI sector adaptor for the given cell id.
2525
virtual mac_fapi_sector_adaptor& get_sector_adaptor(unsigned cell_id) = 0;
26+
27+
/// Stops the MAC–FAPI adaptor.
28+
virtual void stop() = 0;
2629
};
2730

2831
} // namespace fapi_adaptor

include/srsran/fapi_adaptor/mac/mac_fapi_sector_adaptor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class mac_fapi_sector_adaptor
3737
public:
3838
virtual ~mac_fapi_sector_adaptor() = default;
3939

40+
/// Stops the MAC–FAPI sector adaptor.
41+
virtual void stop() = 0;
42+
4043
/// \brief Returns a reference to the slot time notifier used by the adaptor.
4144
virtual fapi::slot_time_message_notifier& get_slot_time_message_notifier() = 0;
4245

lib/du/o_du_impl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "srsran/du/du_low/o_du_low_metrics_collector.h"
1414
#include "srsran/du/o_du_metrics.h"
1515
#include "srsran/du/o_du_metrics_notifier.h"
16+
#include "srsran/fapi_adaptor/mac/mac_fapi_adaptor.h"
17+
#include "srsran/srslog/srslog.h"
1618

1719
using namespace srsran;
1820
using namespace srs_du;
@@ -66,6 +68,9 @@ void o_du_impl::start()
6668

6769
void o_du_impl::stop()
6870
{
71+
// Stop the MAC-FAPI adaptor first.
72+
odu_hi->get_mac_fapi_adaptor().stop();
73+
6974
odu_lo->get_operation_controller().stop();
7075
odu_hi->get_operation_controller().stop();
7176
}

lib/fapi_adaptor/mac/mac_fapi_adaptor_factory_impl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class mac_fapi_adaptor_wrapper : public mac_fapi_sector_adaptor
3737
}
3838
}
3939

40+
// See interface for documentation.
41+
void stop() override { adaptor->stop(); }
42+
4043
// See interface for documentation.
4144
fapi::slot_time_message_notifier& get_slot_time_message_notifier() override
4245
{

lib/fapi_adaptor/mac/mac_fapi_adaptor_impl.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ mac_fapi_sector_adaptor& mac_fapi_adaptor_impl::get_sector_adaptor(unsigned cell
2626
"Invalid cell identifier '{}'. Valid cell id range '[0-{})'",
2727
cell_id,
2828
sector_adaptors.size());
29-
3029
return *sector_adaptors[cell_id];
3130
}
31+
32+
void mac_fapi_adaptor_impl::stop()
33+
{
34+
for (auto& sector : sector_adaptors) {
35+
sector->stop();
36+
}
37+
}

lib/fapi_adaptor/mac/mac_fapi_adaptor_impl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class mac_fapi_adaptor_impl : public mac_fapi_adaptor
2727
// See interface for documentation.
2828
mac_fapi_sector_adaptor& get_sector_adaptor(unsigned cell_id) override;
2929

30+
// See interface for documentation.
31+
void stop() override;
32+
3033
private:
3134
std::vector<std::unique_ptr<mac_fapi_sector_adaptor>> sector_adaptors;
3235
};

lib/fapi_adaptor/mac/mac_fapi_sector_adaptor_impl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class mac_fapi_sector_adaptor_impl : public mac_fapi_sector_adaptor
2828
mac_fapi_sector_adaptor_impl(const mac_fapi_sector_adaptor_config& config,
2929
mac_fapi_sector_adaptor_dependencies&& dependencies);
3030

31+
// See interface for documentation.
32+
void stop() override { mac_translator.stop(); }
33+
3134
// See interface for documentation.
3235
fapi::slot_time_message_notifier& get_slot_time_message_notifier() override;
3336

lib/fapi_adaptor/mac/mac_to_fapi_translator.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ mac_to_fapi_translator::mac_to_fapi_translator(const mac_to_fapi_translator_conf
8383
srsran_assert(part2_mapper, "Invalid Part2 mapper");
8484
}
8585

86+
void mac_to_fapi_translator::stop()
87+
{
88+
stop_manager.stop();
89+
}
90+
8691
template <typename builder_type, typename pdu_type>
8792
static void add_pdcch_pdus_to_builder(builder_type& builder,
8893
span<const pdu_type> pdcch_info,
@@ -194,6 +199,13 @@ static void clear_dl_tti_pdus(fapi::dl_tti_request_message& msg)
194199

195200
void mac_to_fapi_translator::on_new_downlink_scheduler_results(const mac_dl_sched_result& dl_res)
196201
{
202+
stop_event_token token = stop_manager.get_token();
203+
// Do not process results when the translator is not running.
204+
if (SRSRAN_UNLIKELY(token.is_stop_requested())) {
205+
return;
206+
}
207+
208+
stop_token = std::move(token);
197209
fapi::dl_tti_request_message msg;
198210
fapi::dl_tti_request_message_builder builder(msg);
199211

@@ -248,6 +260,14 @@ void mac_to_fapi_translator::on_new_downlink_scheduler_results(const mac_dl_sche
248260

249261
void mac_to_fapi_translator::on_new_downlink_data(const mac_dl_data_result& dl_data)
250262
{
263+
stop_event_token token = stop_manager.get_token();
264+
// Do not process results when the translator is not running.
265+
if (SRSRAN_UNLIKELY(token.is_stop_requested())) {
266+
return;
267+
}
268+
269+
stop_token = std::move(token);
270+
251271
srsran_assert(!dl_data.si_pdus.empty() || !dl_data.rar_pdus.empty() || !dl_data.ue_pdus.empty() ||
252272
!dl_data.paging_pdus.empty(),
253273
"Received a mac_dl_data_result object with zero payloads");
@@ -322,6 +342,14 @@ static void clear_ul_tti_pdus(fapi::ul_tti_request_message& msg)
322342

323343
void mac_to_fapi_translator::on_new_uplink_scheduler_results(const mac_ul_sched_result& ul_res)
324344
{
345+
stop_event_token token = stop_manager.get_token();
346+
// Do not process results when the translator is not running.
347+
if (SRSRAN_UNLIKELY(token.is_stop_requested())) {
348+
return;
349+
}
350+
351+
stop_token = std::move(token);
352+
325353
fapi::ul_tti_request_message msg;
326354
fapi::ul_tti_request_message_builder builder(msg);
327355

@@ -407,4 +435,7 @@ void mac_to_fapi_translator::handle_ul_dci_request(span<const pdcch_ul_informati
407435
void mac_to_fapi_translator::on_cell_results_completion(slot_point slot)
408436
{
409437
last_msg_notifier.on_last_message(slot);
438+
439+
// Reset the stop token.
440+
stop_token.reset();
410441
}

lib/fapi_adaptor/mac/mac_to_fapi_translator.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "srsran/mac/mac_cell_result.h"
1616
#include "srsran/mac/mac_cell_slot_handler.h"
1717
#include "srsran/scheduler/result/pdcch_info.h"
18+
#include "srsran/support/synchronization/stop_event.h"
1819

1920
namespace srsran {
2021

@@ -57,6 +58,9 @@ class mac_to_fapi_translator : public mac_cell_result_notifier
5758
mac_to_fapi_translator(const mac_to_fapi_translator_config& config,
5859
mac_to_fapi_translator_dependencies&& dependencies);
5960

61+
/// Stops the MAC to FAPI translator.
62+
void stop();
63+
6064
// See interface for documentation.
6165
void on_new_downlink_scheduler_results(const mac_dl_sched_result& dl_res) override;
6266

@@ -94,6 +98,11 @@ class mac_to_fapi_translator : public mac_cell_result_notifier
9498
std::unique_ptr<uci_part2_correspondence_mapper> part2_mapper;
9599
/// MAC cell slot handler.
96100
mac_cell_slot_handler* mac_slot_handler;
101+
/// Stop manager.
102+
stop_event_source stop_manager;
103+
/// Stop token. This token is used to track the when a slot is being used. It is set on new scheduler results
104+
/// (downlink, uplink or downlink data) and reset on results completion.
105+
stop_event_token stop_token;
97106
};
98107

99108
} // namespace fapi_adaptor

0 commit comments

Comments
 (0)