Skip to content

Commit e2583d2

Browse files
pgawlowiczPiotr Gawłowicz
authored andcommitted
e2: use both ric_requestor_id and ric_instance_id as subscription key
1 parent aa3a992 commit e2583d2

File tree

4 files changed

+36
-23
lines changed

4 files changed

+36
-23
lines changed

include/srsran/e2/e2_event_manager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ class e2_event_manager
2828
constexpr static size_t MAX_NOF_TRANSACTIONS = 256;
2929
protocol_transaction_manager<e2ap_outcome> transactions;
3030

31-
std::map<uint32_t, std::unique_ptr<protocol_transaction_event_source<asn1::e2ap::ric_sub_delete_request_s>>>
31+
std::map<std::tuple<uint32_t, uint32_t>,
32+
std::unique_ptr<protocol_transaction_event_source<asn1::e2ap::ric_sub_delete_request_s>>>
3233
sub_del_reqs;
3334

3435
void add_sub_del_req(const asn1::e2ap::ric_request_id_s& ric_request_id, timer_factory timer)
3536
{
36-
sub_del_reqs[ric_request_id.ric_requestor_id] =
37+
sub_del_reqs[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}] =
3738
std::make_unique<protocol_transaction_event_source<asn1::e2ap::ric_sub_delete_request_s>>(timer);
3839
}
3940
explicit e2_event_manager(timer_factory timers) : transactions(MAX_NOF_TRANSACTIONS, timers) {}

lib/e2/common/e2_subscription_manager_impl.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ e2_subscription_manager_impl::handle_subscription_setup(const asn1::e2ap::ric_su
2727
e2_subscription_t subscription = {};
2828
e2_subscribe_reponse_message outcome;
2929
subscription.subscription_info.request_id.ric_requestor_id = msg->ric_request_id.ric_requestor_id;
30-
subscription.subscription_info.ran_function_id = msg->ran_function_id;
3130
subscription.subscription_info.request_id.ric_instance_id = msg->ric_request_id.ric_instance_id;
31+
subscription.subscription_info.ran_function_id = msg->ran_function_id;
3232
e2sm_event_trigger_definition event_trigger_def;
3333

3434
if (supported_ran_functions.count(msg->ran_function_id)) {
@@ -43,15 +43,17 @@ e2_subscription_manager_impl::handle_subscription_setup(const asn1::e2ap::ric_su
4343
outcome.request_id.ric_requestor_id = subscription.subscription_info.request_id.ric_requestor_id;
4444
outcome.request_id.ric_instance_id = subscription.subscription_info.request_id.ric_instance_id;
4545
outcome.ran_function_id = subscription.subscription_info.ran_function_id;
46-
subscriptions.insert(std::pair<int, e2_subscription_t>(subscription.subscription_info.request_id.ric_requestor_id,
47-
std::move(subscription)));
46+
subscriptions.insert(std::pair<e2_subscription_key_t, e2_subscription_t>(
47+
std::make_tuple(subscription.subscription_info.request_id.ric_requestor_id,
48+
subscription.subscription_info.request_id.ric_instance_id),
49+
std::move(subscription)));
4850
get_subscription_result(msg->ran_function_id,
4951
outcome,
50-
subscriptions[outcome.request_id.ric_requestor_id],
52+
subscriptions[{outcome.request_id.ric_requestor_id, outcome.request_id.ric_instance_id}],
5153
msg->ric_sub_details.ric_action_to_be_setup_list);
5254
if (!outcome.success) {
5355
logger.error("Failed to setup subscription");
54-
subscriptions.erase(outcome.request_id.ric_requestor_id);
56+
subscriptions.erase({outcome.request_id.ric_requestor_id, outcome.request_id.ric_instance_id});
5557
}
5658
} else {
5759
outcome.request_id.ric_requestor_id = subscription.subscription_info.request_id.ric_requestor_id;
@@ -72,7 +74,7 @@ e2_subscription_manager_impl::handle_subscription_delete(const asn1::e2ap::ric_s
7274
outcome.response->ran_function_id = msg->ran_function_id;
7375
outcome.response->ric_request_id = msg->ric_request_id;
7476
outcome.success = false;
75-
if (subscriptions.count(outcome.request_id.ric_requestor_id)) {
77+
if (subscriptions.count({outcome.request_id.ric_requestor_id, outcome.request_id.ric_instance_id})) {
7678
outcome.success = true;
7779
} else {
7880
outcome.failure->cause.set_misc();
@@ -86,7 +88,8 @@ void e2_subscription_manager_impl::start_subscription(const asn1::e2ap::ric_requ
8688
uint16_t ran_func_id)
8789
{
8890
e2sm_interface* e2sm = e2sm_mngr.get_e2sm_interface(ran_func_id);
89-
for (auto& action : subscriptions[ric_request_id.ric_requestor_id].subscription_info.action_list) {
91+
for (auto& action :
92+
subscriptions[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}].subscription_info.action_list) {
9093
auto& action_def = action.action_definition;
9194
if (action.ric_action_type == asn1::e2ap::ric_action_type_e::report) {
9295
action.report_service = e2sm->get_e2sm_report_service(action_def);
@@ -97,18 +100,22 @@ void e2_subscription_manager_impl::start_subscription(const asn1::e2ap::ric_requ
97100
}
98101
}
99102

100-
subscriptions[ric_request_id.ric_requestor_id].indication_task = launch_async<e2_indication_procedure>(
101-
notif, ev_mng, subscriptions[ric_request_id.ric_requestor_id].subscription_info, logger);
103+
subscriptions[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}].indication_task =
104+
launch_async<e2_indication_procedure>(
105+
notif,
106+
ev_mng,
107+
subscriptions[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}].subscription_info,
108+
logger);
102109
}
103110

104111
void e2_subscription_manager_impl::stop_subscription(const asn1::e2ap::ric_request_id_s& ric_request_id,
105112
e2_event_manager& ev_mng,
106113
const asn1::e2ap::ric_sub_delete_request_s& msg)
107114
{
108-
if (subscriptions.count(ric_request_id.ric_requestor_id)) {
109-
ev_mng.sub_del_reqs[ric_request_id.ric_requestor_id]->set(msg);
110-
subscriptions[ric_request_id.ric_requestor_id].indication_task.await_ready();
111-
subscriptions.erase(ric_request_id.ric_requestor_id);
115+
if (subscriptions.count({ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id})) {
116+
ev_mng.sub_del_reqs[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}]->set(msg);
117+
subscriptions[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}].indication_task.await_ready();
118+
subscriptions.erase({ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id});
112119
} else {
113120
logger.error("RIC instance ID not found");
114121
}
@@ -130,8 +137,9 @@ bool e2_subscription_manager_impl::action_supported(const ric_action_to_be_setup
130137
}
131138

132139
if (e2sm->action_supported(action)) {
133-
subscriptions[ric_request_id.ric_requestor_id].subscription_info.action_list.push_back(
134-
{std::move(action_def_buf.value()), action.ric_action_id, action.ric_action_type});
140+
subscriptions[{ric_request_id.ric_requestor_id, ric_request_id.ric_instance_id}]
141+
.subscription_info.action_list.push_back(
142+
{std::move(action_def_buf.value()), action.ric_action_id, action.ric_action_type});
135143
return true;
136144
}
137145

lib/e2/common/e2_subscription_manager_impl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ class e2_subscription_manager_impl : public e2_subscription_manager
8585
void add_ran_function_oid(uint16_t ran_func_id, std::string oid) override;
8686

8787
private:
88-
std::map<uint32_t, e2_subscription_t> subscriptions;
88+
using e2_subscription_key_t = std::tuple<uint32_t, uint32_t>;
89+
std::map<e2_subscription_key_t, e2_subscription_t> subscriptions;
8990
std::map<std::string, std::unique_ptr<e2sm_interface>> e2sm_iface_list;
9091
std::map<uint16_t, std::string> supported_ran_functions;
9192
e2_message_notifier& notif;

lib/e2/procedures/e2_indication_procedure.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@ void e2_indication_procedure::operator()(coro_context<eager_async_task<void>>& c
2828
{
2929
CORO_BEGIN(ctx);
3030
while (running) {
31-
if (!ev_mng.sub_del_reqs.count(subscription.request_id.ric_requestor_id)) {
32-
logger.error("No subscription delete request found for RIC instance ID {}",
33-
subscription.request_id.ric_requestor_id);
31+
if (!ev_mng.sub_del_reqs.count(
32+
{subscription.request_id.ric_requestor_id, subscription.request_id.ric_instance_id})) {
33+
logger.error("No subscription delete request found for RIC request ID (Requestor ID={}, Instance ID={})",
34+
subscription.request_id.ric_requestor_id,
35+
subscription.request_id.ric_instance_id);
3436
break;
3537
}
36-
transaction_sink.subscribe_to(*ev_mng.sub_del_reqs[subscription.request_id.ric_requestor_id].get(),
37-
(std::chrono::milliseconds)subscription.report_period);
38+
transaction_sink.subscribe_to(
39+
*ev_mng.sub_del_reqs[{subscription.request_id.ric_requestor_id, subscription.request_id.ric_instance_id}].get(),
40+
(std::chrono::milliseconds)subscription.report_period);
3841
CORO_AWAIT(transaction_sink);
3942
if (!transaction_sink.timeout_expired()) {
4043
logger.info("Subscription deleted");

0 commit comments

Comments
 (0)