Skip to content

Commit 2f90c8b

Browse files
author
codebot
committed
Update main
# Conflicts: # tests/unittests/cu_cp/mobility/inter_du_handover_routine_test_helpers.cpp
2 parents 4d9f223 + 9bb19c3 commit 2f90c8b

File tree

212 files changed

+3509
-1567
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+3509
-1567
lines changed

.gitlab/ci/e2e.yml

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -386,14 +386,12 @@ test mode ue memcheck:
386386
test mode ru:
387387
stage: zmq
388388
extends: .e2e-run
389-
when: manual
390-
allow_failure: true
391389
variables:
392390
GROUP: "viavi"
393391
TESTBED: "viavi"
394392
MARKERS: "test_mode"
395393
KEYWORDS: "test_ru"
396-
E2E_LOG_LEVEL: "info"
394+
E2E_LOG_LEVEL: "warning"
397395
needs:
398396
- job: "basic avx512 dpdk"
399397
artifacts: true
@@ -403,9 +401,7 @@ test mode ru:
403401
test mode ru tsan:
404402
extends: test mode ru
405403
variables:
406-
E2E_LOG_LEVEL: "warning"
407-
when: manual
408-
allow_failure: true
404+
MARKERS: "test_mode_not_crash"
409405
needs:
410406
- job: "basic tsan"
411407
artifacts: true
@@ -415,9 +411,7 @@ test mode ru tsan:
415411
test mode ru asan:
416412
extends: test mode ru
417413
variables:
418-
E2E_LOG_LEVEL: "warning"
419-
when: manual
420-
allow_failure: true
414+
MARKERS: "test_mode_not_crash"
421415
needs:
422416
- job: "basic asan"
423417
artifacts: true
@@ -427,9 +421,7 @@ test mode ru asan:
427421
test mode ru memcheck:
428422
extends: test mode ru
429423
variables:
430-
E2E_LOG_LEVEL: "warning"
431-
when: manual
432-
allow_failure: true
424+
MARKERS: "test_mode_not_crash"
433425
needs:
434426
- job: "basic memcheck"
435427
artifacts: true

.gitlab/ci/e2e/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
SRSGNB_REGISTRY_URI=registry.gitlab.com/softwareradiosystems/srsgnb
22
RETINA_REGISTRY_PREFIX=registry.gitlab.com/softwareradiosystems/ci/retina
3-
RETINA_VERSION=0.45.0
3+
RETINA_VERSION=0.46.4
44
UBUNTU_VERSION=24.04
55
AMARISOFT_VERSION=2023-09-08
66
SRSUE_VERSION=23.11
7-
OPEN5GS_VERSION=2.6.6
7+
OPEN5GS_VERSION=2.7.0
88
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
99
METRICS_SERVER_VERSION=1.7.0
1010
DPDK_VERSION=23.11

.gitlab/ci/e2e/retina_request_android_n300.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
requirements:
3131
arch: amd64
3232
cpu:
33-
requests: 10
34-
limits: 10
33+
requests: 14
34+
limits: 14
3535
memory:
36-
requests: "14G"
37-
limits: "14G"
36+
requests: "20G"
37+
limits: "20G"
3838
ephemeral-storage:
3939
requests: "6G"
4040
limits: "6G"

.gitlab/ci/e2e/retina_request_android_x300.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
requirements:
3131
arch: amd64
3232
cpu:
33-
requests: 10
34-
limits: 10
33+
requests: 14
34+
limits: 14
3535
memory:
36-
requests: "14G"
37-
limits: "14G"
36+
requests: "20G"
37+
limits: "20G"
3838
ephemeral-storage:
3939
requests: "6G"
4040
limits: "6G"

.gitlab/ci/e2e/retina_request_rf_b200.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
- name: amarisoft-ue
1010
type: ue
1111
image: ${RETINA_REGISTRY_PREFIX}/amarisoftue:${AMARISOFT_VERSION}_${RETINA_VERSION}
12+
labels: ["kubernetes.io/hostname=sdr4"]
1213
nof_ports: 4
1314
requirements:
1415
arch: amd64
1516
cpu:
1617
requests: 10
1718
limits: 10
1819
memory:
19-
requests: "12G"
20-
limits: "12G"
20+
requests: "16G"
21+
limits: "16G"
2122
ephemeral-storage:
2223
requests: "6G"
2324
limits: "6G"
@@ -30,14 +31,15 @@
3031
- name: srs-gnb
3132
type: gnb
3233
image: ${RETINA_REGISTRY_PREFIX}/srsgnb:${RETINA_VERSION}
34+
labels: ["kubernetes.io/hostname=sdr6"]
3335
requirements:
3436
arch: amd64
3537
cpu:
36-
requests: 10
37-
limits: 10
38+
requests: 14
39+
limits: 14
3840
memory:
39-
requests: "12G"
40-
limits: "12G"
41+
requests: "20G"
42+
limits: "20G"
4143
ephemeral-storage:
4244
requests: "9G"
4345
limits: "9G"

apps/examples/phy/radio_ssb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ int main(int argc, char** argv)
586586
rx_symbol_handler_example rx_symbol_handler(log_level);
587587

588588
// Create lower PHY error adapter logger.
589-
srslog::basic_logger& logger = srslog::fetch_basic_logger("Low-PHY");
589+
srslog::basic_logger& logger = srslog::fetch_basic_logger("PHY");
590590
logger.set_level(srslog::str_to_basic_level(log_level));
591591

592592
// Create adapters.

apps/gnb/gnb.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
#include "adapters/e1ap_gateway_local_connector.h"
4343
#include "adapters/f1c_gateway_local_connector.h"
44+
#include "srsran/gtpu/ngu_gateway.h"
4445
#include "srsran/support/backtrace.h"
4546
#include "srsran/support/config_parsers.h"
4647

@@ -122,7 +123,7 @@ static void configure_ru_generic_executors_and_notifiers(ru_generic_configuratio
122123

123124
for (unsigned i = 0, e = config.lower_phy_config.size(); i != e; ++i) {
124125
lower_phy_configuration& low_phy_cfg = config.lower_phy_config[i];
125-
low_phy_cfg.logger = &srslog::fetch_basic_logger("Low-PHY#" + std::to_string(i));
126+
low_phy_cfg.logger = &srslog::fetch_basic_logger("PHY");
126127
low_phy_cfg.tx_task_executor = workers.lower_phy_tx_exec[i];
127128
low_phy_cfg.rx_task_executor = workers.lower_phy_rx_exec[i];
128129
low_phy_cfg.dl_task_executor = workers.lower_phy_dl_exec[i];
@@ -486,11 +487,24 @@ int main(int argc, char** argv)
486487
cu_up_cfg.io_ul_executor = workers.cu_up_io_ul_exec; // Optionally select separate exec for UL IO
487488
cu_up_cfg.e1ap.e1ap_conn_client = &e1ap_gw;
488489
cu_up_cfg.f1u_gateway = f1u_conn->get_f1u_cu_up_gateway();
489-
cu_up_cfg.epoll_broker = epoll_broker.get();
490490
cu_up_cfg.gtpu_pcap = gtpu_p.get();
491491
cu_up_cfg.timers = cu_timers;
492492
cu_up_cfg.qos = generate_cu_up_qos_config(gnb_cfg);
493493

494+
// Create NG-U gateway.
495+
std::unique_ptr<srs_cu_up::ngu_gateway> ngu_gw;
496+
if (not gnb_cfg.amf_cfg.no_core) {
497+
udp_network_gateway_config ngu_gw_config = {};
498+
ngu_gw_config.bind_address = cu_up_cfg.net_cfg.n3_bind_addr;
499+
ngu_gw_config.bind_port = cu_up_cfg.net_cfg.n3_bind_port;
500+
ngu_gw_config.bind_interface = cu_up_cfg.net_cfg.n3_bind_interface;
501+
ngu_gw_config.rx_max_mmsg = cu_up_cfg.net_cfg.n3_rx_max_mmsg;
502+
ngu_gw = srs_cu_up::create_udp_ngu_gateway(ngu_gw_config, *epoll_broker, *workers.cu_up_io_ul_exec);
503+
} else {
504+
ngu_gw = srs_cu_up::create_no_core_ngu_gateway();
505+
}
506+
cu_up_cfg.ngu_gw = ngu_gw.get();
507+
494508
// create and start CU-UP
495509
std::unique_ptr<srsran::srs_cu_up::cu_up_interface> cu_up_obj = create_cu_up(cu_up_cfg);
496510
cu_up_obj->start();

apps/gnb/gnb_appconfig.h

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "srsran/ran/direct_current_offset.h"
3232
#include "srsran/ran/dmrs.h"
3333
#include "srsran/ran/five_qi.h"
34+
#include "srsran/ran/gnb_id.h"
3435
#include "srsran/ran/lcid.h"
3536
#include "srsran/ran/ntn.h"
3637
#include "srsran/ran/pcch/pcch_configuration.h"
@@ -45,7 +46,7 @@
4546
#include "srsran/ran/slot_pdu_capacity_constants.h"
4647
#include "srsran/ran/subcarrier_spacing.h"
4748
#include "srsran/support/cpu_architecture_info.h"
48-
#include "srsran/support/unique_thread.h"
49+
#include "srsran/support/executors/unique_thread.h"
4950
#include "srsran/support/units.h"
5051
#include <map>
5152
#include <string>
@@ -679,18 +680,19 @@ struct cu_cp_neighbor_cell_appconfig_item {
679680

680681
/// \brief Each item describes the relationship between one cell to all other cells.
681682
struct cu_cp_cell_appconfig_item {
682-
uint64_t nr_cell_id; ///< Cell id.
683-
std::string rat = "nr"; ///< RAT of this neighbor cell.
683+
uint64_t nr_cell_id; ///< Cell id.
684+
optional<unsigned> periodic_report_cfg_id;
684685

686+
// These parameters must only be set for external cells
685687
// TODO: Add optional SSB parameters.
686-
optional<unsigned> periodic_report_cfg_id;
687-
optional<unsigned> gnb_id; ///< gNodeB identifier
688-
optional<nr_band> band;
689-
optional<unsigned> ssb_arfcn;
690-
optional<unsigned> ssb_scs;
691-
optional<unsigned> ssb_period;
692-
optional<unsigned> ssb_offset;
693-
optional<unsigned> ssb_duration;
688+
optional<unsigned> gnb_id_bit_length; ///< gNodeB identifier bit length.
689+
optional<pci_t> pci; ///< PCI.
690+
optional<nr_band> band; ///< NR band.
691+
optional<unsigned> ssb_arfcn; ///< SSB ARFCN.
692+
optional<unsigned> ssb_scs; ///< SSB subcarrier spacing.
693+
optional<unsigned> ssb_period; ///< SSB period.
694+
optional<unsigned> ssb_offset; ///< SSB offset.
695+
optional<unsigned> ssb_duration; ///< SSB duration.
694696

695697
std::vector<cu_cp_neighbor_cell_appconfig_item> ncells; ///< Vector of cells that are a neighbor of this cell.
696698
};
@@ -729,6 +731,12 @@ struct security_appconfig {
729731
std::string nia_preference_list = "nia2,nia1,nia3";
730732
};
731733

734+
/// \brief F1AP-CU configuration parameters.
735+
struct f1ap_cu_appconfig {
736+
/// Timeout for the UE context setup procedure in milliseconds.
737+
unsigned ue_context_setup_timeout = 1000;
738+
};
739+
732740
struct cu_cp_appconfig {
733741
uint16_t max_nof_dus = 6;
734742
uint16_t max_nof_cu_ups = 6;
@@ -737,6 +745,7 @@ struct cu_cp_appconfig {
737745
mobility_appconfig mobility_config;
738746
rrc_appconfig rrc_config;
739747
security_appconfig security_config;
748+
f1ap_cu_appconfig f1ap_config;
740749
};
741750

742751
struct cu_up_appconfig {
@@ -780,6 +789,8 @@ struct log_appconfig {
780789
optional<unsigned> phy_rx_symbols_port = 0;
781790
/// If true, prints the PRACH frequency-domain symbols.
782791
bool phy_rx_symbols_prach = false;
792+
/// Enable JSON generation for the F1AP Tx and Rx PDUs.
793+
bool f1ap_json_enabled = false;
783794
/// Set to a valid file path to enable tracing and write the trace to the file.
784795
std::string tracing_filename;
785796
};
@@ -1242,9 +1253,7 @@ struct gnb_appconfig {
12421253
/// Metrics configuration.
12431254
metrics_appconfig metrics_cfg;
12441255
/// gNodeB identifier.
1245-
uint32_t gnb_id = 411;
1246-
/// Length of gNB identity in bits. Values {22,...,32}.
1247-
uint8_t gnb_id_bit_length = 32;
1256+
gnb_id_t gnb_id = {411, 22};
12481257
/// Node name.
12491258
std::string ran_node_name = "srsgnb01";
12501259
/// AMF configuration.
@@ -1253,6 +1262,8 @@ struct gnb_appconfig {
12531262
cu_cp_appconfig cu_cp_cfg;
12541263
/// CU-CP configuration.
12551264
cu_up_appconfig cu_up_cfg;
1265+
/// F1AP configuration.
1266+
f1ap_cu_appconfig f1ap_cfg;
12561267
/// \brief E2 configuration.
12571268
e2_appconfig e2_cfg;
12581269
/// Radio Unit configuration.

apps/gnb/gnb_appconfig_cli11_schema.cpp

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ static void configure_cli11_log_args(CLI::App& app, log_appconfig& log_params)
109109
"Set to true to dump the IQ symbols from all the PRACH ports. Only works if "
110110
"\"phy_rx_symbols_filename\" is set.")
111111
->capture_default_str();
112+
app.add_option("--f1ap_json_enabled", log_params.f1ap_json_enabled, "Enable JSON logging of F1AP PDUs")
113+
->always_capture_default();
112114
app.add_option("--tracing_filename", log_params.tracing_filename, "Set to a valid file path to enable tracing")
113115
->always_capture_default();
114116

@@ -292,20 +294,19 @@ static void configure_cli11_ncell_args(CLI::App& app, cu_cp_neighbor_cell_appcon
292294
static void configure_cli11_cells_args(CLI::App& app, cu_cp_cell_appconfig_item& config)
293295
{
294296
app.add_option("--nr_cell_id", config.nr_cell_id, "Cell id to be configured");
295-
app.add_option("--rat", config.rat, "RAT of this neighbor cell")->capture_default_str();
296297
app.add_option("--periodic_report_cfg_id",
297298
config.periodic_report_cfg_id,
298299
"Periodical report configuration for the serving cell")
299300
->check(CLI::Range(1, 64));
300-
;
301301
add_auto_enum_option(app, "--band", config.band, "NR frequency band");
302-
303-
app.add_option("--gnb_id", config.gnb_id, "gNodeB identifier");
302+
app.add_option("--gnb_id_bit_length", config.gnb_id_bit_length, "gNodeB identifier bit length")
303+
->check(CLI::Range(22, 32));
304+
app.add_option("--pci", config.pci, "Physical Cell Id")->check(CLI::Range(0, 1007));
304305
app.add_option("--ssb_arfcn", config.ssb_arfcn, "SSB ARFCN");
305306
app.add_option("--ssb_scs", config.ssb_scs, "SSB subcarrier spacing")->check(CLI::IsMember({15, 30, 60, 120, 240}));
306-
app.add_option("--ssb_period", config.ssb_period, "SSB period in ms");
307+
app.add_option("--ssb_period", config.ssb_period, "SSB period in ms")->check(CLI::IsMember({5, 10, 20, 40, 80, 160}));
307308
app.add_option("--ssb_offset", config.ssb_offset, "SSB offset");
308-
app.add_option("--ssb_duration", config.ssb_duration, "SSB duration");
309+
app.add_option("--ssb_duration", config.ssb_duration, "SSB duration")->check(CLI::IsMember({1, 2, 3, 4, 5}));
309310

310311
// report configuration parameters.
311312
app.add_option_function<std::vector<std::string>>(
@@ -331,14 +332,24 @@ static void configure_cli11_report_args(CLI::App& app, cu_cp_report_appconfig& r
331332
->check(CLI::Range(1, 64));
332333
app.add_option("--report_type", report_params.report_type, "Type of the report configuration")
333334
->check(CLI::IsMember({"periodical", "event_triggered"}));
334-
app.add_option("--report_interval_ms", report_params.report_interval_ms, "Report interval in ms");
335-
app.add_option("--a3_report_type", report_params.a3_report_type, "A3 report type");
336-
app.add_option("--a3_offset_db", report_params.a3_offset_db, "A3 offset in dB used for measurement report trigger");
335+
app.add_option("--report_interval_ms", report_params.report_interval_ms, "Report interval in ms")
336+
->check(
337+
CLI::IsMember({120, 240, 480, 640, 1024, 2048, 5120, 10240, 20480, 40960, 60000, 360000, 720000, 1800000}));
338+
app.add_option("--a3_report_type", report_params.a3_report_type, "A3 report type")
339+
->check(CLI::IsMember({"rsrp", "rsrq", "sinr"}));
340+
app.add_option("--a3_offset_db",
341+
report_params.a3_offset_db,
342+
"A3 offset in dB used for measurement report trigger. Note the actual value is field value * 0.5 dB")
343+
->check(CLI::Range(-30, 30));
337344
app.add_option(
338-
"--a3_hysteresis_db", report_params.a3_hysteresis_db, "A3 hysteresis in dB used for measurement report trigger");
345+
"--a3_hysteresis_db",
346+
report_params.a3_hysteresis_db,
347+
"A3 hysteresis in dB used for measurement report trigger. Note the actual value is field value * 0.5 dB")
348+
->check(CLI::Range(0, 30));
339349
app.add_option("--a3_time_to_trigger_ms",
340350
report_params.a3_time_to_trigger_ms,
341-
"Time in ms during which A3 condition must be met before measurement report trigger");
351+
"Time in ms during which A3 condition must be met before measurement report trigger")
352+
->check(CLI::IsMember({0, 40, 64, 80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, 5120}));
342353
}
343354

344355
static void configure_cli11_mobility_args(CLI::App& app, mobility_appconfig& config)
@@ -427,6 +438,13 @@ static void configure_cli11_security_args(CLI::App& app, security_appconfig& con
427438
->capture_default_str();
428439
}
429440

441+
static void configure_cli11_f1ap_args(CLI::App& app, f1ap_cu_appconfig& f1ap_params)
442+
{
443+
app.add_option(
444+
"--ue_context_setup_timeout", f1ap_params.ue_context_setup_timeout, "UE context setup timeout in milliseconds")
445+
->capture_default_str();
446+
}
447+
430448
static void configure_cli11_cu_cp_args(CLI::App& app, cu_cp_appconfig& cu_cp_params)
431449
{
432450
app.add_option(
@@ -453,6 +471,9 @@ static void configure_cli11_cu_cp_args(CLI::App& app, cu_cp_appconfig& cu_cp_par
453471

454472
CLI::App* security_subcmd = app.add_subcommand("security", "Security configuration");
455473
configure_cli11_security_args(*security_subcmd, cu_cp_params.security_config);
474+
475+
CLI::App* f1ap_subcmd = app.add_subcommand("f1ap", "F1AP configuration");
476+
configure_cli11_f1ap_args(*f1ap_subcmd, cu_cp_params.f1ap_config);
456477
}
457478

458479
static void configure_cli11_cu_up_args(CLI::App& app, cu_up_appconfig& cu_up_params)
@@ -2433,8 +2454,8 @@ static void configure_cli11_fapi_args(CLI::App& app, fapi_appconfig& config)
24332454
void srsran::configure_cli11_with_gnb_appconfig_schema(CLI::App& app, gnb_parsed_appconfig& gnb_parsed_cfg)
24342455
{
24352456
gnb_appconfig& gnb_cfg = gnb_parsed_cfg.config;
2436-
app.add_option("--gnb_id", gnb_cfg.gnb_id, "gNodeB identifier")->capture_default_str();
2437-
app.add_option("--gnb_id_bit_length", gnb_cfg.gnb_id_bit_length, "gNodeB identifier length in bits")
2457+
app.add_option("--gnb_id", gnb_cfg.gnb_id.id, "gNodeB identifier")->capture_default_str();
2458+
app.add_option("--gnb_id_bit_length", gnb_cfg.gnb_id.bit_length, "gNodeB identifier length in bits")
24382459
->capture_default_str()
24392460
->check(CLI::Range(22, 32));
24402461
app.add_option("--ran_node_name", gnb_cfg.ran_node_name, "RAN node name")->capture_default_str();

0 commit comments

Comments
 (0)