Skip to content

Commit 652c0f7

Browse files
FabianEckermannFabian Eckermann
authored andcommitted
du,du_high: add option to set external address of f1u interface
1 parent 7024860 commit 652c0f7

File tree

9 files changed

+33
-9
lines changed

9 files changed

+33
-9
lines changed

apps/du/du.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,8 @@ int main(int argc, char** argv)
282282
du_f1u_gw_config,
283283
*epoll_broker,
284284
workers.get_du_high_executor_mapper(0).ue_mapper().mac_ul_pdu_executor(to_du_ue_index(0)));
285-
std::unique_ptr<srs_du::f1u_du_udp_gateway> du_f1u_conn =
286-
srs_du::create_split_f1u_gw({du_f1u_gw.get(), du_f1u_gtpu_demux.get(), *du_pcaps.f1u, GTPU_PORT});
285+
std::unique_ptr<srs_du::f1u_du_udp_gateway> du_f1u_conn = srs_du::create_split_f1u_gw(
286+
{du_f1u_gw.get(), du_f1u_gtpu_demux.get(), *du_pcaps.f1u, GTPU_PORT, du_cfg.nru_cfg.ext_addr});
287287

288288
// Set up the JSON log channel used by metrics.
289289
srslog::sink& json_sink =

apps/du/du_appconfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ struct f1ap_appconfig {
3131
struct nru_appconfig {
3232
unsigned pdu_queue_size = 2048;
3333
std::string bind_address = "127.0.10.2";
34+
std::string ext_addr = "auto"; // External address advertised by the F1-U interface
3435
float pool_threshold = 0.9;
3536
};
3637

apps/du/du_appconfig_cli11_schema.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ static void configure_cli11_f1u_args(CLI::App& app, srs_du::nru_appconfig& f1u_p
236236
app.add_option(
237237
"--bind_addr", f1u_params.bind_address, "DU F1-U bind address. If left empty, implicit bind is performed")
238238
->capture_default_str();
239+
app.add_option("--ext_addr",
240+
f1u_params.ext_addr,
241+
"External IP address that is advertised to receive F1-U packets from the CU-UP");
239242
app.add_option(
240243
"--pool_threshold", f1u_params.pool_threshold, "Pool occupancy threshold after which packets are dropped")
241244
->capture_default_str();

apps/du/du_appconfig_yaml_writer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ static void fill_du_appconfig_nru_section(YAML::Node node, const srs_du::nru_app
8181
{
8282
node["queue_size"] = config.pdu_queue_size;
8383
node["bind_addr"] = config.bind_address;
84+
node["ext_addr"] = config.ext_addr;
8485
}
8586

8687
static void fill_du_appconfig_f1ap_section(YAML::Node node, const srs_du::f1ap_appconfig& config)

include/srsran/f1u/du/split_connector/f1u_split_connector_factory.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ struct f1u_du_split_gateway_creation_msg {
2424
gtpu_demux* demux;
2525
dlt_pcap& gtpu_pcap;
2626
uint16_t peer_port;
27+
std::string f1u_ext_addr = "auto";
2728
};
2829

2930
std::unique_ptr<f1u_du_udp_gateway> create_split_f1u_gw(f1u_du_split_gateway_creation_msg msg);

lib/f1u/du/split_connector/f1u_split_connector.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,13 @@ void f1u_split_connector::remove_du_bearer(const up_transport_layer_info& dl_up_
7878
expected<std::string> f1u_split_connector::get_du_bind_address(gnb_du_id_t gnb_du_id) const
7979
{
8080
std::string ip_address;
81-
if (not udp_session->get_bind_address(ip_address)) {
82-
return make_unexpected(default_error_t{});
81+
82+
if (f1u_ext_addr == "auto") {
83+
if (not udp_session->get_bind_address(ip_address)) {
84+
return make_unexpected(default_error_t{});
85+
}
86+
} else {
87+
ip_address = f1u_ext_addr;
8388
}
8489
return ip_address;
8590
}

lib/f1u/du/split_connector/f1u_split_connector.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,14 @@ class f1u_split_connector final : public f1u_du_udp_gateway
171171
f1u_split_connector(srs_cu_up::ngu_gateway* udp_gw_,
172172
gtpu_demux* demux_,
173173
dlt_pcap& gtpu_pcap_,
174-
uint16_t peer_port_ = GTPU_PORT) :
174+
uint16_t peer_port_ = GTPU_PORT,
175+
std::string f1u_ext_addr_ = "auto") :
175176
logger_du(srslog::fetch_basic_logger("DU-F1-U")),
176177
udp_gw(udp_gw_),
177178
demux(demux_),
178179
gtpu_pcap(gtpu_pcap_),
179-
peer_port(peer_port_)
180+
peer_port(peer_port_),
181+
f1u_ext_addr(std::move(f1u_ext_addr_))
180182
{
181183
udp_session = udp_gw->create(gw_data_gtpu_demux_adapter);
182184
gw_data_gtpu_demux_adapter.connect_gtpu_demux(*demux);
@@ -211,7 +213,8 @@ class f1u_split_connector final : public f1u_du_udp_gateway
211213
network_gateway_data_gtpu_demux_adapter gw_data_gtpu_demux_adapter;
212214
dlt_pcap& gtpu_pcap;
213215

214-
uint16_t peer_port;
216+
uint16_t peer_port;
217+
std::string f1u_ext_addr = "auto"; // External address advertised by the F1-U interface
215218
};
216219

217220
} // namespace srsran::srs_du

lib/f1u/du/split_connector/f1u_split_connector_factory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ using namespace srs_du;
1717

1818
std::unique_ptr<f1u_du_udp_gateway> srsran::srs_du::create_split_f1u_gw(f1u_du_split_gateway_creation_msg msg)
1919
{
20-
return std::make_unique<f1u_split_connector>(msg.udp_gw, msg.demux, msg.gtpu_pcap, msg.peer_port);
20+
return std::make_unique<f1u_split_connector>(msg.udp_gw, msg.demux, msg.gtpu_pcap, msg.peer_port, msg.f1u_ext_addr);
2121
}

tests/unittests/du_manager/du_manager_test_helpers.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,19 @@ class f1u_gateway_dummy : public f1u_du_gateway
207207
f1u_bearers.erase(bearer_it);
208208
}
209209

210-
expected<std::string> get_du_bind_address(gnb_du_id_t du_index) const override { return std::string("127.0.0.1"); }
210+
expected<std::string> get_du_bind_address(gnb_du_id_t du_index) const override
211+
{
212+
if (f1u_ext_addr == "auto") {
213+
return std::string("127.0.0.1");
214+
}
215+
return f1u_ext_addr;
216+
}
211217

212218
std::map<up_transport_layer_info, std::map<up_transport_layer_info, f1u_gw_bearer_dummy*>> f1u_bearers;
219+
220+
void set_f1u_ext_addr(const std::string& addr) { f1u_ext_addr = addr; }
221+
222+
std::string f1u_ext_addr = "auto";
213223
};
214224

215225
class mac_test_dummy : public mac_cell_manager,

0 commit comments

Comments
 (0)