From 4490571e0395ce8f6997f7b9a5b60e6e81b21a64 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 16 Jul 2025 11:10:35 +0200 Subject: [PATCH 01/10] CI 5G RFsim nFAPI u0/25PRB: Add Ping test on second PDU session --- ci-scripts/ci_infra.yaml | 6 ++++++ ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml | 12 ++++++++++++ .../5g_rfsimulator_u0_25prb/docker-compose.yaml | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ci-scripts/ci_infra.yaml b/ci-scripts/ci_infra.yaml index cda6258244..6e750d75b2 100644 --- a/ci-scripts/ci_infra.yaml +++ b/ci-scripts/ci_infra.yaml @@ -301,6 +301,12 @@ rfsim5g_ue: AttachScript: docker start rfsim5g-oai-nr-ue DetachScript: docker stop rfsim5g-oai-nr-ue MTU: 1500 +# for tests with second PDU session ID 2, needs to match requested PDU session name +rfsim5g_ue_pdu_2: + Host: "%%current_host%%" + NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue1p2 + CmdPrefix: docker exec rfsim5g-oai-nr-ue + IF: oaitun_ue1p2 rfsim5g_ue2: Host: "%%current_host%%" diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 82011e3cc2..6a81c53e69 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -32,6 +32,7 @@ 000003 020001 020002 + 020003 030001 030002 100001 @@ -98,6 +99,17 @@ 5 + + Ping + Ping ext-dn from NR-UE on PDU session ID 2 + rfsim5g_ue_pdu_2 + acamas + rfsim5g_ext_dn + acamas + -c 20 -i 0.25 + 5 + + Iperf Iperf (DL/3Mbps/UDP)(30 sec) diff --git a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml index 24a9edd8d7..a1b873eb96 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml @@ -147,7 +147,7 @@ services: - NET_ADMIN # for interface bringup - NET_RAW # for ping environment: - USE_ADDITIONAL_OPTIONS: --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152680000 --CO -400000000 --ssb 48 --rfsimulator.serveraddr 192.168.71.141 --log_config.global_log_options level,nocolor,time + USE_ADDITIONAL_OPTIONS: --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152680000 --CO -400000000 --ssb 48 --rfsimulator.serveraddr 192.168.71.141 --extra-pdu-id 2 --log_config.global_log_options level,nocolor,time depends_on: - oai-pnf networks: From 47d857c9199982747e1bc32d72023a9a3576410c Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Tue, 24 Jun 2025 11:15:13 +0200 Subject: [PATCH 02/10] CI: test T2 with DPDK 22.11 Build and run OAI physims with DPDK version 22.11 for testing with the latest T2 firmware release. Environment variables PKG_CONFIG_PATH and LD_LIBRARY_PATH are set to point to the custom installation path of DPDK v22.11. --- ci-scripts/cls_native.py | 5 ++-- .../xml_files/t2_offload_dec_nr_ulsim.xml | 18 +++++++------- .../xml_files/t2_offload_enc_nr_dlsim.xml | 24 +++++++++---------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/ci-scripts/cls_native.py b/ci-scripts/cls_native.py index 8f4d90ea84..fe508b84e3 100644 --- a/ci-scripts/cls_native.py +++ b/ci-scripts/cls_native.py @@ -30,6 +30,7 @@ import cls_analysis import constants as CONST LOG_PATH_PHYSIM = 'phy_sim_logs' +DPDK_PATH = '/opt/dpdk-t2-22.11.0' class Native(): @@ -39,7 +40,7 @@ class Native(): with cls_cmd.getConnection(host) as ssh: base = f"{directory}/cmake_targets" - ret = ssh.run(f"{base}/build_oai {options} > {base}/log/build_oai.log", timeout=900) + ret = ssh.run(f"C_INCLUDE_PATH={DPDK_PATH}/include/ PKG_CONFIG_PATH={DPDK_PATH}/lib64/pkgconfig/ {base}/build_oai {options} > {base}/log/build_oai.log", timeout=900) success = ret.returncode == 0 logs = ssh.run(f"cat {base}/log/build_oai.log", silent=True) logging.debug(f"build finished with code {ret.returncode}, output:\n{logs.stdout}") @@ -73,7 +74,7 @@ class Native(): os.system(f'mkdir -p ./{LOG_PATH_PHYSIM}') runLogFile=f'physim_{HTML.testCase_id}.log' with cls_cmd.getConnection(host) as cmd: - cmd.run(f'sudo {workSpacePath}/ran_build/build/{physim_test} {options} >> {workSpacePath}/{runLogFile}') + cmd.run(f'sudo LD_LIBRARY_PATH=.:{DPDK_PATH}/lib64/ {workSpacePath}/ran_build/build/{physim_test} {options} >> {workSpacePath}/{runLogFile}') cmd.copyin(src=f'{workSpacePath}/{runLogFile}', tgt=f'{LOG_PATH_PHYSIM}/{runLogFile}') success, msg = cls_analysis.Analysis.analyze_physim(f'{LOG_PATH_PHYSIM}/{runLogFile}', physim_test, options, threshold) if success: diff --git a/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml b/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml index c959d99e1b..15b8921a5a 100644 --- a/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml +++ b/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml @@ -62,7 +62,7 @@ true nr_ulsim 100 - -n1000 -s30 -S30.2 -m5 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m5 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -80,7 +80,7 @@ true nr_ulsim 150 - -n1000 -s30 -S30.2 -m15 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m15 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -98,7 +98,7 @@ true nr_ulsim 250 - -n1000 -s30 -S30.2 -m25 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m25 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -116,7 +116,7 @@ true nr_ulsim 150 - -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -134,7 +134,7 @@ true nr_ulsim 350 - -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -152,7 +152,7 @@ true nr_ulsim 550 - -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -170,7 +170,7 @@ true nr_ulsim 250 - -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -188,7 +188,7 @@ true nr_ulsim 650 - -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -206,7 +206,7 @@ true nr_ulsim 1100 - -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 diff --git a/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml b/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml index 400399d3a1..7feb93741a 100644 --- a/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml +++ b/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml @@ -63,7 +63,7 @@ true nr_dlsim 100 - -n1000 -s30 -S30.2 -e5 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e5 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -81,7 +81,7 @@ true nr_dlsim 100 - -n1000 -s30 -S30.2 -e15 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e15 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -99,7 +99,7 @@ true nr_dlsim 200 - -n1000 -s30 -S30.2 -e25 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e25 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -117,7 +117,7 @@ true nr_dlsim 150 - -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -135,7 +135,7 @@ true nr_dlsim 250 - -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -153,7 +153,7 @@ true nr_dlsim 400 - -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -171,7 +171,7 @@ true nr_dlsim 200 - -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -189,7 +189,7 @@ true nr_dlsim 500 - -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -207,7 +207,7 @@ true nr_dlsim 500 - -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -225,7 +225,7 @@ true nr_dlsim 200 - -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -243,7 +243,7 @@ true nr_dlsim 300 - -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 @@ -261,6 +261,6 @@ true nr_dlsim 450 - -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev d8:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 + -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _t2 --nrLDPC_coding_t2.dpdk_dev af:00.0 --nrLDPC_coding_t2.dpdk_core_list 11-12 From c9aa985e233ac97eeae6ca6a861d7f280c26a5a7 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 17 Jul 2025 14:36:18 +0200 Subject: [PATCH 03/10] Verify 2nd PDU session is up --- ci-scripts/ci_infra.yaml | 3 +++ ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/ci-scripts/ci_infra.yaml b/ci-scripts/ci_infra.yaml index 6e750d75b2..266f0db7cc 100644 --- a/ci-scripts/ci_infra.yaml +++ b/ci-scripts/ci_infra.yaml @@ -307,6 +307,9 @@ rfsim5g_ue_pdu_2: NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue1p2 CmdPrefix: docker exec rfsim5g-oai-nr-ue IF: oaitun_ue1p2 + AttachScript: docker start rfsim5g-oai-nr-ue + DetachScript: docker stop rfsim5g-oai-nr-ue + MTU: 1500 rfsim5g_ue2: Host: "%%current_host%%" diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 6a81c53e69..40f3ad4607 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -32,6 +32,7 @@ 000003 020001 020002 + 000004 020003 030001 030002 @@ -99,6 +100,13 @@ 5 + + Attach_UE + Verify 2nd PDU session is up + rfsim5g_ue_pdu_2 + acamas + + Ping Ping ext-dn from NR-UE on PDU session ID 2 From 10112332cc4c402a1df8b238630fccf30d8f4f46 Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 1 Jul 2025 13:55:00 +0200 Subject: [PATCH 04/10] function to count bits with a mask for start and stop --- common/utils/nr/nr_common.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h index f98ce510a2..8a24f6d6dd 100644 --- a/common/utils/nr/nr_common.h +++ b/common/utils/nr/nr_common.h @@ -246,6 +246,12 @@ static __attribute__((always_inline)) inline int count_bits64(uint64_t v) return __builtin_popcountll(v); } +static __attribute__((always_inline)) inline int count_bits64_with_mask(uint64_t v, int start, int num) +{ + uint64_t mask = ((1LL << num) - 1) << start; + return count_bits64(v & mask); +} + uint64_t reverse_bits(uint64_t in, int n_bits); void reverse_bits_u8(uint8_t const* in, size_t sz, uint8_t* out); From 1a2a8bb04f9bd0127b59610adc5a99d96c3c94ef Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 1 Jul 2025 14:01:26 +0200 Subject: [PATCH 05/10] replace get_dmrs_symbols_in_slot with new function (does exactly the same) --- openair1/PHY/NR_REFSIG/dmrs_nr.c | 12 +----------- openair1/PHY/NR_REFSIG/dmrs_nr.h | 1 - openair1/SIMULATION/NR_PHY/ulsim.c | 6 ++---- 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/openair1/PHY/NR_REFSIG/dmrs_nr.c b/openair1/PHY/NR_REFSIG/dmrs_nr.c index 4d5ed0fe63..a5a55d685a 100644 --- a/openair1/PHY/NR_REFSIG/dmrs_nr.c +++ b/openair1/PHY/NR_REFSIG/dmrs_nr.c @@ -307,16 +307,6 @@ int8_t get_next_dmrs_symbol_in_slot(uint16_t ul_dmrs_symb_pos, uint8_t counter, } -/* return the total number of dmrs symbol in a slot */ -uint8_t get_dmrs_symbols_in_slot(uint16_t l_prime_mask, uint16_t nb_symb, uint8_t start) -{ - uint8_t tmp = 0; - for (int i = start; i < start + nb_symb; i++) { - tmp += (l_prime_mask >> i) & 0x01; - } - return tmp; -} - /* return the position of valid dmrs symbol in a slot for channel compensation */ int8_t get_valid_dmrs_idx_for_channel_est(uint16_t dmrs_symb_pos, uint8_t counter) { @@ -351,7 +341,7 @@ void nr_chest_time_domain_avg(NR_DL_FRAME_PARMS *frame_parms, simde__m128i *ul_ch128_1; int16_t *ul_ch16_0; int total_symbols = start_symbol + num_symbols; - int num_dmrs_symb = get_dmrs_symbols_in_slot(dmrs_bitmap, total_symbols, start_symbol); + int num_dmrs_symb = count_bits64_with_mask(dmrs_bitmap, start_symbol, total_symbols); int first_dmrs_symb = get_next_dmrs_symbol_in_slot(dmrs_bitmap, start_symbol, total_symbols); AssertFatal(first_dmrs_symb > -1, "No DMRS symbol present in this slot\n"); for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { diff --git a/openair1/PHY/NR_REFSIG/dmrs_nr.h b/openair1/PHY/NR_REFSIG/dmrs_nr.h index 001aae4150..97d61993ce 100644 --- a/openair1/PHY/NR_REFSIG/dmrs_nr.h +++ b/openair1/PHY/NR_REFSIG/dmrs_nr.h @@ -63,7 +63,6 @@ uint8_t allowed_xlsch_re_in_dmrs_symbol(uint16_t k, void nr_gen_ref_conj_symbols(const uint32_t *in, uint32_t length, int16_t *output, int mod_order); int8_t get_next_dmrs_symbol_in_slot(uint16_t ul_dmrs_symb_pos, uint8_t counter, uint8_t end_symbol); -uint8_t get_dmrs_symbols_in_slot(uint16_t l_prime_mask, uint16_t nb_symb, uint8_t start); int8_t get_valid_dmrs_idx_for_channel_est(uint16_t dmrs_symb_pos, uint8_t counter); void nr_chest_time_domain_avg(NR_DL_FRAME_PARMS *frame_parms, int32_t **ch_estimates, diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 4e127fe0b7..3c30ad9546 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -847,14 +847,12 @@ int main(int argc, char *argv[]) uint8_t length_dmrs = pusch_len1; uint16_t l_prime_mask = get_l_prime(nb_symb_sch, mapping_type, add_pos, length_dmrs, start_symbol, NR_MIB__dmrs_TypeA_Position_pos2); - uint16_t number_dmrs_symbols = get_dmrs_symbols_in_slot(l_prime_mask, nb_symb_sch, start_symbol); + int number_dmrs_symbols = count_bits64_with_mask(l_prime_mask, start_symbol, nb_symb_sch); uint8_t nb_re_dmrs = (dmrs_config_type == pusch_dmrs_type1) ? 6 : 4; uint32_t tbslbrm = 0; if (ilbrm) - tbslbrm = nr_compute_tbslbrm(mcs_table, - N_RB_UL, - precod_nbr_layers); + tbslbrm = nr_compute_tbslbrm(mcs_table, N_RB_UL, precod_nbr_layers); if ((UE->frame_parms.nb_antennas_tx==4)&&(precod_nbr_layers==4)) num_dmrs_cdm_grps_no_data = 2; From f33e5cbf131313acf45810b3c202a5d01665b9a1 Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 1 Jul 2025 14:24:01 +0200 Subject: [PATCH 06/10] use function to count number of dmrs symbols --- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 7 ++----- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 7 +------ openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 12 +++--------- .../LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c | 5 +---- 4 files changed, 7 insertions(+), 24 deletions(-) diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 8da471f4c1..091741deb9 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -821,10 +821,8 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N AssertFatal(ulsch_harq != NULL, "harq_pid %d is not allocated\n", ulsch->harq_pid); if ((ulsch->active == true) && (ulsch->frame == frame_rx) && (ulsch->slot == slot_rx) && (ulsch->handled == 0)) { LOG_D(PHY, "PUSCH ID %d with RNTI %x detection started in frame %d slot %d\n", ULSCH_id, ulsch->rnti, frame_rx, slot_rx); - - int num_dmrs = 0; - for (int s = 0; s < NR_NUMBER_OF_SYMBOLS_PER_SLOT; s++) - num_dmrs += (ulsch_harq->ulsch_pdu.ul_dmrs_symb_pos >> s) & 1; + nfapi_nr_pusch_pdu_t *pdu = &ulsch_harq->ulsch_pdu; + int num_dmrs = count_bits64_with_mask(pdu->ul_dmrs_symb_pos, 0, NR_NUMBER_OF_SYMBOLS_PER_SLOT); #ifdef DEBUG_RXDATA NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; @@ -832,7 +830,6 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N int slot_offset = frame_parms->get_samples_slot_timestamp(slot_rx, frame_parms, 0); slot_offset -= ru->N_TA_offset; int32_t sample_offset = gNB->common_vars.debugBuff_sample_offset; - nfapi_nr_pusch_pdu_t *pdu = &ulsch_harq->ulsch_pdu; int16_t *buf = (int16_t *)&gNB->common_vars.debugBuff[offset]; buf[0] = (int16_t)ulsch->rnti; buf[1] = (int16_t)pdu->rb_size; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 2c37b21f5b..1a5b245566 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -797,12 +797,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, int start_symbol = pusch_config_pdu->start_symbol_index; int number_of_symbols = pusch_config_pdu->nr_of_symbols; - int number_dmrs_symbols = 0; - for (int i = start_symbol; i < start_symbol + number_of_symbols; i++) { - if ((pusch_config_pdu->ul_dmrs_symb_pos >> i) & 0x01) - number_dmrs_symbols += 1; - } - + int number_dmrs_symbols = count_bits64_with_mask(pusch_config_pdu->ul_dmrs_symb_pos, start_symbol, number_of_symbols); int nb_dmrs_re_per_rb = ((pusch_config_pdu->dmrs_config_type == pusch_dmrs_type1) ? 6 : 4) * pusch_config_pdu->num_dmrs_cdm_grps_no_data; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index 4a723263dc..78fb84029a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -293,9 +293,7 @@ static void schedule_nr_MsgA_pusch(NR_UplinkConfigCommon_t *uplinkConfigCommon, pusch_pdu->mcs_index = msgA_PUSCH_Resource->msgA_MCS_r16; pusch_pdu->qam_mod_order = nr_get_Qm_dl(pusch_pdu->mcs_index, pusch_pdu->mcs_table); - int num_dmrs_symb = 0; - for (int i = 10; i < 10 + 3; i++) - num_dmrs_symb += (pusch_pdu->ul_dmrs_symb_pos >> i) & 1; + int num_dmrs_symb = count_bits64_with_mask(pusch_pdu->ul_dmrs_symb_pos, 10, 3); AssertFatal(pusch_pdu->mcs_index <= 28, "Exceeding MCS limit for MsgA PUSCH\n"); int R = nr_get_code_rate_ul(pusch_pdu->mcs_index, pusch_pdu->mcs_table); pusch_pdu->target_code_rate = R; @@ -825,9 +823,7 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP, uint16_t *vrb_map_UL = &nr_mac->common_channels[CC_id].vrb_map_UL[beam_ul.idx][buffer_index * MAX_BWP_SIZE]; NR_pusch_dmrs_t dmrs_info = get_ul_dmrs_params(scc, ul_bwp, &tda_info, 1); - int num_dmrs_symb = 0; - for(int i = tda_info.startSymbolIndex; i < tda_info.startSymbolIndex + tda_info.nrOfSymbols; i++) - num_dmrs_symb += (dmrs_info.ul_dmrs_symb_pos >> i) & 1; + int num_dmrs_symb = count_bits64_with_mask(dmrs_info.ul_dmrs_symb_pos, tda_info.startSymbolIndex, tda_info.nrOfSymbols); int TBS = 0, mcsindex = 0, R = 0, Qm = 0; while(TBS < 7) { // TBS for msg3 is 7 bytes (except for RRCResumeRequest1 currently not implemented) mcsindex++; @@ -1162,9 +1158,7 @@ static void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, slot_ NR_tda_info_t tda_info = get_ul_tda_info(ul_bwp, 0, NR_SearchSpace__searchSpaceType_PR_common, TYPE_TC_RNTI_, ra->Msg3_tda_id); NR_pusch_dmrs_t dmrs_info = get_ul_dmrs_params(scc, ul_bwp, &tda_info, 1); - int num_dmrs_symb = 0; - for(int i = tda_info.startSymbolIndex; i < tda_info.startSymbolIndex + tda_info.nrOfSymbols; i++) - num_dmrs_symb += (dmrs_info.ul_dmrs_symb_pos >> i) & 1; + int num_dmrs_symb = count_bits64_with_mask(dmrs_info.ul_dmrs_symb_pos, tda_info.startSymbolIndex, tda_info.nrOfSymbols); int TBS = 0, mcsindex = 0, R = 0, Qm = 0; while(TBS < 7) { // TBS for msg3 is 7 bytes (except for RRCResumeRequest1 currently not implemented) mcsindex++; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index b894587854..341440607a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -762,10 +762,7 @@ NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc, tda_info->startSymbolIndex, scc->dmrs_TypeA_Position); - uint8_t num_dmrs_symb = 0; - for(int i = tda_info->startSymbolIndex; i < tda_info->startSymbolIndex + tda_info->nrOfSymbols; i++) - num_dmrs_symb += (dmrs.ul_dmrs_symb_pos >> i) & 1; - dmrs.num_dmrs_symb = num_dmrs_symb; + dmrs.num_dmrs_symb = count_bits64_with_mask(dmrs.ul_dmrs_symb_pos, tda_info->startSymbolIndex, tda_info->nrOfSymbols); dmrs.N_PRB_DMRS = dmrs.num_dmrs_cdm_grps_no_data * (dmrs.dmrs_config_type == 0 ? 6 : 4); return dmrs; } From b0a099cc1514549384aa41b6405ee4e42a8d7920 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 21 Jul 2025 12:17:59 +0200 Subject: [PATCH 07/10] RAN-Container-Parent: Auto-generate artifact in failure case RAN-Container-Parent uses Jenkinsfile-GitLab-Container, which only triggers sub pipelines, then collects their results. However, if a sub pipeline did not generate an artifact, the result was skipped. It would also not show it in the automatically generated result page, when it should. Remedy this by automatically generating a file with a link to the pipeline if the artifact could not be retrieved, which 1. Will give a link, which is easier for developers to follow to the pipeline than manually clicking through Jenkins, 2. Makes the failed pipeline appear in the list of failed pipelines. --- ci-scripts/Jenkinsfile-GitLab-Container | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container index 62ab0266b1..f2a84fbd91 100644 --- a/ci-scripts/Jenkinsfile-GitLab-Container +++ b/ci-scripts/Jenkinsfile-GitLab-Container @@ -835,11 +835,13 @@ def finalizeSlaveJob(jobName) { selector: lastCompleted()) if (fileExists(fileName)) { sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}" - archiveArtifacts artifacts: fileName - // BUILD_URL is like http://server:port/jenkins/job/foo/15/ - // no need to add a prefixed '/' - artifactUrl += 'artifact/' + fileName + } else { + sh "echo \"could not copy results from ${jobName}, please check pipeline ${BUILD_URL}\" > ${fileName}" } + archiveArtifacts artifacts: fileName + // BUILD_URL is like http://server:port/jenkins/job/foo/15/ + // no need to add a prefixed '/' + artifactUrl += 'artifact/' + fileName } artifactUrl = "\n * [${jobName}](${artifactUrl})" return artifactUrl From 693dfb9374e591a1dfff6f13351f42e2ee5ac803 Mon Sep 17 00:00:00 2001 From: Marius Tillner Date: Tue, 22 Jul 2025 15:51:01 +0200 Subject: [PATCH 08/10] bugfix: avoid segmentation fault when Redcap tries to connect to gNB as NR_ServingCellConfig_t scd is NULL when Redcap does RA --- openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c index ad22b9dd63..c7fc724747 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c +++ b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c @@ -3503,7 +3503,8 @@ static bool verify_radio_configuration(int uid, const NR_ServingCellConfigCommon return false; } - int n_dl_bwp = scd->downlinkBWP_ToAddModList ? scd->downlinkBWP_ToAddModList->list.count : 1; + /* for RedCap, scd is NULL */ + int n_dl_bwp = scd && scd->downlinkBWP_ToAddModList ? scd->downlinkBWP_ToAddModList->list.count : 1; int csi_offset = fs->numb_slots_period * n_dl_bwp; // see set_csirs_periodicity if (csi_offset / 320 >= get_full_dl_slots_per_period(fs)) { From 3c03e18c23c687de9f60650d754929a270579d3e Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Mon, 21 Jul 2025 15:40:33 +0200 Subject: [PATCH 09/10] CI: move RFSim 4G to acamas --- .../xml_files/container_4g_rfsim_fdd_05MHz.xml | 18 +++++++++--------- .../container_4g_rfsim_fdd_05MHz_noS1.xml | 16 ++++++++-------- .../xml_files/container_4g_rfsim_fdd_10MHz.xml | 18 +++++++++--------- .../xml_files/container_4g_rfsim_fdd_20MHz.xml | 18 +++++++++--------- .../xml_files/container_4g_rfsim_fembms.xml | 4 ++-- .../xml_files/container_4g_rfsim_mbms.xml | 4 ++-- .../xml_files/container_4g_rfsim_tdd_05MHz.xml | 16 ++++++++-------- doc/TESTBenches.md | 5 +++-- 8 files changed, 50 insertions(+), 49 deletions(-) diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml index aa80d4b5dc..235546928a 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml @@ -108,16 +108,16 @@ Attach_UE Attach OAI UE (Wait for IP) rfsim4g_ue - cacofonix + acamas Ping Ping Traffic-Gen from LTE-UE rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -c 20 5 @@ -126,9 +126,9 @@ Ping Ping LTE-UE from Traffic-Gen rfsim4g_ext_dn - cacofonix + acamas rfsim4g_ue - cacofonix + acamas -c 20 5 @@ -141,8 +141,8 @@ -u -t 30 -b 2M -R 25 80 - cacofonix - cacofonix + acamas + acamas @@ -153,8 +153,8 @@ -u -t 30 -b 1M 25 80 - cacofonix - cacofonix + acamas + acamas diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml index bfcade47ab..9b27ba1f8c 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml @@ -86,9 +86,9 @@ Ping Ping Traffic-Gen from LTE-UE rfsim4g_ue - cacofonix + acamas rfsim4g_enb_nos1 - cacofonix + acamas -c 20 5 @@ -97,9 +97,9 @@ Ping Ping LTE-UE from eNB rfsim4g_enb_nos1 - cacofonix + acamas rfsim4g_ue - cacofonix + acamas -c 20 5 @@ -108,9 +108,9 @@ Iperf Iperf UDP DL rfsim4g_ue - cacofonix + acamas rfsim4g_enb_nos1 - cacofonix + acamas -u -t 30 -b 2M -R 25 80 @@ -120,9 +120,9 @@ Iperf Iperf UDP UL rfsim4g_ue - cacofonix + acamas rfsim4g_enb_nos1 - cacofonix + acamas -u -t 30 -b 1M 25 80 diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml index 0cf4944a6c..2b8141a71d 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml @@ -108,16 +108,16 @@ Attach_UE Attach OAI UE (Wait for IP) rfsim4g_ue - cacofonix + acamas Ping Ping Traffic-Gen from LTE-UE rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -c 20 5 @@ -126,9 +126,9 @@ Ping Ping LTE-UE from Traffic-Gen rfsim4g_ext_dn - cacofonix + acamas rfsim4g_ue - cacofonix + acamas -c 20 5 @@ -137,9 +137,9 @@ Iperf Iperf UDP DL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 2M -R 25 80 @@ -149,9 +149,9 @@ Iperf Iperf UDP UL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 1M 25 80 diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml index 069db0c585..7afcc2f7c1 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml @@ -108,16 +108,16 @@ Attach_UE Attach OAI UE (Wait for IP) rfsim4g_ue - cacofonix + acamas Ping Ping Traffic-Gen from LTE-UE rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -c 20 5 @@ -126,9 +126,9 @@ Ping Ping LTE-UE from Traffic-Gen rfsim4g_ext_dn - cacofonix + acamas rfsim4g_ue - cacofonix + acamas -c 20 5 @@ -137,9 +137,9 @@ Iperf Iperf UDP DL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 2M -R 25 80 @@ -149,9 +149,9 @@ Iperf Iperf UDP UL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 1M 25 80 diff --git a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml index c030fbb4a4..1f869ecdde 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml @@ -83,9 +83,9 @@ Iperf2_Unidir Iperf2 UDP DL rfsim4g_ue_fembms - cacofonix + acamas rfsim4g_enb_fembms - cacofonix + acamas -u -t 30 -b 2M 25 80 diff --git a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml index 34c2fc6c89..4c3691e466 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml @@ -83,9 +83,9 @@ Iperf Iperf UDP DL rfsim4g_ue - cacofonix + acamas rfsim4g_enb_nos1 - cacofonix + acamas -u -t 30 -b 2M -R 25 80 diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml index df44214af9..f84269b16e 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml @@ -108,9 +108,9 @@ Ping Ping Traffic-Gen from LTE-UE rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -c 20 5 @@ -119,9 +119,9 @@ Ping Ping LTE-UE from Traffic-Gen rfsim4g_ext_dn - cacofonix + acamas rfsim4g_ue - cacofonix + acamas -c 20 5 @@ -130,9 +130,9 @@ Iperf Iperf UDP DL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 2M -R 25 80 @@ -142,9 +142,9 @@ Iperf Iperf UDP UL rfsim4g_ue - cacofonix + acamas rfsim4g_ext_dn - cacofonix + acamas -u -t 30 -b 1M 25 80 diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md index 53d54e45ec..2e0a26b2f9 100644 --- a/doc/TESTBenches.md +++ b/doc/TESTBenches.md @@ -23,6 +23,7 @@ | matix | Matix | gNB (n77) | N310 | | gracehopper1-oai | Gracehopper1 | gNB (n78, PNF/Nvidia CUBB + VNF) | Foxconn RU, _Nvidia Aerial integration_ | | gracehopper3-oai | Gracehopper3 | build | -- | +| acamas | Acamas | 4G and 5G rfsimulator| -- | Note: The available resources, and their current usage, is indicated here: - [Lockable resources of jenkins-oai](https://jenkins-oai.eurecom.fr/lockable-resources/): @@ -178,11 +179,11 @@ information on how the images are built. - see [`./physical-simulators.md`](./physical-simulators.md) for an overview - [RAN-RF-Sim-Test-4G](https://jenkins-oai.eurecom.fr/job/RAN-RF-Sim-Test-4G/) ~4G-LTE - - cacofonix (eNB, lteUE, OAI EPC) + - acamas (eNB, lteUE, OAI EPC) - uses RFsimulator, for FDD 5, 10, 20MHz with core, 5MHz noS1 - [RAN-RF-Sim-Test-5G](https://jenkins-oai.eurecom.fr/job/RAN-RF-Sim-Test-5G/) ~5G-NR ~nrUE - - cacofonix (gNB, nrUE, OAI 5GC) + - acamas (gNB, nrUE, OAI 5GC) - uses RFsimulator, TDD 40MHz, FDD 40MHz, F1 split - [RAN-SA-AW2S-CN5G](https://jenkins-oai.eurecom.fr/job/RAN-SA-AW2S-CN5G/) ~5G-NR From c5bc949a9685bd05d727d969ac646f43deb1e7c0 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Tue, 22 Jul 2025 14:45:12 +0200 Subject: [PATCH 10/10] rfsimulator: fix model name for channel bridge->nb_cnx++ is done before calling snprintf(modelname,... in the function, so we take the model name of the next channel. This commit corrects the issue by using bridge->nb_cnx - 1, ensuring that the model name corresponds to the currently connected client. This bug was introduced by MR !3455. Co-authored-by: Bartosz Podrygajlo Co-authored-by: Laurent THOMAS --- radio/rfsimulator/simulator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/rfsimulator/simulator.c b/radio/rfsimulator/simulator.c index ca28dd2e79..c60192bc93 100644 --- a/radio/rfsimulator/simulator.c +++ b/radio/rfsimulator/simulator.c @@ -218,7 +218,7 @@ static buffer_t *allocCirBuf(rfsimulator_state_t *bridge, int sock) sizeofArray(modelname), "rfsimu_channel_%s%d", (bridge->role == SIMU_ROLE_SERVER) ? "ue" : "enB", - bridge->nb_cnx); + bridge->nb_cnx - 1); ptr->channel_model = find_channel_desc_fromname(modelname); // path_loss in dB if (!ptr->channel_model) { // Use legacy method to find channel model - this will use the same channel model for all clients