Skip to content

Commit b4e3141

Browse files
committed
f1u: changed interface for f1u gw bearer
This allows to call stop() from du_bearer, and drb_context
1 parent d2fa125 commit b4e3141

File tree

12 files changed

+140
-119
lines changed

12 files changed

+140
-119
lines changed

include/srsran/f1u/cu_up/f1u_gateway.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ class f1u_cu_up_gateway_bearer_rx_notifier
3030
virtual void on_new_pdu(nru_ul_message msg) = 0;
3131
};
3232

33+
/// This class provides the interface for an F1-U GW bearer
34+
class f1u_cu_up_gateway_bearer : public srs_cu_up::f1u_tx_pdu_notifier
35+
{
36+
public:
37+
virtual void stop() = 0;
38+
};
39+
3340
/// This class will be used to provide the interfaces to
3441
/// the CU-UP to create and manage F1-U bearers.
3542
class f1u_cu_up_gateway : public srs_cu_up::f1u_bearer_disconnector
@@ -42,15 +49,14 @@ class f1u_cu_up_gateway : public srs_cu_up::f1u_bearer_disconnector
4249
f1u_cu_up_gateway(f1u_cu_up_gateway&&) = default;
4350
f1u_cu_up_gateway& operator=(f1u_cu_up_gateway&&) = default;
4451

45-
virtual std::unique_ptr<srs_cu_up::f1u_tx_pdu_notifier>
46-
create_cu_bearer(uint32_t ue_index,
47-
drb_id_t drb_id,
48-
const srs_cu_up::f1u_config& config,
49-
const up_transport_layer_info& ul_up_tnl_info,
50-
f1u_cu_up_gateway_bearer_rx_notifier& rx_notifier,
51-
task_executor& ul_exec,
52-
timer_factory ue_dl_timer_factory,
53-
unique_timer& ue_inactivity_timer) = 0;
52+
virtual std::unique_ptr<f1u_cu_up_gateway_bearer> create_cu_bearer(uint32_t ue_index,
53+
drb_id_t drb_id,
54+
const srs_cu_up::f1u_config& config,
55+
const up_transport_layer_info& ul_up_tnl_info,
56+
f1u_cu_up_gateway_bearer_rx_notifier& rx_notifier,
57+
task_executor& ul_exec,
58+
timer_factory ue_dl_timer_factory,
59+
unique_timer& ue_inactivity_timer) = 0;
5460

5561
virtual void attach_dl_teid(const up_transport_layer_info& ul_up_tnl_info,
5662
const up_transport_layer_info& dl_up_tnl_info) = 0;

include/srsran/f1u/du/f1u_gateway.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ class f1u_du_gateway_bearer_rx_notifier
3030
virtual void on_new_pdu(nru_dl_message msg) = 0;
3131
};
3232

33+
/// This class provides the interface for an F1-U GW bearer
34+
class f1u_du_gateway_bearer : public srs_du::f1u_tx_pdu_notifier
35+
{
36+
virtual void stop() = 0;
37+
};
38+
3339
/// This class will be used to provide the interfaces to
3440
/// the DU to create and manage F1-U bearers.
3541
class f1u_du_gateway : public srs_du::f1u_bearer_disconnector
@@ -42,14 +48,14 @@ class f1u_du_gateway : public srs_du::f1u_bearer_disconnector
4248
f1u_du_gateway(f1u_du_gateway&&) = default;
4349
f1u_du_gateway& operator=(f1u_du_gateway&&) = default;
4450

45-
virtual std::unique_ptr<f1u_tx_pdu_notifier> create_du_bearer(uint32_t ue_index,
46-
drb_id_t drb_id,
47-
srs_du::f1u_config config,
48-
const up_transport_layer_info& dl_up_tnl_info,
49-
const up_transport_layer_info& ul_up_tnl_info,
50-
srs_du::f1u_du_gateway_bearer_rx_notifier& du_rx,
51-
timer_factory timers,
52-
task_executor& ue_executor) = 0;
51+
virtual std::unique_ptr<f1u_du_gateway_bearer> create_du_bearer(uint32_t ue_index,
52+
drb_id_t drb_id,
53+
srs_du::f1u_config config,
54+
const up_transport_layer_info& dl_up_tnl_info,
55+
const up_transport_layer_info& ul_up_tnl_info,
56+
srs_du::f1u_du_gateway_bearer_rx_notifier& du_rx,
57+
timer_factory timers,
58+
task_executor& ue_executor) = 0;
5359
};
5460

5561
} // namespace srsran::srs_du

include/srsran/f1u/local_connector/f1u_local_connector.h

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
#include "srsran/f1u/cu_up/f1u_bearer_logger.h"
1515
#include "srsran/f1u/cu_up/f1u_gateway.h"
16-
#include "srsran/f1u/cu_up/f1u_tx_pdu_notifier.h"
1716
#include "srsran/f1u/du/f1u_bearer_logger.h"
1817
#include "srsran/f1u/du/f1u_gateway.h"
1918
#include "srsran/srslog/srslog.h"
@@ -27,7 +26,7 @@ namespace srsran {
2726
///
2827
/// It will keep a notifier to the DU NR-U RX and provide the methods to pass
2928
/// an SDU to it.
30-
class f1u_gateway_cu_bearer : public srs_cu_up::f1u_tx_pdu_notifier
29+
class f1u_gateway_cu_bearer : public f1u_cu_up_gateway_bearer
3130
{
3231
public:
3332
f1u_gateway_cu_bearer(uint32_t ue_index,
@@ -44,7 +43,9 @@ class f1u_gateway_cu_bearer : public srs_cu_up::f1u_tx_pdu_notifier
4443
{
4544
}
4645

47-
~f1u_gateway_cu_bearer() override { disconnector.disconnect_cu_bearer(ul_tnl_info); }
46+
~f1u_gateway_cu_bearer() override { stop(); }
47+
48+
void stop() override { disconnector.disconnect_cu_bearer(ul_tnl_info); }
4849

4950
void attach_du_handler(srs_du::f1u_du_gateway_bearer_rx_notifier& handler_,
5051
const up_transport_layer_info& dl_tnl_info_)
@@ -93,7 +94,7 @@ class f1u_gateway_cu_bearer : public srs_cu_up::f1u_tx_pdu_notifier
9394
task_executor& ul_exec;
9495
};
9596

96-
class f1u_gateway_du_bearer : public srs_du::f1u_tx_pdu_notifier
97+
class f1u_gateway_du_bearer : public srs_du::f1u_du_gateway_bearer
9798
{
9899
public:
99100
f1u_gateway_du_bearer(uint32_t ue_index,
@@ -112,6 +113,8 @@ class f1u_gateway_du_bearer : public srs_du::f1u_tx_pdu_notifier
112113

113114
~f1u_gateway_du_bearer() override { disconnector.remove_du_bearer(dl_tnl_info); }
114115

116+
void stop() override { disconnector.remove_du_bearer(dl_tnl_info); }
117+
115118
void attach_cu_handler(f1u_cu_up_gateway_bearer_rx_notifier& handler_)
116119
{
117120
std::unique_lock<std::mutex> lock(handler_mutex);
@@ -161,28 +164,28 @@ class f1u_local_connector final : public srs_du::f1u_du_gateway, public f1u_cu_u
161164
srs_du::f1u_du_gateway* get_f1u_du_gateway() { return this; }
162165
f1u_cu_up_gateway* get_f1u_cu_up_gateway() { return this; }
163166

164-
std::unique_ptr<srs_cu_up::f1u_tx_pdu_notifier> create_cu_bearer(uint32_t ue_index,
165-
drb_id_t drb_id,
166-
const srs_cu_up::f1u_config& config,
167-
const up_transport_layer_info& ul_up_tnl_info,
168-
f1u_cu_up_gateway_bearer_rx_notifier& rx_notifier,
169-
task_executor& ul_exec,
170-
timer_factory ue_dl_timer_factory,
171-
unique_timer& ue_inactivity_timer) override;
167+
std::unique_ptr<f1u_cu_up_gateway_bearer> create_cu_bearer(uint32_t ue_index,
168+
drb_id_t drb_id,
169+
const srs_cu_up::f1u_config& config,
170+
const up_transport_layer_info& ul_up_tnl_info,
171+
f1u_cu_up_gateway_bearer_rx_notifier& rx_notifier,
172+
task_executor& ul_exec,
173+
timer_factory ue_dl_timer_factory,
174+
unique_timer& ue_inactivity_timer) override;
172175

173176
void attach_dl_teid(const up_transport_layer_info& ul_up_tnl_info,
174177
const up_transport_layer_info& dl_up_tnl_info) override;
175178

176179
void disconnect_cu_bearer(const up_transport_layer_info& ul_up_tnl_info) override;
177180

178-
std::unique_ptr<srs_du::f1u_tx_pdu_notifier> create_du_bearer(uint32_t ue_index,
179-
drb_id_t drb_id,
180-
srs_du::f1u_config config,
181-
const up_transport_layer_info& dl_up_tnl_info,
182-
const up_transport_layer_info& ul_up_tnl_info,
183-
srs_du::f1u_du_gateway_bearer_rx_notifier& du_rx,
184-
timer_factory timers,
185-
task_executor& ue_executor) override;
181+
std::unique_ptr<srs_du::f1u_du_gateway_bearer> create_du_bearer(uint32_t ue_index,
182+
drb_id_t drb_id,
183+
srs_du::f1u_config config,
184+
const up_transport_layer_info& dl_up_tnl_info,
185+
const up_transport_layer_info& ul_up_tnl_info,
186+
srs_du::f1u_du_gateway_bearer_rx_notifier& du_rx,
187+
timer_factory timers,
188+
task_executor& ue_executor) override;
186189

187190
void remove_du_bearer(const up_transport_layer_info& dl_up_tnl_info) override;
188191

lib/cu_up/drb_context.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,19 @@ namespace srs_cu_up {
2626
struct drb_context {
2727
drb_context(const drb_id_t& drb_id_) : drb_id(drb_id_){};
2828

29-
void stop() { f1u->stop(); }
29+
void stop()
30+
{
31+
f1u->stop();
32+
f1u_gw_bearer->stop();
33+
}
3034

3135
drb_id_t drb_id;
3236
gtpu_teid_t f1u_ul_teid;
3337
f1u_config f1u_cfg;
3438

35-
std::unique_ptr<srs_cu_up::f1u_tx_pdu_notifier> f1u_tx_notifier;
36-
std::unique_ptr<f1u_bearer> f1u;
37-
std::unique_ptr<pdcp_entity> pdcp;
39+
std::unique_ptr<f1u_cu_up_gateway_bearer> f1u_gw_bearer;
40+
std::unique_ptr<f1u_bearer> f1u;
41+
std::unique_ptr<pdcp_entity> pdcp;
3842

3943
// Adapter PDCP->SDAP
4044
// FIXME: Currently, we assume only one DRB per PDU session and only one QoS flow per DRB.

lib/cu_up/pdu_session_manager_impl.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -201,20 +201,20 @@ drb_setup_result pdu_session_manager_impl::handle_drb_to_setup_item(pdu_session&
201201
up_transport_layer_info f1u_ul_tunnel_addr(transport_layer_address::create_from_string(net_config.f1u_bind_addr),
202202
f1u_ul_teid);
203203

204-
new_drb->f1u_tx_notifier = f1u_gw.create_cu_bearer(ue_index,
205-
drb_to_setup.drb_id,
206-
new_drb->f1u_cfg,
207-
f1u_ul_tunnel_addr,
208-
new_drb->f1u_gateway_rx_to_nru_adapter,
209-
ue_ul_exec,
210-
ue_dl_timer_factory,
211-
ue_inactivity_timer);
204+
new_drb->f1u_gw_bearer = f1u_gw.create_cu_bearer(ue_index,
205+
drb_to_setup.drb_id,
206+
new_drb->f1u_cfg,
207+
f1u_ul_tunnel_addr,
208+
new_drb->f1u_gateway_rx_to_nru_adapter,
209+
ue_ul_exec,
210+
ue_dl_timer_factory,
211+
ue_inactivity_timer);
212212

213213
new_drb->f1u = srs_cu_up::create_f1u_bearer(ue_index,
214214
new_drb->drb_id,
215215
f1u_ul_tunnel_addr,
216216
new_drb->f1u_cfg,
217-
*new_drb->f1u_tx_notifier,
217+
*new_drb->f1u_gw_bearer,
218218
new_drb->f1u_to_pdcp_adapter,
219219
new_drb->f1u_to_pdcp_adapter,
220220
ue_dl_timer_factory,
@@ -404,20 +404,20 @@ pdu_session_manager_impl::modify_pdu_session(const e1ap_pdu_session_res_to_modif
404404
drb->f1u_ul_teid);
405405

406406
// create new F1-U and connect it. This will automatically disconnect the old F1-U.
407-
drb->f1u_tx_notifier = f1u_gw.create_cu_bearer(ue_index,
408-
drb->drb_id,
409-
drb->f1u_cfg,
410-
f1u_ul_tunnel_addr,
411-
drb->f1u_gateway_rx_to_nru_adapter,
412-
ue_ul_exec,
413-
ue_dl_timer_factory,
414-
ue_inactivity_timer);
407+
drb->f1u_gw_bearer = f1u_gw.create_cu_bearer(ue_index,
408+
drb->drb_id,
409+
drb->f1u_cfg,
410+
f1u_ul_tunnel_addr,
411+
drb->f1u_gateway_rx_to_nru_adapter,
412+
ue_ul_exec,
413+
ue_dl_timer_factory,
414+
ue_inactivity_timer);
415415

416416
drb->f1u = srs_cu_up::create_f1u_bearer(ue_index,
417417
drb->drb_id,
418418
f1u_ul_tunnel_addr,
419419
drb->f1u_cfg,
420-
*drb->f1u_tx_notifier,
420+
*drb->f1u_gw_bearer,
421421
drb->f1u_to_pdcp_adapter,
422422
drb->f1u_to_pdcp_adapter,
423423
ue_dl_timer_factory,

lib/du_manager/du_ue/du_bearer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ std::unique_ptr<du_ue_drb> srsran::srs_du::create_drb(const drb_creation_info& d
148148
drb->uluptnl_info_list.assign(drb_info.uluptnl_info_list.begin(), drb_info.uluptnl_info_list.end());
149149
drb->dluptnl_info_list.assign(dluptnl_info_list.begin(), dluptnl_info_list.end());
150150

151-
drb->f1u_tx_notifier = drb_info.du_params.f1u.f1u_gw.create_du_bearer(
151+
drb->f1u_gw_bearer = drb_info.du_params.f1u.f1u_gw.create_du_bearer(
152152
ue_index,
153153
drb->drb_id,
154154
drb->f1u_cfg,
@@ -157,7 +157,7 @@ std::unique_ptr<du_ue_drb> srsran::srs_du::create_drb(const drb_creation_info& d
157157
drb->connector.f1u_gateway_nru_rx_notif,
158158
timer_factory{drb_info.du_params.services.timers, drb_info.du_params.services.ue_execs.ctrl_executor(ue_index)},
159159
drb_info.du_params.services.ue_execs.f1u_dl_pdu_executor(ue_index));
160-
if (drb->f1u_tx_notifier == nullptr) {
160+
if (drb->f1u_gw_bearer == nullptr) {
161161
srslog::fetch_basic_logger("DU-MNG").warning("ue={}: Failed to connect F1-U GW bearer to CU-UP.", ue_index);
162162
return nullptr;
163163
}
@@ -169,14 +169,14 @@ std::unique_ptr<du_ue_drb> srsran::srs_du::create_drb(const drb_creation_info& d
169169
f1u_msg.config = drb->f1u_cfg;
170170
f1u_msg.dl_tnl_info = drb->dluptnl_info_list[0];
171171
f1u_msg.rx_sdu_notifier = &drb->connector.f1u_rx_sdu_notif;
172-
f1u_msg.tx_pdu_notifier = drb->f1u_tx_notifier.get();
172+
f1u_msg.tx_pdu_notifier = drb->f1u_gw_bearer.get();
173173
f1u_msg.timers =
174174
timer_factory{drb_info.du_params.services.timers, drb_info.du_params.services.ue_execs.ctrl_executor(ue_index)};
175175
f1u_msg.ue_executor = &drb_info.du_params.services.ue_execs.f1u_dl_pdu_executor(ue_index);
176176
f1u_msg.disconnector = &drb_info.du_params.f1u.f1u_gw;
177177

178178
drb->drb_f1u = srs_du::create_f1u_bearer(f1u_msg);
179-
if (drb->f1u_tx_notifier == nullptr) {
179+
if (drb->f1u_gw_bearer == nullptr) {
180180
srslog::fetch_basic_logger("DU-MNG").warning("ue={}: Failed to create F1-U bearer.", ue_index);
181181
return nullptr;
182182
}
@@ -200,7 +200,7 @@ std::unique_ptr<du_ue_drb> srsran::srs_du::create_drb(const drb_creation_info& d
200200
drb->connector.connect(ue_index,
201201
drb->drb_id,
202202
drb->lcid,
203-
*drb->f1u_tx_notifier,
203+
*drb->f1u_gw_bearer,
204204
*drb->drb_f1u,
205205
*drb->rlc_bearer,
206206
drb_info.du_params.rlc.mac_ue_info_handler);

lib/du_manager/du_ue/du_bearer.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,17 @@ struct du_ue_srb {
9393
/// \brief DRB instance in DU manager. It contains DRB configuration information, RLC entity and adapters between
9494
/// layers.
9595
struct du_ue_drb {
96-
drb_id_t drb_id;
97-
lcid_t lcid;
98-
std::vector<up_transport_layer_info> uluptnl_info_list;
99-
std::vector<up_transport_layer_info> dluptnl_info_list;
100-
rlc_config rlc_cfg;
101-
mac_lc_config mac_cfg;
102-
f1u_config f1u_cfg;
103-
std::unique_ptr<srs_du::f1u_tx_pdu_notifier> f1u_tx_notifier;
104-
std::unique_ptr<f1u_bearer> drb_f1u;
105-
std::unique_ptr<rlc_entity> rlc_bearer;
106-
du_drb_connector connector;
96+
drb_id_t drb_id;
97+
lcid_t lcid;
98+
std::vector<up_transport_layer_info> uluptnl_info_list;
99+
std::vector<up_transport_layer_info> dluptnl_info_list;
100+
rlc_config rlc_cfg;
101+
mac_lc_config mac_cfg;
102+
f1u_config f1u_cfg;
103+
std::unique_ptr<f1u_du_gateway_bearer> f1u_gw_bearer;
104+
std::unique_ptr<f1u_bearer> drb_f1u;
105+
std::unique_ptr<rlc_entity> rlc_bearer;
106+
du_drb_connector connector;
107107
/// Single Network Slice Selection Assistance Information (S-NSSAI).
108108
s_nssai_t s_nssai;
109109
/// QoS characteristics to be met by the DRB.

0 commit comments

Comments
 (0)