Compare commits

..

670 Commits

Author SHA1 Message Date
Jaroslava Fiedlerova
8b5fef3a48 Adjust DNF update options to all RHEL9 Dockerfiles
This modification should improve build reliability and avoid dependency
resolution failures.
2025-11-04 10:46:14 +01:00
Jaroslava Fiedlerova
f9b4fe6a94 Merge branch 'integration_2025_w44' into 'develop'
Integration `2025.w44`

* !3721 improvements in formatting and LOGs in DMRS common functions at MAC
* !3725 Handle GTP receiver errors, fix memory leaks, add CU-UP test
* !3726 fix for CSI payload sizes in PUCCH structure at UE
* CI: Adjust attenutation for HO setup
* !3728 Fix for scenario with no CSI report configured for CSI-RS
* !3731 CI: ensure clean iperf3 server startup
* !3592 Refactor PRACH handling at the gNB
* !3682 Refactor DLSCH scheduler
* !3733 Clarify whitespace
* !3706 Change registry name env var content

Closes #1015 and #1014

See merge request oai/openairinterface5g!3727
2025-10-31 15:55:42 +00:00
Jaroslava Fiedlerova
5a6d253863 Merge remote-tracking branch 'origin/changeRegName' into integration_2025_w44 (!3706)
Change registry name env var content

Currently setting REGISTRY="" in a .env file results in docker failing to find
/image-name:tag. This corrects that, so it looks for local images named
image-name:tag.
2025-10-31 16:07:34 +01:00
Jaroslava Fiedlerova
aff3c9872f CI: align REGISTRY env var with updated image path format
Following the change to use:
  image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
the REGISTRY variable must now include the trailing slash.
2025-10-31 15:20:34 +01:00
Nick Hedberg
e4812c3d8e Allow for null-string REGISTRY names 2025-10-31 15:20:20 +01:00
Robert Schmidt
d4045fd87d Merge remote-tracking branch 'origin/clarifiyWhitespace' into integration_2025_w44 (!3727)
Clarify whitespace
2025-10-31 11:33:07 +01:00
Nick Hedberg
330c4fce5d Fix capitalization 2025-10-31 11:31:54 +01:00
Nick Hedberg
e6b307bf6e Indent correctly 2025-10-31 11:31:42 +01:00
Robert Schmidt
a8de9733e6 Merge remote-tracking branch 'origin/refactor-dlsch' into integration_2025_w44 (!3682)
Refactor DLSCH scheduler

Refactor the DLSCH post processor similarly to what has been done in
!3521  with the goal of saving an additional iteration through all UEs,
hopefully making the DLSCH scheduler faster.

It further includes changes to make working with and debugging multi-UE
operation easier:

- add some measurements in L1 (for total TX/RX time)
- a new option MACRLCs.[0].stats_max_ue to limit the number of UEs in
  the periodic output (default: 8, 0=disable)
- avoid stack overflow in the MAC
- fix the writing of stats to nrMAC_stats.log and nrL1_stats.log when
  the written output reduces by truncating the files
- avoid to schedule retransmission with 0 RBs.
2025-10-30 23:14:08 +01:00
Robert Schmidt
9449f777cc Remove TBS table and recompute on demand 2025-10-30 23:13:53 +01:00
Robert Schmidt
916455f027 Move update_dlsch_buffer() into pf_dl()
This slightly speeds up the scheduler (it e.g., does not need to check
for UEs that have retransmissions), and harmonizes with pf_ul(), which
evaluates (UL) BSR at a similar place within the scheduler.
2025-10-30 23:13:53 +01:00
Robert Schmidt
24399eac2d update_dlsch_buffer() for individual UEs 2025-10-30 23:13:53 +01:00
Robert Schmidt
27a022d6f8 Fix: avoid retransmission with 0 RBs
Check and return, if necessary, that we have enough resources to make
retransmissions. Without, we can asserts in L1, such as

    Assertion (NPRB>0 && (NPRB + RBstart <= BWPsize)) failed!
    In PRBalloc_to_locationandbandwidth0() openairinterface5g/common/utils/nr/nr_common.c:506
    Illegal NPRB/RBstart Configuration (0,51) for BWPsize 51

which indicates that the scheduler requested a transmission with 0 PRBs,
which does not make sense.
2025-10-30 23:13:46 +01:00
Robert Schmidt
1fd3c284f1 Merge remote-tracking branch 'origin/rework-gnb-prach-mem-management' into integration_2025_w44 (!3592)
Refactor PRACH handling at the gNB

- Remove race conditions by correctly setting mutexes
- Fix a bug when having multiple RACH occasions
- Reduce memory footprint by removing global memory, which should also
  fix potential memory data races in FHI 7.2
- Additional fixes, see commit messages
2025-10-30 23:12:09 +01:00
Laurent THOMAS
9ce9c16e36 Add documentation on PRACH processing 2025-10-30 23:01:06 +01:00
Laurent THOMAS
d8d1520580 reduce sl_ahead to catch the RACH Msg1 in time in 24PRB test
a bit difficult to understand: sl_ahead=6 => we systematically miss the
rach detection in the scheduler because the scheduler runs more than 6
slots ahead the rx slot processing (here > 11 slots because 6 (DL and UL
slots) + 4 (RU_RX_SLOT_DEPTH, so UL only))

so, reducing sl_ahead works better than large sl_ahead because the idea
behind is: the scheduler of slot+sl_ahead will never create work to do
in a UL slot before slot+sl_ahead+X (as minimum k2 is X, in the 24PRB CI
test: 6)
2025-10-30 23:01:06 +01:00
Laurent THOMAS
0d083d83fc Simplify code through lookup of PDU name, delete commented code 2025-10-30 23:01:06 +01:00
Laurent THOMAS
80223d36d5 Rename nr_fill_prach to nr_schedule_rx_prach() 2025-10-30 23:01:06 +01:00
Laurent THOMAS
1292cd68b7 Remove the usage of global mem for rach rx process
saves about 600MB of memory allocation

Move the definition of PRACH items and the PRACH list to the
defs_nr_commons.h file.

Do not re-write the entire structure in nr_schedule_rx_prach(), as it is
quite large now.
2025-10-30 23:01:06 +01:00
Robert Schmidt
67ba4f6741 evaluate_cqi_report(): Add LOG_D for reported CQI 2025-10-30 19:14:07 +01:00
Robert Schmidt
924f28ed70 Refactor to call post-processor in place
Call the post-processor when the allocation is "fixed" (i.e., nothing
changes anymore), instead of having a final loop across all UEs that
might potentially be costly.

In order to calculate the PF metric, note that the statistics "reset" is
moved into pf_dl() instead of the post-processing loop, as it has to be
done on each slot.

See also: dd98030202 ("Refactor to call post-processor in place")
2025-10-30 19:14:06 +01:00
Robert Schmidt
4eb43f2c45 nr_dlsim_preprocessor(): Refactor NR_sched_pdsch usage
Similarly to parent commit(s), assign sched_pdsch in a single place
instead of relying on sched_ctrl. In a follow-up commit, the
post-processor will be called in a single place.
2025-10-30 19:14:06 +01:00
Robert Schmidt
1900edb56d schedule_control_sib1(): Refactor NR_sched_pdsch usage
Similarly to parent commit(s), refactor the use of NR_sched_pdsch.
Instead of using nr_mac->sched_ctrlCommon, put the NR_sched_pdsch_t on
the stack.

This also refactors update_rb_mcs_tbs() to update the existing
NR_sched_pdsch instead of updating individual fields.

This also reduces the extend to which sched_ctrlCommon is used.
2025-10-30 19:14:06 +01:00
Robert Schmidt
8205503496 nr_preprocessor_phytest(): Refactor NR_sched_pdsch usage
As in parent commit(s).
2025-10-30 19:14:06 +01:00
Robert Schmidt
d4dc044d2d pf_dl(): refactor NR_pdsch_sched usage
As in parent commit.
2025-10-30 19:14:06 +01:00
Robert Schmidt
2daa1dac18 allocate_dl_retransmission(): refactor NR_sched_pdsch usage
Assign NR_sched_pdsch to sched_ctrl->sched_pdsch in one place, where the
post-processing functionality will be called in a follow-up commit. This
should result in no functional change.
2025-10-30 19:14:06 +01:00
Robert Schmidt
761a70d199 Remove use of curInfo in allocate_dl_retransmission()
It seems to be assumed that curInfo actually has the currently active
number of layers/PMI. However, I am not sure this would always be true
(e.g., UE might not have been scheduled for some slots, but number of
layers decreased as reported by CSI).  Instead, recalculate the info
from scratch when necessary.
2025-10-30 19:14:06 +01:00
Robert Schmidt
a6d16a66d2 Reduce scope of NR_sched_pdsch in first DL sched loop
We don't need NR_sched_pdsch here. Remove the use of it.
2025-10-30 19:14:06 +01:00
Robert Schmidt
1622724384 Store selected MCS in UE iterator
PF uses MCS and average throughput to decide which UE to schedule. Thus,
the first loop decides on MCS, whereas the second does the "main UE
allocation" after sorting by the PF metric.

A follow-up commit will remove sched_pusch from NR_UE_sched_ctrl_t.
Thus, we cannot rely on sched_ctrl to store the MCS in the first loop,
and look it up from there in the second. Instead, store it as part of
the UE iterator data, and take it from there.

See also: f3068caa37 ("Store selected MCS in UE iterator", for UL)
2025-10-30 19:14:06 +01:00
Robert Schmidt
1a752a8433 Remove unused/write-only code 2025-10-30 19:14:06 +01:00
Robert Schmidt
ce744fd24f Refactor DLSCH post processor into post_process_dlsch()
Introduce a struct with information on FAPI structures to save resource
and data allocation into. It's in nr_mac_gNB.h because the next commits
will reuse this for all preprocessors.
2025-10-30 19:14:06 +01:00
Robert Schmidt
2f636037ee Fixup: compute_PDU_length() 2025-10-30 19:14:06 +01:00
Robert Schmidt
09e1e6c6fd Rewrite NR_MAC UE_iterator() to limit variable scope
Especially in pf_dl()/pf_ul(), we use a first loop using
UE_iterator(), then iterate over a subset of UEs. It has happened a
couple of times that I was using variable "UE" (from the iterator), when
it should only be used in the first UE_iterator() loop.

Rewrite UE_iterator() to effectively limit the scope of the iterator
variables to the body of the UE_iterator. This should also make it
possible to reuse multiple UE_iterator()s with the same variables in
sequence.
2025-10-30 19:14:06 +01:00
Jaroslava Fiedlerova
773359851c Merge remote-tracking branch 'origin/ci-iperf3-fix' into integration_2025_w44 (!3731)
CI: ensure clean iperf3 server startup

- Resolves issue with iperf3 test failure in RFSim5G multiue test
- Minor fix of iperf3 test descriptions in RFSim5G pipeline
2025-10-30 17:51:46 +01:00
Jaroslava Fiedlerova
314ddcebdd Merge remote-tracking branch 'origin/nrUE_no_CSI_report' into integration_2025_w44 (!3728)
Fix for scenario with no CSI report configured for CSI-RS

After changes in !3714 (merged), if we select to measure RSRP on SSB and not
CSI-RS (default option) and there is a single antenna port (so no MIMO report
either) we won't schedule any CSI-RS measurements for the UE. In that case
ideally we shouldn't set do_CSIRS = 1  in configuration file but still the
option is possible. So the fix is to not perform any measurements at UE on
that CSI-RS but not asserting.

Closes #1015
2025-10-30 17:50:36 +01:00
Jaroslava Fiedlerova
32889870b3 CI: Adjust attenutation for HO setup 2025-10-30 13:37:15 +01:00
Laurent THOMAS
fff95cc075 Refactor rx_nr_prach 2025-10-30 11:54:44 +01:00
Laurent THOMAS
d745e6fcd3 Make the decidated structure the PRACH decoding values contextual
The function rx_nr_prach become autonomous, it doesn't read anymore global variables
So, it can become (later) a threadpool work, that will send a message when it finishes
rx_nr_prach_ru() still use some global variables, but it is executed in sequence, inside the ru main loop, that limits the probability of race conditions
2025-10-30 11:54:43 +01:00
Laurent THOMAS
4f39ba8f51 create a trace group for nr rach 2025-10-30 11:54:41 +01:00
Laurent THOMAS
180f83d196 Refactor L1_nr_prach_procedures 2025-10-30 11:54:40 +01:00
Laurent THOMAS
d24e010367 simplify computation of ru->prach_rxsigF[prachOccasion][aa] 2025-10-30 11:54:36 +01:00
Laurent THOMAS
c48e0b1a32 merge variants of prach_item_t as this is the same in gNB and RU 2025-10-30 11:54:33 +01:00
Laurent THOMAS
d005336cb8 Simplify PRACH beam handling, remove race
Simplify by removing a small malloc and memcpy() the beams. This should
also remove the data race between ru and gNB/CU-DU
2025-10-30 11:54:30 +01:00
Laurent THOMAS
cffb07d798 remove permanent prach rxsigF in gNB and simplify the data structure 2025-10-30 11:54:22 +01:00
Laurent THOMAS
4dd340b6bb merge almost duplicated code for ru prach list and gNB prach list
(gNB is not the proper name, it is CU+DU, gNB is RU+CU+DU)
2025-10-30 11:54:21 +01:00
Laurent THOMAS
88cecd707b regroup similar lists for "ru" and "gNB" in a common definition
Merge the identical sizes. Use correct naming: it is a element of a
list, not a list
2025-10-30 11:54:20 +01:00
Laurent THOMAS
a4d3eb9fad replace fix array index by pointers for prach lists in gNB 2025-10-30 11:54:18 +01:00
Laurent THOMAS
f5c1d18638 Fix bug in "freeing" prach occasions scheduler after decoding first occasion
Release PRACH only after treating the entire PRACH slot/work. Also,
release only once, not on every decoding occasion.
2025-10-30 11:54:14 +01:00
Laurent THOMAS
a07c03e65f MAC: use pointers, rewrite FAPI PDU alloc 2025-10-30 11:54:13 +01:00
Laurent THOMAS
7d90d9b23e log: make input parameters const 2025-10-30 11:54:11 +01:00
Laurent THOMAS
f11361343c add management of nb tx antennas=0 in rfsimulator code
trace the error of 0 antennas, and avoid infinite loop of calls to read
0 bytes
2025-10-30 11:54:09 +01:00
Laurent THOMAS
9ddb8c0b9f Remove prach_ifft from premanent allocation
Allocate on the stack when necessary.
2025-10-30 11:54:01 +01:00
Laurent THOMAS
e54738c7e4 flush command line printf, it is called before log module initialisation 2025-10-30 11:53:57 +01:00
Laurent THOMAS
7157d4bcd1 add trace when the main NR UE thread ends and when NR UE sets oai_exit variable 2025-10-30 11:53:46 +01:00
Jaroslava Fiedlerova
9be94881a3 CI: correct testcase description in RFSim5G tests 2025-10-30 10:32:59 +00:00
Jaroslava Fiedlerova
3e23c796c9 CI: ensure clean iperf3 server startup by killing existing processes on same port
Before starting a new iperf3 server instance in CI tests, explicitly kill any existing
iperf3 processes bound to the same port. This prevents conflicts or failures caused by
leftover iperf3 servers from previous runs that did not terminate properly or on time.
The cleanup is performed using `pkill` before launching the new server.
2025-10-30 10:32:54 +00:00
Jaroslava Fiedlerova
2196fb918a Merge remote-tracking branch 'origin/issue1014' into integration_2025_w44 (!3726)
fix for CSI payload sizes in PUCCH structure at UE

Closes #1014
2025-10-30 10:43:27 +01:00
Jaroslava Fiedlerova
e9723149f4 Merge remote-tracking branch 'origin/gtp-e1-fix-errors-test' into integration_2025_w44 (!3725)
Handle GTP receiver errors, fix memory leaks, add CU-UP test

- Fix use-after-free bugs in GTP by properly stopping the receive thread(s)
- Fix a bug from !3519 (merged): QFI 0 is a valid QFI
- Fix multiple memory leaks in CU-UP, E1, CU-UP load tester, SCTP
- Add a (conservative) functional CU-UP test that verifies that the load tester
  and CU-UP work. Test only a low throughput, as it will run in parallel with
  other tests.
2025-10-30 10:41:47 +01:00
Robert Schmidt
eced5afdf7 Add CU-UP functional test to ctest
Use the CU-UP load tester to test the functionality of the CU-UP and
its loader tester. The requirements on this load test are intentionally
low, as it will be run with other unit tests in parallel, and should
still pass.

It uses an existing configuration file for the CU-UP. The test script
runs the CU-UP, runs the load tester, stops the CU-UP, and returns the
load tester return value as test result (which will be 0=success if all
packets have been received).
2025-10-30 08:04:39 +01:00
Robert Schmidt
e9bf6344b0 SCTP: fix a memory leak
call freeaddrinfo() before return'ing from the function.
2025-10-30 08:04:39 +01:00
Robert Schmidt
a2b127f643 CU-UP: fix direct memory leak
Note that this strdup has been intentioally created for debugging
purposes in core files.

See also: 1ab3b8dd8e ("add version signature in core files...")
2025-10-30 08:04:39 +01:00
Robert Schmidt
155ee5ad42 Fix direct memory leak on E1 message reception
Direct leak of 8 byte(s) in 1 object(s) allocated from:
        #0 0x7f7bc7ee68a3 in calloc (/lib64/libasan.so.8+0xe68a3) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x0000004abfa6 in calloc_or_fail /home/richie/oai/common/utils/utils.h:74
        #2 0x0000004abfa6 in decode_e1ap_cuup_setup_request /home/richie/oai/openair2/E1AP/lib/e1ap_interface_management.c:219
        #3 0x00000046a9f5 in e1apCUCP_handle_SETUP_REQUEST /home/richie/oai/openair2/E1AP/e1ap.c:187
        #4 0x000000470b35 in e1ap_handle_message /home/richie/oai/openair2/E1AP/e1ap.c:109
        #5 0x000000470b35 in e1_task_handle_sctp_data_ind /home/richie/oai/openair2/E1AP/e1ap.c:120
        #6 0x00000047717b in E1AP_CUCP_task /home/richie/oai/openair2/E1AP/e1ap.c:832
        #7 0x7f7bc7e28ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)

    Direct leak of 8 byte(s) in 1 object(s) allocated from:
        #0 0x7f7bc7ee68a3 in calloc (/lib64/libasan.so.8+0xe68a3) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x0000004ac30c in calloc_or_fail /home/richie/oai/common/utils/utils.h:74
        #2 0x0000004ac30c in decode_e1ap_cuup_setup_request /home/richie/oai/openair2/E1AP/lib/e1ap_interface_management.c:194
        #3 0x00000046a9f5 in e1apCUCP_handle_SETUP_REQUEST /home/richie/oai/openair2/E1AP/e1ap.c:187
        #4 0x000000470b35 in e1ap_handle_message /home/richie/oai/openair2/E1AP/e1ap.c:109
        #5 0x000000470b35 in e1_task_handle_sctp_data_ind /home/richie/oai/openair2/E1AP/e1ap.c:120
        #6 0x00000047717b in E1AP_CUCP_task /home/richie/oai/openair2/E1AP/e1ap.c:832
        #7 0x7f7bc7e28ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
2025-10-30 08:04:39 +01:00
Robert Schmidt
eee9c4cf33 Fix two direct memory leaks of CU-UP tester
Direct leak of 100 byte(s) in 1 object(s) allocated from:
        #0 0x7f6585ee6f2b in malloc (/lib64/libasan.so.8+0xe6f2b) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x000000414a0d in malloc_or_fail /home/richie/oai/common/utils/utils.h:86
        #2 0x0000004061c9 in main /home/richie/oai/tests/nr-cuup/nr-cuup-load-test.c:544
        #3 0x7f6585211574 in __libc_start_call_main (/lib64/libc.so.6+0x3574) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
        #4 0x7f6585211627 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x3627) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
        #5 0x000000413034 in _start (/home/richie/oai/build/tests/nr-cuup/nr-cuup-load-test+0x413034) (BuildId: 8af0132792b03fa12ba95b5623865c9a8a5625a3)

    Direct leak of 100 byte(s) in 1 object(s) allocated from:
        #0 0x7f6585ee6f2b in malloc (/lib64/libasan.so.8+0xe6f2b) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x000000414a0d in malloc_or_fail /home/richie/oai/common/utils/utils.h:86
        #2 0x0000004061ff in main /home/richie/oai/tests/nr-cuup/nr-cuup-load-test.c:546
        #3 0x7f6585211574 in __libc_start_call_main (/lib64/libc.so.6+0x3574) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
        #4 0x7f6585211627 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x3627) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
        #5 0x000000413034 in _start (/home/richie/oai/build/tests/nr-cuup/nr-cuup-load-test+0x413034) (BuildId: 8af0132792b03fa12ba95b5623865c9a8a5625a3)
2025-10-30 08:04:39 +01:00
Robert Schmidt
459e20fe99 E1AP: correctly free entire PDU
Free memory including the "base pointer". Fix two places in which it was
on the stack to harmonize. The only stack variable is in reception of
new E1 messages (e1ap_handle_message()), which uses
ASN_STRUCT_FREE_CONTENTS_ONLY().

This fixes bugs similar to these logs:

    Direct leak of 40 byte(s) in 1 object(s) allocated from:
        #0 0x7f418f4e68a3 in calloc (/lib64/libasan.so.8+0xe68a3) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x00000049e367 in calloc_or_fail /home/richie/oai/common/utils/utils.h:74
        #2 0x00000049e367 in encode_e1_bearer_context_release_command /home/richie/oai/openair2/E1AP/lib/e1ap_bearer_context_management.c:1235
        #3 0x000000482951 in e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND /home/richie/oai/openair2/E1AP/e1ap.c:546
        #4 0x000000482951 in E1AP_CUCP_task /home/richie/oai/openair2/E1AP/e1ap.c:856
        #5 0x7f418f428ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)

    Direct leak of 40 byte(s) in 1 object(s) allocated from:
        #0 0x7f418f4e68a3 in calloc (/lib64/libasan.so.8+0xe68a3) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x00000049380a in calloc_or_fail /home/richie/oai/common/utils/utils.h:74
        #2 0x00000049380a in encode_E1_bearer_context_setup_request /home/richie/oai/openair2/E1AP/lib/e1ap_bearer_context_management.c:578
        #3 0x00000047f6a2 in e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST /home/richie/oai/openair2/E1AP/e1ap.c:378
        #4 0x0000004829f8 in E1AP_CUCP_task /home/richie/oai/openair2/E1AP/e1ap.c:846
        #5 0x7f418f428ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)

    Direct leak of 40 byte(s) in 1 object(s) allocated from:
        #0 0x7f418f4e68a3 in calloc (/lib64/libasan.so.8+0xe68a3) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x00000046ede7 in calloc_or_fail /home/richie/oai/common/utils/utils.h:74
        #2 0x00000046ede7 in encode_e1ap_cuup_setup_response /home/richie/oai/openair2/E1AP/lib/e1ap_interface_management.c:305
        #3 0x00000047e412 in e1ap_send_SETUP_RESPONSE /home/richie/oai/openair2/E1AP/e1ap.c:167
        #4 0x000000482a68 in E1AP_CUCP_task /home/richie/oai/openair2/E1AP/e1ap.c:836
        #5 0x7f418f428ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
2025-10-30 08:04:39 +01:00
Guido Casati
a416db39ba Pass SDAP config by pointer
sdap_config_t is more than 1kB large. Avoid excessive copying by passing
it by reference.
2025-10-30 08:04:39 +01:00
Robert Schmidt
91b3ca77f6 QFI 0 is a valid QFI
QFI 0 is a valid QFI: don't check for qfi <= 0, as uint8 cannot be
negative. Also, correctly use SDAP_MAP_RULE_EMPTY for a DRB ID (which
need to be larger than 0).
2025-10-30 08:03:17 +01:00
Robert Schmidt
10bda84176 Limit statistics of UE to configurable threshold
The gNB will stop the periodical logging of UEs in MAC Info level after
a configurable number of UEs have been printed, by default 8.

Set it to 17 in some CI tests to ensure we still get all UEs for the
time being, as the CI might depend on this.
2025-10-29 19:15:49 +01:00
francescomani
5e32eb67f6 remove unnecessary do_CSIRS from CI config files 2025-10-29 11:02:19 +01:00
francescomani
e57789adb2 prevent assertion in case of no measurements configured for CSI-RS at UE 2025-10-29 10:52:39 +01:00
Robert Schmidt
93cadc9d63 Truncate nrL1_stats.log before writing
Without this, the remainder of the file remains in place, and this can
be confusing if the total file size reduces.
2025-10-29 08:11:50 +01:00
Jaroslava Fiedlerova
4215a12aa9 Merge remote-tracking branch 'origin/dmrs_log_improv' into integration_2025_w44 (!3721)
improvements in formatting and LOGs in DMRS common functions at MAC

DMRS LOGs at MAC were misleading. This MR tried to improve them (and also
adds some formatting fix).
2025-10-28 23:04:02 +01:00
francescomani
6549acdba9 fix for CSI payload sizes in PUCCH structure at UE 2025-10-28 18:06:39 +01:00
Robert Schmidt
48faffc131 dump_mac_stats(): avoid overflow
The call to snprintf() as was used is wrong: we use the return value to
advance output, but the man page says

> The functions snprintf() and vsnprintf() do not write more than size
> bytes (including the terminating null byte ('\0')).  If the output was
> truncated due  to this  limit,  then  the return value is the number of
> characters (excluding the terminating null byte) which would have been
> written to  the  final  string  if enough  space  had  been available.
> Thus, a return value of size or more means that the output was
> truncated.

Thus, output could go beyond end, and we get a stack overflow. Instead,
encapsulate the call to snprintf() checking this condition, and only
advancing output as intended, limiting to 0 if we are at the end of the
buffer.  This avoids this error:

    ==964825==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7be799f51988 at pc 0x7fe7d66b0d39 bp 0x7be79b825ef0 sp 0x7be79b8256c0
    WRITE of size 3 at 0x7be799f51988 thread T24
        #0 0x7fe7d66b0d38 in vsnprintf (/lib64/libasan.so.8+0xb0d38) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x7fe7d66b2d44 in snprintf (/lib64/libasan.so.8+0xb2d44) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #2 0x0000008fe7c6 in dump_mac_stats /home/richie/w/refactor-dlsch/openair2/LAYER2/NR_MAC_gNB/main.c:183
        #3 0x00000092071a in gNB_dlsch_ulsch_scheduler /home/richie/w/refactor-dlsch/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c:200
        #4 0x0000008f8f78 in run_scheduler_monolithic /home/richie/w/refactor-dlsch/openair2/NR_PHY_INTERFACE/NR_IF_Module.c:399
2025-10-28 14:25:50 +01:00
Robert Schmidt
7df8243a2e Remove NR MAC's UE-specific lock
There is the (global) sched_lock that prevents concurrent access. A
dedicated UE lock does not make sense in that case. Worse, this lock
does not prevent all concurrent UE accesses (e.g., there are many loops
over UEs that are not protected), so it's also wrong.
2025-10-28 14:22:24 +01:00
Robert Schmidt
07f06f8c06 nrMAC_stats.log: handle file errors, add truncate to reset file
truncate resets the file size to 0. Without this, e.g., when
disconnecting a UE, the old UE remains at the end and is not
overwritten, which is confusing.
2025-10-28 14:22:24 +01:00
Robert Schmidt
7e8245c412 nrMAC_stats.log thread: correctly lock scheduler for stats 2025-10-28 14:22:24 +01:00
Robert Schmidt
9b97fd9b62 Measure tx_func()/rx_func() job duration 2025-10-28 14:22:24 +01:00
Robert Schmidt
e40ccbb535 Stop GTP receiver thread on exit
Stop the receive thread before closing the socket, which avoids an error
message when stopping the GTP softmodem:

    [GTPU]   [91] Recvfrom failed (Bad file descriptor)
    [GTPU]   exiting thread
2025-10-27 16:50:00 +01:00
Robert Schmidt
b67c639688 Handle GTP receiver errors
On error, exit the GTP thread after printing a diagnostic message. This
avoids also an error flagged by address sanitizer for use-after-free.

    [GTPU]   [91] Recvfrom failed (Bad file descriptor)
    =================================================================
    ==285377==ERROR: AddressSanitizer: heap-use-after-free on address 0x7cd7b7fe5590 at pc 0x0000006a9e18 bp 0x7b97ad4e1d50 sp 0x7b97ad4e1d48
    READ of size 4 at 0x7cd7b7fe5590 thread T8

    =================================================================
    ==285377==ERROR: LeakSanitizer: detected memory leaks

    Direct leak of 160 byte(s) in 1 object(s) allocated from:
        #0 0x0000006a9e17 in gtpv1uReceiver /home/richie/oai/openair3/ocp-gtpu/gtp_itf.cpp:1346
        #1 0x7f97b9a28ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #2 0x7f97b8e7ff53 in start_thread (/lib64/libc.so.6+0x71f53) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
        #3 0x7f97b8f0332b in __clone3 (/lib64/libc.so.6+0xf532b) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)

        #0 0x7f97b9ae60cb in memalign (/lib64/libasan.so.8+0xe60cb) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)
        #1 0x000000471039 in newNotifiedFIFO_elt /home/richie/oai/common/utils/threadPool/notified_fifo.h:75
        #2 0x000000471039 in tx_func /home/richie/oai/executables/nr-gnb.c:107
        #3 0x000000471039 in L1_tx_thread /home/richie/oai/executables/nr-gnb.c:167
        #4 0x7f97b9a28ee5 in asan_thread_start(void*) (/lib64/libasan.so.8+0x28ee5) (BuildId: 10b8ccd49f75c21babf1d7abe51bb63589d8471f)

    0x7cd7b7fe5590 is located 336 bytes inside of 400-byte region [0x7cd7b7fe5440,0x7cd7b7fe55d0)
    freed by thread T0 here:
    SUMMARY: AddressSanitizer: 160 byte(s) leaked in 1 allocation(s).
2025-10-27 16:49:16 +01:00
francescomani
f2389987d4 improvements in formatting and LOGs in DMRS common functions at MAC 2025-10-27 14:26:58 +01:00
Robert Schmidt
75a68167ea Merge branch 'integration_2025_w43' into 'develop'
Integration: `2025.w43`

* !3605 Support beam index in OAI 7.2 Fronthaul Interface
* !3709 Fixes for T-Tracer to work with NR-UE
* !3712 Restore UE Capability IE after RRCReestablishment
* !3716 Remove unused ULSCH measurements at gNB
* !3603 UE symbol based PDCCH receiver
* !3708 Add monolithic N2 handover test pipeline with B210 and Quectel
* !3719 Remove Benetel-specific radio drivers
* !3710 [CI] Update the Push to DockerHub Stage
* !3711 CI: Multiple adjustments
* !3717 Initialize NCC=0 on NGAP Initial Context Setup (3GPP TS 33.501 §6.9.2.1.1)
* !3720 fix direct bugs of not used RU_RX_SLOT_DEPTH defined constant
* !3714 Improve handling of selection of RSRP/SINR report via configuration file
* !3519 Refactor SDAP adaptation work for QoS
* !3698 Other CSI measurement fixes
* !3699 Updates for Feature Set

Closes #1008

See merge request oai/openairinterface5g!3713
2025-10-24 15:39:07 +00:00
Robert Schmidt
1251c44ae8 Merge remote-tracking branch 'origin/updates-feature-set' into integration_2025_w43 (!3699)
Updates for Feature Set
2025-10-24 16:48:17 +02:00
Robert Schmidt
41ce595461 Update supported bandwiths 2025-10-24 15:11:36 +02:00
Thomas Schlichter
a898c18ddc Update NTN in Feature Set 2025-10-24 15:11:36 +02:00
Guido Casati
23c115dc74 Update NAS and mobility in Feature Set 2025-10-24 15:11:36 +02:00
Robert Schmidt
57e382ccd1 Retroactively add release notes for v2.3.0
I forgot to add this when making the release. Put it retroactively to
have things "in order".

See also:
https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.3.0
https://gitlab.eurecom.fr/oai/openairinterface5g/-/releases/v2.3.0
2025-10-24 15:11:36 +02:00
francescomani
66d8ada982 Update UE feature set 2025-10-24 15:11:36 +02:00
Robert Schmidt
110f5c7304 Updates for Feature Set 2025-10-24 15:11:36 +02:00
Robert Schmidt
ef4e37d35c Merge remote-tracking branch 'origin/fix_ue_csi_meas' into integration_2025_w43 (!3698)
Other CSI measurement fixes

Errors fixed in this MR:

- UE currently sends empty CSI measurement report resulting in invalid
  cqi_idx 0, default to MCS 9 at gNB because mismanagement of new L1
  measurement structure at MAC UE
- nrofReportedRS not updated after UE capability reception at gNB
- multiple RSRP reports multiplexed / de-multiplexed in wrong order
2025-10-24 14:42:06 +02:00
Robert Schmidt
35a450bd43 Merge remote-tracking branch 'origin/sdap-qos-improvements' into integration_2025_w43 (!3519)
Refactor SDAP adaptation work for QoS

This MR is an adaptation of the code introduced in !2703.

The goal is a cleanup and functional refactor of the SDAP/PDCP
integration, that is:

- centralize SDAP configuration logic
- simplify entity creation
- improve robustness of role-based SDAP handling
- prepare the codebase for clean support of DRB reconfiguration and
  teardown flows

More concretely:

1. New sdap_config_t and get_sdap_Config()

  - Introduced an internal struct sdap_config_t to abstract SDAP config
    input
  - Centralized SDAP config parsing into new get_sdap_Config() function
    that translates ASN.1 NR_SDAP_Config into this internal
    representation. This is called during RRC triggered
    (re)configuration procedures.
  - Enable mapping of number of QoS flows > 1

2. Unified role handling with bitmasks

  - Added a bitmask-based entity_role field to track SDAP directions:
    SDAP_UL_RX, SDAP_UL_TX, SDAP_DL_RX, SDAP_DL_TX: header presence was
    determined by simple direction (UE vs gNB) and individual
    is_sdap_rx/tx() checks, however nr_sdap_rx_entity behaves
    differently depending on the direction of the RX entity (DL/UL),
    therefore this change can help enable a more accurate SDAP header
    handling across directions and node types.
  - Replaces old helpers is_sdap_rx() / is_sdap_tx() with internal
    checks against the role bitfield
  - QFI-to-DRB mapping is now annotated with direction for both data and
    control PDUs

3. Simplified DRB and SDAP setup

  - add_drb() in PDCP API now delegates SDAP config processing cleanly
  - new_nr_sdap_entity() is used consistently to register a fresh SDAP
    context for the UE and PDU session.
    - Also, re-use and reconfigure existing SDAP entity if already
      exists.
  - logging has been added to trace mapped QFIs from RRC and resulting
    table entries

4. Improved QFI-to-DRB management

  - Refactored nr_sdap_qfi2drb_map_update() to register QFIs based on
    parsed config
  - Ensures control PDUs are correctly routed even after reconfiguration
  - Extended nr_sdap_ue_qfi2drb_config: perform UL QoS flow to DRB
    mapping configuration for a SDAP entity has already been established
    according to TS 37.324, 5.3 QoS flow to DRB Mapping, 5.3.1
    Configuration Procedures. Handle both UL QoS Flows mapping rules to
    add and to remove. QFIs will now be properly unmapped if specified
    via mappedQoS_FlowsToRelease, this might prevent stale QFI mappings
    from being used incorrectly.
  - nr_sdap_qfi2drb() and sdap_map_ctrl_pdu() now strictly fallback to
    default_drb only if a QFI mapping is missing. Missing default DRB
    now triggers LOG_E() (previously silent or misrouted to DRB 0).

5. Other cleanup

  - Remove dependencies from legacy rb_id_t
2025-10-24 14:31:00 +02:00
Robert Schmidt
b7ed2583ac Merge remote-tracking branch 'origin/improv_config_report' into integration_2025_w43 (!3714)
Improve handling of selection of RSRP/SINR report via configuration file

In current develop, the selection of SSB or CRI RSRP depends on the
do_CSIRS flag being activated. That's not wanted. CRI report for now it
is never handled, while we need SSB RSRP report for beam switching
regardless of CSI-RS configuration.
2025-10-24 14:30:39 +02:00
Guido Casati
27be4e26a9 refactor: improve SDAP entity add/update flow management
This commit refactors the SDAP entity QoS flow to DRB mapping functionality
to improve code organization and enhance maintainability.

Key changes:
- Split nr_sdap_qfi2drb_map_update into focused functions:
  * nr_sdap_add_qos_flows_to_drb: handles QFI addition to DRB
  * nr_sdap_rm_qos_flows_from_drb: handles QFI removal from DRB
  * nr_sdap_ue_control_pdu_config: handles UE control PDU generation
- Consolidate add/modify logic into reusable nr_sdap_addmod_entity function
- Remove entity existence checking and updating from new_nr_sdap_entity:
  this function should only add SDAP entities
- Improve function separation of concerns: do SDAP entity add or update
  separately and improve modularity by splitting operations in self
  contained functions
- At SDAP creation, do only add of QFI to DRB mapping
- rename new_nr_sdap_entity to nr_sdap_add_entity for function naming consinstency
2025-10-24 11:55:25 +02:00
Guido Casati
04a1acf376 PDCP: rename add_drb to nr_pdcp_add_drb 2025-10-24 11:55:25 +02:00
Guido Casati
0348aa08b9 Remove rb_id parameter from SDAP TX entity - QFI determines DRB mapping
- Remove rb_id parameter from nr_sdap_tx_entity() function signature
- Update tx_entity function pointer
- Remove rb_id parameter from sdap_data_req() function signature
- Remove unused rb_id variable from sdap_tun_read_thread

The rb_id parameter was redundant since SDAP determines DRB ID
from QFI mapping via entity->qfi2drb_map(entity, qfi). This
simplifies the interface.
2025-10-24 11:55:25 +02:00
Guido Casati
d760a16827 SDAP TX: explicit check on qfi2drb_map output
Each QFI should always be mapped to a DRB. If that is not the case, we
have an undefined behavior. This should not occur. This commit prints
an error in tx_entity and returns.
2025-10-24 11:55:25 +02:00
Guido Casati
8207a4c352 SDAP refactoring: replace legacy (LTE) type rb_id_t with int 2025-10-24 11:55:25 +02:00
Guido Casati
823340a2e2 Refactor handling of DL/UL SDAP header in the SDAP entity
The TX/RX entity should have different behavior according to
5.2.1, 5.2.2, 3GPP TS 37.324, depending on whether it is UL and DL.

The gNB can play a role both as UL RX entity and DL TX entity, while
the UE can play a role both as UL TX entity and DL RX entity.

The goal of this commit is to extend the information stored in the
SDAP entity as the current code is just marking the entity as TX/RX.
The commit introduces a bitmap to store the role of the
entity, which can be DL RX, DL TX, UL RX and UL TX. Based on this
the TX SDAP entity knows whether a DL/UL PDU should be build, and
the RX SDAP entity knows whether a DL/UL PDU should be processed.

See also Figure 4.2.2-1.

SDAP headers are present only if enable_sdap option is used.
2025-10-24 11:55:25 +02:00
Guido Casati
3efaafa633 Refactor QFI to DRB mapping logic
nr_sdap_qfi2drb_map_update function pointer should
process QFIs to add and release from the entity mapping, therefore
a new function pointer for QFIs to add was introduced and
the function pointer to release the QFIs was called in the same function.

Now the nr_sdap_qfi2drb_map_update is:
(1) looping through the QFIs to add/update and store in the qfi2drb_table
(2) looping through the QFIs to release and delete from qfi2drb_table

Also:

* Update the function signature to use sdap_config_t and nr_sdap_entity_t
* log error when the update fails
* limit the scope of the function
* clang-formatted
* removed limit on table entries set by AVLBL_DRB, replaced with MAX_DRBS_PER_UE
2025-10-24 11:55:25 +02:00
Guido Casati
bae1de16d6 Refactor SDAP UL: QoS flow to DRB Mapping configuration and end-marker control PDU mapping
The function nr_sdap_ue_qfi2drb_config should do UL QoS flow to DRB mapping configuration
for a SDAP entity has already been established according to TS 37.324, 5.3 QoS flow to
DRB Mapping, 5.3.1 Configuration Procedures. It should handle both mapping rules to add and to remove.

To this purpose:

* Simplify function signature by passing the sdap config.
* Improve readability of the function.
* Move handling of sdap.mappedQFIs2ReleaseCount (in nr_reconfigure_sdap_entity)
  inside the function.
* Simplify end-marker control PDU mapping function by removing unused
  DRB ID input parameter (the function is fetching the DRB ID based on the input
  map type)
* use int instead of legacy rb_id_t
* limit scope of functions whenever necessary
2025-10-24 11:55:25 +02:00
Guido Casati
7376c9545c Refactor nr_sdap_qfi2drb_map
The goal of this function is to return the DRB ID mapped to the input QFI, for both DL and UL.
The function looks up the DRB that is mapped to the QFI, if no mapping rule exists
returns the default DRB. Returns 0 If no mapping and no default DRB exists for that QFI

The function should not update the stored mapping rules, that is done when receiving
a new SDAP configuration. In this function it was removed.

See TS 37.324, 5.2.1 Uplink
> If there is no stored QoS flow to DRB mapping rule for the QoS flow as specified in the subclause 5.3,
> map the SDAP SDU to the default DRB else, map the SDAP SDU to the DRB according to the stored QoS flow to DRB mapping rule.
2025-10-24 11:55:25 +02:00
Guido Casati
7b42a65ac7 Refactor new_nr_sdap_entity to use sdap_config_t and always update mapping rules
* change function signature: pass the sdap_config_t
* update qfi2drb mapping when receiving a configuration for an already existing SDAP entity
* always update mapping rules, not only for default DRB
2025-10-24 11:55:25 +02:00
Guido Casati
68a3a849bc refactor: Use centralized get_sdap_Config in nr_reconfigure_sdap_entity
Replace inline parameter extraction with get_sdap_Config() function call to:
- Eliminate code duplication in SDAP configuration handling
- Streamline QFI release processing with structured config object
- Ensure consistent SDAP configuration extraction across all SDAP operations
2025-10-24 11:55:25 +02:00
Guido Casati
350263460b Refactor processing of sdap_Config in add_drb (PDCP)
* use get_sdap_Config to process sdap_Config
* move SDAP config logic to the scope where it is relevant
* add SDAP entity direcly in RRC, not from PDCP
* replaced nr_pdcp_add_drbs with single add_drb call: it was no longer
  efficient to keep it in the new logic. The addMod list can be looped directly in RRC.
* add specific function to add bearers from addMod list in E1, NSA, and UE
2025-10-24 11:55:25 +02:00
francescomani
747689596a fix SINR report order at UE 2025-10-24 10:58:23 +02:00
francescomani
2d7999cb28 fix order of information when encoding/decoding RSRP meaas report with more than 1 resource 2025-10-24 10:55:54 +02:00
Robert Schmidt
064d2a1ef0 Merge remote-tracking branch 'origin/RU_RX_SLOT_DEPTH-bugs' into integration_2025_w43 (!3720)
fix direct bugs of not used RU_RX_SLOT_DEPTH defined constant

with this commit, the gNB can work if we change RU_RX_SLOT_DEPTH to
another value than 4 but it remain not well designed
2025-10-24 08:20:24 +02:00
Robert Schmidt
e8d36e8af7 Merge remote-tracking branch 'origin/issue-1008' into integration_2025_w43 (!3717)
Initialize NCC=0 on NGAP Initial Context Setup (3GPP TS 33.501 §6.9.2.1.1)

The nhcc should be initialized to 0 upon Initial Context Setup.

Also, remove unused kgnb_ncc: nh_ncc is already there.

Closes #1008
2025-10-24 08:19:55 +02:00
Laurent THOMAS
83fed82bcf fix direct bugs of not used RU_RX_SLOT_DEPTH defined constant
with this commit, the gNB can work if we change RU_RX_SLOT_DEPTH to
another value than 4 but it remain not well designed
2025-10-24 08:11:13 +02:00
Robert Schmidt
574a75472c Merge remote-tracking branch 'origin/ci-test-adjustments' into integration_2025_w43 (!3711)
CI: Multiple adjustments

- Test with DDDSU (mixed: DDDDDDDDDDGGUU) TDD configuration in
  RAN-SA-B200-Module-SABOX-Container - 40 MHz TDD test
  * https://jenkins-oai.eurecom.fr/job/RAN-SA-B200-Module-SABOX-Container/8910/
- Update the node to localhost for RFSim and L2Sim pipelines:
  * https://jenkins-oai.eurecom.fr/job/RAN-RF-Sim-Test-4G/3990/
  * https://jenkins-oai.eurecom.fr/job/RAN-L2-Sim-Test-4G/3056/
  * https://jenkins-oai.eurecom.fr/job/RAN-RF-Sim-Test-5G/10273/
- Remove unused eNB_instance and eNB_serverId entries from XML, replace
  by node
- Remove nssai_sd from UE configuration (default value is used instead)
- Update CI configuration files
2025-10-23 19:20:26 +02:00
Robert Schmidt
bca5939640 Merge remote-tracking branch 'origin/ci-fix-dockerhub-push' into integration_2025_w43 (!3710)
[CI] Update the Push to DockerHub Stage

This MR addresses two cases:

1. Error Handling: Ensures subsequent Image Test Processes stages
   continue to run even if the preceding Push to DockerHub stage fails
   (applies when the condition is PUSH event and doBuild is true).

2. Introduces conditional logic to correctly handle multi-architecture
   images: Images built for both AMD64 and Jetson ARMv8 (oai-gnb,
   oai-nr-ue, oai-nr-cuup) use docker buildx imagetools for push to
   DockerHub.

All other AMD64 images are pushed using standard Docker commands.

Related MR !3691
2025-10-23 19:19:48 +02:00
Robert Schmidt
7c18dfd93a Merge remote-tracking branch 'origin/remove-benetel-radio-drivers' into integration_2025_w43 (!3719)
Remove Benetel-specific radio drivers

These drivers are superseded by the O-RAN 7.2 FHI
2025-10-23 19:19:24 +02:00
Robert Schmidt
f7639e059d Merge remote-tracking branch 'origin/CI-ho-attenuator-N2' into integration_2025_w43 (!3708)
Add monolithic N2 handover test pipeline with B210 and Quectel

The goal of this MR is to provide an automated end-to-end N2 HO
validation with real RF (B210) and Quectel UE.

During the testing phase a post-HO assertion failure due to
uninitialized selected_plmn_identity was found: this was also fixed.

CI: Add monolithic N2 handover test pipeline (B210 + Quectel)

- New XML pipeline for N2 HO testing
- Docker Compose for two monolithic gNBs (gNB1/gNB2)
- Handover sequence: gNB1 → gNB2 → gNB1 with 5s controlled attenuation
  (RC4DAT).
- Channel mapping: ch1-2 gNB1, ch3-4 gNB2
- Telnet server enabled for CI commands
- Clean-up/reset of attenuator state included

NGAP

- fix PLMN/cell location for Initial UE and Uplink NAS
- Prevents assertion in ngap_gNB_nas_uplink() due to uninitialized
  selected_plmn_identity
- Initial UE Message: pass UE-selected PLMN and NR cell ID from RRC to
  NGAP
- Uplink NAS Transport: use PLMN, TAC, and cell ID from the message
- Build NR CGI as gNB ID + cell ID
- Store UE-selected PLMN only in RRC UE context (for later NAS); stop
  storing PLMN in NGAP UE context.
- PLMN validation when processing handover requests from the source gNB:
  when PLMN validation fails, the target gNB now properly sends
  NGAP_HANDOVER_FAILURE
- Store serving PLMN for later use in UE context
2025-10-23 19:18:23 +02:00
Robert Schmidt
fba488056c Merge remote-tracking branch 'origin/ue-symbol-based-receiver' into integration_2025_w43 (!3603)
UE symbol based PDCCH receiver

This is a partial rebase/rewrite of !2895

The goal of this MR is to check how we can merge this.

The eventual result is stated in !2895. The way forward is to modify UE
RX procedures to work symbol by symbol by extracting the symbol loop out
of RX procedures. After all channels are modified this way, the main
thread can be modified to work symbol by symbol.

At this point only PDCCH was modified.
2025-10-23 15:47:28 +02:00
Shubhika Garg
61b5417817 ci: Update and implement conditional DockerHub push
- Push both AMD64 & ARMv8 Jetson images together for images built on both using `docker buildx imagetools`
  - Use standard 'docker pull and push' for images built only on AMD64.
2025-10-23 10:53:41 +02:00
Robert Schmidt
78f36b64c2 use of config module handling for CSI report type input 2025-10-23 10:52:56 +02:00
francescomani
e06d0c7199 improve handling of selection of RSRP/SINR report via configuration file 2025-10-23 10:52:51 +02:00
Robert Schmidt
ece138134b build_oai: remove non-existing oran_fhlib_4g option 2025-10-23 10:03:28 +02:00
Robert Schmidt
8ecda65d55 Remove Benetel radio drivers
These drivers are superseded by the O-RAN 7.2 FHI.
2025-10-23 10:00:08 +02:00
Guido Casati
5f261d4f4c Add PLMN validation for handover requests and store serving PLMN
Prevent assertion in ngap_gNB_nas_uplink() due to uninitialized selected_plmn_identity:
the selected_plmn_identity field was not being set during N2 handover,
causing the assertion ((plmn->mnc_digit_length == 3) || (plmn->mnc_digit_length == 2))
to fail when processing subsequent NAS messages. The issue is that the Serving PLMN
is not stored by RRC. During N2 mobility, RRC can get this info from GUAMI.

When receiving the Handover Request the target gNB knows from GUAMI
which serving PLMN is the AMF belonging to. In current design, allowed PLMNs
are stored in rrc.configuration. The incoming PLMN needs to be validate
against the PLMNs in the list, then stored in the UE context as Serving PLMN.

This change adds PLMN validation when processing handover requests from the source gNB.
The validation is needed because:

- Target gNB must verify that the PLMN from the GUAMI in the handover request
  is allowed by its configuration before accepting the handover to prevent handover
  to unsupported PLMNs.
- When PLMN validation fails, the target gNB now properly sends NGAP_HANDOVER_FAILURE
- UE Context must store serving PLMN for later use
2025-10-22 14:48:34 +02:00
Guido Casati
32eae0a0a8 Adopt plmn_id_t in nr_guami_t 2025-10-22 14:48:34 +02:00
Guido Casati
7ec646a8d2 NGAP: fix PLMN/cell location for InitialUE and UplinkNAS
This commit is removing the storage of selected PLMN in NGAP UE context.
We store the Serving PLMN in the RRC UE context instead.

The Selected PLMN is the PLMN that the UE chose (or was directed to) for registration
and it is sent in the RRCSetupComplete. This is different from the selected
PLMN mentioned in the NG INITIAL UE MESSAGE for network sharing.

Selected PLMN: determines which core network and AMF the UE is registered with
GUAMI = Identifies the serving AMF and includes the PLMN of that AMF
Serving PLMN: the PLMN that is currently serving the UE (e.g. contained in GUAMI)

The AMF’s PLMN may match the selected PLMN, or not (especially in network sharing or roaming).
Regardless, the UE always have a Serving PLMN.

Initial UE message does not have a TAI IE per se, but TAI is a mandatory
member of the mandatory UserLocationInformation CHOICE.
NR CGI is also mandatory and carried inside UserLocationInformation:
in network sharing, the PLMN ID in TAI takes on additional
significance: RAN is shared but CN are different, so in this case PLMN in TAI is
needed for the AMF route the message to the correct operator’s core.

If network sharing applies (e.g., shared RAN between PLMN-A and PLMN-B):
the UE or network may select PLMN-B instead, and that PLMN identity
is included in the Initial UE Message’s TAI IE.

Conclusion:
1) UE always sends the selected PLMN during the registration,
   regardless of whether it is shared or not.
2) Selected PLMN Identity is an actual IE sent in the RRCSetupComplete
   while in NGAP there's no Selected PLMN Identity IE, only PLMN Identity
   IEs in both TAI and NR CGI. It is a subtle difference.
3) The serving PLMN of the UE needs to be stored in RRC UE Context for
   later use in NAS procedures. e.g. at initial registration it matches
   the Selected PLMN
4) No need to store PLMN in NGAP UE Context, params are passed by RRC
5) TAI and NR CGI, which contain the PLMN identity, are mandatory in
   UserLocationInformation IE CHOICE, and should reflect current status

Changes
- Initial UE Message: pass UE-selected PLMN and NR cell id from RRC to NGAP
- Uplink NAS Transport: use PLMN, TAC, and cell id provided by the message;
- Build NR CGI from gNB ID + cell id
- Store UE-selected PLMN only in RRC UE context at NAS_FIRST_REQ for later
  Uplink NAS, stop storing PLMN in NGAP UE context
2025-10-22 14:48:34 +02:00
Guido Casati
c3eaef704f Add monolithic N2 handover test pipeline with B210 and Quectel
- Add XML pipeline for N2 handover testing
- Add Docker compose for two monolithic gNBs
- Features:
  * Two monolithic gNBs (gNB1, gNB2) with proper CU+DU parameters
  * Gradual attenuation control using RC4DAT attenuator (5s duration)
  * N2 handover sequence: gNB1 → gNB2 → gNB1
  * Proper channel mapping: ch1-2 for gNB1, ch3-4 for gNB2
  * Telnet server configuration for CI commands
  * Handover-specific neighbor configuration
  * Clean test state management with attenuator reset
2025-10-22 14:48:34 +02:00
Jaroslava Fiedlerova
918802d189 Merge remote-tracking branch 'origin/remove_ulsch_measurements' into integration_2025_w43 (!3716)
Remove unused ULSCH measurements at gNB
2025-10-22 13:30:45 +02:00
francescomani
e3aa91dec8 remove unused ulsch measurements at gNB 2025-10-22 09:24:54 +02:00
Guido Casati
70d23e43df Fetch sdap configuration from sdap-config and store in new struct sdap_config_t
This function is processing the NR_SDAP_Config_t received (from RRC) and
is storing the SDAP configuration in a structure of type sdap_config_t.
2025-10-21 16:50:44 +02:00
Jaroslava Fiedlerova
a0f58d7104 CI: Update CI conf files
Update based on !3645

Note: For some test configurations we still need to provide
ra_ResponseWindow, for more details, check commit message of
41d14b571c
2025-10-21 15:22:10 +02:00
Jaroslava Fiedlerova
5b5b9b3a30 CI: remove nssai_sd UE config when default value is used
The SD value defaults to 0xffffff (16777215 in decimal) when not explicitly
set on the UE.
2025-10-21 15:02:01 +02:00
francescomani
df3a768811 fix updating nrofReportedRS after reconfiguration 2025-10-21 15:01:42 +02:00
francescomani
48773b8517 fix handling of CSI measurement reports at L2 UE 2025-10-21 15:01:38 +02:00
Sakthivel Velumani
7807016ae6 pdcch: return pdcch processing is no ss configured 2025-10-21 12:03:02 +02:00
Bartosz Podrygajlo
ece9d51db3 Symbol based PDCCH processing
1. Refactor PDCCH PHY functions to take rxdataF of one OFDM symbol and
   produce LLR for each search space. The modified functions take
   rxdataF in a different format than that produced by nr_slot_fep(). So
   for now a memcpy is used to change the array structure. Once
   nr_slot_fep() is modified, this memcpy will no longer be needed and
   will be removed.
2. Modify DCI functions to decode DCI in the last PDCCH symbol and
   inidcate to MAC once.
3. Fix PDCCH monitoring for start symbol > 0.
4. Fix multiple PDCCH monitoring within slot.

Co-authored-by: Sakthivel Velumani <mail@sakthi.me>
2025-10-21 12:03:01 +02:00
Bartosz Podrygajlo
07ce1ed145 Fix reading reading out of bounds in nr_pdcch_extract_rbs_single
Fix reading out of bounds of rxdataF in the middle PRB in case of odd
cell bandwidth.
2025-10-21 12:01:34 +02:00
Bartosz Podrygajlo
dcb69986eb Fix segfault in nr_pdcch_extract_rbs_single
Fixed an issue where skipping unused PDCCH RBGs would cause the
function to write/read from outside the symbol boundary
2025-10-21 12:01:34 +02:00
Bartosz Podrygajlo
22a335b1a8 Fix too large array in UE PDCCH RX 2025-10-21 12:01:34 +02:00
Bartosz Podrygajlo
34052bf0ce Split PBCH and PDCCH processing in NR UE 2025-10-21 12:01:34 +02:00
Bartosz Podrygajlo
e1b06d177e Remove unused parameters from nr_pdcch_dmrs_rx 2025-10-21 12:01:34 +02:00
Sakthivel Velumani
ae690217dd Clean-up nr_slot_fep
1.Create new funtion nr_symbol_fep() to do OFDM demod of one symbol on
  all antennas. This is called by nr_slot_fep() for now. In the
  upcoming MR, this function will be called directly after reading
  each OFDM symbol from the radio.

2.Removed redundant memory alignment. DFT function performs memory
  alignment if the input memory is not aligned.
2025-10-21 12:01:34 +02:00
Robert Schmidt
45499290cf Merge remote-tracking branch 'origin/Restore_ue_capability_after_reest' into integration_2025_w43 (!3712)
Restore UE Capability IE after RRCReestablishment
2025-10-21 09:17:41 +02:00
Robert Schmidt
7a3da4b7a4 Merge remote-tracking branch 'origin/fix-ttracer-nrue' into integration_2025_w43 (!3709)
Fixes for T-Tracer to work with NR-UE

Fixes to align NR UE events with their definitions in T_messages.txt and
match the expected format in the tracer GUI parser.

Also fixes DL SNR to work in tracer GUI.
2025-10-21 09:12:02 +02:00
Robert Schmidt
af37aaee00 Merge remote-tracking branch 'origin/oran_beamforming' into integration_2025_w43 (!3605)
Support beam index in OAI 7.2 Fronthaul Interface

This branch supports beam index in OAI 7.2 Fronthaul Interface.

- For CP DL (PDSCH), nBeamIndex of the corresponding prbMapElm is set
  when sending IQ data in oran_fh_if4p5_south_out. nBeamIndex of the
  corresponding prbMapElm is set when sending IQ data in
  oran_fh_if4p5_south_out.
- For CP UL (PUSCH and PRACH), nBeamIndex of the corresponding prbMapElm
  is set in oran_fh_if4p5_south_out.

In addition, it fixes a couple of issues

- XRAN hardcodes nBeamIndex of PRACH to zero. Modify XRAN to support
  setting of nBeamIndex of PRACH and update xran F release patch.
- Fix the bug in calculating fh_config->neAxc where num_beams_period is
  multiplified twice

Testing methodology: Use Benetel O_RU for testing even though it does
not support beamforming. With successful registration and data transfer,
one could check the pcap on the fronthaul interface to see if CP packets
are with the right beam index.

Results:

1. Verified that CP-packets for SSB, DCI, PDSCH, PRACH, PDSCH, PUSCH,
   CSI-RS and SRS are with the right beam index
2. Verified that there is no side-effect on Benetel O_RU. UE could
   register properly.
3. Verified 4 SSB with ssb_PositionsInBurst_Bitmap = 85. Could see SSB
   and PRACH with 4 different indices.
2025-10-21 09:09:03 +02:00
Mario Joa-Ng
ad1b05cd01 need to set beam_id for UPLINK_SLOT when using analog BF 2025-10-20 17:21:12 +02:00
Mario Joa-Ng
65ef3cfa74 Set RX nBeamIndex according to beam allocation
Handle CP UL packet at xran_fx_tx_send_slot() instead of
xran_fh_rx_read_slot(), as the latter would set this information too
late (on reception on samples, but it needs to be filled in the CP
packet prior to reception).
2025-10-20 17:21:12 +02:00
Mario Joa-Ng
2d27e0fc0a Set TX nBeamIndex according to beam allocation
Initialize ru_info structure with beam information, and set beams on TX
direction. Initialize the number of antennas for both RX/TX in both
cases for completeness.
2025-10-20 17:21:12 +02:00
Mario Joa-Ng
c645e8b096 Fix xran: Correctly read PRACH beam index
Upgrade xran patch, bump version number.
2025-10-20 17:21:12 +02:00
luis_pereira87
f231655b31 Restore UE Capability IE after RRCReestablishment 2025-10-20 15:04:26 +01:00
alexjiao
4d372c5f58 Improve T-Tracer GUI for UE
Make PHY measurements diagrams larger for a better view, reduce PHY/MAC/RLC/PDCP/RRC textlog height
2025-10-17 23:59:58 +08:00
Jaroslava Fiedlerova
c8b09f570f CI: RF-Sim-Test-5G replace node name by localhost
By configuring the Jenkins pythonExecutor to match the test machine, we can use
localhost as the node for running individual test cases. This change makes it
easy to move tests across machines, as the only adjustment needed is updating
the pythonExecutor in Jenkins.
2025-10-17 16:21:12 +02:00
Jaroslava Fiedlerova
2bacf7ba54 CI: RF-Sim-Test-4G replace node name by localhost
By configuring the Jenkins pythonExecutor to match the test machine, we can use
localhost as the node for running individual test cases. This change makes it
easy to move tests across machines, as the only adjustment needed is updating
the pythonExecutor in Jenkins.
2025-10-17 16:20:01 +02:00
Jaroslava Fiedlerova
149c4dbf6e CI: RFSim-5G update XML files
Use node for Create/Deploy/Undeploy() (as done in !3579)
2025-10-17 12:17:15 +02:00
Jaroslava Fiedlerova
867d476397 CI: L2-Sim-Test-4G replace node name by localhost
By configuring the Jenkins pythonExecutor to match the test machine, we can use
localhost as the node for running individual test cases. This change makes it
easy to move tests across machines, as the only adjustment needed is updating
the pythonExecutor in Jenkins.
2025-10-17 11:36:39 +02:00
alexjiao
5df7d000f9 Fix for DL SNR to work in T-Tracer with NR-UE
Add missing T_UE_PHY_DL_TICK and T_UE_PHY_UL_TICK events
Calculate missing n0_power_avg_dB for noise measurements
2025-10-17 17:07:21 +08:00
alexjiao
8424c8ecb6 Fix crashes for T-Tracer to work with NR-UE
1. Fix UE_PHY_PDSCH_IQ event
2. Fix UE_PHY_PDCCH_ENERGY event
3. Fix UE_PHY_PDSCH_ENERGY event
4. Fix UE_PHY_MEAS event
All fixes align NR UE events with their definitions in T_messages.txt and match the expected format in the tracer GUI parser.
2025-10-17 17:06:36 +08:00
Jaroslava Fiedlerova
d0089369d3 CI: adjust TDD pattern in SA-B200 40 MHz TDD test 2025-10-17 10:59:49 +02:00
Shubhika Garg
b0ab5e8795 ci: Ensure DockerHub push failure doesn't halt pipeline
- catchError will prevent from abruptly aborting the entire pipeline upon failure.
  - Removed redundant `currentBuild.result` in post-failure block
2025-10-17 10:28:36 +02:00
Jaroslava Fiedlerova
7045140845 Merge branch 'integration_2025_w42' into 'develop'
Integration `2025.w42`

* !3623 Optimization of PDSCH precoding operation
* !3691 \[CI\] Ensure multi-arch DockerHub Push after successful image build
* !3696 asn1c doesn't follow c99 variables alias rules, it needs to be compiled this...
* !3685 Assign antenna ports correctly for 1 and 2 layers for aerial.
* !3495 Type0 PDSCH frequency allocation at L1 UE
* !3686 Remove NR L2 simulator code from UE
* !3693 Remove B200-specific clock-rate setting
* !3701 OAI UE: add shared RSRP Table 10.1.6.1-1 mapping function to helpers and adopt it RRC UE
* !3662 RRC UE file cleanup
* update doc/README.md
* !3608 use common scale channel functions for DLSCH and ULSCH
* !3694 fix non initialized DMRS port value in case of DCI00 at UE
* !3702 Extend F1 rfsim CI test
* !3704 remove unused global queues, dead code
* !3673 CI: Aerial: Add an UL-heavy pipeline test
* !3651 CI: Upgrade HO setup to use an attenuator
* !3695 CI: Upgrade Aerial setup to 25-2.1

Closes #940

See merge request oai/openairinterface5g!3700
2025-10-16 15:58:02 +00:00
Guido Casati
e4f7443552 Initialize NCC=0 on NGAP Initial Context Setup per 3GPP TS 33.501 §6.9.2.1.1
Remove unused kgnb_ncc: nh_ncc is already there

Closes #1008
2025-10-16 17:21:01 +02:00
Jaroslava Fiedlerova
1f0e9abe2f Merge remote-tracking branch 'origin/aerial_25-2.1' into integration_2025_w42 (!3695)
CI: Upgrade Aerial setup to 25-2.1

The purpose of this MR is to upgrade the cuBB image in the Aerial setup to
release 25-2.1 and update the doc/Aerial_FAPI_Split_Tutorial.md accordingly.
2025-10-16 15:38:49 +02:00
Reem Bahsoun
9620fd1a6a Update the nvIPC library to the one packaged with the new cuBB image. 2025-10-16 12:06:15 +02:00
Jaroslava Fiedlerova
296ae968b1 Merge remote-tracking branch 'origin/aerial-ul-heavy' into integration_2025_w42 (!3673)
CI: Aerial: Add an UL-heavy pipeline test

Add a new test with DSUUU TDD pattern, and try to reach 220Mbps.
2025-10-16 11:55:16 +02:00
Jaroslava Fiedlerova
10555929b0 Merge remote-tracking branch 'origin/CI-ho-attenuator' into integration_2025_w42 (!3651)
CI: Upgrade HO setup to use an attenuator

The goal of this MR is to upgrade HO CI setup to include a digital attenuator
that will allow us to trigger handover by attenuating the signals on the DUs.
2025-10-16 11:52:02 +02:00
Robert Schmidt
5f162c436e Add documentation for CI Handover Setup 2025-10-16 11:40:25 +02:00
Reem Bahsoun
9803fb29f6 Reorganize XML steps for F1 HO
Number linearly for easier navigation in HTML reports, and start DU1
before connecting the UE. Reset attenuation on all channels to 0.
2025-10-16 11:40:25 +02:00
Reem Bahsoun
e2075b57ca Clean up F1 HO config files
Harmonize gNB names with other files, remove control ports (not used),
put sl_ahead in right place.
2025-10-16 09:30:38 +02:00
Reem Bahsoun
d8e9a30fad Add attenuator commands to the XML file 2025-10-16 09:30:31 +02:00
Reem Bahsoun
c9b704ed64 Rename services in docker-compose for clarity
Harmonize with other files and use dashes.
2025-10-16 09:30:18 +02:00
Reem Bahsoun
464762e52b Fix: PCI on different SSB position 2025-10-15 20:14:48 +02:00
Reem Bahsoun
e375a13aa5 CI infra: rename UE name to reflect PLMN 2025-10-15 20:14:48 +02:00
Robert Schmidt
42a54a01a0 USRP: move time/clock source setting to later
Doing this before using set_master_clock_rate() on the B200 seems to
invalidate synchronization setting.

    [HW]   USRP clock set to 1759836386.000000 sec
    [...]
    [HW]   current pps at 3.286750, starting streaming at 4.286750

In other words, the current time setting was reset. With this change
now, we see

    [HW]   USRP clock set to 1759929873.000000 sec
    [...]
    [HW]   current pps at 1759929873.000000, starting streaming at 1759929874.000000

This is because changing clock sources (I assume setting the master
clock rate impacts the clock) can result in changing the time.  From the
documentation of [1]:

> Note: When changing clock sources, a previously set time will most
> likely be lost. It is recommended to set the time after changing the
> clock source. Otherwise, an unexpected time may line up with future PPS
> edges.

[1] https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a99254abfa5259b70a020e667eee619b9
2025-10-15 20:06:15 +02:00
Robert Schmidt
0ba9a9758b CI: expand %%workspace%% token
- main.py: replace %%workspace%% with CONTAINERS.eNBSourceCodePath in Custom_Command and Custom_Script

Co-authored-by: Guido Casati <hello@guidocasati.com>
2025-10-15 20:06:15 +02:00
Guido Casati
f93a71977f Add band validation in neighbor cell configuration
- Add band mismatch check in valid_du_in_neighbour_configs function
- Ensures neighbor cell band matches serving cell band
- Prevents invalid neighbor configurations for handover
2025-10-15 20:06:15 +02:00
Robert Schmidt
8c85acbba6 Add script to control attenuation of Mini-Circuits RC*DAT 2025-10-15 20:06:15 +02:00
Robert Schmidt
1a472e4c0b Msg3 retx: check that current slot is DL
The code only checked that Msg3 would be scheduled during UL, but in
some combinations, e.g., with DSUUU, the current slot can very well be
UL as well => we would schedule DCI in UL slot.
2025-10-15 19:52:09 +02:00
Robert Schmidt
7ff05a98c2 Print frame/slot on UL failure 2025-10-15 19:52:09 +02:00
Robert
ae63a51ceb Increase PBCH Block power: better UL 2025-10-15 19:52:09 +02:00
Robert Schmidt
3b517dd5d2 Add CI XML fail for Aerial UL heavy pipeline 2025-10-15 19:52:09 +02:00
Robert
2db630e187 Add UL-heavy Aerial config
Update cuBB image to cubb-build:25-2.1_srs-ul-heavy (release 25-2.1 with
changes in the L1 config to test heavy ul)

Co-authored-by: Reem Bahsoun <reem.bahsoun@openairinterface.org>
2025-10-15 19:51:50 +02:00
Jaroslava Fiedlerova
7ef1e79c0d Merge remote-tracking branch 'origin/remove-unused-fifo-queues' into integration_2025_w42 (!3704)
remove unused global queues, dead code
2025-10-15 13:49:08 +02:00
Robert Schmidt
ad878dc7df Merge remote-tracking branch 'origin/issue-940' into integration_2025_w42 (!3702)
Extend F1 rfsim CI test

Add one handover hop.

Closes #940
2025-10-15 08:35:34 +02:00
Robert Schmidt
6ddd2bd2af Merge remote-tracking branch 'origin/dci_00_dmrs_port' into integration_2025_w42 (!3694)
fix non initialized DMRS port value in case of DCI00 at UE

When transmitted PUSCH is neither scheduled by DCI format 0_1 with CRC
scrambled by C-RNTI, CS-RNTI, SP-CSI-RNTI or MCS-C-RNTI, nor
corresponding to a configured grant, the UE shall use [...] DM-RS port
0.

In UE code it was not set in case of DCI00 and that was leading to ULSCH
failures in some scenarios.
2025-10-15 08:35:11 +02:00
Robert Schmidt
2a67719e92 Merge remote-tracking branch 'origin/common_scale_function' into integration_2025_w42 (!3608)
use common scale channel functions for DLSCH and ULSCH

Follow up of !3035
2025-10-15 08:34:37 +02:00
Robert Schmidt
b9043d990a Doc: correctly link to non-indexed files in doc/README.md 2025-10-15 08:29:41 +02:00
francescomani
38c27680eb Merge remote-tracking branch 'origin/rrcUE_cleanup' into integration_2025_w42 (!3662)
RRC UE file cleanup

No functional change, just moving functions around so that these are
defined before their usage
2025-10-15 08:26:18 +02:00
Laurent THOMAS
1dd0194e32 remove unused global queues, dead code 2025-10-14 20:36:48 +02:00
francescomani
2b25b32b16 default dmrs port value in ulsch ue scheduler 2025-10-14 16:01:46 +02:00
francescomani
1cd3950178 fix non initialized DMRS port value in case of DCI00 at UE 2025-10-14 15:43:06 +02:00
Guido Casati
0622fb362f ci: container_5g_f1_rfsim - extend F1 handover with 1 more hop
- Trigger handover
- IdleSleep 2s
- Ping ext-dn from NR-UE
- Verify UE(1) connected to DU-PCI1

Validate absence of heap-use-after-free ASAN error found in !3600.

Closes #940
2025-10-14 14:46:19 +02:00
Guido Casati
520d52963e ci: container_5g_f1_rfsim - remove oai-nr-cuup-asan
Rationale: CU-UP image not required for this F1 rfsim workflow’s local pull stage.
2025-10-14 14:46:19 +02:00
Jaroslava Fiedlerova
aead89e9e7 Merge remote-tracking branch 'origin/oai-ue-fix-rsrp-mapping' into integration_2025_w42 (!3701)
OAI UE: add shared RSRP Table 10.1.6.1-1 mapping function to helpers and adopt
it RRC UE

- Add to common/utils/nr/nr_common remove from NR_MAC_UE/nr_ue_procedures.c
- Adopt in asn1_msg.c for MeasurementReport: this solves the following possible
  assert:

  Assertion (enc_rval.encoded > 0) failed!
  In do_nrMeasurementReport_SA() /oai-ran/openair2/RRC/NR/MESSAGES/asn1_msg.c:898
  ASN1 message encoding failed (MeasResultServMOList, 18446744073709551615)!

Motivation: unify RSRP-to-index mapping across layers and fix NR RRC
MeasurementReport encoding failures due to out-of-range values by reusing the
validated mapping.

Note: NR_RSRP-Range.c constraint: /* (0..127) */

Also refactored MeasurementReport to improve the code.
2025-10-14 13:17:24 +02:00
Mario Joa-Ng
4eb9dd3d38 set beam_id to -1 instead of 0. 2025-10-14 12:05:29 +02:00
Mario Joa-Ng
c36a6bcb47 Fix the bug in calculating fh_config->neAxc where num_beams_period is multiplified twice. 2025-10-14 11:56:03 +02:00
Jaroslava Fiedlerova
455553d129 Merge remote-tracking branch 'origin/remove-b200-specific-clock-rate' into integration_2025_w42 (!3693)
Remove B200-specific clock-rate setting

Avoid this clock-rate setting, as we already do it around usrp_lib.cpp:1121, so
it is superfluous. For instance, we also do not set a master clock rate for N3xx
either. This also enables us to synchronize B200 for handover settings,
e.g., for !3651.

See the commit message for more information about synchronization.
2025-10-13 21:50:29 +02:00
Guido Casati
d7c3968df2 RRC UE: MeasurementReport refactor
- Simplify do_nrMeasurementReport_SA API (encoder allocates local report)
- Adopt asn1cCalloc consistently
- Minor init cleanup for UL_DCCH message struct
2025-10-13 16:52:59 +02:00
Guido Casati
edc53ac9dd OAI UE: add shared RSRP Table 10.1.6.1-1 mapping helper and adopt it RRC UE
- Add to common/utils/nr/nr_common remove from NR_MAC_UE/nr_ue_procedures.c
- Adopt in asn1_msg.c for MeasurementReport: this solves the following assert:

Assertion (enc_rval.encoded > 0) failed!
In do_nrMeasurementReport_SA() /oai-ran/openair2/RRC/NR/MESSAGES/asn1_msg.c:898
ASN1 message encoding failed (MeasResultServMOList, 18446744073709551615)!

Motivation: unify RSRP-to-index mapping across layers and fix NR RRC MeasurementReport
encoding failures due to out-of-range values by reusing the validated mapping.

Note NR_RSRP-Range.c constraint:
	{ APC_CONSTRAINED,	 7,  7,  0,  127 }	/* (0..127) */
2025-10-13 16:52:59 +02:00
Jaroslava Fiedlerova
4efb142f9a Merge remote-tracking branch 'origin/remove_l2_sim' into integration_2025_w42 (!3686)
Remove NR L2 simulator code from UE

This MR removes NR (SA and NSA) L2 simulator from the codebase. The code, at
least at the UE side, was done at a time where there was no clear L2/L1 split
leading to a complex implementation that never worked as expected. The L2
simulator has been broken and removed from testing for long time and, once it
needs to be revived, it would require a complete new implementation.
2025-10-13 14:19:24 +02:00
Jaroslava Fiedlerova
3155bf907c Merge remote-tracking branch 'origin/type0_PDSCH' into integration_2025_w42 (!3495)
Type0 PDSCH frequency allocation at L1 UE
2025-10-13 14:18:51 +02:00
Jaroslava Fiedlerova
f4b93dce53 Merge remote-tracking branch 'origin/nhedberg/antennaPorts' into integration_2025_w42 (!3685)
Assign antenna ports correctly for 1 and 2 layers for aerial.

With this change aerial successfully decodes PUSCH with 2 UL layers.

The code should use sched_pusch->dmrs.num_dmrs_cdm_grps_no_data == 1 rather
than NFAPI_MODE != NFAPI_MODE_AERIAL, but that will make the changes a bit
more extensive.

Prior to this change, sending antenna_ports.val = 2 with rank 2 would tell
the UE to transmit on DMRS ports 2,3 rather than 0,1 causing it to not decode.
2025-10-13 14:16:34 +02:00
Jaroslava Fiedlerova
114b03f310 Merge remote-tracking branch 'origin/bug-alias-c99-asn1c' into integration_2025_w42 (!3696)
asn1c doesn't follow c99 variables alias rules, it needs to be compiled this...

asn1c doesn't follow c99 variables alias rules, it needs to be compiled this way.
Issue 509 (https://github.com/vlm/asn1c/issues/509 ) reported in
https://github.com/vlm/asn1c
2025-10-13 11:47:47 +02:00
Jaroslava Fiedlerova
14b6d0f20f Merge remote-tracking branch 'origin/CI-pushDH' into integration_2025_w42 (!3691)
[CI] Ensure multi-arch DockerHub Push after successful image build

This merge request improves the CI script to ensure that the DockerHub-Push
stage executes whenever:
- All Image Build stages succeed &
- doBuild is true &
- The event is a PUSH

This behavior ensures that Docker images are published whenever the image build
stages succeed, regardless of any failures in the Image Test stages.
Jetson ARM64/V8 and AMD64 images will now be published on DockerHub under the
same tag (develop or WEEK_TAG) to provide multi-architecture images.
2025-10-13 11:40:51 +02:00
Jaroslava Fiedlerova
769885c05a Merge remote-tracking branch 'origin/precoder_optimization' into integration_2025_w42 (!3623)
Optimization of PDSCH precoding operation

x86/aarch64 optimizations for precoding, more complete timing reporting in
nr_dlsim. Timing report in nr_dlsim now shows the total PDSCH generation time
and is broken down into Layer mapping, resource mapping and precoding.
The optimizations for x86 are basically reorganizing loops (for AVX512,AVX2,
NEON but not SSE2) to minimize repetitive instructions when formatting of the
precoder weights, and creation of inline functions for complex multiply-add.
AVX512 optimization was added. requiring AVX512BW. Detection of up to 4 PRBs
with common PMI for efficiency with AVX512 (was 2 in develop for AVX2).
For aarch64, native coding of the precoder to avoid inefficient SIMDe
translations for this operation.
nr_dlsim now uses default precoding indices depending on the scenario instead
of 0 which doesn't do precoding at all.

See merge request description for nr_dlsim test results.
2025-10-13 11:39:57 +02:00
francescomani
a20640accc feature set update 2025-10-13 11:08:51 +02:00
francescomani
d20b1120d4 remove temporary code to process type0 as type1 2025-10-13 10:57:49 +02:00
francescomani
9e43f998d9 further code cleanup 2025-10-13 10:57:49 +02:00
francescomani
d07771c538 formatting improvements 2025-10-13 10:57:49 +02:00
francescomani
7eb65f2adc adapt nr_dlsch_extract_rbs for type0 PDSCH freq allocation 2025-10-13 10:57:49 +02:00
francescomani
7d0bf3be51 include information about number of PRBs in frequency allocation structure 2025-10-13 10:57:49 +02:00
francescomani
99e4f54d61 type0 DLSCH frequency allocation for channel estimation 2025-10-13 10:57:49 +02:00
francescomani
e70a2b3cc1 use ad hoc UE FAPI information for PDSCH DMRS reference point 2025-10-13 10:57:49 +02:00
francescomani
121937ad4c input simplification in nr_pdsch_channel_estimation 2025-10-13 10:57:49 +02:00
Shubhika Garg
677a16a4a9 ci(docker): push ARM64 and AMD64 images to DockerHub
- On PUSH events, if image build stages succeed, trigger DockerHub push stage
 - Build the images, then trigger the Push to DockerHub stage
 - Publish Jetson (ARM64/v8) and AMD64 images under the same tag on DockerHub
2025-10-10 14:07:24 +02:00
Robert Schmidt
ce4e647fd8 USRP: move time/clock source setting to later
Doing this before using set_master_clock_rate() on the B200 seems to
invalidate clock settings:

    [HW]   USRP clock set to 1759836386.000000 sec
    [...]
    [HW]   current pps at 3.286750, starting streaming at 4.286750

In other words, the current time setting was reset. With this change
now, we see

    [HW]   USRP clock set to 1759929873.000000 sec
    [...]
    [HW]   current pps at 1759929873.000000, starting streaming at 1759929874.000000

This is because changing clock sources (I assume setting the master
clock rate impacts the clock) can result in changing the time.  From the
documentation of set_time_next_pps() [1]:

> Note: When changing clock sources, a previously set time will most
> likely be lost. It is recommended to set the time after changing the
> clock source. Otherwise, an unexpected time may line up with future PPS
> edges.

[1] https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a75b1c5375549e6a446d686ee7d9b4e14
2025-10-10 12:49:29 +02:00
Robert Schmidt
dab8db76d7 CI: Aerial: Split out CN start/stop from main XML
The next commit introduces an "UL-heavy" configuration to be tested with
Aerial. To avoid waiting for the CN, start&stop it once at the beginning
of the CI run.
2025-10-09 19:25:11 +02:00
Robert Schmidt
92bc0aee0e Merge branch 'integration_2025_w41' into 'develop'
Integration `2025.w41`

* !3472 Replace int16 min when obvious
* !3689 Fix OAI UE memory leaks
* !3675 fix RSRP computation at UE
* !3688 Fixes to prevent assertion due to 0 PRB allocation
* !3680 OC PhySim deployment: always undeploy safely
* !3471 SRS noise power
* !3679 CI: Enable Physim threshold check for tests on Caracal and GH
* reduce RFsim F1 throughput after handover

Closes #828

See merge request oai/openairinterface5g!3692
2025-10-09 17:15:02 +00:00
Raymond Knopp
0dcea09e87 bugfix for arm-v8x/v9 2025-10-09 16:04:45 +02:00
Laurent THOMAS
e056acc896 use c16_t type for pm weights, as it is already same type
simplify SIMD version of precoder
2025-10-09 16:04:43 +02:00
Raymond Knopp
fb47748fae fixed precoder_simd after CI run (test for n_layers=1) failed 2025-10-09 16:01:09 +02:00
Raymond Knopp
264f7cb817 aarch64 optimizations for precoding, more complete timing reporting in
nr_dlsim
2025-10-09 16:01:09 +02:00
Raymond Knopp
e44d498cba optimization of DLSCH precoding for AVX2 2025-10-09 16:01:09 +02:00
Raymond Knopp
34ba85f3b1 precoder optimizations for AVX512 2025-10-09 16:01:09 +02:00
Raymond Knopp
8711556d9e Handle larger RB step size in precoding 2025-10-09 16:01:09 +02:00
Raymond Knopp
be236d450e Add measurements for performance analysis 2025-10-09 16:01:09 +02:00
Laurent THOMAS
c537e2cabe move complex numbers types above phy layer, as they are used in fapi for example 2025-10-09 16:01:09 +02:00
Laurent THOMAS
8b9098b7ca remove unused declarations in common/platform_types.h 2025-10-09 16:01:09 +02:00
Reem Bahsoun
1a65abb56c Upgrade cuBB image to 25-2.1 and update doc to match 2025-10-09 15:00:47 +02:00
Laurent THOMAS
00a7890449 asn1c doesn't follow c99 variables alias rules, it needs to be compiled this way. issue #509 reported in https://github.com/vlm/asn1c 2025-10-09 14:04:14 +02:00
Robert Schmidt
ba8b23772e CI RFsim 5G F1: reduce DL iperf throughput
Reduce throughput requirement, as this fails once two DUs are connected
to a UE, which creates more load on the machine and frequently fails
with low throughput.
2025-10-09 08:48:26 +02:00
Robert Schmidt
dd868fd25e Merge remote-tracking branch 'origin/ci-update-physim-threshold' into integration_2025_w41 (!3679)
CI: Enable Physim threshold check for tests on Caracal and GH

This MR adds support for configurable timing threshold files in PhySim
tests.

- Introduces a new CMake cache variable PHYSIM_CHECK_FILES to specify
  one or more timing threshold files (semicolon-separated).
- Enables optional enforcement of timing thresholds check in PhySim
  tests without changing existing test definitions.
- Defines timing thresholds for LDPC encoding/decoding in nr_ulsim,
  nr_dlsim and ldpctest on Caracal and GH machines.
2025-10-09 08:46:46 +02:00
Robert Schmidt
1ffa012014 Merge remote-tracking branch 'origin/SRS-noise-power' into integration_2025_w41 (!3471)
SRS noise power

This MR implements the calculation of the noise power based on SRS in a
different way, and check whether SNR is more accurate or not. This MR is
built on top of the MR: !3460

A graph was added in T_Tracer to observe UL-SNR calculated using SRS.

See merge request description for measurement results.
2025-10-09 08:45:14 +02:00
Jaroslava Fiedlerova
6843625615 Add separate XML file for PhySim with timing check on GH 2025-10-08 19:45:14 +02:00
Jaroslava Fiedlerova
5ec7bcdcd2 Add timing check for physim tests on GraceHopper
Update Dockerfile to pass -DPHYSIM_CHECK_FILES="ThresholdsGracehopper.cmake".
2025-10-08 19:45:14 +02:00
Jaroslava Fiedlerova
bcc616e654 Increase timeout for physim deployments
Extend the timeout for physim deployments on OC to allow tests to complete
reliably.
2025-10-08 19:45:14 +02:00
Jaroslava Fiedlerova
31af716ccb Update timing thershold for offload tests on Caracal 2025-10-08 19:45:14 +02:00
Jaroslava Fiedlerova
ec8efe1b7e Unify physim test definition
Replace the previous add_timed_physim_test() macro with add_physim_test()
to use a single, unified function for defining physim tests. This simplifies
the test configuration and removes redundant macro definitions while keeping
all existing functionality.

This change follows up on the earlier addition of support for including
custom timing threshold files (PHYSIM_CHECK_FILES).

Update existing tests accordingly.
2025-10-08 19:45:14 +02:00
Jaroslava Fiedlerova
8910406a9e Add support for including custom timing threshold files in physim tests
Introduce a new CMake variable PHYSIM_CHECK_FILES to specify CMake files
(semicolon-separated) containing timing thresholds for timed physim tests.
2025-10-08 19:44:35 +02:00
francescomani
6289409f15 remove nsa UE option code 2025-10-08 18:21:10 +02:00
francescomani
f4e4ef74ff remove emulate_l1 code 2025-10-08 17:39:29 +02:00
Jaroslava Fiedlerova
78d91db964 Include timing analysis file in physim.rhel9 image
Add missing timinig analysis scripts to RHEL9 physim docker image. These files
are now copied from the build stage to /oai-ran/openair1/SIMULATION/tests/,
where they are expected by ctest.

Resolves following issue when running ctest in docker container:
CMake Error: Error processing file: /oai-ran/openair1/SIMULATION/tests/RunTimedTest.cmake
2025-10-08 10:57:50 +02:00
Robert Schmidt
a3ac1dbdfe analyze-timing.sh: check only last measurement occurrence
For some physical simulators, we have multiple SNR iterations.

The previous version of the script correctly retained only the last
measurement, but if a previous measurement condition set RC=1, the
script would fail although the final "good" run might fulfil the
measurement condition (IOW, it would show SUCCESS, but still fail on the
check).

Instead, check if all measurement lines finish on SUCCESS, which handles
the above case.
2025-10-08 10:57:50 +02:00
Robert Schmidt
b012700fe4 Fix analyze-timing.sh for mawk compatibility
The awk script in analyze-timing.sh used syntax that works with gawk but fails
on systems where mawk is the default implementation, producing errors such as:

awk: /dev/fd/3: line 6: syntax error at or near ,
-- test command finished with SIGPIPE

Concretely, the match(text, pattern, variable) function does not exist
in mawk, as it cannot capture matches in variables. Work around by
substituing strings, and force a numeric comparison.
2025-10-08 10:57:50 +02:00
Jaroslava Fiedlerova
ddf81a175c Merge remote-tracking branch 'origin/physim-deploy-failsafe' into integration_2025_w41 (!3680)
OC PhySim deployment: always undeploy safely

Always undeploy physim safely. See commits for more details
2025-10-08 08:46:03 +02:00
Jaroslava Fiedlerova
98fea81b39 Merge remote-tracking branch 'origin/fix_0_tbs' into integration_2025_w41 (!3688)
Fixes to prevent assertion due to 0 PRB allocation

Assertion (NPRB>0 && (NPRB + RBstart <= BWPsize)) failed!
In PRBalloc_to_locationandbandwidth0() /home/user/openairinterface5g/common/utils/nr/nr_common.c:506
Illegal NPRB/RBstart Configuration (0,51) for BWPsize 51

Probably caused by missing safeguards to prevent computing TBS with 0 PRB
as input.
2025-10-08 08:43:49 +02:00
Nick Hedberg
9949c7e71b Assign antenna ports correctly for 1 and 2 layers for aerial.
Removes Aerial-specific changes and harmonizes with OAI full-stack.
2025-10-07 17:21:35 +02:00
Jaroslava Fiedlerova
7459e73277 Merge remote-tracking branch 'origin/fix-ue-mem-leaks' into integration_2025_w41 (!3689)
Fix OAI UE memory leaks

Fix 1: Replaced asn1cFreeStruc with ASN_STRUCT_FREE in MAC layer to properly
       free nested ASN.1 structures in cell group configuration.
Fix 2: Removed premature nullification of dedicatedNAS_Message->buf in
       dlInformationTransfer processing to allow proper ASN.1 cleanup.
Fix 3: Fixed memory ownership in nr_rrc_process_dedicatedNAS_MessageList by
       copying OCTET_STRING data instead of transferring ownership, preventing
       ASN.1 cleanup from losing track of allocated memory

Closes #828
2025-10-07 14:33:15 +02:00
Jaroslava Fiedlerova
2424c182d6 Merge remote-tracking branch 'origin/fix_rsrp_ue' into integration_2025_w41 (!3675)
fix RSRP computation at UE

Conflicts between !3595 (merged) and !3596 (merged) leading to double conversion
of RSRP into index in L1 and L2. With this fix it is only converted in L2.
2025-10-07 14:32:35 +02:00
Jaroslava Fiedlerova
b3007ce55b Merge remote-tracking branch 'origin/replace-INT16_MIN-when-obvious' into integration_2025_w41 (!3472)
Replace int16 min when obvious

INT16_MIN doesn't have a opposite value on 16 bits, so SIMD abs (absolute()), or
simple C operations doesn't make the expected result.

example:
(gdb) p (short)-(short)-32768
$4 = -32768
(gdb)

This MR replaces constants INT16_MIN by -INT16_MAX (so -32767) in places where
it used for mathematical operations. This is not perfect, nevertheless reduces
overflow probability.
We saw in some places a dirty case: code do first calls to _mm_adds_epi16
(or subs), so because of the saturated operations, the probability to reach
32767 and -32768 is higher than the other numbers but, _mm_abs_epi16(), or
negate operations (conjugate) can follow, that is making strong error as
abs(-32768)=-32768
2025-10-07 14:27:30 +02:00
Jaroslava Fiedlerova
bd1dadaa79 OC PhySim deployment: log bash script commands
Also, don't use "set -x" debugging for oc login command:
ci-scripts/cls_cmd.py:242 sets BASH_XTRACEFD=1, which makes that all
"set -x" output is in stdout, leading to a redirect to the file into
which we redirect. This would lead to the following error with
unsuccessfull oc login:

  error: You are not a member of project "****-core-for-ci-ran".
  Error from server (Forbidden): imagestreams.image.openshift.io "oai-physim"
  is forbidden: User "system:anonymous" cannot get resource "imagestreams" in
  API group "image.openshift.io" in the namespace "****-ran"
2025-10-07 08:09:20 +02:00
Robert Schmidt
958fe1ed75 OC PhySim deployment: always undeploy safely
This fixes basically two problems. First, remove "set -e", which leads
to the script exiting on error. For instance, there was the sleep which
should account for the time of the pod being in "ContainerCreating", but
might not be enough. In that case, the script would exit, leaving the
pod deployed.

Second, a fixed time is not good, as it can be too short and unduly
prolong waiting time. Replace with a loop.
2025-10-06 16:16:39 +02:00
francescomani
8411a428db prevent faulty behavior of nr_compute_tbs when null input is not producing TBS = 0 2025-10-06 11:10:38 +02:00
Guido Casati
d6047cd83d Fix memory leak in dlInformationTransfer case
- Remove unnecessary NULL assignment for dedicatedNAS_Message->buf
- The original buffer is copied and transfered to NAS, so it can be properly freed by ASN.1 structure cleanup

Root cause: Code was nullifying dedicatedNAS_Message->buf pointer before ASN.1 cleanup could free the original allocation, causing the leak from OCTET_STRING_decode_uper.

AddressSanitizer leak trace (FIXED):
Direct leak of 119 byte(s) in 3 object(s) allocated from:
    /#0 0x7ec2a42b4c38 in __interceptor_realloc
    /#1 0x555fade852e0 in OCTET_STRING_decode_uper
    /#9 0x555fadb48b11 in nr_rrc_ue_decode_dcch.
2025-10-03 12:39:14 +02:00
Guido Casati
9639cbb436 Fix memory leak in nr_rrc_process_dedicatedNAS_MessageList
The leak was caused by improper memory ownership handling in the
dedicatedNAS_MessageList processing. The function was transferring
buffer ownership to NAS messages and then preventing ASN.1 cleanup
from freeing the original allocations by setting
list.count = 0, causing a memory leak.

Leak trace:
Direct leak of 40 byte(s) in 1 object(s) allocated from:
    /#0 0x7f2ce3ab4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    /#1 0x567907083f0f in OCTET_STRING_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/OCTET_STRING_uper.c:89
    /#2 0x5679070ed5e6 in SET_OF_decode_uper /cmake_targets/ran_build/build/openair2/RRC/NR/MESSAGES/constr_SET_OF_uper.c:70
    /#3 0x56790707b6dc in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:118
    /#4 0x56790707b6dc in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:118
    /#5 0x56790709a403 in CHOICE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_CHOICE_uper.c:84
    /#6 0x56790707b6dc in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:118
    /#7 0x56790709a403 in CHOICE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_CHOICE_uper.c:84
    /#8 0x56790709a403 in CHOICE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_CHOICE_uper.c:84
    /#9 0x56790707b6dc in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:118
    /#10 0x56790708b5f1 in uper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
    /#11 0x567906d44b4b in nr_rrc_ue_decode_dcch /openair2/RRC/NR_UE/rrc_UE.c:2212
    /#12 0x567906d520a3 in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:2615
    /#13 0x567906d5f77e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:2501
    /#14 0x7f2ce2494ac2 in start_thread nptl/pthread_create.c:442

Fix:
- Copy OCTET_STRING data instead of transferring ownership
- Allow ASN.1 cleanup to properly free original allocations

This fixes the leak that occurred during rrcReconfiguration
message processing when dedicatedNAS_MessageList was present.

Closes #828
2025-10-03 12:35:12 +02:00
Guido Casati
9086fb63de Fix memory leak in nr_rrc_ue_process_masterCellGroup
- Replace asn1cFreeStruc with ASN_STRUCT_FREE in MAC layer cleanup
- Fixes improper memory management of NR_CellGroupConfig structures

Root cause: asn1cFreeStruc only calls ASN_STRUCT_RESET + free(), which doesn't properly free nested ASN.1 allocations. ASN_STRUCT_FREE frees all nested structures completely.

AddressSanitizer leak trace:
Direct leak of 288 byte(s) in 1 object(s) allocated from:
    /#0 0x7fb72bab4a57 in __interceptor_calloc
    /#1 0x593752b28d0d in SEQUENCE_decode_uper
    /#2 0x593752b9a546 in SET_OF_decode_uper
    /#3 0x593752b2863c in SEQUENCE_decode_uper
    /#4 0x593752b47363 in CHOICE_decode_uper
    /#5 0x593752b2863c in SEQUENCE_decode_uper
    /#6 0x593752b2863c in SEQUENCE_decode_uper
    /#7 0x593752b2863c in SEQUENCE_decode_uper
    /#8 0x593752b2863c in SEQUENCE_decode_uper
    /#9 0x593752b2863c in SEQUENCE_decode_uper
    /#10 0x593752b38551 in uper_decode
    /#11 0x5937527d859f in nr_rrc_ue_process_masterCellGroup
    /#12 0x5937527d9408 in nr_rrc_process_reconfiguration_v1530
    /#13 0x5937527dd5bb in nr_rrc_ue_process_rrcReconfiguration
    /#14 0x5937527f5e6b in nr_rrc_ue_decode_dcch
    /#15 0x5937527ff003 in rrc_nrue
    /#16 0x59375280c6de in rrc_nrue_task
2025-10-03 10:38:38 +02:00
Laurent THOMAS
7355b55ad1 this MR replaces constants INT16_MIN by -INT16_MAX (so -32767) in places where it used for mathematical operations 2025-10-03 10:02:48 +02:00
francescomani
42b6576d81 fix RSRP computation at UE (let the higher layers compute the index) 2025-10-03 08:42:41 +02:00
rmagueta
8ca05e51ac Added graph in T_Tracer to observe UL-SNR calculated using SRS 2025-10-02 11:43:07 +01:00
rmagueta
799934024e SRS-based noise calculation using holes 2025-10-02 11:43:07 +01:00
Jaroslava Fiedlerova
55a56002de Merge branch 'integration_2025_w40' into 'develop'
Integration: `2025.w40`

* !3672 \[ci\] Fix MissingPropertyException - COTS-UE by binding OAI_Registry globally
* !3609 BWP with no PRACH occasions
* !3657 do not assert for mismatched TBS in phy-test mode
* !3667 CI: Updates for HO and AW2S pipeline
* !3674 NR UE: remove function get_nr_RSRP() and get_nr_rx_total_gain_dB() for cleanup
* !3478 NR UE: add UCI (HARQ-ACK/NACK) on PUSCH support at PHY
* !3664 modulation LUTs size was wrong, and remove inconsistent test of SSE2 enable
* !3665 Make all targets compile
* !3554 Handle failures in RRCReconfiguration encoding gracefully
* !3655 Improvements to N2 handover
* !3678 Add OAIUE longrun pipeline
* !3628 Update documentation

Closes #979, #726, #959, #967, and #930

See merge request oai/openairinterface5g!3676
2025-10-02 08:43:12 +00:00
Robert Schmidt
97185a6921 Merge remote-tracking branch 'origin/update_documentation' into integration_2025_w40 (!3628)
Update documentation
2025-10-01 22:28:38 +02:00
Robert Schmidt
5047bacd6d Merge remote-tracking branch 'origin/oaiue_longrun' into integration_2025_w40 (!3678)
Add OAIUE longrun pipeline

Add a new XML file for OAIUE longrun.

- Test description:
  * 40 MHz BW, n78
  * gNB with USRP N310, UE with USRP N310
  * CN deployed on OC
- Test duration: 1 hour
- Test scenario: 3x DL 10 min test (20 Mbps) + 3x UL 10 min test (5
  Mbps)
2025-10-01 22:21:13 +02:00
Robert Schmidt
7eb33a4003 Workaround: give pod deployment more time
pods deployed through helm occasionally take more time, leading to
errors such as

    Error from server (BadRequest): container "physim" in pod "oai-physims-4g-sczvl" is waiting to start: ContainerCreating

Give a bit more time before checking the logs. We cannot wait too much,
as the container will just end on FINISHED in running state, so the logs
will always be there.
2025-10-01 22:13:50 +02:00
Jaroslava Fiedlerova
3e5681abbd Merge remote-tracking branch 'origin/n2-handover-minor-fixes' into integration_2025_w40 (!3655)
The goal of this MR is to resolve memory leaks, prevent crashes, and improve code quality.

Bug Fixes:
- Fix crash in get_du_for_ue when F1 UE data doesn't exist during N2 handover
- Fix memory leaks in handover preparation and UE context cleanup
- Fix duplicate handover request handling with proper UE context validation

Code Quality Improvements:
- Prevent ASN.1 double-free bug in NGAP memory management (caller ownership
  principle)
- Fix hardcoded instance 0 bug in UE context release command
- Refactor e1_send_bearer_updates into three specialized functions with
  extracted common code
- Replace impossible ID mismatch checks with DevAssert statements
- Fix inconsistent equality checking patterns in E1AP bearer context management
- Improve error message consistency across NGAP handover functions
- Optimize PLMN identity assignment using struct copies

Documentation Enhancements:
- Improve RRC neighbor configuration documentation with actual parameter names
- Add same-machine setup guidance for N2 handover with network configuration
  notes
- Fix grammar errors and standardize naming conventions

Follow up to !3334 (merged)
2025-10-01 18:08:28 +02:00
calvin_peyron
8fcea7c314 Update UL_MIMO documentation 2025-10-01 16:22:46 +02:00
calvin_peyron
23e0f50af0 Change D2D emulator documentation format 2025-10-01 16:22:46 +02:00
calvin_peyron
2dd72d40cb Put documentation images in right folder 2025-10-01 16:22:46 +02:00
calvin_peyron
e7a45a304b Remove unused and outdated documentation 2025-10-01 16:22:46 +02:00
calvin_peyron
2d2f61f253 Fix link in rrc-usage.md 2025-10-01 16:22:46 +02:00
calvin_peyron
aa323b02f2 Fix link in mac-usage.md 2025-10-01 16:22:46 +02:00
calvin_peyron
0721c0fad0 Fix image link inside F1AP-lib.md 2025-10-01 16:22:46 +02:00
calvin_peyron
25918898a7 Update F1-design.md 2025-10-01 16:22:46 +02:00
calvin_peyron
acd3634d27 Update E1-design.md 2025-10-01 16:22:46 +02:00
Laurent THOMAS
a0d8baf323 update and rename TESTING_GNB_W_COTS_UE.md to describe actual content 2025-10-01 16:22:46 +02:00
calvin_peyron
2ea4cbbd93 update env variable usage documentation 2025-10-01 16:22:40 +02:00
Jaroslava Fiedlerova
8348f83a1f Merge remote-tracking branch 'origin/issue-979' into integration_2025_w40 (!3554)
Handle failures in RRCReconfiguration encoding gracefully

Closes #979
2025-10-01 14:51:43 +02:00
Jaroslava Fiedlerova
5adfeb80c3 Merge remote-tracking branch 'origin/make-all-targets-compile' into integration_2025_w40 (!3665)
Make all targets compile

This MR enables us to compile all targets, and does that in one CI test. This
closes #726. Now, this should work:

cd ~/openairinterface5g
mkdir build && cd build
cmake .. -GNinja && ninja

To achieve this, I did the following:
- some targets have been fixed (warnings, errors)
- some targets have been removed when they did not seem to serve a good purpose
  (e.g., an almost empty test)
- some targets have been commented (e.g., LTE simulators, some unitary tests)
  which we maybe want to revive in the future
- some targets built when just building with ninja, but not all. For instance,
  telnetsrv_enb would typically build, but it was missing a dependency. Doing
  cmake .. -GNinja && ninja telnetsrv_enb would show this (in develop)

To help with the last bullet point, there is a script compile_targets.sh that
can compile targets independently (and in parallel, to not wait for ages) to
show that targets compile properly compile-targets.patch.

In almost all cases, the problem is that a specific module uses the logging
module, which depends on T, which needs to dynamically create headers. The way
to do this is to have a dependency, and many targets use generate_T or {T_LIB}
({} intentional: T might be absent, so then it evaluates to nothing). However,
not all do this, and those that depend on T actually don't depend on T, but on
the logging module, which in turn depends on T. So in many places, a simple
dependency onto log_headers fixes this problem, and generate_T or {T_LIB}
simplifies the dependency (but not always). The commits should have more info.

Note that at least the targets in FlexRIC do not all compile, at least in the
configuration that we use in docker/Dockerfile.build.ubuntu. So for the latter,
we cannot build with a simple ninja, but FlexRIC seems to be the only one that
does not compile. Since FlexRIC is a separate repository, that needs to be
addressed in the corresponding repository.
2025-10-01 14:48:45 +02:00
Jaroslava Fiedlerova
2dde472cfd Adjust gNB conf file in OAIUE test
Increase prach_dtx_threshold to avoid fake PRACH detection.
2025-10-01 13:36:53 +02:00
Jaroslava Fiedlerova
7935c19d21 Fix in CreateWorkspace
Previously, the script attempted to directly merge ${merge}, which could f
ail if the branch was not already available locally. This update explicitly
fetches the branch from origin and then merges FETCH_HEAD with --ff, ensuring
the merge works even when the branch is missing locally.
2025-10-01 13:36:53 +02:00
Jaroslava Fiedlerova
6193d7c7f4 Create XML for OAIUE longrun pipeline
Test duration: 1 hour
Test scenario: 3x DL 10 min test (20 Mbps) + 3x UL 10 min test (5 Mbps)
2025-10-01 13:36:49 +02:00
Guido Casati
dcb10ffc94 Handover tutorial: fix minor issues and add same-machine setup guidance
- Update opening statement to reflect both F1 (intra-gNB) and N2 (inter-gNB) handover support
- Fix grammar error: 'either by by decision' -> 'either a decision'
- Standardize naming: 'gNB PCI1' -> 'gNB-PCI1'
- Fix typo: 'neighbor call' -> 'neighbor cell'
- Remove --sa flag from N2 handover target gNB command for consistency
- Add network configuration notes for same-machine setups:
  * IP address assignment instructions to avoid network conflicts
  * Target gNB command options for proper network interface configuration
2025-10-01 11:36:22 +02:00
Guido Casati
dcd7ee711b Improve RRC neighbor configuration documentation
- Move 'What is a gNB neighbor?' explanation from rrc-usage.md to handover-tutorial.md where it belongs
- Replace generic parameter names with actual configuration parameter names and specific descriptions (e.g. gNB_ID, nr_cellid)
- Add example configuration structure showing proper syntax
- Add missing 'band' parameter that was not listed before
- Provide concrete examples and exact constraints for each parameter
- Cross-reference between documents for better organization

This addresses documentation issues where generic parameter descriptions were
not useful for developers configuring neighbor cells.
2025-10-01 11:36:22 +02:00
Guido Casati
4aafd1e369 Simplify N2 handover test to focus on N2 handover only
- Remove extensive traffic testing before HO (iperf tests 030001, 030002)
- Do 1 ping test after attachment
- Reduce ping packet count from 100 to 50 packets for remaining connectivity test

Time savings: ~2-3 minutes by removing traffic validation overhead
2025-10-01 11:36:22 +02:00
Guido Casati
9d9f272e74 Refactor: split e1_send_bearer_updates into specialized functions
Split monolithic e1_send_bearer_updates into three focused functions:
- e1_send_bearer_updates(): DRB setup from F1 UE Context Modification Response
- e1_request_pdcp_status(): Request PDCP status during inter-CU handover
- e1_notify_pdcp_status(): Notify CU-UP with PDCP status during handover

Extract common helpers:
- append_e1_drb_mod_req(): Common DRB-to-mod for bearer request logic
- e1_send_bearer_modification_request(): Common sending step

Bug fixes:
- Fix loop bounds (i < n instead of i == n)
- Fix array access bounds checking
- Fix DRB ID consistency

Memory management:
- Add missing free_e1ap_context_mod_request calls
- Improve error handling with early returns

In the process:
- Simplify cuup_notify_reestablishment with FOR_EACH_SEQ_ARR loop
- Adopted all callers to use new consolidated functions

Improves maintainability and eliminates complex conditional logic.
2025-10-01 11:36:22 +02:00
Guido Casati
205bf7c993 Add NULL check for DU lookup in handover notify
Add early return if get_du_by_cell_id returns NULL to prevent
segmentation fault when accessing DU structure members.
2025-10-01 11:36:22 +02:00
Guido Casati
1fc057cb08 Optimize PLMN identity assignment in handover procedures
Replace field-by-field assignment with struct copy for plmn_identity.
Both source and destination use identical plmn_id_t type, making
this change safe and more maintainable.

- Reduces lines of code
- More readable and less error-prone
- Single memory copy operation instead of multiple field assignments
2025-10-01 11:36:22 +02:00
Guido Casati
c6a06dc81f Improve error message consistency in NGAP handover functions
- ngap_gNB_handover_notify: Fix misleading error message from 'Failed to encode'
  to 'Failed to find UE context' for better clarity
- ngap_gNB_handle_ul_ran_status_transfer: Standardize error message format
  from 'Could not find' to 'Failed to find' for consistency across functions

This ensures consistent and accurate error reporting across all NGAP handover functions.
2025-10-01 11:36:22 +02:00
Guido Casati
0cbed89b03 Replace malloc_or_fail with calloc_or_fail for safer memory allocation
- Update encoder functions in ngap_gNB_mobility_management.c to use calloc_or_fail
- Provides zero-initialized memory and consistent error handling
- Prevents uninitialized fields and improves memory safety

Also:

- Update NG Setup Request to use calloc_or_fail
2025-10-01 11:36:22 +02:00
Guido Casati
3e8354727e Remove redundant NULL checks for handover encoder functions
Handoer encoder functions never return NULL - they either return
a valid pointer or terminate the program. Remove dead code paths.
2025-10-01 11:36:22 +02:00
Guido Casati
c2e8743a7b Optimize create_measgap_config to eliminate unnecessary allocation
- Replace inefficient 'allocate, extract, free' pattern with direct value extraction
- Remove unused functions get_gap_config_from_smtc() and get_gap_config()
- Add extract_gap_config_from_smtc() that extracts values directly without allocation
- Eliminates use-after-free risk and improves performance
- No allocation overhead, no memory leaks
2025-10-01 11:36:22 +02:00
Guido Casati
feea066c3f Fix measurement gap config memory leak in create_measgap_config
- Add missing ASN_STRUCT_FREE for NR_MeasGapConfig in create_measgap_config
- Fix 48-byte measurement gap config leak in get_gap_config_from_smtc

AddressSanitizer backtrace:
Direct leak of 48 byte(s) in 1 object(s) allocated from:
    /#0 0x7d32adab4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    /#1 0x5751f99cbb79 in calloc_or_fail /home/guido/repo/openairinterface5g/develop/common/utils/utils.h:74
    /#2 0x5751f99cbb79 in get_gap_config_from_smtc /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c:4164
    /#3 0x5751f99cbb79 in create_measgap_config /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c:4310
    /#4 0x5751f9964abe in ue_context_setup_request /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c:709
    /#5 0x5751f979e568 in nr_initiate_handover /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:218
    /#6 0x5751f97a637f in nr_rrc_trigger_n2_ho_target /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:526
    /#7 0x5751f9703608 in rrc_gNB_process_e1_bearer_context_setup_resp /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:2641
    /#8 0x5751f9706b7b in rrc_gnb_task /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:3020
    /#9 0x7d32ac494ac2 in start_thread nptl/pthread_create.c:442

Root cause: create_measgap_config allocated NR_MeasGapConfig via get_gap_config_from_smtc()
but never freed it after extracting the needed values to populate the measgap_config_t
return structure.
2025-10-01 11:36:22 +02:00
Guido Casati
5e3b4c497c Refactor handover context cleanup and fix memory leak in N2 handover source gNB path
- Add missing handover context cleanup in rrc_CU_process_ue_context_release_complete
- Fix 16-byte handover context leak in N2 handover source gNB trigger path

AddressSanitizer backtrace:
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    /#0 0x7fee67cb4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    /#1 0x58059e33454b in calloc_or_fail /home/guido/repo/openairinterface5g/develop/common/utils/utils.h:74
    /#2 0x58059e33454b in alloc_ho_ctx /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:47
    /#3 0x58059e339e4d in nr_rrc_trigger_n2_ho /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:556
    /#4 0x58059e33ae93 in nr_HO_N2_trigger_telnet /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:611

Root cause: Handover context allocated in N2 handover source gNB trigger path (nr_rrc_trigger_n2_ho)
for any successful N2 handover but not properly freed in all handover completion scenarios.
The UE context release complete handler was missing cleanup for handover context.

Solution: refactor handover context cleanup

- Move nr_rrc_finalize_ho() call to rrc_delete_ue_data() for centralized cleanup
- Remove redundant nr_rrc_finalize_ho() calls from handover failure paths:
  * rrc_CU_process_ue_context_release_request() - UE not deleted yet
  * invalidate_du_connections() - UE will be deleted later
- Keep nr_rrc_finalize_ho() calls in handover success paths where UE continues operating
- Ensures handover context is cleaned up exactly once when UE is actually deleted
- Prevents potential double-free and use-after-free issues in handover cleanup

This centralizes all UE data cleanup in rrc_delete_ue_data() and ensures
handover context is properly managed throughout the UE lifecycle and cleaned up
when UE delete happens.
2025-10-01 11:36:22 +02:00
Jaroslava Fiedlerova
7c82312b6d Merge remote-tracking branch 'origin/fix-modulation-luts-size' into integration_2025_w40 (!3664)
modulation LUTs size was wrong, and remove inconsistent test of SSE2 enable
2025-09-30 17:38:09 +02:00
Jaroslava Fiedlerova
3277018fce Merge remote-tracking branch 'origin/uci_on_pusch_phy' into integration_2025_w40 (!3478)
NR UE: add UCI (HARQ-ACK/NACK) on PUSCH support at PHY

Add UCI (HARQ-ACK/NACK) on PUSCH support at nrUE PHY, the multiplexing procedure
can be found in TS 38.212 section 6.2.7.

Verified with 3rd-pary gNB for cases when HARQ payload bits length is 1, 2 or 3.

Closes #959 and #967 .
2025-09-30 17:37:01 +02:00
Jaroslava Fiedlerova
3e79774386 Enable DLSCH performance logging in nr_dlsim 2025-09-30 14:03:20 +02:00
Jaroslava Fiedlerova
ff3245ea90 Enable ULSCH performance logging in nr_ulsim 2025-09-30 14:03:20 +02:00
Guido Casati
915c41c127 Fix MTC sequence memory leak in UE context setup
- Add missing ASN_STRUCT_FREE for NR_MeasurementTimingConfiguration in ue_context_setup_request
- Fix 64-byte MTC sequence leak in get_nr_mtc → SEQUENCE_decode_uper

AddressSanitizer backtrace:
Direct leak of 64 byte(s) in 1 object(s) allocated from:
    /#0 0x7dcfcb8b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    /#1 0x591fcc59b67d in SEQUENCE_decode_uper /home/guido/repo/openairinterface5g/develop/cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
    /#2 0x591fcc57eaa1 in uper_decode /home/guido/repo/openairinterface5g/develop/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
    /#3 0x591fcbdbedeb in get_nr_mtc /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c:4216
    /#4 0x591fcbd58188 in ue_context_setup_request /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c:635
    /#5 0x591fcbb92568 in nr_initiate_handover /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:218
    /#6 0x591fcbb9a37f in nr_rrc_trigger_n2_ho_target /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:526
    /#7 0x591fcbaf7608 in rrc_gNB_process_e1_bearer_context_setup_resp /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:2640
    /#8 0x591fcbafab7b in rrc_gnb_task /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:3019
    /#9 0x7dcfca294ac2 in start_thread nptl/pthread_create.c:442

Root cause: ue_context_setup_request allocated NR_MeasurementTimingConfiguration via
get_nr_mtc() but never freed it after creating the measurement gap configuration.
The create_measgap_config function only reads from the structure and doesn't take
ownership, so the caller must free it.
2025-09-30 11:48:53 +02:00
Guido Casati
487de67ff8 Fix measurement configuration memory leak with stack allocation
- Replace heap allocation with stack allocation for seq_arr_t structures
- Use proper seq_arr_free() with free functions for ASN.1 structures
- Remove unnecessary malloc/free calls for sequence containers
- Improve memory safety and performance with automatic cleanup

Fixes 128-byte memory leak:

Direct leak of 128 byte(s) in 2 object(s) allocated from:
   /#0 0x7e7f39ab4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
   /#1 0x56df8b07312d in SEQUENCE_decode_uper /home/guido/repo/openairinterface5g/develop/cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
   /#2 0x56df8b056551 in uper_decode /home/guido/repo/openairinterface5g/develop/cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
   /#3 0x56df8a896b1b in get_nr_mtc /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c:4216
   /#4 0x56df8a82feb8 in ue_context_setup_request /home/guido/repo/openairinterface5g/develop/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c:635
   /#5 0x56df8a66a298 in nr_initiate_handover /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:218
   /#6 0x56df8a6720af in nr_rrc_trigger_n2_ho_target /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB_mobility.c:526
   /#7 0x56df8a5cf338 in rrc_gNB_process_e1_bearer_context_setup_resp /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:2633
   /#8 0x56df8a5d28ab in rrc_gnb_task /home/guido/repo/openairinterface5g/develop/openair2/RRC/NR/rrc_gNB.c:3012
   /#9 0x7e7f38494ac2 in start_thread nptl/pthread_create.c:442
2025-09-30 11:48:53 +02:00
Guido Casati
59803e221f Fix duplicate handover request handling
- Add early check for existing UE context by AMF UE NGAP ID at beginning of rrc_gNB_process_Handover_Request
- Add dedicated function to get UE context by AMF UE NGAP ID: rrc_gNB_get_ue_context_by_amf_ue_ngap_id()
- Send handover failure with appropriate cause if UE context already exists
- Remove redundant ho_context NULL check that could never be true for newly created UE contexts
- Prevents duplicate handover processing and resource leaks
2025-09-30 11:48:53 +02:00
Guido Casati
1357158722 Fix hardcoded instance 0 bug in UE context release command
Use the instance parameter instead of hardcoded 0 to access the correct
RRC instance. Also clean up redundant variable initialization.
2025-09-30 11:48:53 +02:00
Guido Casati
de07668b0b Fix potential memory leak in ngap_gNB_handover_request_acknowledge
Move UE context creation and storage to after successful PDU encoding
to prevent memory leaks if encoding fails. Also add proper PDU cleanup
when AMF fetch fails and use consistent NULL check style.

This ensures UE context is only stored when the operation is guaranteed
to succeed, improving error handling and memory management.
2025-09-30 11:48:53 +02:00
Guido Casati
235493aa07 Fix ASN.1 memory management ownership in NGAP functions
In the current memory management the caller wasn't responsible for freeing
memory they allocate. The ngap_gNB_encode_pdu function was taking ownership
of PDU contents by calling ASN_STRUCT_FREE_CONTENTS_ONLY, while callers
also expected to manage the same memory. This created unclear ownership semantics and
potential double-free bugs.

- Remove ASN_STRUCT_FREE_CONTENTS_ONLY from ngap_gNB_encode_pdu to prevent double-free
- Remove unnecessary ASN_STRUCT_FREE when encode function returns NULL
- Add proper ASN_STRUCT_FREE cleanup for heap-allocated PDUs in ngap_gNB.c functions
- Add ASN_STRUCT_FREE_CONTENTS_ONLY cleanup for stack-allocated PDUs in NAS and context management functions
- Ensure consistent memory cleanup patterns across all NGAP encoder callers
- Fix potential memory leaks in all ngap_gNB_encode_pdu call sites

This prevents double-free bugs and ensures proper cleanup of ASN.1 structures
in both heap and stack allocation scenarios.
2025-09-30 11:48:53 +02:00
Guido Casati
524a3ddf85 Fix xer_fprint parameter in ngap_handover_required
Fix incorrect xer_fprint parameter - should pass pdu instead of &pdu
to properly print ASN.1 structure for debugging.
2025-09-30 11:48:53 +02:00
Robert Schmidt
12d92bc836 Fix crash in get_du_for_ue when F1 UE data does not exist
Add check for cu_exists_f1_ue_data() before calling cu_get_f1_ue_data()
to prevent assertion failure when telnet command 'ci fetch_du_by_ue_id'
is used for UEs that have been handed over via N2 (and no longer have
F1 UE data).

This fixes the crash:
Assertion (ret == HASH_TABLE_OK && data != ((void *)0)) failed!
In get_hashtable_data() /oai-ran/openair2/F1AP/f1ap_ids.c:36
element for ue_id 1 not found

The function now returns NULL gracefully when F1 UE data is not available.

Co-authored-by: Guido Casati <hello@guidocasati.com>
2025-09-30 11:48:53 +02:00
Guido Casati
a38aa1bab8 Fix memory leaks in fill_removal_lists_from_source_measConfig
- Add proper cleanup of allocated ASN.1 structures in all return paths
- Fix early returns that were leaking NR_HandoverPreparationInformation
- Fix early returns that were leaking NR_RRCReconfiguration
- Add cleanup at end of successful function execution

This prevents memory leaks when processing handover preparation information
during N2 handover procedures.
2025-09-30 11:48:53 +02:00
Guido Casati
b4485ecea2 Fix UE context leak in handover failure
- Add UE context cleanup before sending handover failure message
- Prevents memory/resource leak when PDU session establishment fails during handover
- UE context was created but never cleaned up on failure path

This fixes a bug where UE contexts would accumulate over time
when handovers failed after context creation.
2025-09-30 11:48:41 +02:00
Guido Casati
fd50ff43cc Handle gracefully encoding failure in build_RRCReconfiguration_IEs
closes #979
2025-09-30 11:23:45 +02:00
Sakthivel Velumani
59ff9ae04e ulsim: test UCI on PUSCH with matlab
Since there is no UCI on PUSCH implementation in gNB, it is good to test
UE's implementation with matlab.

This commit allows to test with matlab in two ways:
1. generate OFDM waveform from ulsim and decode it in matlab using
uci_on_pusch_decode.m
2. generate codeword in matlab using uci_on_pusch_encode.m read it in
ulsim and compare the bits. ulsim option -o is used
2025-09-30 00:24:39 +08:00
Sakthivel Velumani
83bf140bc3 Add flag for Tx phase pre compensation
Used in ulsim to verify waveform in MATLAB
2025-09-30 00:24:39 +08:00
Sakthivel Velumani
b2174cb8e1 Add processing stats for UCI mapping on PUSCH 2025-09-30 00:24:36 +08:00
Sakthivel Velumani
8de13fab97 Simplify code 2025-09-30 00:23:00 +08:00
alexjiao
ac76c6e27a Add functions to calculate M_bit for PUCCH format 2/3/4
Add functions to calculate PUCCH format 2/3/4 rate matching output sequence length (M_bit),
according to 3GPP TS 38.212 Table 6.3.1.4-1.
2025-09-30 00:23:00 +08:00
alexjiao
b69b65ba66 Handle UCI on PUSCH scrambling
When the codeword has UCI multiplexed with data, we need to handle UCI scrambling according to 38.211 section 6.3.1.1.
Especially when O_ACK <= 2 there are x and y placeholder bits for UCI.
2025-09-30 00:23:00 +08:00
alexjiao
1c5af6065c Handle UCI on PUSCH procedures at PHY
Get beta offset, alpha scaling and other parameters to calculate rate matching information for UCI on PUSCH,
then use the rate matching info to encode UCI and re-encode PUSCH, call nr_uci_on_pusch to get final multiplexed codeword for scrambling.
2025-09-30 00:22:58 +08:00
calvin_peyron
63397ac592 Remove RFSIMULATOR environment variable 2025-09-29 15:14:39 +02:00
Laurent THOMAS
3f9dcee5fa remove a dead function 2025-09-29 15:14:39 +02:00
calvin_peyron
7d70617a01 Fix documentation broken links 2025-09-29 15:14:39 +02:00
Robert Schmidt
e7c4b9c4cb Merge branch 'registry-cots-ue' into 'develop'
[ci] Fix MissingPropertyException - COTS-UE by binding OAI_Registry globally

See merge request oai/openairinterface5g!3672
2025-09-29 11:28:47 +00:00
Jaroslava Fiedlerova
d6f0b5a9d7 Merge remote-tracking branch 'origin/cleanup-ue-get-nr-rsrp' into integration_2025_w40 (!3674)
NR UE: remove function get_nr_RSRP() and get_nr_rx_total_gain_dB() for cleanup

The function get_nr_RSRP() and get_nr_rx_total_gain_dB() are not used anywhere
in the code, removing for cleanup.
2025-09-29 13:12:36 +02:00
Jaroslava Fiedlerova
afebd033f6 Merge remote-tracking branch 'origin/ci-ho-freq-update' into integration_2025_w40 (!3667)
CI: Updates for HO and AW2S pipeline

This MR introduces several CI updates:

- Change center frequency from 3439 MHz (n78) to 4185 MHz (n77) in HO setup to
  prevent interference with other lab setups.
- Enable attaching multiple AmariUEs simultaneously in the AW2S pipeline - save
  ~25s.
- Update RX gain configuration on AmariUE - improve DL throughput.
2025-09-29 13:11:14 +02:00
Jaroslava Fiedlerova
6e424af56b Merge remote-tracking branch 'origin/issue930' into integration_2025_w40 (!3657)
do not assert for mismatched TBS in phy-test mode

Closes #930
2025-09-29 12:56:24 +02:00
Jaroslava Fiedlerova
1e61c2ccb4 Merge remote-tracking branch 'origin/BWP_with_no_RA' into integration_2025_w40 (!3609)
BWP with no PRACH occasions

This MR includes fixes at gNB and UE in case the current BWP has no PRACH
occasions, i.e. we need to switch to initial BWP.
2025-09-29 12:55:30 +02:00
alexjiao
0fb8a09b86 Remove function get_nr_RSRP() and get_nr_rx_total_gain_dB() for cleanup
The function get_nr_RSRP() and get_nr_rx_total_gain_dB() is not used anywhere in the code.
2025-09-29 17:51:52 +08:00
Shubhika Garg
4b6c18b1dd [ci] Fix MissingPropertyException - COTS-UE by binding OAI_Registry globally
`def` creates a variable local to the script object, not automatically visible inside helper functions.

This fixes the following exception in Jenkins:

    Found unhandled groovy.lang.MissingPropertyException exception:
    No such property: OAI_Registry for class: groovy.lang.Binding
2025-09-29 11:37:23 +02:00
Robert Schmidt
60ab0a89a2 Build all targets in Cluster PhySim build 2025-09-29 09:04:02 +02:00
Robert Schmidt
2ff949a16f Correct dependencies onto logging module
These libraries depend on the logging module, so add the right
dependency log_headers. Indirectly, this will fulfill the condition of
T. I consider the prior usage of generate_T or {T_LIB} incorrect,
because basically none of these libraries actually, actively use T, but
rather only the logging module, which pulls in T.  The dependency of
log_headers will also take care of generating and including T headers,
which is a dependency of the logging module.

For conf2uedata and related, fulfill the dependency
through conf2uedata_lib (on which the rest depends).
2025-09-29 09:04:02 +02:00
Robert Schmidt
4876533e9c F1AP IDs: Remove unnecessary dependency 2025-09-29 09:04:02 +02:00
Robert Schmidt
cdbfaf835e params_yaml has no dependency on UTIL
These libraries have no dependencies on UTIL, so it's better to omit it.
However, then the test is missing symbols for the config (which likely,
indirectly came through UTIL -> LOG -> CONFIG_LIB, so add it now onto
the test.
2025-09-29 09:04:02 +02:00
Robert Schmidt
1e476735ea xforms uses logging 2025-09-29 09:04:02 +02:00
Robert Schmidt
1b81c4b09c RLC only needs headers for logging 2025-09-29 09:04:02 +02:00
Robert Schmidt
5716d95e97 nr_prachsim: remove unused include 2025-09-29 09:04:02 +02:00
Robert Schmidt
eea7be3977 ldpc_segment: avoid T error, use log_headers for logging
As parent.
2025-09-29 09:04:02 +02:00
Robert Schmidt
19813283fb Avoid T error on radio libraries
These libraries have an (indirect) dependency on T, either by using the
logging module (which in turn depends on T), or through other includes.

The easiest is to depend on the logging module, which will fulfil also
the T dependency.

It would equally be feasible to use the utils target (which in turn
depends on log_headers), but this would necessitate to compile, and does
not seem to be necessary.
2025-09-29 09:04:02 +02:00
Robert Schmidt
2a5ed87589 E2 Agent uses CONFIG_LIB for configuration
Since E2 agent uses the config library, include it directly. This also
makes the dependency on T obsolete, because

- it is the logging headers that are needed, and
- the T dependency is fulfilled through the log_headers.
2025-09-29 09:04:02 +02:00
Robert Schmidt
1ecb03f5f8 Make BladeRF compile
Fix variable name.

See also: 7466297568 ("move command line sample offset [...] at top
  level [...]")
2025-09-29 09:04:02 +02:00
Robert Schmidt
2889e55cd8 Remove redundant target_include_directories() from LOG
The same is achieved by including log_headers.
2025-09-29 09:04:02 +02:00
Robert Schmidt
197705f232 Provide T headers via log.h
It seems that many compilation units include T.h through the config
module (as evidenced when taking out T.h from
config_load_configmodule.h). This is strange, because T.h is only used
in the logging headers. Hence, move it to there, where it is used.
2025-09-29 09:04:02 +02:00
Jaroslava Fiedlerova
fd37fba9b7 Cleanup of libraries/executables from T loop
These libraries/executables are not defined in OAI.
2025-09-29 09:04:02 +02:00
Robert Schmidt
66c3b7d192 Break coding_defs.h dependency on logging module
coding_defs.h included defs_common.h, which pulls in many dependencies,
e.g., the logging module, which pulls in T. However, it does not use
anything of this. So remove, and include stdbool.h instead (because bool
is used in coding_defs.h.

nr_polar_defs.h relied on some includes done in coding_defs. Use
includes for pthreads and SIMD to define types that are used in
nr_polar_defs.h.
2025-09-29 09:04:02 +02:00
Robert Schmidt
eef092c318 Omit JER compilation for NRPPA ASN.1
We don't use JER. This avoids compilation problems, such as:

    /usr/bin/ld: openair3/NRPPA/MESSAGES/libasn1_nrppa.a(INTEGER_jer.c.o): in function `INTEGER_decode_jer':
    tmp.MtrwVDhQqY/openair3/NRPPA/MESSAGES/INTEGER_jer.c:186:(.text+0x5b8): undefined reference to `jer_decode_primitive
2025-09-29 09:04:02 +02:00
Robert Schmidt
72371ba10b Remove unnecessary comment 2025-09-29 09:04:02 +02:00
Robert Schmidt
46ed4ac36d Update comment to reference right target 2025-09-29 09:04:02 +02:00
Robert Schmidt
4177c6d182 Include CMakeLists.txt using add_subdirectory(), simplify 2025-09-29 09:04:02 +02:00
Robert Schmidt
cc094ac737 XNAP asn.1 cmake: ber_decoder.h is not created
XNAP is asn1c compiled with -no-gen-BER. Correspondingly, no
ber_decoder.h file is created. However, when running cmake followed by
ninja, it notices the absence of this file:

    ninja explain: output openair2/XNAP/MESSAGES/ber_decoder.h doesn't exist

which triggers a complete rebuild of XNAP ASN.1. Without this file, the
targets are not marked as dirty.
2025-09-29 09:04:02 +02:00
Robert Schmidt
cede449907 Remove NUMBER_OF_UE_MAX_NB_IoT and make NB_IoT compile
This constant seems to be an analogon to NUMBER_OF_UE_MAX; replace with
the latter, as it does the same. (NBIoT does not work, anyway)

Fix dependencies of the NB_IoT target so it compiles.
2025-09-29 09:04:02 +02:00
Robert Schmidt
a68168805b Remove NB-IoT configuration
Remove, because
1) it does not compile (the asn1c generated code should be prepend with
   LTE_ etc, nobody did that)
2) a shared module makes no sense
3) the configuration is trivial to recreate
2025-09-29 09:04:02 +02:00
Robert Schmidt
1a5e2598a3 Move LTTng check to subdirectory where used 2025-09-29 09:04:02 +02:00
Robert Schmidt
d6c29b2d2c Fix E2_AGENT linking w.r.t. simulators
Link E2_AGENT libraries directly into nr-softmodem/lte-softmodem instead
of L2/L2_NR/F1AP. Doing that ensures that simulators, e.g.,
nr_dlsim/nr_ulsim do still compile. It also simplifies the code.

Prior to this, compiling nr_ulsim with E2_AGENT, for instance, resulted
in the following errors, fixed in this commit:

    FAILED: nr_ulsim
    /usr/bin/ld: openair2/E2AP/RAN_FUNCTION/libe2_ran_func_du_cucp_cuup.a(ran_func_rc.c.o): in function `send_aper_ric_ind':
    /home/oai/robert/cleanup-t-dependency-cmake/openair2/E2AP/RAN_FUNCTION/O-RAN/ran_func_rc.c:643: (.text+0xee6): undefined reference to `async_event_agent_api'
    /usr/bin/ld: /home/oai/robert/cleanup-t-dependency-cmake/openair2/E2AP/RAN_FUNCTION/O-RAN/ran_func_rc.c:643:(.text+0x11ca): undefined reference to `async_event_agent_api'
    /usr/bin/ld: /home/oai/robert/cleanup-t-dependency-cmake/openair2/E2AP/RAN_FUNCTION/O-RAN/ran_func_rc.c:643:(.text+0x1485): undefined reference to `async_event_agent_api'
    /usr/bin/ld: /home/oai/robert/cleanup-t-dependency-cmake/openair2/E2AP/RAN_FUNCTION/O-RAN/ran_func_rc.c:643:(.text+0x159c): undefined reference to `async_event_agent_api'
    /usr/bin/ld: /home/oai/robert/cleanup-t-dependency-cmake/openair2/E2AP/RAN_FUNCTION/O-RAN/ran_func_rc.c:643:(.text+0x16b1): undefined reference to `async_event_agent_api'
    [...]
2025-09-29 09:04:02 +02:00
Robert Schmidt
a31838acd7 CMakeLists.txt: comment out tests that don't compile 2025-09-29 09:04:02 +02:00
Robert Schmidt
ba3a0d2100 CMakeLists.txt: comment out sims that don't compile 2025-09-29 09:04:02 +02:00
Robert Schmidt
124debc2c7 Fix warnings in rftest executable
warning: ‘genericPowerPerAntena’ defined but not used [-Wunused-function]

    warning: ‘graph.text’ is used uninitialized [-Wuninitialized]

    warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
2025-09-29 09:04:02 +02:00
Jaroslava Fiedlerova
03d4ce2e1e CI: Attach multiple UEs at once in AW2S test 2025-09-26 15:07:16 +02:00
Jaroslava Fiedlerova
b43dee1499 CI: adjust Amarisoft UE RX gain
Lower the RX gain used by the Amarisoft UE in CI tests to prevent DL signal
saturation. This resolves an issue with low DL throughput observed in CI.
RX/TX signal levels on the Amarisoft UE can be checked with "t spl" command
in lteue; MAX values should not approach 0.
2025-09-26 14:58:47 +02:00
Sakthivel Velumani
5f3a19cb7d Separate segmentation from ULSCH encoding function
Segmentation have to be called before UCI mapping to get number of
segments and sumKr values.
2025-09-26 11:16:54 +08:00
alexjiao
ceda9c1141 Add functions to implement UCI and data multiplexing on PUSCH
Data and control multiplexing procedure is defined in 38.212 section 6.2.7.
Step 3 (CSI1 and CSI2 mapping) is not implemented, only HARQ-ACK.
PUSCH frequency hopping is not supported.
2025-09-26 11:14:12 +08:00
alexjiao
8222fa27e5 Add functions to calculate rate matching information for UCI on PUSCH
Use betaOffset and alpha scaling etc. to get rate matching information of UCI on PUSCH (e.g. max bit capacity of encoded UCI and encoded ULSCH)
according to TS 38.212 section 6.3.2.4 and 6.2.7.
2025-09-26 11:14:12 +08:00
alexjiao
a64038658f Modify nr_uci_encoding for UCI on PUSCH
38.212 section 5.3.3.1 and 5.3.3.2 describe how to encode 1-bit and 2-bit information.
This is needed when typically HARQ-ACK will be transmitted on PUSCH.
38.212 section 5.4.3 also describes how to do rate matching for channel coding of small block lengths.
2025-09-26 11:14:08 +08:00
Jaroslava Fiedlerova
41b33e9124 CI: Update frequency in HO setup
Move center frequency from 3439 MHz to 4185 MHz to avoid interference
with other lab setups.
2025-09-25 15:43:14 +02:00
Guido Casati
e535fbe6a7 Replace impossible ID mismatch checks with DevAssert in NGAP functions
- Replace error handling for impossible ID mismatches with DevAssert statements
- If ngap_get_ue_context() succeeds, returned context must have matching NGAP gNB UE IDs by definition
- This catches potential bugs in the lookup function immediately
- Affects: handover_required, handover_notify, handover_cancel, ul_ran_status_transfer

These checks were logically impossible since we looked up the context using
the same IDs we were then checking for mismatch.
2025-09-25 14:55:03 +02:00
Guido Casati
50760c04a7 Fix log messages in N2 handover: print both PCI and Cell ID when available
- Fixed incorrect log messages that said 'PCI=%lu' when printing nr_cell_id
- Now prints both NR Cell ID and PCI when DU is found
- Provides better debugging information for handover requests
2025-09-25 14:55:03 +02:00
Guido Casati
8dcd253e60 E1 lib: Adopt _E1_EQ_CHECK_OPTIONAL_PTR macro in E1AP bearer context management
- Add _E1_EQ_CHECK_OPTIONAL_PTR checks for pdcp_config, sdap_config, UP_TL_information, and securityIndication
- Fix bug in eq_pdu_session_to_mod_item where a->UP_TL_information was compared with itself instead of b->UP_TL_information
- Fix eq_security_ind call to properly handle return value with early return pattern
- Improve consistency with existing macro usage patterns in the codebase
- Provide better error reporting for optional pointer field mismatches
2025-09-25 14:55:03 +02:00
Guido Casati
a7257eaff1 E1 lib: fix inconsistent equality checking patterns in E1AP bearer context management
Replace result &= pattern with consistent early return pattern:
- Fix mixing of logical (&&) and binary (&) operators
- Use consistent 'if (!eq_()) return false;' pattern throughout
- Fix bug in eq_bearer_context_mod_response where drbModA was compared with itself
- Remove unused 'bool result = true;' variables
- Always return true at the end of equality functions

This makes the code more consistent with the rest of the codebase
and provides better error reporting through the existing _E1_EQ_CHECK macros.
2025-09-25 14:55:03 +02:00
rmagueta
2bf7c2500e Simplifying bit shift in the nr_scale_channel() function 2025-09-25 14:50:37 +02:00
francescomani
c88b7bac72 process the remaining elements in scale channel 2025-09-25 14:50:37 +02:00
francescomani
89004ef241 use common scale channel functions for DLSCH and ULSCH 2025-09-25 14:50:35 +02:00
Jaroslava Fiedlerova
5e5f79e993 Merge branch 'integration_2025_w39' into 'develop'
Integration `2025.w39`

* !3582 replace bad DCI by specific message for each case and add checks for bad...
* !3595 Implementing the option to have more than 1 RSRP in CSI report
* !3640 Code cleanup (SRS, config files and more)
* !3654 Extend t300 in multi_ue rfsim testcase
* !3650 NR UE improvements for scheduling ACK/NACK for MSG4
* !3652 In ReconfigurationWithSync, make sure epochTime_r17 present if there is a ntn_Config_r17
* !3653 NR UE: in nr_ue_scheduler.c set LCID_buffer_remain to 0 if RLC indicates not more bytes in buffer
* !3549 Switch to new (internal) registry
* !3513 Improvements to RRC PDU session and DRB handling logic

Closes #995 and #997

See merge request oai/openairinterface5g!3658
2025-09-25 11:08:09 +00:00
Jaroslava Fiedlerova
d10fa9f664 Merge remote-tracking branch 'origin/rrc-pdusession-handling-improvements' into integration_2025_w39 (!3513)
Improvements to RRC PDU session and DRB handling logic

This merge request introduces a major simplification and cleanup of the gNB RRC
PDU Sessions and DRBs handling logic. The core goals of this work are to:

- Replace fixed-size PDU Session, DRBs and QoS arrays with dynamic containers
- Simplify and modularize helper functions for session/DRB management
- Prepare for further refactoring of the PDU Session state machine
- Improve code safety and maintainability through better bounds checking
2025-09-25 10:07:38 +02:00
Laurent THOMAS
912463f752 modulation LUTs size was wrong, and remove inconsistent test of SSE2 enable 2025-09-25 09:29:44 +02:00
Robert Schmidt
252b19cddb Make rftest compile
uniqCfg is in minimal_lib, so not necessary. Remove non-existant struct
members.
2025-09-25 08:51:11 +02:00
Robert Schmidt
b2fce659e8 Fix warning for wrong printf format specifier
common/utils/threadPool/measurement_display.c:55:14 warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘long long unsigned int’ [-Wformat=]
2025-09-25 08:51:11 +02:00
Robert Schmidt
ada7eb8b2a Remove unused/non-compiling test stub 2025-09-25 08:51:11 +02:00
Robert Schmidt
acb6f05a6d Remove include_directories() for non-existing directories 2025-09-25 08:51:11 +02:00
Robert Schmidt
d5bf702f10 Remove CMakeLists.txt author information
Author information can be inferred from git blame.
2025-09-25 08:42:35 +02:00
Robert Schmidt
2d70cec6dd Remove autotools definitions
They do not seem to be used anywhere (I grepped).
2025-09-25 08:42:35 +02:00
Jaroslava Fiedlerova
08812063da Merge remote-tracking branch 'origin/switch-new-registry' into integration_2025_w39 (!3549)
Switch to new (internal) registry

Switch to a bigger registry
2025-09-24 23:31:43 +02:00
Guido Casati
e6d8d6a072 Add tests for RRC radio bearers lib 2025-09-24 16:58:17 +02:00
Guido Casati
c99f836ad4 Refactor DRB release handling to use actual DRB IDs
- Replace simple counter-based DRB ID assignment with actual DRB ID lookup
- Add nested loop to iterate through DRBs for each PDU session to be release
- Improve logic flow with early continue for non-matching PDU sessions

This ensures DRB release list contains correct DRB IDs that correspond to actual DRB entities
2025-09-24 16:58:17 +02:00
Guido Casati
9bf79cd2c9 PDU session release: refactor NGAP PDU Session Release command/response
* There is no IE corresponding to PDU sessions failed to release
  in the PDU SESSION RESOURCE RELEASE RESPONSE message. This was removed
  and the corresponding code was refactored and cleaned up.
* In the Release Command handler, only established PDU Session are set to be
  released. The Response message is filled accordingly.
2025-09-24 16:58:17 +02:00
Guido Casati
6ed08f1527 Refactor DRB and QoS handling: centralize configuration logic
Motivation:
The previous architecture had several issues:
- Duplicate DRB generation logic in generateDRB() and generateDRB_ASN1()
- Embedded SDAP/PDCP configs in drb_t created tight coupling
- No clear separation between RRC internal state and ASN.1 encoding
- Maintenance burden due to duplicated configuration logic

New Architecture:
- drb_t now only stores DRB-specific data (ID, PDU session ID, PDCP config)
- SDAP configuration moved to PDU session level (following PDCP design pattern)
- ASN.1 encoding helpers (nr_rrc_build_*_config_ie()) handle conversion
- Single source of truth for DRB creation in RRC via nr_rrc_add_drb()

Key changes:
- Store nr_sdap_configuration_t per PDU session
- Simplified drb_t structure: removed embedded SDAP/PDCP configs, added pdusession_id
- New helper: nr_rrc_build_sdap_config_ie()
- Updated createDRBlist() to use new helper functions and proper DRB ID lookup
- Refactored trigger_bearer_setup() to use nr_rrc_add_drb() and fill_e1_drb_to_setup()
- Removed generateDRB() and generateDRB_ASN1() functions
- Updated set_bearer_context_pdcp_config() to return config by value
- Added SDAP configuration header file for type definitions

This eliminates code duplication, improves maintainability, and creates
a cleaner separation between RRC state management and ASN.1 encoding.
2025-09-24 16:58:17 +02:00
Guido Casati
50923823c0 Refactor QoS parameter types and consolidate definitions
- Move QoS-related enums and structures from ngap_messages_types.h to 5g_platform_types.h
- Replace ngap_* QoS types with generic qos_* types for better reusability
- Update field names from allocation_retention_priority to arp for consistency
- Update all references across RRC and NGAP modules to use new type names
- Remove duplicate QoS type definitions from NGAP-specific header

This improves code organization by centralizing QoS parameter definitions
in a common platform types header and eliminates NGAP-specific naming
in favor of more generic, reusable type definitions.
2025-09-24 16:58:17 +02:00
Guido Casati
7254e59df9 Introduced MAX_QOS_FLOWS (64) and replaced QOSFLOW_MAX_VALUE
The maximum number of QoS flows is 64.

- Replace QOSFLOW_MAX_VALUE with MAX_QOS_FLOWS constant
- Move MAX_QOS_FLOWS definition to common/platform_constants.h
- Remove duplicate QOSFLOW_MAX_VALUE definition from ngap_messages_types.h

This improves maintainability by centralizing the QoS flow limit constant
and eliminates duplicate definitions across different header files.
2025-09-24 16:57:10 +02:00
Guido Casati
1711b1b4b8 Refactor ASN.1 PDCP configuration building
- Limit scope of get_default_rbconfig function: from asn1_msg.c/.h to rrc_gNB_nsa.c where it's used
- Create new rrc_gNB_asn1.c/h files for ASN.1 utility functions: they can be used in other RRC files
- Add nr_rrc_build_pdcp_config_ie function for building PDCP configuration IEs
- Update get_default_rbconfig to use the new PDCP config builder
- Add rrc_gNB_asn1.c to CMakeLists.txt build configuration
2025-09-24 14:55:52 +02:00
Guido Casati
45d989ec7b Adopt dynamic seq_arr in QoS Flow list (RRC PDU Session) 2025-09-24 14:38:37 +02:00
Guido Casati
7fa0ebb6b9 Adopt dynamic seq_arr in DRB handling (RRC PDU Session)
The previous DRB management relied on a fixed-size array (established_drbs[MAX_DRBS_PER_UE])
and manual status tracking using DRB_ACTIVE/INACTIVE flags. This approach was inefficient,
and made assumptions about DRB ID allocation that do not generalize well
to dynamic procedures like bearer modification or removal.

* Replace fixed-size array established_drbs[] with dynamic
  seq_arr_t *drbs in gNB_RRC_UE_t
* Refactor get_drb() and added nr_rrc_add_drb() with clean abstractions
  using find and seq_arr lib
* Updated all DRB-related logic (e.g., generateDRB,
  F1AP/E1AP tunnel config, reestablishment, mobility) to use seq_arr.
* Removed status field and DRB_ACTIVE/INACTIVE logic: list presence implies active
* DRB ID allocation now tracked via seq_arr size : simplifies DRB management and
  avoids DRB ID–indexed assumptions: code assumed DRB IDs mapped directly to
  array indices: established_drbs[drb_id - 1]. This could break when:
  DRB IDs are not sequential, DRBs are removed and re-added, or there are gaps in IDs
2025-09-24 14:38:37 +02:00
Guido Casati
f15af77297 Cleanup: remove unused cp_pdusession
The function is no longer relevant in the new design.
2025-09-24 14:38:37 +02:00
Guido Casati
5bcc9b9e5e Adopt dynamic seq_arr in PDU Session handling (RRC PDU Session)
The RRC PDU Session struct is converted from a fixed-size array
to a dynamically sized seq_arr. This improves flexibility and
simplifies session management by eliminating arbitrary size limits
and enabling dynamic addition/removal of PDU sessions.

Helper functions and loops have been adapted to use the seq_arr API.
This change is a step toward more robust and maintainable handling
of PDU sessions in the gNB RRC layer.

The "status" state machine remains untouched in this commit and
is refactored in a later commit.

Also:

* add macro to push to seq_arr and return the new element
* move initialization of xid (RRC PDU Session struct) to
  find_pduSession (temporary, will be finalized in a later
  commit) since with the new seq_arr design the initialization
  is no longer possible in the UE context generation (also
  does not belong to it, initialize when adding a new PDU Session)
2025-09-24 14:38:36 +02:00
Guido Casati
e4a910f0bb Refactoring: add utility function to fill NG PDU Session Setup item
* fills from stored setup PDU Session in RRC list
* reduces duplicated code
2025-09-24 14:37:32 +02:00
Guido Casati
bd41e8f883 Refactoring: limit scope of config_pdcp to config module 2025-09-24 14:37:32 +02:00
Guido Casati
ae1de1aeaa Refactoring: fix inconsistency in nr_sdap_delete_entity
The function was printing a "not found" error message even in the case
the return value was set to "true". Return directly true/false.

This is relevant in PDU Session Release procedures.
2025-09-24 14:37:32 +02:00
Guido Casati
42a9f2f08f Enable multiple PDU Sessions in handover request logic
- Process all PDU sessions in handover request instead of only the first one
- Add DevAssert for bounds checking on nb_of_pdusessions
- Fix logic error where multiple PDU sessions were ignored in handover scenarios
2025-09-24 14:37:32 +02:00
Guido Casati
9a4fd1bf76 Cleanup handover required transfer IE
Previously, the RRC layer was incorrectly allocating stack memory for the ho_required_transfer field and passing it to NGAP, however it was not used. The IE is mandatory but contains only 1 optional IE, therefore is encoded in the NG message with empty content.

Changes:
- Remove unnecessary ho_required_transfer field from pdusession_resource_t definition, the IE is encoded anyway with empty content. If Direct Forwarding Path Availability is needed at any stage in the future it can be added to pdusession_resource_t and filled in RRC.
- Add clarifying comment about empty HandoverRequiredTransfer structure
2025-09-24 14:37:29 +02:00
Guido Casati
609700207f Fix handover required: set pdusession_id in pdu_info structure for consistency 2025-09-24 14:07:31 +02:00
francescomani
24ac0b5602 move nr_rrc_ue_process_masterCellGroup before usage 2025-09-24 10:31:40 +02:00
francescomani
faf230612b move nr_rrc_ue_process_ueCapabilityEnquiry before usage 2025-09-24 10:30:08 +02:00
francescomani
a49d496b63 move process_lte_nsa_msg before usage 2025-09-24 10:27:44 +02:00
francescomani
6009b06101 move nr_rrc_ue_process_measConfig (and its functions) before usage 2025-09-24 10:23:37 +02:00
francescomani
fc8854a040 move nr_rrc_ue_generate_rrcReestablishmentComplete before its usage 2025-09-24 10:19:51 +02:00
francescomani
719ae673a3 move nr_rrc_ue_process_RadioBearerConfig before its usage 2025-09-24 10:18:34 +02:00
francescomani
1ee2298a88 remove unnecessary declaration of nr_rrc_manage_rlc_bearers 2025-09-24 10:15:17 +02:00
Jaroslava Fiedlerova
7907b80a35 Merge remote-tracking branch 'origin/fix_wrong_nrue_bsr' into integration_2025_w39 (!3653)
NR UE: in nr_ue_scheduler.c set LCID_buffer_remain to 0 if RLC indicates not
more bytes in buffer

If the RLC indicates that there is no more data in the buffer, also the
scheduler's LCID_buffer_remain should be set to 0. Else the UE sends BSR
indicating it has data to be transmitted. The gNB would then unnecessarily
schedule UL for this UE, which would not be used, as there is no actual data
to be transmitted.
2025-09-24 09:38:18 +02:00
Jaroslava Fiedlerova
8885d3912a Merge remote-tracking branch 'origin/fix_issue_995' into integration_2025_w39 (!3652)
In ReconfigurationWithSync, make sure epochTime_r17 present if there is a ntn_Config_r17

Fixes #995
2025-09-24 09:35:53 +02:00
Guido Casati
69f0bb2b96 Fix PDU session counter overflow issues: max number of PDU Sessions is 256
- Upgrade PDU session counters from uint8_t to uint16_t in ngap_messages_types.h

Co-authored-by: Assistant <assistant@example.com>
2025-09-23 23:13:24 +02:00
Robert Schmidt
7e1eabe700 Switch to new (internal) registry 2025-09-23 17:43:38 +02:00
francescomani
7e01d5a0e0 Merge remote-tracking branch 'origin/NR_UE_PUCCH_scheduling_improvements' into integration_2025_w39 2025-09-23 14:47:38 +02:00
Thomas Schlichter
ccad50daca NR UE: do not consider suspended logical channels in nr_update_bsr()
While a logical channel is suspended, we should not consider it in the BSR,
as we cannot transmit any data from it.
2025-09-23 11:17:44 +02:00
Jaroslava Fiedlerova
25f2f1fe46 Merge remote-tracking branch 'origin/t300-mutliue' into integration_2025_w39 (!3654)
Extend t300 in multi_ue rfsim testcase

Extend t300 to 1000 to increase the time the gNB has to handle MSG3. Hopefully
this prevents the UEs from timing out after MSG3. Add UE id to timer timeout
LOGs so the UE behavior can be traced through the stack.
2025-09-23 10:48:46 +02:00
francescomani
966bab9cca do not assert for mismatched TBS in phy-test mode 2025-09-23 10:39:37 +02:00
Jaroslava Fiedlerova
e6da57e2b6 Merge remote-tracking branch 'origin/some_cleanup' into integration_2025_w39 (!3640)
Code cleanup (SRS, config files and more)

- Remove deprecated elements from some configuration files (also closes #997)
- Improve SRS code with a better separation between common code and gNB/UE code
- Other minor compilation improvements
2025-09-23 10:00:57 +02:00
Jaroslava Fiedlerova
98948586c2 Merge remote-tracking branch 'origin/more_than_1_rsrp_report' into integration_2025_w39 (!3595)
Implementing the option to have more than 1 RSRP in CSI report

In collaboration with NI/Emerson.

The standard allows up to 4 RSRP measurements in CSI report (1 full and the other
differential). In current OAI, we just configure 1 RSRP report for the strongest
SSB. This MR allows to configure at gNB more than 1 RSRP report (depending on
config file, number of SSBs and UE capabilities) and makes changes at the UE to
send this report.
2025-09-23 09:58:35 +02:00
Jaroslava Fiedlerova
75c8e96142 Merge remote-tracking branch 'origin/fix-lte-ue-bad-dci' into integration_2025_w39 (!3582)
replace bad DCI by specific message for each case and add checks for bad...

Replace bad DCI by specific message for each case and add checks for bad
pointers, or sanitize detected warnings. Then fix several issues in DCI
decoding. With this MR, LTE UE has less bad DCI, and each bad DCI has a
reason better diagnosis.
2025-09-23 09:55:31 +02:00
Guido Casati
7083e08175 Fix variable shadowing in E1 bearer context setup
- Changed inner loop variable from 'i' to 'j' in rrc_gNB_process_e1_bearer_context_setup_resp
- Eliminates variable shadowing between outer PDU session loop and inner DRB loop
- Improves code readability and prevents potential bugs
2025-09-22 22:46:14 +02:00
Laurent THOMAS
06914f3dde improve dci rejection test: system DCIs are tackled only if we expect system DCIs 2025-09-22 19:12:24 +02:00
Laurent THOMAS
311a857cb3 move a bad global var in a better place 2025-09-22 19:12:24 +02:00
Laurent THOMAS
a71a813a7c replace bad DCI by specific message for each case and add checks for bad pointers, or sanitize detected warnings 2025-09-22 19:12:24 +02:00
Bartosz Podrygajlo
d38ce7c1c9 Extend t300 in multi_ue rfsim testcase
Extend t300 to 1000 to increase the time the gNB has to handle MSG3.
Hopefully this prevents the UEs from timing out after MSG3.
2025-09-22 12:04:54 +02:00
Bartosz Podrygajlo
a43fbe1bac NR UE: Add UE id to RRC timer timeout LOGs 2025-09-22 12:04:50 +02:00
Thomas Schlichter
5c16758386 gNB: when creating a ReconfigurationWithSync, make sure epochTime_r17 is present if there is a ntn_Config_r17
Fixes #995
2025-09-22 11:06:16 +02:00
Thomas Schlichter
272be719dd NR UE: in nr_ue_scheduler.c set LCID_buffer_remain to 0 if RLC indicates not more bytes in buffer
If the RLC indicates that there is no more data in the buffer, also the scheduler's
LCID_buffer_remain should be set to 0. Else the UE sends BSR indicating it has data
to be transmitted. The gNB would then unnecessarily schedule UL for this UE, which
would not be used, as there is no actual data to be transmitted.
2025-09-19 12:11:58 +02:00
francescomani
ca7fadfe07 improved logs to evaluate RSRP report 2025-09-19 11:07:28 +02:00
Jan Fromme
df9c41f364 Accumulate SSB indices in the SINR payload instead of overwriting the payload 2025-09-19 09:29:58 +02:00
Jan Fromme
5903806d2e enabled transmission of up to 4 RSRP measurement reports from UE to gNB 2025-09-19 09:29:56 +02:00
Jan Fromme
b462fa45e8 Fix RSRP report unpacking logic in gNB scheduler UCI
Correctly handle unpacking of the first RSRP report and its resource ID before processing additional reports.
Use the initial RSRP value as the reference for differential RSRP calculations in subsequent reports.
2025-09-19 09:18:30 +02:00
francescomani
e5ea77f629 separate UE fapi message for SSB measurements 2025-09-19 09:18:28 +02:00
francescomani
fc4bd2e20c RRC configuration for more than 1 reported RS
option via configuration file to limit the number of reports to be configured
2025-09-19 08:38:47 +02:00
Robert Schmidt
32c81b7b06 Merge branch 'integration_2025_w38' into 'develop'
Integration: `2025.w38`

Closes #954

See merge request oai/openairinterface5g!3646

* !3639 Fix error ind unpack
* !3643 Fix memory allocation issue in KPM RAN function sd parameter handling
* !3568 Fix UE DCI monitoring after RRC setup
* !3642 Check command line for unknown options also at gNB
* !3647 Add nr-cuup to run_locally.sh
* !3596 L3 measurements and measReport A2
* !3648 fix MSG3 with C-RNTI failure
* !3649 CI: build images on Jetson (armv8)
* !3334 N2 Handover
2025-09-18 16:39:39 +00:00
Robert Schmidt
84c51802da CI RFsim test N2: remove RFsim config in CU-CP 2025-09-18 18:12:58 +02:00
francescomani
52af5e5642 preventing UE to schedule SR on PUCCH in the same slot when MSG4 ACK is sent 2025-09-18 17:30:13 +02:00
francescomani
e82bb5cb6d remove unnecessary printf in dlsim 2025-09-18 14:58:03 +02:00
francescomani
614b6a0eef remove unnecessary srs_modulation files and move what's left into UE phy_procedures 2025-09-18 14:57:58 +02:00
francescomani
740e9c5c9c move common SRS functions to common folder 2025-09-18 14:55:19 +02:00
francescomani
607d8a0bc2 simplify compute_n_b and compute_F_b functions by using common structure 2025-09-18 14:55:19 +02:00
francescomani
b03d8abd03 use common structure to store SRS information for common function (also avoid bad cast) 2025-09-18 14:55:16 +02:00
Robert Schmidt
870b25e95d Fix: define_property() needs FULL_DOCS
define_property() has optional FULL_DOCS in cmake 3.23+, but before it's
required. I did not notice when adding this.
2025-09-18 14:54:39 +02:00
francescomani
c9756c26ec move PUCCH common tables to PHY common file 2025-09-18 12:33:49 +02:00
francescomani
8051b5d14a remove a couple of unnecessary include 2025-09-18 12:33:49 +02:00
francescomani
38995aff5d config files further cleanup 2025-09-18 12:33:40 +02:00
francescomani
47554f89ce fix switch to initial UL BWP if no PRACH common configuration in current BWP 2025-09-18 11:57:57 +02:00
francescomani
72bfd1b5c3 switch to initial BWP if current BWP has no PRACH in gNB 2025-09-18 11:57:54 +02:00
Robert Schmidt
7227cfb320 Merge remote-tracking branch 'origin/n2-handover' into integration_2025_w38 (!3334)
N2 handover

This MR introduces full support for N2 handover, covering handover
decision, preparation, execution, and notification between source and
target NG-RAN nodes.

Key features:

1. Handover Decision & Preparation:
  - Implement N2 handover decision based on UE measurement reports.
  - Generate the Handover Preparation Information message, including
    RRCReconfiguration.
  - Send Handover Required message from the source NG-RAN to the AMF.
2. Handover Execution:
  - Decode and handle the Handover Request on the target NG-RAN.
  - Process the Handover Command on the source gNB, triggering
    RRCReconfiguration.
  - Initiate Handover Notify after successful completion.
3 NGAP & RRC Enhancements:
  - Implement NGAP encoding/decoding functions for Handover Required,
    Handover Request, Handover Command, Handover Failure, and Handover
    Notify (3GPP TS 38.413).
  - Adds NG-RAN Status Transfer support (UL/DL) for PDCP COUNT
    preservation during mobility:
    - support for NGAP Uplink and Downlink RAN Status Transfer messages
      (TS 38.413 §9.2.3.13-14) to enable proper PDCP COUNT value
      transfer during handover or recovery: NGAP encoding/decoding for
      RAN Status Transfer, PDCP helpers to extract and apply COUNT (HFN
      + SN) per DRB. This aligns with TS 38.300 §9.2.3.2.1 and TS 23.502
      §4.9.1.3.3, ensuring PDCP status preservation in AM.
4. Testing:
  - Introduce a Telnet command to manually trigger N2 handover using UE
    ID and neighbor PCI.
  - Add configuration file for testing N2 handover with a target gNB.
2025-09-18 11:57:44 +02:00
Guido Casati
f9f6e96d6b Add N2 handover documentation 2025-09-18 11:54:19 +02:00
Robert Schmidt
ef5191b610 Merge remote-tracking branch 'origin/ci-build-jetson' into integration_2025_w38 (!3649)
CI: build images on Jetson (armv8)

Add a new build pipeline for NVIDIA Jetson (armv8). Images have tag
prefix armv8_ to distinguish from gracehopper-built images prefixed arm_
(should have maybe been better with armv9_?)
2025-09-18 11:51:41 +02:00
Robert Schmidt
8927032fd2 Merge remote-tracking branch 'origin/fix_UE_msg3_crnti_fail' into integration_2025_w38 (!3648)
fix MSG3 with C-RNTI failure

When RA procedure with MSG3 carrying C-RNTI fails we shouldn't send an
indication to RRC because it is a L2 procedure
2025-09-18 11:51:12 +02:00
Guido Casati
85f586c76d Add N2 Handover Cancel (8.4.5 of 3GPP TS 38.413)
This commit completes the NGAP Mobility Management procedure for N2 handover.
Upon failure on source gNB the Handover Cancel message is sent to the AMF which
in return responds with an ack.
2025-09-18 11:34:31 +02:00
Guido Casati
4facb4d635 target-CU-CP: Transfer PDCP Count to target-CU-UP
Upon reception of NG RAN Status at the target CU-CP, send PDCP Status
via E1 Bearer Context Modification to the target CU-UP and update PDCP Count
upon reception of the message.

For the sake of simplicity, re-used and extended legacy e1_send_bearer_updates.
Further refactoring is not addressed in this commit.
2025-09-18 11:34:31 +02:00
Guido Casati
a82353f42a target-CU-CP: Add RRC handler NG DL RAN Status Transfer 2025-09-18 11:34:31 +02:00
Guido Casati
badb0c561a source-CU-CP: trigger UL NG RAN Status Transfer upon reception of PDCP Status in E1 Bearer Context Modification Response
Once fetched the PDCP Status from the PDCP entity over E1, the CU-CP triggers
the NG RAN Status Transfer procedure to transfer the PDCP Status to the target
CU.

This commit is also introducing the RRC callback.
2025-09-18 11:34:31 +02:00
Guido Casati
44e4ebc4e2 source-CU-UP: fill PDCP Status in response upon reception of E1 Bearer Context Modification Request
* Check presence of PDCP Status Requested in Bearer Context Modification Request
* Fetch PDCP Status from PDCP entity and fill in the Bearer Context Modification Response
2025-09-18 11:34:31 +02:00
Guido Casati
fc5e3ce61d source-CU-CP: trigger E1 PDCP Status Request in UE Context Modification Response handler
The E1 Bearer Context Modification Request shall send a PDCP Status Request IE
during handover, e.g. the HO context is set to source, and it is not target, i.e.
only in N2 not in F1.

The current function "e1_send_bearer_updates" used to fill the E1 Request has been
refactored only for the sake of this commit and to avoid duplicated and redundant code.
The function itself deeper analysis and eventually a refactoring that will not be addressed
in this commit.
2025-09-18 11:34:31 +02:00
Guido Casati
e96d7f9576 Add PDCP API getter and setter for PDCP count values in PDCP entity
* Introduced nr_pdcp_count_update() to apply COUNT values to the PDCP entity:
  - Computes tx_next, rx_next, and rx_deliv from HFN+SN
  - Handles both 12-bit and 18-bit SN modes with dynamic bitmask
* Introduced nr_pdcp_get_drb_count_values() to extract PDCP COUNT values from entity:
  - Used for building UL RAN Status Transfer on source CU side
2025-09-18 11:34:31 +02:00
Guido Casati
e527b99de1 PDCP Status Information: add enc/dec/cp/eq and test to E1AP lib
Also:
* remove unused oldQosFlows IEs
* adopt new enc/dec functions
* fix missing return in eq_bearer_context_mod_response
2025-09-18 11:34:31 +02:00
Guido Casati
bc9c59f186 Add NGAP RAN Status Transfer enc/dec and handlers (UL and DL)
According to 4.9.1.3.3 of 3GPP TS 23.502:

> 2a. - 2c. The S-RAN sends the Uplink RAN Status Transfer message to the S-AMF,
> as specified in TS 36.300 [46] and TS 38.300 [9]. The S-RAN may omit sending
> this message if none of the radio bearers of the UE shall be treated with PDCP status preservation.

TS 38.300 says:
> For DRBs not configured with DAPS, the source gNB sends the SN STATUS TRANSFER message to the target
> gNB to convey the uplink PDCP SN receiver status and the downlink PDCP SN transmitter status of DRBs for
> which PDCP status preservation applies (i.e. for RLC AM). The uplink PDCP SN receiver status includes at
> least the PDCP SN of the first missing UL PDCP SDU and may include a bit map of the receive status of the out
> of sequence UL PDCP SDUs that the UE needs to retransmit in the target cell, if any. The downlink PDCP SN
> transmitter status indicates the next PDCP SN that the target gNB shall assign to new PDCP SDUs, not having a
> PDCP SN yet.

i.e., for DRBs for which PDCP status preservation applies (i.e. for RLC AM), which is is our case.

This commit introduces full support for NG-RAN Status Transfer message handling
(TS 38.413 §9.2.3.13-14) in CU. It enables correct state transfer of PDCP COUNT
values (SN + HFN) during mobility or recovery scenarios.

Summary of changes - NGAP:
* Added encoding/decoding support for UL/DL RAN Status Transfer message
* Defined structures for: ngap_drb_count_value_t, ngap_drb_status_t,
  ngap_ran_status_container_t, ngap_ran_status_transfer_t
2025-09-18 11:34:31 +02:00
Guido Casati
1015c1f5f0 Add new CI pipeline for N2 Handover
The pipeline is using the already existing conf files
for the source/target gNB CUs/DUs.

For the sake of simplicity, neighbour-config.conf has
been rewritten and simplified in this commit, then
adopted in this pipeline. The file was not used before.
2025-09-18 11:34:31 +02:00
Guido Casati
5227becf89 Add telnet trigger for N2 handover
* the command gets in input the neighbour PCI and the UE ID
* the telnet ci function to retrieve the UE context was extended in the process
* add function to trigger handover on the same gNB for testing purposes

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:31 +02:00
Guido Casati
cb68d817f0 OAI UE: introduce AS security key update procedure (5.3.5.7 3GPP TS 38.331)
* trigger upon reception of MasterKeyUpdate
* derive NH, store NH NCC and valid NH key in RRC
* masterKeyUpdate: derive enc/int keys after master key update
  and set PDCP security for SRB1
* call nr_rrc_process_reconfiguration_v1530 before nr_rrc_ue_process_RadioBearerConfig
  and move dedicatedNAS_MessageList processing at the end of the flow. The sequence
  shall be (1) keys/security update (2) radioBearerConfig processing, with PDCP entity
  creation, PDCP reestablishment, SDAP entity creation (3) NAS PDUs processing, which
  triggers PDU Session Establishment Accept, which sets up the TUN interface.
  SDAP entity is a pre-requisite, therefore the radioBearerConfig has to be processed
  (in nr_rrc_ue_process_RadioBearerConfig, add_drb) early enough, or it may cause a
  race condition in SDAP.
2025-09-18 11:34:31 +02:00
Guido Casati
984c0bff0f Send NG HO failure message upon nr_rrc_n2_ho_acknowledge failure 2025-09-18 11:34:30 +02:00
Guido Casati
28f926607e Add N2 HO trigger on Bearer Context Setup Response (target NG-RAN)
* add trigger function to (1) add the callbacks and (2) initiate
  handover on the target NG-RAN
* add handover failure callback on target NG-RAN: the Handover
  Failure is a procedure that belongs to the target NG-RAN and
  it is different from the Handover Cancel procedure

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
e611d092e9 Add NGAP Handover Notify encoder and trigger on the target NG-RAN
This commit introduces the NG Mobility Management Procedure known as
Handover Notification. The outbound message is sent by the target NG-RAN
and is known as Handover Notify. The procedure is used to indicate to
the AMF that the UE has arrived to the target cell and the NG-based
handover has been successfully completed

* after RRCReconfiguration complete, in the N2 callback for HO success
* add NGAP encoder for the message
* RRC callback to trigger Handover Notify message

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
f66524879d Add NGAP Handover Command decoder and RRC handler on source gNB
* add NG Handover Command message decoder
* process in RRC: encode RRCReconfiguration message
  from the received HandoverCommandMessage
* trigger RRCReconfiguration for handover

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
6fd02ee7e8 Handle N2 handover in UE Context Setup Response on the target NG-RAN
* generate Handover Command for the source NG-RAN
  to be added to the target to source transparent
  container of the Handover Acknowledge message
* add Handover Acknowledge callback for N2
* send NG Handover Acknowledge to AMF

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
fa75484e13 Add NGAP Handover Request Acknowledge encoder and RRC callback
This commit completes the NG Mobility Management Procedure known as
Handover Resource Allocation. The outbound message is sent by the
target NG-RAN and is known as Handover Request Acknowledge.

Major changes:

* add RRC callback to trigger the generation of NG Handover
  Request Acknowledge on the target NG-RAN
* add NG Handover Request Acknowledge encoder

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
461cfb7911 Add NGAP Handover Request decoding and RRC handler
This commit introduces the NG Mobility Management Procedure known as
Handover Resource Allocation. The inbound message is sent by the AMF
and is known as Handover Request.

Major changes:

(0) Add Handover Resource Allocation initiating message decoding
    * add case for NGAP initiating message and unsuccessful message decoding
(1) handle Handover Request on the target NG-RAN
(2) decode NG Handover Request message
(3) process payload, e.g. create UE context,
    store IDs, set UP security and trigger bearer setup

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
92abefb815 Add NGAP Handover Failure message
This message is sent from the Target NG-RAN to the AMF.

The commit introduces:
* NGAP encoding function
* N2 callback for the target gNB
* handle the failure in RRC, inform NGAP
* send NGAP message to AMF via SCTP

Note: UE context in NGAP is fetched from the amf_ue_ngap_id

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
6e4f1b7b31 Add N2 Handover decision and trigger preparation on source CU
(1) add N2 ho decision based on measurements
(2) add trigger for N2 HO on source CU
(3) generate NG Handover Preparation Information message,
    including RRCReconfiguration, to be passed to the
    NG Handover Required message
(4) call RRC callback for Handover Required message

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
20e534d483 Add NGAP Handover Required message NGAP encoder and RRC callback on source NG-RAN
This commit introduces the NG Mobility Management Procedure known as
Handover Preparation. The outbound message is sent by the source NG-RAN
and is known as Handover Required.

* introduce NGAP library for Mobility Management
* introduce NGAP IEs encoder functions for Handover Required and relevant common IEs
* handle RRC trigger in NGAP and Send NGAP Handover Required to the AMF

Co-authored-by: batuhan duyuler <batuhan.duyuler@firecell.io>
2025-09-18 11:34:30 +02:00
Guido Casati
cfb654e77f HO Preparation: add alloc_ho_ctx to rrc_gNB_mobility lib 2025-09-18 11:34:30 +02:00
Guido Casati
ff5b2bc8b2 HO Preparation: print neighbour cell configuration 2025-09-18 11:34:30 +02:00
Guido Casati
2f4f177050 HO Preparation: allocate HO Context in the F1 trigger rather than nr_initiate_handover
During the N2 HO review has been found that the HO context
was not allocated at trigger time but later in the flow. This
might lead to issues in some scenarios (e.g. in N2 HO)
and it was fixed in this commit.
2025-09-18 11:34:30 +02:00
Guido Casati
26698d4f07 HO Preparation: do verify_section_notset of neighbour and measurement config for DU
During the review of N2 HO MR it has been found that there was no
check on the absence of the neighbour and measurement section in the DU config file.
2025-09-18 11:34:30 +02:00
Robert Schmidt
25380e8075 Add transm_timout timer to set UE to UL failure after timeout
Introduce a new timer for the use case where a UE should not be
scheduled anymore after a certain time. This is the case, for instance,
during handover, where the "source DU" forwards the RRCReconfiguration
and should stop scheduling this UE after some time.

Originally, transm_interrupt was introduced in 5c6d90aaff ("Use
NR_timer_t for UE transmission interrupt, e.g., RRC processing") to stop
scheduling a UE.

Commit 004403c84d ("Implement F1 UE Ctxt Modif Transmission Action
Indicator") reused this timer in an attempt to save code with an
"interrupt follow action".

In commit 89ebbb4192 ("Do not trigger ul failure in measgap scheduling
and standardize the verification if MAC is active in other scheduling
functions"), the transm_interrupt timer is used to not schedule a UE
through function nr_mac_ue_is_active(). This led to the UE not being
forwarded the RRCReconfiguration, effectively breaking handover, as the
message never reaches the UE. By using a new timer, the intended
functionality is restored.

Fixes: 89ebbb4192 ("Do not trigger ul failure in measgap scheduling
    and standardize the verification if MAC is active in other
    scheduling functions")
2025-09-18 11:34:30 +02:00
Robert Schmidt
98462c20ba Remove interrupt_action
Remove this flag, as it is not used as of this commit, and introduces
confusion (see next commit: we reused the trans_interrupt timer for
the transmission action indicator stop action, where the UE should stay
active, while it is *not* when transm_interrupt is active).
2025-09-18 11:34:30 +02:00
Robert Schmidt
7a02456883 Merge remote-tracking branch 'origin/meas-report-A2' into integration_2025_w38 (!3596)
L3 measurements and measReport A2

- Implementation of L3 measurements for active cell
- UE sends the measurement report for event A2
2025-09-18 09:38:39 +02:00
Robert Schmidt
8c78ef5b94 Correct Ubuntu version (to generic "Ubuntu") 2025-09-18 09:13:44 +02:00
Robert Schmidt
a1175f7f61 Add documentation for Jetson build pipeline 2025-09-18 09:13:44 +02:00
francescomani
95dfb67e51 fix MSG3 with C-RNTI failure 2025-09-18 08:50:55 +02:00
Robert Schmidt
44729d5765 Add Jetson build pipeline to RAN-Container-Parent 2025-09-17 17:24:41 +02:00
Robert Schmidt
8045dc71e0 XML description for build on Jetson (ARMv8) 2025-09-17 15:26:34 +02:00
Robert Schmidt
1ea90fc987 Rename to native_armv9 image build type
For clarity, rename to native_armv9 for clarity. The check inside Python
checked for native_arm, and if we introduce native_armv8 (for jetson),
it would also match that.
2025-09-17 15:24:12 +02:00
Jaroslava Fiedlerova
f691b7f9e4 Merge remote-tracking branch 'origin/fix-run-local-ci' into integration_2025_w38 (!3647)
Add nr-cuup to run_locally.sh

E1 deploy wasn't enable in the run_locally.sh script to run the CI on a local
machine. This MR is adding it. It was validated locally.
2025-09-17 14:56:45 +02:00
Jaroslava Fiedlerova
e5413dcb2d Merge remote-tracking branch 'origin/issue993' into integration_2025_w38 (!3642)
Check command line for unknown options also at gNB
2025-09-17 10:16:43 +02:00
Jaroslava Fiedlerova
44fa1c2244 Merge remote-tracking branch 'origin/issue-954-fix' into integration_2025_w38 (!3568)
Fix UE DCI monitoring after RRC setup

After the UE is configured with pdcch-Config, it continues to monitor
fallback search spaces in pdcch-ConfigCommon for DCI with C-RNTI.

The rational is that after sending RRC Setup the network won't know if
the UE has received and successfully applied it. Hence the network would
still continue to use the fallback DCI till it receives RRC setup
complete.

Closes #954
2025-09-17 10:14:57 +02:00
Guido Casati
2aa496bae7 Add nr-cuup to run_locally.sh 2025-09-16 15:34:53 +02:00
Jaroslava Fiedlerova
a9a554508d Merge remote-tracking branch 'origin/kpm-ran-func-segfault' into integration_2025_w38 (!3643)
Fix memory allocation issue in KPM RAN function sd parameter handling

This fixes a segmentation fault in the gNB when a KPM xApp sends the sd
parameter in the subscription message.

The segmentation fault seems to occur because *sd is uninitialized when
malloc(**sd) is called. This causes a double dereference of an uninitialized
pointer - **sd reads a random memory value which becomes the size parameter
for malloc(), leading to unpredictable memory allocation and segfaults.

This fix allocates the size using malloc(sizeof(uint32_t)) instead of
dereferencing the uninitialized pointer.
2025-09-16 12:58:55 +02:00
Jaroslava Fiedlerova
2a8b89a451 Merge remote-tracking branch 'origin/fix_error_ind_unpack' into integration_2025_w38 (!3639)
Fix error ind unpack

This MR fixes an issue in which the unpacking is erroneously deemed unsuccessful
even though it succeed in pulling all the bytes, this was due to not properly
handling the return value of pull16 which is either 0 or 2, not 0 or 1.

Additionally, this MR adds the Aerial specific expected error codes, as
described here:
https://docs.nvidia.com/aerial/archive/aerial-sdk/23-3/text/cubb_release_notes/scf_fapi_support.html#additional-aerial-specific-error-codes-reported-in-error-indication-from-l1-to-l2
2025-09-16 12:55:21 +02:00
alexjiao
2c369a8299 Handle reportAmount and reportInterval in reportConfigNR 2025-09-16 10:37:13 +01:00
rmagueta
3e65d75f83 UE sends the measurement report for event A2 2025-09-16 10:35:26 +01:00
rmagueta
8d6bb6bf20 Definition of L1 and implementation of L3 measurements for serving cell 2025-09-16 10:32:33 +01:00
francescomani
a76f7a8c62 remove rfsim option from CU in F1 docker 2025-09-16 11:21:04 +02:00
francescomani
e99cf956e7 remove --sa option from newly created handover test 2025-09-16 10:25:04 +02:00
francescomani
fd791568ff change RUNMODEM documentation to reflect --sa not being optional anymore 2025-09-16 10:22:05 +02:00
francescomani
b8683dd351 check command line for unknown options at gNB 2025-09-16 10:22:05 +02:00
francescomani
93f5f65806 remove --sa command line option from sa_fhi_7.2_metanoia_2x2_gnb docker compose 2025-09-16 10:22:05 +02:00
francescomani
e0b5880db7 cleanup NR_UL_UE_HARQ_t 2025-09-16 09:25:00 +02:00
Sakthivel Velumani
524aa84e96 fix: issue 954 - DCI monitoring after RRC setup
After the UE is configured with pdcch-Config, it continues to monitor
fallback search spaces in pdcch-ConfigCommon for DCI with C-RNTI.

The rational is that after sending RRC Setup the network won't know if
the UE has received and successfully applied it. Hence the network would
still continue to use the fallback DCI till it receives RRC setup
complete.
2025-09-15 15:47:13 -04:00
Rúben Soares Silva
6ff098e0bd Add Aerial-specific ERROR.indication codes
This adds the expectable error codes from Aerial L1, as described in https://docs.nvidia.com/aerial/archive/aerial-sdk/23-3/text/cubb_release_notes/scf_fapi_support.html#additional-aerial-specific-error-codes-reported-in-error-indication-from-l1-to-l2
The errors are added in such a way that they're only visible when compiled with Aerial
2025-09-15 14:54:45 +01:00
Rúben Soares Silva
0a796ebb6c Fix ERROR.indication unpack function
Fix an issue in which the unpacking is erroneously deemed unsuccessful even though it succeed in pulling all the bytes, this was due to not properly handling the return value of pull16 which is either 0 or 2, not 0 or 1.
Check the results of push and pull operation with correct boolean operator.
2025-09-15 14:54:44 +01:00
Guido Casati
956d30f4e1 HO preparation: fix PLMN type in nr_neighbour_cell_t
During the review of the N2 HO MR it has been found that the wrong type
plmn_identity_t (S1AP) was used in RRC. Now updated to the platform type plmn_id_t.
2025-09-15 10:08:49 +02:00
Guido Casati
9f97320cbe HO Preparation: calloc pdcp_config in DRB to Modify Item decoding
The malloced struct is initialized to garbage and when
the IE is absent, the output "PDCP reestablishment"
member (allocated in the stack) is set to a random value.
2025-09-15 10:03:11 +02:00
Robert Schmidt
206c7667e6 Merge branch 'integration_2025_w37' into 'develop'
Integration: `2025.w37`

* !3514 NR UE: add support for PDSCH rate matching with NZP CSI-RS
* !3630 feat(ldpc_aal): Do not try EAL init if FHI 7.2 is enabled
* !3634 reset MSG3 C-RNTI flag in case of failure
* !3566 fix 600 cppcheck notifications
* !3633 Fix PLMN print in select_amf
* !3631 Revert "Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02)"
* !3622 Populate sampled_ue_antennas
* !3601 gNB: adaptive DL/UL MCS based on reported SSB-SINR and measured PUSCH SNR
* !3637 fix bug in computing number of LCG IDs with data at UE
* !3635 Fixes and updates for UL scheduling, notably DSUUU
* !3607 Reworking BWP configuration
* !3531 Refactor measConfig
* !3612 CI: Creation of F1 Handover pipeline
* !3611 CI: Generalize PhySim tests, run PhySims on Gracehopper

Closes #985 and #975

See merge request oai/openairinterface5g!3636
2025-09-12 16:51:15 +00:00
Robert Schmidt
166589c2ef Add bands for neighbour configuration in HO CI pipeline
Since !3531, the band is mandatory in a neighbour configuration.

See also: fd4de3c720 ("Add support for band in neighbourConfiguration")
2025-09-12 18:47:12 +02:00
Leonardo Bonati
40fd22e26a Fix memory allocation issue in KPM RAN function sd parameter handling 2025-09-12 10:43:34 -04:00
Robert Schmidt
e486557f63 Merge remote-tracking branch 'origin/physim-gracehopper' into integration_2025_w37 (!3611)
CI: Generalize PhySim tests, run PhySims on Gracehopper

This changeset generalizes/harmonizes the CI infrastructure for physim
testing, and adds a new pipeline for physim tests on Gracehopper
machines.

Specifically:

- Refactor the existing CI code for running and analyzing physical
  simulators. The existing code assumed those tests are deployed using
  OpenShift. Instead, OpenShift/Helm-specificities (e.g., running a
  "release") have been removed, and instead of hardcoding the deployment
  of the physical simulators using a script for Helm, the function takes
  any script that can deploy using Helm/docker/from source. The overall
  appearance is the same.
- Add a new pipeline RAN-PhySim-GraceHopper-5G that executes physical
  simulators on gracehopper. Reporting is done in the same way as for
  existing physical simulators (e.g., like in the RAN-PhySim-Cluster-5G
  pipeline), but deployed in docker instead of helm.
  -> some tests don't work reliably on ARM yet and are skipped
- the RAN-gNB-N300-Timing-Phytest-LDPC pipeline has been reworked to use
  the same code for testing T2 offload, with ctest, and the same
  reporting.
- the CUDA LDPC test XML has been removed, as these tests don't work
  reliably.
- add a new macro add_timed_physim_test() that allows to define
  thresholds to be checked, so that ctest will check for them. see the
  documentation for more information
2025-09-12 15:57:51 +02:00
Robert Schmidt
230a969be4 Merge remote-tracking branch 'origin/CI-HO-setup' into integration_2025_w37 (!3612)
CI: Creation of F1 Handover pipeline

In this MR we are modifying/adding all the required files (.xml, .conf,
.yml) in order to create a pipeline on Jenkins that allows us to test
OTA F1 handover.
2025-09-12 15:56:34 +02:00
Robert Schmidt
8ca1d0d38d Doc: Add PhySim-Gracehopper and update existing PhySim-Cluster 2025-09-12 15:01:09 +02:00
Robert Schmidt
31aaa4ed3f Add PhySim-GraceHopper-5G to test pipelines 2025-09-12 14:54:49 +02:00
Robert Schmidt
998018db50 Slight restructuring of the physim doc
Move info about pipelines to the introduction instead of somewhere in
the middle. Add some filler text, and fix indentation headings.
2025-09-12 14:54:49 +02:00
Robert Schmidt
5beb8bf314 Print results of physims
Remove the runtime, which is not interesting, and add instead
- test name and if the test failed
- the threshold checks, if any, and
- possible additional information about test failures.
2025-09-12 14:54:49 +02:00
Robert Schmidt
eb9e4ef9ba Pass CTest test description in custom property or environment
Prior to this change, each test would have, as label, it's description.
This leads to many labels, which are normally reserved for grouping
tests. Move the description into a custom property instead.

Since we rely on the JSON output for the generation of HTML reports, we
need to also extract the description from the generated JSON. However,
custom properties are only logged starting from cmake 3.30. For
back-wards compatibility, write an additional, separate environment
variable TEST_DESCRIPTION from which the description can be read as a
fallback.

For the add_timed_physim_test(), this has been already done in a parent
commit.
2025-09-12 14:54:49 +02:00
Robert Schmidt
e5139b6f0f Put physim status info in separate box
A follow-up commit will introduce a change to print timing logs in the
HTML (if present in the test). Prepare for this with separate box.
2025-09-12 14:54:49 +02:00
Robert Schmidt
15befb41e6 Physim deploy(): add deployment timeout 2025-09-12 14:54:49 +02:00
Robert Schmidt
e824a6373d Rename to analyze_physim() 2025-09-12 14:54:49 +02:00
Robert Schmidt
b00dd803d1 Remove existing physim offload tests
After the parent commit, there is no need for these XML files anymore.
The tests are driven by ctest instead.
2025-09-12 14:54:49 +02:00
Robert Schmidt
42dbaaf75c Add new T2 Offload test 2025-09-12 14:54:49 +02:00
Robert Schmidt
adabb6a967 Add script to run PhySims from source
physim

script more
2025-09-12 14:54:49 +02:00
Robert Schmidt
da644bc91d Import existing timing thresholds for offload tests
Imported using commands:

    xmlstarlet sel -t \
      -m '//testCaseList/testCase[class="Run_Physim"]' \
      -v "concat('check_physim_threshold(physim.5g-offload.',physim_test,'.testX.Y \"DLSCH encoding time\" \"< ', physim_time_threshold, '\")')" \
      -n t2_offload_enc_nr_dlsim.xml >> ../../openair1/SIMULATION/tests/ThresholdsOffload.cmake

    xmlstarlet sel -t \
      -m '//testCaseList/testCase[class="Run_Physim"]' \
      -v "concat('check_physim_threshold(physim.5g-offload.',physim_test,'.testX.Y \"ULSCH total decoding time\" \"< ', physim_time_threshold, '\")')" \
      -n t2_offload_dec_nr_ulsim.xml >> ../../openair1/SIMULATION/tests/ThresholdsOffload.cmake
2025-09-12 14:54:49 +02:00
Robert Schmidt
9528ccceb9 Clean up output of xmlstarlet command 2025-09-12 14:54:49 +02:00
Robert Schmidt
a7f0a1a20c Import Offload unit tests into CTest
The unit tests have been imported with this command:

    xmlstarlet sel -t
      -m '//testCaseList/testCase[class="Run_Physim"]' \
      -v "concat('add_timed_physim_test(physim.5g-offload.',physim_test,'.testX.Y \"',desc,'\" ',physim_test,' ',physim_run_args,')')" \
      -n t2_offload_enc_nr_dlsim.xml t2_offload_dec_nr_ulsim.xml >> ../../openair1/SIMULATION/tests/CMakeLists.txt

The next commit will further cleanup this output. I commit it like this
for verification purposes.
2025-09-12 14:54:49 +02:00
Robert Schmidt
55cebe6edf Provide add_timed_physim_test() in cmake
Add two new macros that allow to register physim tests for ctest,
including timing thresholds that should be fulfilled.

First, add_timed_physim_test() registers a new test using a helper
script RunTimedTest.cmake. This is because after test execution, we need
to analyze logs, and the recommended way to do multiple steps in one
test is via a helper cmake script:
https://cmake.org/pipermail/cmake-developers/2016-February/027816.html

Second, check_physim_threshold() adds new thresholds. It takes a text to
be parsed, and a condition (e.g., "< 20") to check for the number
following the threshold (which is assumed to be present right after the
threshold). It uses a test property to count the total number of checks
(limiting them to 10), and sets environment variables for the script.  I
initially planned to use a test property for checks, but those are only
valid in the same directory, and RunTimedTest.cmake seems to be assumed
by cmake to be "elsewhere", hence I needed to resort to environment
variables.

RunTimedTest.cmake is called through cmake with the test parameters and
checks. It re-constructs a list of checks [1], runs the test, and pipes
the log into a separate script that is passed all checks (see below).
Afterwards, it verifies that both the test and script passed.

A script analyze-timing.sh builds an awk script from the checks passed.
The script analyzes each line of the test output for the threshold, and
compares against the threshold. analyze-timing.sh returns success if all
checks passed.

[1] I did not manage to pass a "list" of checks in a single environment
variable through the check_physim_threshold(), which would be simpler.
2025-09-12 14:53:09 +02:00
Robert Schmidt
48be94a8c1 Remove LDPC GPU physim tests
Many of these tests do not pass (ldpctest returns non-zero output).
Moving to ctest would make all these tests and hence the pipeline fail.
2025-09-12 14:53:09 +02:00
Robert Schmidt
b7cb74699d add_physim_test(): change signature for full test name
Change signature of the macro to take the full test name, a separate
description (previously called a label?), and the executable and test
invocation. The overall signature becomes easier.

The rational for the full test name is that a later commit will
introduce the possibility to define physim tests that are checked for
specific times, in which case we need to reuse the test name. Thus,
using the full name from the beginning leads to more clarity, even
though they are a bit longer.

Add an additional safety check that the given simulator is actually a
target defined within the project (in other words, it actually exists).

Update the documentation correspondingly.
2025-09-12 14:53:09 +02:00
Robert Schmidt
4809ffc92a Add new Physim test for gracehopper 2025-09-12 14:53:09 +02:00
Robert Schmidt
e6a0a1cac4 Deployment script of physims via docker 2025-09-12 14:53:09 +02:00
Robert Schmidt
89321fe824 Add Dockerfile for physim build in CI 2025-09-12 14:53:09 +02:00
Robert Schmidt
1cfca6ce47 Move PhySim definition to openair1/SIMULATION/tests
Most (but not all) physical simulators are defined under
openair1/SIMULATION/. Defining physical simulators below there seems to
be the more "obvious" directory anyway, as the physical simulators are

    openair1/SIMULATION/tests
    Phy(L1)  Sim        tests => PhySim (tests)
2025-09-12 14:53:09 +02:00
Robert Schmidt
91069fffd1 Query system info 2025-09-12 14:53:09 +02:00
Robert Schmidt
b60572d1fc Merge remote-tracking branch 'origin/refactor-measConfig' into integration_2025_w37 (!3531)
Refactor measConfig

- Refactor and minor improvements in get_MeasConfig function;
- Add support for band in neighbourConfiguration (It is currently
  possible to handover cells with different frequencies, as long as they
  are in the same band, but this MR allows the handover to also be done
  between cells in different bands).
2025-09-12 12:39:44 +02:00
Robert Schmidt
99962b551c Merge remote-tracking branch 'origin/reworking_BWP_configuration' into integration_2025_w37 (!3607)
Reworking BWP configuration

This MR reworks the configuration via fail of additional BWPs. Moreover, it
allows for a single BWP to be configured for a given UE at a given time (BWP
switch possible only via reconfiguration). It also reworks PTRS configuration
for consistency with the BWP one.
2025-09-12 12:38:13 +02:00
Robert Schmidt
743d342ad6 Merge remote-tracking branch 'origin/fixes-ul-sched' into integration_2025_w37 (!3635)
Fixes and updates for UL scheduling, notably DSUUU

Fix a number of problems that stem from !3521, notably regarding Msg3
scheduling, retransmissions in "UL-heavy" TDD scenarios, and BSR
handling. Modify a CI test to run a UL-heavy TDD scenario, and add
documentation for UL-heavy TDD scenarios.
2025-09-11 19:48:48 +02:00
Robert Schmidt
e2b3c1546e Add TDD pattern config asserts
Check that the number of slots in period/symbols in mixed slot conforms
to what is prescribed by the spec.
2025-09-11 19:47:52 +02:00
Robert Schmidt
13e9910e4e Modify CI SA 60MHz 2x2 test to be DSUUU
Update configuration and tweak iperf thresholds accordingly. Tune some
parameters for good UL reception.
2025-09-11 19:47:52 +02:00
Robert Schmidt
bb378620e9 Remove ulsch_max_frame_inactivity from CI configs
The parameter is either set to 10 (the default, so not necessary), or to
0 forcing the gNB to schedule the UE all the time, which is only
necessary in specific scenario, and here simply wrong.
2025-09-11 19:47:52 +02:00
Robert Schmidt
b283960637 Increase periodic BSR to 5ms: increase UL throughput
In high throughput UL scenarios, at least with our configuration, the UE
only sends Short BSR. The maximum is 300000 bytes, which is completely
"scheduled away" after a couple of UL grants. Increase the periodic BSR
to 5ms to get more BSR, which results in higher UL throughput.
2025-09-11 19:47:52 +02:00
Robert Schmidt
7c9a7ab374 Reset sched_ul_bytes on BSR to tend to overestimation
On BSR reception, reset sched_ul_bytes. This change means that we assume
that no data is "in flight" for this UE at time of BSR reception, or,
put differently, that we overestimate the buffer size at UE (in the
worst case).

To illustrate this, consider the following traces before/after this
change.

Before this change: Upon BSR reception, the estimated BSR of the UE is
reset, but the gNB still accounts for data "in flight". It is visible
that the calculated buffer size (estimated - scheduled) quickly goes to
zero, and we don't use all resources, despite the buffer still being
full. The maximum application throughput in this run was ~220Mbps.

    [NR_MAC]   SHORT BSR at  773.19, est buf 300000
    [NR_MAC]   ULSCH/PUSCH:  774. 6 RNTI af8e UL sched  774. 9 PRB start  0:162 TDA  2 TBS 32797 est 300000 sched 152704 est BSR 147296 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774. 6 RNTI af8e UL sched  774.11 PRB start  0:162 TDA  4 TBS 7172 est 300000 sched 159876 est BSR 140124 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.10 RNTI af8e UL sched  774.12 PRB start  0:162 TDA  0 TBS 32797 est 292845 sched 185501 est BSR 107344 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.10 RNTI af8e UL sched  774.13 PRB start  0:162 TDA  2 TBS 32797 est 292845 sched 218298 est BSR  74547 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.11 RNTI af8e UL sched  774.14 PRB start  0:162 TDA  2 TBS 32797 est 260117 sched 218298 est BSR  41819 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.11 RNTI af8e UL sched  774.16 PRB start  0:162 TDA  4 TBS 7172 est 260117 sched 225470 est BSR  34647 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.15 RNTI af8e UL sched  774.17 PRB start  0: 35 TDA  0 TBS 7172 est 220236 sched 185501 est BSR  34735 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.15 RNTI af8e UL sched  774.18 PRB start  0:162 TDA  2 TBS 32797 est 220236 sched 218298 est BSR   1938 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  774.16 RNTI af8e UL sched  774.19 PRB start  0: 10 TDA  2 TBS 2017 est 187508 sched 187518 est BSR    -10 TPC 1
    [NR_MAC]   SHORT BSR at  774. 9, est buf 300000
    [NR_MAC]   ULSCH/PUSCH:  775. 0 RNTI af8e UL sched  775. 2 PRB start  0:162 TDA  0 TBS 32797 est 260117 sched 147549 est BSR 112568 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  775. 0 RNTI af8e UL sched  775. 3 PRB start  0:162 TDA  2 TBS 32797 est 260117 sched 180346 est BSR  79771 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  775. 1 RNTI af8e UL sched  775. 4 PRB start  0:162 TDA  2 TBS 32797 est 227389 sched 180346 est BSR  47043 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  775. 1 RNTI af8e UL sched  775. 6 PRB start  0:162 TDA  4 TBS 7172 est 227389 sched 187518 est BSR  39871 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  775. 5 RNTI af8e UL sched  775. 7 PRB start  0:162 TDA  0 TBS 32797 est 180353 sched 173174 est BSR   7179 TPC 1
    [NR_MAC]   ULSCH/PUSCH:  775. 5 RNTI af8e UL sched  775. 8 PRB start  0: 36 TDA  2 TBS 7298 est 180353 sched 180472 est BSR   -119 TPC 1

After this change: The gNB resets the number of bytes "in flight"
(sched). Thus, the calculated buffer is larger, and does not "run out"
before a new BSR arrives (which still indicates the maximum). The UE is
thus allocated all resources, but we might overestimate some resources.
The maximum application throughput in this run was ~300Mbps, limited by
MCS and not by estimated buffer size as in the previous case.

    [NR_MAC]   SHORT BSR at   43. 3, est buf 300000
    [NR_MAC]   ULSCH/PUSCH:   43.15 RNTI d3ea UL sched   43.17 PRB start  0:162 TDA  0 TBS 36897 est 263180 sched  36897 est BSR 226283 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   43.15 RNTI d3ea UL sched   43.18 PRB start  0:162 TDA  2 TBS 36897 est 263180 sched  73794 est BSR 189386 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   43.16 RNTI d3ea UL sched   43.19 PRB start 12:150 TDA  2 TBS 33822 est 263180 sched 107616 est BSR 155564 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   43.16 RNTI d3ea UL sched   44. 1 PRB start  0:162 TDA  4 TBS 7941 est 263180 sched 115557 est BSR 147623 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 1 RNTI d3ea UL sched   44. 3 PRB start  0:162 TDA  0 TBS 36897 est 173698 sched  25881 est BSR 147817 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 1 RNTI d3ea UL sched   44. 4 PRB start  0:162 TDA  2 TBS 36897 est 173698 sched  62778 est BSR 110920 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 1 RNTI d3ea UL sched   44. 6 PRB start  0:162 TDA  4 TBS 7941 est 173698 sched  70719 est BSR 102979 TPC 1
    [NR_MAC]   SHORT BSR at   43.13, est buf 300000
    [NR_MAC]   ULSCH/PUSCH:   44. 5 RNTI d3ea UL sched   44. 7 PRB start  0:162 TDA  0 TBS 36897 est 292079 sched  36897 est BSR 255182 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 5 RNTI d3ea UL sched   44. 8 PRB start  0:162 TDA  2 TBS 36897 est 292079 sched  73794 est BSR 218285 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 6 RNTI d3ea UL sched   44. 9 PRB start  0:162 TDA  2 TBS 36897 est 292079 sched 110691 est BSR 181388 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44. 6 RNTI d3ea UL sched   44.11 PRB start  0:162 TDA  4 TBS 7941 est 292079 sched 118632 est BSR 173447 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44.10 RNTI d3ea UL sched   44.12 PRB start  0:162 TDA  0 TBS 36897 est 213587 sched  39972 est BSR 173615 TPC 1
    [NR_MAC]   ULSCH/PUSCH:   44.10 RNTI d3ea UL sched   44.13 PRB start  0:162 TDA  2 TBS 36897 est 213587 sched  76869 est BSR 136718 TPC 1
2025-09-11 19:47:52 +02:00
Robert Schmidt
443e59a318 Merge remote-tracking branch 'origin/num_lcg_id_with_data_fix' into integration_2025_w37 (!3637)
fix bug in computing number of LCG IDs with data at UE
2025-09-11 15:45:13 +02:00
Robert Schmidt
1e991bb8fe Merge remote-tracking branch 'origin/sinr_based_amc' into integration_2025_w37 (!3601)
gNB: adaptive DL/UL MCS based on reported SSB-SINR and measured PUSCH SNR

Currently this is used esp. if the number of rounds is limited to 1
(e.g. disable_harq).
2025-09-11 15:42:38 +02:00
Robert Schmidt
89ebbb4192 Do not trigger ul failure in measgap scheduling and standardize the verification if MAC is active in other scheduling functions 2025-09-11 11:49:31 +01:00
Robert Schmidt
c54b69e635 Merge remote-tracking branch 'origin/srsSampledAntennas' into integration_2025_w37 (!3622)
Populate sampled_ue_antennas

sampledUeAntennas: Bitmap of UE antenna indices sampled by the SRS waveform corresponding to this PDU’s SRS Resource.

• Codebook: corresponds to antenna ports in SRS Resources;
non-overlapping indices are expected for ports sampled via different
SRIs, for a given UE. [3GPP TS 38.214 [5], section 6.1.1.2]

With this aerial gets 2 UL layers:

    [NR_MAC]   Frame.Slot 0.0
    UE RNTI 63d3 CU-UE-ID 2 in-sync PH 48 dB PCMAX 20 dBm, average RSRP -68 (16 meas)
    UE 63d3: CQI 11, RI 4, PMI (5,0)
    UE 63d3: UL-RI 2, TPMI 0
    UE 63d3: dlsch_rounds 60/1/0/0, dlsch_errors 0, pucch0_DTX 1, BLER 0.01117 MCS (1) 0
    UE 63d3: ulsch_rounds 3813/261/8/5, ulsch_errors 5, ulsch_DTX 21, BLER 0.02966 MCS (1) 22 (Qm 8 deltaMCS 0 dB) NPRB 5  SNR 31.0 dB
    UE 63d3: MAC:    TX           2209 RX        1471874 bytes
    UE 63d3: LCID 1: TX            851 RX           1375 bytes
    UE 63d3: LCID 2: TX              0 RX              0 bytes
    UE 63d3: LCID 4: TX              0 RX              0 bytes
2025-09-11 10:51:43 +02:00
Robert Schmidt
fbaf38959c Merge remote-tracking branch 'origin/revert_fapi_trp_scheme_byte' into integration_2025_w37 (!3631)
Revert "Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02)"

This commit broke compatibility with Aerial when compiled with
-DSCF_FAPI_10_04_SRS=ON. It was decided that this should become the
default.

Modify documentation, and use a dedicated image name to make it clear in
the CI that it has SRS.
2025-09-11 10:51:01 +02:00
Robert Schmidt
197492ae89 Add documentation on UL-heavy TDD patterns 2025-09-11 10:18:19 +02:00
Reem Bahsoun
20a2ff1e49 Add the Handover pipeline to the RAN-Container-Parent 2025-09-10 21:36:03 +02:00
Reem Bahsoun
bb383359e2 Add the required files for Handover CI setup (.conf, .yml, .xml) 2025-09-10 21:35:58 +02:00
Reem Bahsoun
1dac64fa42 Add UE host (raspix) and OC CN for HO CI setup 2025-09-10 21:30:43 +02:00
rmagueta
7e6826ec03 Refactor and minor improvements in get_MeasConfig function 2025-09-10 18:57:04 +01:00
Nick Hedberg
1120d41dd6 Populate sampled_ue_antennas 2025-09-10 17:51:27 +01:00
Robert Schmidt
709d583950 Merge remote-tracking branch 'origin/issue-985' into integration_2025_w37 (!3633)
Fix PLMN print in select_amf and elsewhere

Closes #985
2025-09-10 16:59:05 +02:00
Robert Schmidt
67ec7b7029 Merge remote-tracking branch 'origin/cppcheck-errors' into integration_2025_w37 (!3566)
fix 600 cppcheck notifications

With my fedora 42, using the CI command for cpp check i get 1900 errors.
This change set fixes some of them.
2025-09-10 16:58:25 +02:00
Robert Schmidt
c4a0c3b05e Rename to deploy_physim()
deploy_oc_physim() is not specific to OpenShift anymore, so rename to a
neutral name.
2025-09-10 16:43:16 +02:00
Robert Schmidt
0ff85ff2c0 Rename PhySim deployment task to Deploy_Run_OC_PhySim
A future commit will introduce the possibility to deploy physims using
docker, so rename the current step to reflect that it works via
OpenShift.
2025-09-10 16:43:16 +02:00
Robert Schmidt
deadd5414d CI: Generalizce deploy_oc_physim()
A future commit will enable to deploy physical simulators via docker.
Hence:

- Move the script to run out of deploy_oc_physim(), to make it more
  generic (later commits will introduce other scripts)
- pass the working directory (the function will be moved into
  cls_oaicitest, as it fits neither cls_containerize nor cls_cluster
  when deploying the tests from source)
- not using ci-scripts: don't hardcode a specific path, just use the
  working directory
- avoid helm-specific pods summary, and put it into the general "physim
  logs"
- remove helm-specific "release", and use a generic name for results
- always log pod logs and status to debug, even if deployment was not
  successful or tests did not finish.
2025-09-10 16:43:16 +02:00
Robert Schmidt
876d2b1b69 CI PhySims: archive LastTest.log
LastTest.log has logs of all tests. It is a raw file from which we
generate per-test logs, but it is useful to also archive this in case we
need it.
2025-09-10 16:43:16 +02:00
Robert Schmidt
dd3ecbcf38 CI: Harmonize exec_script() API
Instead of making the function a class member, make it an instance
member because (1) it is more aligned with other functions, notably,
run(), and (2) especially for RemoteCmd() it can be faster, as
successive exec_script() calls do not require a new SSH connection.
2025-09-10 16:43:16 +02:00
Robert Schmidt
582aeac496 Remove superfluous HTML.CreateHtmlTabFooter()
CreateHtmlTabFooter() is already called in main.py, at the end of an
XML. This is enough, the others are "duplicates" that are not necessary.
2025-09-10 16:43:16 +02:00
Robert Schmidt
cfe9bfecce HTML report: Update to 2025 2025-09-10 16:43:16 +02:00
Calvin Peyron
66f0d960d3 Physim doc: mention unmaintained simulators 2025-09-10 16:43:16 +02:00
Reem Bahsoun
a9da4dba35 New cuBB image compiled with -DSCF_FAPI_10_04_SRS=ON flag
This flag will be used to compile the cuBB regardless of the use of SRS
This is due to the RX_Beamforming PDU that's used following 222.10.04
2025-09-10 13:35:33 +02:00
Rúben Soares Silva
f977b6affd Alter Aerial documentation to mention mandatory L1 compilation flag 2025-09-10 13:34:27 +02:00
Florian Kaltenberger
9ba2e7ca5b Revert "Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02)"
This commit broke compatibility with Aerial when compiled with -DSCF_FAPI_10_04_SRS=ON. It was decided that this should become the default.

This reverts commit 8beb382277.
2025-09-10 13:34:27 +02:00
Francesco Mani
67cb3f026d Save PUSCH information for each (re-)transmission
Instead of only saving this information in the first transmission, also
store it on each retransmission. This should ensure that if some
information changes, we always relate to the last transmission. For
instance, power control information might have changed, and should be
considered in subsequent rounds, if necessary. It also simplifies code.

Fixes: 6294ce715e ("Reorder pf_ul to process retransmission")
2025-09-09 20:01:04 +02:00
Robert Schmidt
bd6180e362 UL TDA: ensure we reach Msg3 in all cases
In at least the case of mu=1, min_rxtxtime=2 and DDDSU with no UL
symbols (for ULSCH) in the mixed slot, the current state of code does
not allow a UE to attach.  This is because at mu=1, Msg3 is k2+delta,
where k2=min_rxtxtime and delta(mu)=3.

Prior, this special case was handled because we had a dedicated Msg3
TDA, which in most cases is not necessary (because the mixed slot
allocates the DCI, and the following mixed slot has the UL grant). Add
code that tries to ensure that we only add the Msg3 TDA in cases when we
need it.

Fixes: 961a646dc7 ("Remove dedicated Msg3 TDA")
2025-09-09 20:01:04 +02:00
Laurent THOMAS
c833aee524 refine the LTE prach fix from cppcheck error detection 2025-09-09 18:07:31 +02:00
Laurent THOMAS
af125c39df array test overflow and possible divide by 0 fixes 2025-09-09 18:07:31 +02:00
Laurent THOMAS
10f304d9da return a error case before a SEGV if the pointer is null 2025-09-09 18:07:31 +02:00
Laurent THOMAS
bc238f9b2f fix as i can a error detected by cppcheck, w[lprime] is only 0, 1 or -1 2025-09-09 18:07:31 +02:00
Laurent THOMAS
3190ad47b1 avoid a cppcheck warning 2025-09-09 18:04:26 +02:00
Laurent THOMAS
5d118cf170 fix lack of test for fopen() return value 2025-09-09 18:04:26 +02:00
Laurent THOMAS
82931c8f01 fix printf() format errors 2025-09-09 18:04:26 +02:00
Laurent THOMAS
278d2cbca1 fix several not tested malloc or calloc return value 2025-09-09 18:04:26 +02:00
francescomani
5a7d275546 fix bug in computing number of LCG IDs with data at UE 2025-09-09 13:01:43 +02:00
Robert Schmidt
39bbadf3d1 Merge remote-tracking branch 'origin/fix_msg3_crnti_fail' into integration_2025_w37 (!3634)
reset MSG3 C-RNTI flag in case of failure

If MSG3 with C-RNTI fails, the UE should come back with a
re-establishment (after a given number of RA failures in general). In
that case, the OAI UE wouldn't reset the MSG3 with C-RNTI flag leading
to re-establishment failure.
2025-09-09 12:26:55 +02:00
Robert Schmidt
eb62fa3a1d Merge remote-tracking branch 'origin/aal_cleanup_eal_init' into integration_2025_w37 (!3630)
feat(ldpc_aal): Do not try EAL init if FHI 7.2 is enabled

When FHI 7.2 is enabled, the EAL initialization is done by the FHI and
the attempt to init EAL by ldpc_aal will fail. In that case, it is not
necessary neither to provide a DPDK core list for BBDEV.

This MR offers to skip EAL init in ldpc_aal when FHI 7.2 is enabled in
order to avoid error messages in the log and to allow dropping the
useless DPDK cores argument in that case.

Also add some fixes to the LDPC offload documentation.
2025-09-09 12:26:18 +02:00
Robert Schmidt
6c7e692bd5 Merge remote-tracking branch 'origin/nzp_csi_pdsch_ratematching' into integration_2025_w37 (!3514)
NR UE: add support for PDSCH rate matching with NZP CSI-RS

Currently only ZP CSI-RS is considered in function
configure_ratematching_csi, add support for NZP CSI-RS.

Closes #975
2025-09-09 12:25:56 +02:00
Thomas Schlichter
6b80fbf072 update doc/MAC/mac-usage.md 2025-09-09 11:17:43 +02:00
Thomas Schlichter
b3242490f1 enable SSB-SINR reporting for NTN GEO scenario 2025-09-09 11:17:43 +02:00
Thomas Schlichter
2944775952 nr_ulsim: fix computation of the scrambling errors
The array ul_harq_processes[harq_pid].f contains the data as bits, not bytes.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
4e87ac46a1 nr_dlsim: several fixes for low SNR scenarios
If the DCI in PDCCH is not correctly received, no PDSCH would be decoded but counted as no error.
Also if the DCI was not correctly received, a TBS of 0 would be used in some computations and memory allocations.

Fix these not counting if there is no PDSCH decoding, and by using the known TBS instead of the one received from the DCI.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
1c63d44afd NR UE: make the power averaging IIR filter faster
Especially high initial noise levels would stay too long and negatively impact the accuracy of later S(I)NR computations.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
e70bb45ebd gNB: consider the measured PUSCH SNR when computing the UL MCS if only one round is used 2025-09-09 11:17:43 +02:00
Thomas Schlichter
9346b50eb3 gNB: consider also the min_mcs when computing the DL MCS if only one round is used 2025-09-09 11:17:43 +02:00
Thomas Schlichter
a9a9dfe297 gNB: adjust the dl_max_mcs based on the reported SSB-SINR 2025-09-09 11:17:33 +02:00
Guido Casati
7bb9f60068 Fix AMF related prints in NGAP 2025-09-09 09:12:57 +02:00
Thomas Schlichter
2b2e9563ff gNB: add SSB-SINR measurement values to the MAC statistics output 2025-09-08 13:32:23 +02:00
Thomas Schlichter
afc13c264c gNB: compute and store SSB-SINR in dB instead of just the SINR-index 2025-09-08 13:32:23 +02:00
Guido Casati
4d96f40023 Fix PLMN prints in NGAP/RRC
Also, replace NGAP_X with LOG_X to avoid false-positive format warnings in clang.

Closes #985
2025-09-06 12:38:34 +02:00
Guido Casati
3a734bc5d4 Replace ngap_plmn_identity_t with plmn_id_t and use proper size for TAI List for Paging
Use platform type plmn_id_t to simplify the code.

TAI List for Paging in NGAP PAGING message (9.2.4.1 3GPP TS 38.413)
is limited to 16.
2025-09-06 12:25:17 +02:00
rmagueta
fd4de3c720 Add support for band in neighbourConfiguration 2025-09-05 10:11:04 +01:00
Robert Schmidt
11a561cb7b Ensure that retransmission uses TDA as indicated
Previously, the TDA reuse condition was wrong: for multiple TDAs with
different k2, the symbol allocation might be the same, in which the
previous logic was using the wrong TDA. Fix the condition, and insert an
assert to ensure the allocated TDA is correct.
2025-09-05 09:14:02 +02:00
Robert Schmidt
454f690272 UL TDA for SRS: set correct right k2
We need to set the different k2 values according to the number of UL
slots, not all to the same k2.
2025-09-05 09:13:05 +02:00
Robert Schmidt
4e4f27c79d Fix: only create mixed slot UL TDU for more than 1 symbol
For PUSCH, we need at least 2 symbols, so ensure when creating the TDA.
2025-09-05 09:13:05 +02:00
francescomani
18041e3c41 common function to generate csi_MeasConfig
(also used to get the correct CSI meas structure in case of BWP switch)
2025-09-04 18:43:12 +02:00
francescomani
8d872f2f7d clone cellGroup for BWP switch to avoid removing BWP currently in use from gNB list 2025-09-04 18:43:12 +02:00
francescomani
ce1ddb260b bugfix in BWP release at UE 2025-09-04 18:43:12 +02:00
francescomani
45792da029 include missing harq information in phy-sim nr_mac_config_t initialization 2025-09-04 18:43:12 +02:00
francescomani
7300a7daf3 option to trigger reconfiguration with BWP switching 2025-09-04 18:43:12 +02:00
francescomani
22cd4e9312 configure only 1 BWP at a given time (1st active BWP) 2025-09-04 18:43:12 +02:00
francescomani
db93bc022f separate functions to configure initial BWPs 2025-09-04 18:43:12 +02:00
francescomani
3ea02249d6 rework BWP configuration via file 2025-09-04 18:43:12 +02:00
francescomani
9ab0715a5a formatting and refactoring with intermediate variable names to avoid too long lines 2025-09-04 18:43:12 +02:00
francescomani
e8f53fd5ac function to determine max UL MIMO layers 2025-09-04 18:43:12 +02:00
francescomani
a73dd19381 rework PTRS configuration via file 2025-09-04 18:43:12 +02:00
Jaroslava Fiedlerova
d372aa1b50 Merge branch 'integration_2025_w36' into 'develop'
Integration: `2025.w36`

* !3613 Speedup complex rotate for aarch64
* !3614 Ldpc encoder zc384 optimization
* !3625 gNB scheduler small fixes
* !3629 Fix for gNB max feedback time parameter
* !3619 Fix RA 2-Step MgsB Ack at UE
* !3626 Upgrade CI to Aerial 25-2

See merge request oai/openairinterface5g!3627
2025-09-04 16:36:42 +00:00
francescomani
8bae60c938 reset MSG3 C-RNTI flag in case of MAC reset 2025-09-04 17:30:21 +02:00
Romain Beurdouche
79c1133736 fix(ldpc_aal): Documentation
The tuning of the BLER is necessary for Intel ACC, not for the T2.
2025-09-04 08:31:10 +00:00
Romain Beurdouche
6647af4116 fix(ldpc_aal): Update documentation
Update the documentation to reflect that the DPDK core list is not
anymore necessary when using FHI 7.2.
2025-09-04 08:28:30 +00:00
Romain Beurdouche
705f04f58e feat(ldpc_aal): Do not initialize EAL if it is already initialized
When FHI 7.2 is enabled, the EAL initialization is done by the FHI and
the attempt to init EAL by ldpc_aal will fail.
In that case, it is not necessary neither to provide a DPDK core list
for BBDEV.

This commit offers to skip EAL initialization if it is already initialized
in order to allow dropping the useless DPDK cores argument in that case.
The change relies on `rte_dev_probe` to detect if EAL was already
initialized.
2025-09-04 06:56:59 +00:00
Jaroslava Fiedlerova
8e32225711 Merge remote-tracking branch 'origin/aerial_25-2' into integration_2025_w36 (!3626)
Upgrade CI to Aerial 25-2

The goal of this MR is to upgrade the Aerial setup to use release 25-2.
2025-09-03 17:00:43 +02:00
Reem Bahsoun
206e44ae54 Replace old nvIPC library with the new one 2025-09-03 13:30:49 +02:00
Jaroslava Fiedlerova
38ed261638 Merge remote-tracking branch 'origin/Fix_MsgB_Ack' into integration_2025_w36 (!3619)
Fix RA 2-Step MgsB Ack at UE

Update condition to prepare MsgB Ack the same way as Msg4 Ack
2025-09-03 12:57:00 +02:00
Jaroslava Fiedlerova
515eb988ab Merge remote-tracking branch 'origin/fix_set_max_fb_time' into integration_2025_w36 (!3629)
Fix for gNB max feedback time parameter

This bug is causing assertions like the following

Assertion (curr_pucch->active == 0) failed!
In nr_csi_meas_reporting() /oai-ran/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c:282
CSI structure is scheduled in advance. It should be free!

because the PUCCH structure would be smaller than it should be causing
overlapping.
2025-09-03 08:43:06 +02:00
Jaroslava Fiedlerova
1271d91676 Merge remote-tracking branch 'origin/minor_sched_fixes' into integration_2025_w36 (!3625)
gNB scheduler small fixes

A couple of fixes in gNB scheduling function. Removing a superfluous input from
CCE function and adding a missing call to reset beam allocation.
2025-09-02 20:51:09 +02:00
francescomani
225e640ca4 fix max feedback time parameter (needs to be computed every time we have that information) 2025-09-02 16:02:17 +02:00
Jaroslava Fiedlerova
774c390bbe Merge remote-tracking branch 'origin/ldpc_encoder_ZC384_optimization' into integration_2025_w36 (!3614)
Ldpc encoder zc384 optimization

This is a modification for the ldpc encoder which improves performance for
high-throughput cases. It contains a newly-generated file for innermost part of
the parity bit generation which, for AVX512, uses the mm512_permutex2var_epi8
instruction and for 128-bit (aarch64) the mm_alignr_epi8 (vextq_s8) in the
computation corresponding to each non-zero bit of the H matrix. This allows for
removing a very large memcpy and reduces the memory demand for the parity matrix
computation. For the moment this is limited to largest case in BG1, namely
Zc=384. This is the only format used when the number of segments after codeblock
segmentation is large (>8). This improves the timing required for ldpc parity
bits generation by more than a factor 2 with AVX512. This significantly reduces
the total time to generate the DLSCH/PDSCH.

See the merge request description for numbers.
2025-09-02 11:06:20 +02:00
Jaroslava Fiedlerova
9d2960eab8 Merge remote-tracking branch 'origin/cpx_rotate_aarch64' into integration_2025_w36 (!3613)
Speedup complex rotate for aarch64

This is a simple optimization for aarch64 for the "rotate_cpx_vector" used for
the phase_rotation in 5G NR. It provides a speedup of around 1.5 on high-end
aarch64 targets compared to the SIMDe translated version. It is implemented with
native NEON intrinsics and was largely inspired by suggestions from ChatGPT 5 :-)
2025-09-02 11:04:44 +02:00
Robert Schmidt
e69ef1d8cc UL scheduler log: print TDA, it has more info 2025-09-02 09:57:32 +02:00
Reem Bahsoun
69de8cbc24 Change cuBB tag to release 25-2 in YAML and documentation 2025-09-02 09:52:23 +02:00
Raymond Knopp
0e09c7c347 Add changes for avx512/aarch64 ldpc encoder optimizations
newly-generated files for innermost part of the parity bit
generation which, for AVX512, uses the mm512_permutex2var_epi8
instruction and for 128-bit (aarch64) the mm_alignr_epi8 (vextq_s8) in
the computation corresponding to each non-zero bit of the H matrix.

It is generated with ldpctest -n0 -g1. the changes for this are in a
future MR.  I did these changes to compare with the GPU version
(ldpc_encoder_cuda), so that the CPU version is as fast as possible. The
generator will come when we merge the GPU encoder/decoder which also has
a generator for the CUDA version. it was difficult to extract the
changes in ldpctest/ldpc_encoder.c so I just took the generated file.

This allows for removing a very large memcpy and reduces the memory
demand for the parity matrix computation. For the moment this is limited
to largest case in BG1, namely Zc=384. This is the only format used when
the number of segments after codeblock segmentation is large (>8).  This
improves the timing required for ldpc parity bits generation by more
than a factor 2 with AVX512. This significantly reduces the total time
to generate the DLSCH/PDSCH
2025-09-02 08:55:08 +02:00
Raymond Knopp
48d19e8a91 Add reset of dlsch_precoding timing counter in nr_dlsim 2025-09-02 08:48:32 +02:00
Raymond Knopp
5e3e8a70ff addition of aarch64 native implementation for rotate_cpx_vector for the case output_shift=15 2025-09-02 08:28:13 +02:00
Raymond Knopp
53813f522c Change target architecture in arm container build to armv8.2-a
This enables some additional instructions needed in the follow-up
commit.
2025-09-02 08:22:34 +02:00
Robert Schmidt
741e9ffae9 Simplify cross-compilation Dockerfile
Redirect to files and manual analysis as done in this Dockerfile is not
necessary since we just output all relevant build files to stdout.
Simplify to do the same here.

See: 35361db76b ("build_oai: don't redirect compilations to a file")
2025-09-02 08:19:40 +02:00
francescomani
2e15430731 adding other missing beam reaset in RA functions 2025-09-01 18:46:22 +02:00
francescomani
15bb046f9c adding a missing beam reaset in pf_dl 2025-09-01 17:25:01 +02:00
francescomani
169de8cdca remove unnecessary input in get_cce_index 2025-09-01 17:17:06 +02:00
Robert Schmidt
f155ad7202 Merge branch 'fix-oaiue-ota' into 'develop'
Fix OAIUE-OTA pipeline and increase tested traffic

I tried to "fix" the OAIUE pipeline in !3610 (merged) for making it more reliable, but inadvertently introduced many ULSCH DTX for UL traffic. Fix this, and increase DL traffic.

See merge request oai/openairinterface5g!3621
2025-08-29 16:22:17 +00:00
Robert Schmidt
2b75e09151 Increase DL UDP traffic for OAIUE OTA pipeline 2025-08-29 14:53:36 +02:00
Robert Schmidt
47d2ba1793 Fix RX gain for OAIUE-OTA pipeline
Adjust to avoid increased ULSCH DTX, probably because of saturation.

Fixes: 69cb71eddc ("Adjust configuration for OAI OTA test")
2025-08-29 14:53:31 +02:00
Robert Schmidt
fbb78ad825 Merge branch 'integration_2025_w35' into 'develop'
Integration: `2025.w35`

* !3604 Consider PDSCH EPRE to DMRS EPRE in NR UE
* !3606 Fix SRS TLV unpack
* !3602 Update RFsim CN
* !3516 [FHI72 M-plane] CM improvements and PM implementation
* !3538 add a new graphical T tracer to see gNB MAC scheduling decisions
* !3425 RFSim test for 10 UEs/process

Closes #950

See merge request oai/openairinterface5g!3610
2025-08-28 21:10:14 +00:00
ndomingues
0942927308 Fix RA 2-Step MgsB Ack at UE
Update condition to prepare MsgB Ack the same way as Msg4 Ack
2025-08-28 16:49:52 +01:00
Robert Schmidt
69cb71eddc Adjust configuration for OAI OTA test 2025-08-28 09:13:02 +02:00
Robert Schmidt
c2eadcbddb Merge remote-tracking branch 'origin/multi-ue-test' into integration_2025_w35 (!3425)
RFSim test for 10 UEs/process

This MR adds a testcase and changes required to run 10 UEs in a single
process with RFSim

- Added deregistration for all connected UEs
- Refactored MAC/RRC instance handling
- made map_current_symbol thread safe
- made opeanir0_cfg thread safe and local
- Added 10UE/process testcase
2025-08-28 08:59:05 +02:00
Robert Schmidt
b11354126f Merge remote-tracking branch 'origin/t-gnb-mac' into integration_2025_w35 (!3538)
add a new graphical T tracer to see gNB MAC scheduling decisions

May be useful for debugging
2025-08-27 15:14:55 +02:00
Cedric Roux
c8aea1b970 T: replace 'subframe' by 'tick'
Some code in T tracers is used by both LTE and NR.

In LTE, we expect 10 subframes per frame, and the logging is done with
this assumption. We have one tick per subframe.

In NR, we deal with slots, not subframes. And we have n ticks per frame
(depending on mu). As of today, only n=20 is tested (corresponding to
mu=1).

A previous commit introduced 'subframes_per_frame' which had the correct
meaning for LTE but was truly 'slots per frame' for NR. This creates
confusion.

Let's replace 'subframe' by 'tick' to reduce confusion.
2025-08-27 15:13:59 +02:00
Cedric Roux
fcd0013981 T: add a tracer 'gnb_mac'
To see MAC scheduling decisions. May be useful for debugging.
2025-08-27 15:13:59 +02:00
Robert Schmidt
08a3f98ef0 Merge remote-tracking branch 'origin/oai-ci-update-cn-mbim' into integration_2025_w35 (!3602)
Update RFsim CN

- Update RFsim CNs to latest version
- update the MBIM stop script to remove IP addresses (we don't use this
  script directly, so it does not have an impact)
2025-08-27 13:52:00 +02:00
Robert Schmidt
78b14302be Merge remote-tracking branch 'origin/mplane-improv' into integration_2025_w35 (!3516)
[FHI72 M-plane] CM improvements and PM implementation

Configuration Management:

- addition of the RU username in the fhi_72 section of the config file;
  previously hardcoded to oranbenetel
- modification of the frequency offset, frame structure, fft size,
  cyclic prefix, and Tx gain;
- addition of the managed delay node;

for Tx/Rx endpoints.

Performance Management implementation where OAI gNB
activates/deactivates available RU performance measurements.
2025-08-27 13:50:43 +02:00
Jaroslava Fiedlerova
433d5c1099 CI: update XML and yaml files for 10 UEs/process RFSim test 2025-08-27 13:15:40 +02:00
Bartosz Podrygajlo
cd67c33ba2 Fix NR UE mislabeling MSG2 as DLSCH PDU 2025-08-27 13:15:40 +02:00
Bartosz Podrygajlo
acb2ae93bd Add RFSim 10 UEs/process RFSim test
Add an RFSim test for 10 UEs in a single process.
2025-08-27 13:15:40 +02:00
Bartosz Podrygajlo
d72ee11b32 Make openair0_cfg thread safe
Move openair0_cfg to PHY_VARS_NR_UE making it UE instance specific
and thread safe.
2025-08-27 13:15:37 +02:00
alexjiao
86937cd8b1 Fix for function compute_csi_rm_unav_res 2025-08-27 16:11:57 +08:00
Bartosz Podrygajlo
62bcd822c5 Make map_current_symbol thread safe
Use local function pointers instead of static global variables.
2025-08-26 15:56:32 +02:00
Bartosz Podrygajlo
318d901ef6 Refactor RRC->MAC Communication: Replace ITTI with notifiedFIFO for Multi-UE Support
- Replaced ITTI message queues with notifiedFIFO for RRC to MAC communication in UE.
- Enables correct message delivery to multiple MAC instances running in parallel threads.
- Introduced `nr_mac_rrc_message_t` union for MAC-RRC messages.
- Updated all relevant message handling and initialization code to use notifiedFIFO.
2025-08-26 15:56:20 +02:00
Teodora
995cccc760 Update the FHI M-plane doc
Performance Management support explanation.

Example run modified according to:
- modification of the frequency offset, frame structure, fft size, cyclic prefix, and Tx gain;
- addition of the managed delay node;
for Tx/Rx endpoints.
2025-08-26 15:17:38 +02:00
Teodora
0367881ba9 Performance Management implementation
Introduced a parameter start_up_timing which indicates if PM activation is supported during the start-up
procedure. We initialize this parameter, based on the vendor.

Notification interval is set to 10s.
2025-08-26 15:17:38 +02:00
Teodora
625b4b0cde Add support for RU username parameter for connection to a RU via M-plane
The "sudo" access group is required by OAI gNB.
2025-08-26 15:17:38 +02:00
Teodora
e7db367c9d Rearrange <edit-config>, <validate>, and <commit> RPCs
Refactor these RPCs to facilitate their use in other Management functionalities,
not only Configuration Management.
2025-08-26 15:17:38 +02:00
Teodora
5291afe165 Add a comment for Rx gain correction
Definition in o-ran-uplane-conf.yang model:
"Gain correction of RF path linked with array element or array layers.
 Common part of overall gain_correction.
 gain_correction = common array-carrier gain-correction + eAxC gain correction."
2025-08-26 15:17:38 +02:00
Teodora
eee7d976ec Correct the Tx gain 2025-08-26 15:17:38 +02:00
Teodora
2e9101f833 Add managed delay node in Rx endpoint creation 2025-08-26 15:17:38 +02:00
Teodora
9bb15f15b8 Correctly fill the cyclic prefix for Tx/Rx endpoints 2025-08-26 15:17:38 +02:00
Teodora
8bd6e16ad1 Correctly fill the frame structure for Tx/Rx endpoints and fft size for Rx endpoints 2025-08-26 15:17:38 +02:00
Teodora
0b0e804f73 Properly pass the frequency offset to Tx/Rx endpoints 2025-08-26 15:17:38 +02:00
Teodora
10d60f71ce Separate Tx/Rx endpoint creation
As per o-ran-uplane-conf model, some nodes exist in Rx but not in Tx
(e.g. "ul-fft-sampling-offsets"), and vice versa.
2025-08-26 15:17:38 +02:00
Teodora
4e9e2b39e9 Set the correct yang node name for MTU retrieval 2025-08-26 15:17:38 +02:00
Robert Schmidt
89603f0649 Merge remote-tracking branch 'origin/fix_srs_tlv_unpack' into integration_2025_w35 (!3606)
Fix SRS TLV unpack

This MR changes the type of a variable to get the last index in which we
unpack the full 32 bits in a SRS TLV to int16 instead of uint16, in
order to be -1 when the TLV length is 0, thus skipping unpacking. This
only affects the SRS.indications sent by Aerial L1, which don't have
padding in the TLV, in case of OAI L1, we unpack in "full" 32 bit blocks
until the end of the TLV, if the length is 0, the unpacking loop exits
immediately. Furthermore, it also adds a check for the Report Type
parameter value in handle_nr_srs_measurements. If this value is zero,
according to SCF 222.10.04 Table 3-129 means a null report, so we can
skip processing it.
2025-08-26 14:54:42 +02:00
Robert Schmidt
417913dfaa Merge remote-tracking branch 'origin/fix-ue-pdsch-epre-ratio' into integration_2025_w35 (!3604)
Consider PDSCH EPRE to DMRS EPRE in NR UE

Fix UE PDSCH to DMRS EPRE ratio.

closes #950
2025-08-26 14:54:17 +02:00
Robert Schmidt
0ebb97c4ae nfapi.md: fix link to current document 2025-08-26 08:45:57 +02:00
Thomas Schlichter
e5b68fb6ee NR UE: modify shift value in nr_dlsch_mmse() for improved performance 2025-08-25 09:29:38 +02:00
Rúben Soares Silva
f1fbf4aa29 Skip unpacking SRS.indication TLV when report type is 0
Move the check for timing advance offset being 0xffff to before locking the scheduler
2025-08-22 15:33:35 +01:00
Bartosz Podrygajlo
0d651bf3a9 Add MAX_NUM_NR_UE_INST to NR UE MAC
- Use MAX_NUM_NR_UE_INST in NR UE MAC to control number of MAC instances.
 - Modify the MAC interface slightly so that nr_l2_init_ue only initializes one instance
2025-08-22 16:25:35 +02:00
Bartosz Podrygajlo
014be5326e Use MAX_NUM_NR_UE_INST in RRC
Use MAX_NUM_NR_UE_INST for number of NR UE RRC instances. Change the RRC
interface slightly so nr_rrc_init_ue initializes only one RRC instance pointed
to by the id given to the function
2025-08-22 16:21:46 +02:00
Rúben Soares Silva
c957e11682 Change last_idx type to int16 to properly avoid unpacking if the tlv length is 0 2025-08-22 15:17:47 +01:00
Bartosz Podrygajlo
32f8f258fa NR UE NAS: Use global define MAX_NUM_NR_UE_INST
Use NR UE global MAX_NUM_NR_UE_INST define instead of local define MAX_NAS_UE
2025-08-22 16:13:32 +02:00
Bartosz Podrygajlo
e58c52829d Introduce MAX_NUM_NR_UE_INST
Add a new define for maximum number of NR UE per process
2025-08-22 16:13:32 +02:00
Bartosz Podrygajlo
ba585cd96d Add deregistration for all UE instances. 2025-08-22 16:13:32 +02:00
Bartosz Podrygajlo
598fbb5a24 Consider PDSCH EPRE to DMRS EPRE in NR UE 2025-08-22 15:59:52 +02:00
Robert Schmidt
792a7faf09 MBIM stop script: remove IP address
The CI detects whether a UE connected (and has a PDU session) by trying
to read the IP address. It therefore assumes that as long as the UE is
not connected, no IP would be present.

With the existing stop_quectel_mbim.sh script, this was not the case; it
would simply leave the IP address.  Modify this script to flush all IP
addresses on disconnect to remedy this.
2025-08-21 18:19:06 +02:00
Robert Schmidt
2de3d1f525 CI: Upgrade RFsim CNs to v2.1.10 2025-08-21 18:18:13 +02:00
Cedric Roux
c4562df2e7 T: add some traces
To be used by next commit.
2025-08-18 15:26:10 +02:00
Cedric Roux
cc87c72ac3 T: fix a typo 2025-08-18 11:53:54 +02:00
Cedric Roux
c4acec706d T: make number of subframes per frame a configurable item
Think: NR with different number of slots per frame depending on mu.

The name 'subframes_per_frame' is a bit ambiguous. It is valid for LTE,
but for NR it should be 'slots_per_frame'.

For example, for sub-carrier spacing of 30KHz, we have 20 slots per
frame, so in this case subframes_per_frame = 20. In reality whatever
the numerology, there is always 10 subframes per frame in NR.

But how to name this variable which is used both for LTE and NR cases?
'subframes_or_slots_per_frame'? It's a bit long and also ambiguous.

Conclusion: no big deal I think. 'subframes_per_frame' and so be it.
2025-08-18 11:53:54 +02:00
Cedric Roux
138886ad5e T: tti view: add automax ability
Also, update a cmake file because compilation of the tracer 'ue' fails
otherwise.
2025-08-18 11:53:54 +02:00
Cedric Roux
595e650f9f T: scrolltti: handle tick discontinuities
For TDD.
2025-08-18 11:53:54 +02:00
Cedric Roux
645393f464 T: throughputlog: handle tick discontinuities
Think: TDD.
2025-08-18 11:53:54 +02:00
Cedric Roux
ee2668b7c3 T GUI: add a get_range() API function for xy_plot 2025-08-18 11:53:54 +02:00
Cedric Roux
c8d64f0dd1 nr rlc: add an API function to retrieve the occupancy of TX list 2025-08-18 11:53:54 +02:00
alexjiao
0f61fac4a6 NR UE: add support for PDSCH rate matching with NZP CSI-RS
Currently only ZP CSI-RS is considered in function configure_ratematching_csi,
add support for NZP CSI-RS.
2025-08-09 23:40:53 +08:00
621 changed files with 26645 additions and 18618 deletions

View File

@@ -1,5 +1,51 @@
# RELEASE NOTES: #
## [v2.3.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.3.0) -> July 2025. ##
General new features and improvements (both RAN and UE):
- Preliminary support for RedCap UEs
- Support for NTN LEO scenarios including SIB19 and channel emulation (see
doc/RUNMODEM.md)
- VRTSIM: new shared memory realtime radio (see develop/radio/vrtsim/README.md)
- Support for TDD pattern 2
- Support for long PRACH
- Support for SIB2
- Add unit tests using ctest (see doc/UnitTests.md)
Stability and bug fixes:
- Improve various procedures (e.g., RRC reestablishment, RRC Reject, ...)
- Add improvements for ImScope
- Bugfixes in the entire stack (e.g., #803, #805, #810, #812, #818, #852, #878,
#884, #890, #895, #901, #907, #932, #939 ...)
- Documentation updates
- And many other small fixes, like memory leaks, crashes, ...
RAN changes (gNB/CU/CU-CP/CU-UP/DU/DU-high/DU-low):
- Stability and performance improvements when running with 4-layer DL MIMO
- Stability and performance improvements when running with 2-layer UL MIMO
- Interoperability testing with Metanoia Jura and Foxconn RUs
- Support of O-RAN 7.2 M-plane (Start-up procedure including configuration
management, see also doc/ORAN_FHI7.2_Tutorial.md)
- Upgrade OSC FHI (xran) from E to F release
- Refactoring of LDPC interface and performance improvements
- Support for nFAPI in all scenarios for FR1 (see doc/nfapi.md)
- Support at least 32 UEs concurrently
- Improve robustness when running in split modes (F1, E1)
- Add basic support for beam management in FR2
- Add support for O1 on DU (see also https://gitlab.eurecom.fr/oai/o1-adapter)
- E2 agent: Support for multiple E2SM-RC report service styles
nrUE changes:
- Refactoring of threading towards better code and performance
- Add or rework various procedures (e.g., RA with C-RNTI, Going to Idle, RA, ...)
- Refactor and extend NAS implementation (e.g., Service Request, Registration
Request, Service Acept, Service Reject, ...)
- Support for continuous frequency offset compensation
- Reduce minimum RX-to-TX time to 3
Regression:
- Multiple BWPs do not work reliably on gNB; use tag 2025.w17
## [v2.2.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.2.0) -> November 2024. ##
General 5G improvements (both gNB and UE):

View File

@@ -19,8 +19,6 @@
# * contact@openairinterface.org
# */
# Author: laurent THOMAS, Lionel GAUTHIER
cmake_minimum_required (VERSION 3.16)
project (OpenAirInterface LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
@@ -170,12 +168,9 @@ endif()
if (NOT CROSS_COMPILE)
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=native")
else ()
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=armv8-a")
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=armv8.2-a")
endif()
# add autotools definitions that were maybe used!
add_definitions(-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP)
# we need -rdynamic to incorporate all symbols in shared objects, see man page
set(commonOpts "-pipe -fPIC -Wall -fno-strict-aliasing -rdynamic")
# GNU C/C++ Compiler might throw many warnings without packed-bitfield-compat, see man page
@@ -363,6 +358,7 @@ add_library(ngap
${NGAP_DIR}/ngap_gNB.c
${NGAP_DIR}/ngap_common.c
${NGAP_DIR}/ngap_gNB_context_management_procedures.c
${NGAP_DIR}/ngap_gNB_mobility_management.c
${NGAP_DIR}/ngap_gNB_decoder.c
${NGAP_DIR}/ngap_gNB_encoder.c
${NGAP_DIR}/ngap_gNB_handlers.c
@@ -468,9 +464,6 @@ target_include_directories(f1ap PUBLIC F1AP_DIR)
target_link_libraries(f1ap PUBLIC asn1_f1ap GTPV1U)
target_link_libraries(f1ap PRIVATE ngap nr_rrc HASHTABLE f1ap_lib)
target_include_directories(f1ap PRIVATE ${F1AP_DIR}/lib)
if(E2_AGENT)
target_compile_definitions(f1ap PRIVATE E2_AGENT)
endif()
# LPP
##############
@@ -548,7 +541,6 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories("${OPENAIR_DIR}/executables")
include_directories("${OPENAIR2_DIR}/COMMON")
include_directories("${OPENAIR2_DIR}/UTIL")
include_directories("${OPENAIR2_DIR}/UTIL/LOG")
include_directories("${OPENAIR3_DIR}/COMMON")
include_directories("${OPENAIR3_DIR}/UTILS")
include_directories("${NFAPI_DIR}/nfapi/public_inc")
@@ -589,12 +581,7 @@ include_directories("${OPENAIR3_DIR}/ocp-gtpu")
include_directories("${OPENAIR3_DIR}/M3AP")
include_directories("${OPENAIR3_DIR}/MME_APP")
include_directories("${OPENAIR_DIR}/radio/COMMON")
include_directories("${OPENAIR2_DIR}/UTIL/OSA")
include_directories("${OPENAIR2_DIR}/UTIL/MEM")
include_directories("${OPENAIR2_DIR}/UTIL/LISTS")
include_directories("${OPENAIR2_DIR}/UTIL/FIFO")
include_directories("${OPENAIR2_DIR}/UTIL/MATH")
include_directories("${OPENAIR2_DIR}/UTIL/TIMER")
include_directories("${OPENAIR2_DIR}/UTIL/OTG")
include_directories("${OPENAIR2_DIR}/UTIL/OPT")
include_directories("${OPENAIR_DIR}")
@@ -622,11 +609,6 @@ add_library(UTIL
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c
${OPENAIR2_DIR}/UTIL/OPT/probe.c
)
if (ENABLE_LTTNG)
find_package(LTTngUST 2.3.8 EXACT REQUIRED)
else()
message(STATUS "LTTNG support disabled")
endif()
pkg_check_modules(cap libcap)
if (cap_FOUND)
@@ -941,9 +923,9 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_tbs_tools.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
${OPENAIR1_DIR}/PHY/nr_phy_common/src/nr_phy_common_csirs.c
${OPENAIR1_DIR}/PHY/nr_phy_common/src/nr_phy_common_srs.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_scrambling.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/refsig.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
)
set(PHY_NR_SRC
@@ -1166,6 +1148,7 @@ set(L2_NR_SRC
${NR_RRC_DIR}/rrc_gNB.c
${NR_RRC_DIR}/mac_rrc_dl_direct.c
${NR_RRC_DIR}/mac_rrc_dl_f1ap.c
${NR_RRC_DIR}/rrc_gNB_asn1.c
${NR_RRC_DIR}/rrc_gNB_nsa.c
${NR_RRC_DIR}/rrc_gNB_UE_context.c
${NR_RRC_DIR}/rrc_gNB_NGAP.c
@@ -1201,7 +1184,6 @@ set(NR_L2_SRC_UE
${NR_UE_RRC_DIR}/L2_interface_ue.c
${NR_UE_RRC_DIR}/main_ue.c
${NR_UE_RRC_DIR}/rrc_UE.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NR_UE_RRC_DIR}/rrc_timers_and_constants.c
${NR_UE_RRC_DIR}/rrc_sl_preconfig.c
)
@@ -1316,12 +1298,6 @@ add_library(L2
target_link_libraries(L2 PRIVATE x2ap s1ap lte_rrc m2ap)
target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_library(MAC_UE_NR ${MAC_NR_SRC_UE})
target_link_libraries(MAC_UE_NR PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs PUBLIC nr_ue_power_procedures nr_ue_ra_procedures)
@@ -1348,10 +1324,6 @@ target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc nr_co
if(OAI_AERIAL)
target_compile_definitions(L2_NR PRIVATE ENABLE_AERIAL)
endif()
if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_library(L2_LTE_NR
# temporary solution until 4G/5G code completely untangled (as evidenced by deletion of the following file)
@@ -1681,13 +1653,6 @@ include_directories(${NAS_SRC}UE/EMM/SAP)
include_directories(${NAS_SRC}UE/ESM)
include_directories(${NAS_SRC}UE/ESM/SAP)
# nbiot
add_definitions("-DNUMBER_OF_UE_MAX_NB_IoT=16")
set (NBIOT_SOURCES
${OPENAIR2_DIR}/ENB_APP/NB_IoT_config.c
)
add_library(NB_IoT MODULE ${NBIOT_SOURCES} )
# Simulation library
##########################
set (SIMUSRC
@@ -1713,9 +1678,8 @@ include_directories("${NFAPI_DIR}/nfapi/inc")
include_directories("${NFAPI_DIR}/sim_common/inc")
include_directories("${NFAPI_DIR}/pnf_sim/inc")
add_library(oai_iqplayer MODULE
${OPENAIR_DIR}/radio/iqplayer/iqplayer_lib.c
)
add_library(oai_iqplayer MODULE ${OPENAIR_DIR}/radio/iqplayer/iqplayer_lib.c)
target_link_libraries(oai_iqplayer PRIVATE log_headers)
#################################
# add executables for operation
@@ -1725,10 +1689,6 @@ add_library(minimal_lib
)
target_link_libraries(minimal_lib PUBLIC pthread dl ${T_LIB} LOG)
add_executable(nfapi_test
${OPENAIR_DIR}/openair2/NR_PHY_INTERFACE/nfapi_5g_test.c
)
add_executable(measurement_display
${OPENAIR_DIR}/common/utils/threadPool/measurement_display.c)
target_link_libraries (measurement_display minimal_lib)
@@ -1768,6 +1728,7 @@ target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
target_link_libraries(lte-softmodem PRIVATE ${blas_LIBRARIES} ${cblas_LIBRARIES} ${lapacke_LIBRARIES} ${lapack_LIBRARIES})
if(E2_AGENT)
target_link_libraries(lte-softmodem PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
@@ -1871,6 +1832,7 @@ if (OAI_AERIAL)
target_link_libraries(nr-softmodem PUBLIC aerial_lib)
endif()
if(E2_AGENT)
target_link_libraries(nr-softmodem PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
@@ -1892,6 +1854,7 @@ target_link_libraries(nr-cuup PRIVATE
CONFIG_LIB ITTI SCTP_CLIENT
GTPV1U e1ap f1ap
time_management
alg
z dl pthread shlib_loader ${T_LIB})
target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
@@ -1944,14 +1907,14 @@ target_link_libraries(nr-uesoftmodem PRIVATE
#####################################
#special case for dlim TM4, which uses its own version of phy_scope code
add_executable(dlsim_tm4
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/dlsim_tm4.c
${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope_tm4.c
)
target_link_libraries (dlsim_tm4
-Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY ITTI -Wl,--end-group
pthread m rt CONFIG_LIB ${T_LIB}
)
#add_executable(dlsim_tm4
# ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/dlsim_tm4.c
# ${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope_tm4.c
# )
#target_link_libraries (dlsim_tm4
# -Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY ITTI -Wl,--end-group
# pthread m rt CONFIG_LIB ${T_LIB}
# )
add_executable(rftest
${OPENAIR_DIR}/openair1/PHY/TOOLS/calibration_test.c
@@ -2013,7 +1976,6 @@ target_link_libraries(nr_pbchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
add_executable(nr_psbchsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/psbchsim.c
${OPENAIR_DIR}/executables/softmodem-common.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
${NFAPI_USER_DIR}/gnb_ind_vars.c
${PHY_INTERFACE_DIR}/queue_t.c
@@ -2034,7 +1996,6 @@ target_link_libraries(nr_pucchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
add_executable(nr_dlsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
${OPENAIR_DIR}/executables/softmodem-common.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
${NFAPI_USER_DIR}/gnb_ind_vars.c
${PHY_INTERFACE_DIR}/queue_t.c
@@ -2064,7 +2025,6 @@ target_link_libraries(nr_ulschsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
add_executable(nr_ulsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
${OPENAIR_DIR}/executables/softmodem-common.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
${NFAPI_USER_DIR}/gnb_ind_vars.c
${PHY_INTERFACE_DIR}/queue_t.c
@@ -2076,7 +2036,9 @@ target_link_libraries(nr_ulsim PRIVATE
)
target_link_libraries(nr_ulsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
# these simulators do not compile:
# dlsim_tm7 pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim
foreach(myExe dlsim ulsim)
add_executable(${myExe}
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c
@@ -2096,22 +2058,23 @@ endforeach(myExe)
#unitary tests for Core NEtwork pieces
#################################
foreach(myExe s1ap
secu_knas_encrypt_eia1
secu_kenb
aes128_ctr
secu_knas_encrypt_eea2
secu_knas secu_knas_encrypt_eea1
kdf
aes128_cmac_encrypt
secu_knas_encrypt_eia2)
add_executable(test_${myExe}
${OPENAIR3_DIR}/TEST/test_${myExe}.c
)
target_link_libraries (test_${myExe}
-Wl,--start-group SECURITY UTIL -Wl,--end-group m rt CONFIG_LIB
)
endforeach(myExe)
#foreach(myExe
# s1ap
# secu_knas_encrypt_eia1
# secu_kenb
# aes128_ctr
# secu_knas_encrypt_eea2
# secu_knas secu_knas_encrypt_eea1
# kdf
# aes128_cmac_encrypt
# secu_knas_encrypt_eia2)
# add_executable(test_${myExe}
# ${OPENAIR3_DIR}/TEST/test_${myExe}.c
# )
# target_link_libraries (test_${myExe}
# -Wl,--start-group SECURITY UTIL -Wl,--end-group m rt CONFIG_LIB
# )
#endforeach(myExe)
#ensure that the T header files are generated before targets depending on them
if (${T_TRACER})
@@ -2121,17 +2084,17 @@ if (${T_TRACER})
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
nr_ulschsim ldpctest polartest smallblocktest
#all "add_library" definitions
ITTI lte_rrc nr_rrc s1ap x2ap m2ap m3ap f1ap
params_libconfig oai_usrpdevif oai_bladerfdevif oai_lmssdrdevif oai_iqplayer
oai_eth_transpro oai_mobipass HASHTABLE UTIL OMG_SUMO
SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
params_libconfig
oai_eth_transpro HASHTABLE UTIL
SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
MISC_NFAPI_LTE_LIB MISC_NFAPI_NR_LIB
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE MAC_NR_COMMON MAC_UE_NR ngap
CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU OPENAIR0_LIB
GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE SIMU
dfts config_internals nr_common crc_byte)
if (TARGET ${i})
add_dependencies(${i} generate_T)
@@ -2139,8 +2102,6 @@ if (${T_TRACER})
endforeach(i)
endif (${T_TRACER})
include(${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt)
set(ENABLE_TESTS OFF CACHE STRING "Activate build of tests")
set_property(CACHE ENABLE_TESTS PROPERTY TYPE BOOL)
set(ENABLE_PHYSIM_TESTS OFF CACHE STRING "Activate build of physim tests")

View File

@@ -35,6 +35,8 @@ def gitCommitAuthorEmailAddr
// list of failing stages
def failingStages = ""
OAI_Registry = "gracehopper3-oai.sboai.cs.eurecom.fr"
pipeline {
agent {
label nodeExecutor
@@ -175,6 +177,28 @@ pipeline {
}
}
}
stage ("Ubuntu-Jetson-Image-Builder") {
steps {
script {
triggerSlaveJob ('RAN-Ubuntu-Jetson-Image-Builder', 'Ubuntu-Jetson-Image-Builder')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
ubuntuJetsonBuildStatus = finalizeSlaveJob('RAN-Ubuntu-Jetson-Image-Builder')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += ubuntuJetsonBuildStatus
}
}
}
}
stage ("RHEL-Cluster-Image-Builder") {
steps {
script {
@@ -243,6 +267,24 @@ pipeline {
}
}
}
stage ("DockerHub-Push") {
when { expression {doBuild && "PUSH".equals(env.gitlabActionType)} }
steps {
script {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
triggerSlaveJob ('RAN-DockerHub-Push', 'DockerHub-Push')
}
}
}
post {
failure {
script {
echo "Push to Docker-Hub KO"
failingStages += '\n * RAN-DockerHub-Push'
}
}
}
}
stage ("Image Test Processes") {
when { expression {doBuild} }
parallel {
@@ -269,6 +311,29 @@ pipeline {
}
}
}
stage ("PhySim-GraceHopper-5G") {
when { expression {do5Gtest || do5GUeTest} }
steps {
script {
triggerSlaveJob ('RAN-PhySim-GraceHopper-5G', 'PhySim-GraceHopper-5G')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
physimGH5GStatus = finalizeSlaveJob('RAN-PhySim-GraceHopper-5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += physimGH5GStatus
}
}
}
}
stage ("PhySim-Cluster-4G") {
when { expression {do4Gtest} }
steps {
@@ -661,6 +726,29 @@ pipeline {
}
}
}
stage ("SA-Handover-CN5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-SA-Handover-CN5G', 'SA-Handover-CN5G')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
saHandoverStatus = finalizeSlaveJob('RAN-SA-Handover-CN5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += saHandoverStatus
}
}
}
}
stage ("SA-OAIUE-CN5G") {
when { expression {do5Gtest || do5GUeTest} }
steps {
@@ -686,23 +774,6 @@ pipeline {
}
}
}
stage ("DockerHub-Push") {
when { expression {doBuild && "PUSH".equals(env.gitlabActionType)} }
steps {
script {
triggerSlaveJob ('RAN-DockerHub-Push', 'DockerHub-Push')
}
}
post {
failure {
script {
echo "Push to Docker-Hub KO"
currentBuild.result = 'FAILURE'
failingStages += '\n * RAN-DockerHub-Push'
}
}
}
}
}
post {
success {
@@ -766,11 +837,11 @@ def triggerCN5GSlaveJob (jobName, gitlabStatusName) {
shortenShaOne = sh returnStdout: true, script: 'git log -1 --pretty=format:"%h" --abbrev=8 ' + env.gitlabMergeRequestLastCommit
shortenShaOne = shortenShaOne.trim()
branchName = env.gitlabSourceBranch.replaceAll("/", "-").trim()
fullRanTag = 'porcepix.sboai.cs.eurecom.fr/oai-gnb:' + env.gitlabSourceBranch + '-' + shortenShaOne
fullRanTag = OAI_Registry + '/oai-gnb:' + env.gitlabSourceBranch + '-' + shortenShaOne
} else {
shortenShaOne = sh returnStdout: true, script: 'git log -1 --pretty=format:"%h" --abbrev=8 ' + env.GIT_COMMIT
shortenShaOne = shortenShaOne.trim()
fullRanTag = 'porcepix.sboai.cs.eurecom.fr/oai-gnb:develop-' + shortenShaOne
fullRanTag = OAI_Registry + '/oai-gnb:develop-' + shortenShaOne
}
// Workaround for the "cancelled" GitLab pipeline notification
// The slave job is triggered with the propagate false so the following commands are executed

View File

@@ -31,6 +31,9 @@ if (params.LockResources != null && params.LockResources.trim().length() > 0)
// Docker Hub account to push to
def DH_Account = "oaisoftwarealliance"
// internal registry to use
def OAI_Registry = "gracehopper3-oai.sboai.cs.eurecom.fr"
pipeline {
agent {
label nodeExecutor
@@ -79,14 +82,22 @@ pipeline {
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup", "oai-gnb-fhi72"]
// Logging in on both registries
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
sh "docker login -u oaicicd -p oaicicd ${OAI_Registry} > /dev/null 2>&1"
listOfImages.eachWithIndex { item, iindex ->
sh "docker pull --quiet porcepix.sboai.cs.eurecom.fr/${item}:develop-${WEEK_SHA}"
sh "docker image tag porcepix.sboai.cs.eurecom.fr/${item}:develop-${WEEK_SHA} ${DH_Account}/${item}:develop"
sh "docker image tag porcepix.sboai.cs.eurecom.fr/${item}:develop-${WEEK_SHA} ${DH_Account}/${item}:${WEEK_TAG}"
sh "docker push --quiet ${DH_Account}/${item}:${WEEK_TAG}"
sh "docker push --quiet ${DH_Account}/${item}:develop"
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop porcepix.sboai.cs.eurecom.fr/${item}:develop-${WEEK_SHA}"
if (["oai-gnb", "oai-nr-ue", "oai-nr-cuup"].contains(item)) {
// For images built on AMD64 and ARMv8 Jetson
echo "Pushing image '${item}' for both AMD64 and ARM64 architectures with tags: ${WEEK_TAG} and develop"
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop || true"
sh "docker buildx imagetools create --tag ${DH_Account}/${item}:${WEEK_TAG} ${OAI_Registry}/${item}:armv8_develop-${WEEK_SHA} ${OAI_Registry}/${item}:develop-${WEEK_SHA}"
sh "docker buildx imagetools create --tag ${DH_Account}/${item}:develop ${OAI_Registry}/${item}:armv8_develop-${WEEK_SHA} ${OAI_Registry}/${item}:develop-${WEEK_SHA}"
} else {
sh "docker pull --quiet ${OAI_Registry}/${item}:develop-${WEEK_SHA}"
sh "docker image tag ${OAI_Registry}/${item}:develop-${WEEK_SHA} ${DH_Account}/${item}:develop"
sh "docker image tag ${OAI_Registry}/${item}:develop-${WEEK_SHA} ${DH_Account}/${item}:${WEEK_TAG}"
sh "docker push --quiet ${DH_Account}/${item}:develop"
sh "docker push --quiet ${DH_Account}/${item}:${WEEK_TAG}"
}
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop ${OAI_Registry}/${item}:develop-${WEEK_SHA} || true"
}
// Proxy is not following the same pattern.
sh "docker image tag proxy:develop ${DH_Account}/proxy:develop"
@@ -95,7 +106,7 @@ pipeline {
sh "docker push --quiet ${DH_Account}/proxy:${WEEK_TAG}"
sh "docker rmi ${DH_Account}/proxy:develop ${DH_Account}/proxy:${WEEK_TAG}"
// Logging out on both registries
sh "docker logout porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
sh "docker logout ${OAI_Registry} > /dev/null 2>&1"
sh "docker logout > /dev/null 2>&1"
}
}
@@ -105,7 +116,7 @@ pipeline {
post {
always {
script {
sh "docker logout porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
sh "docker logout ${OAI_Registry} > /dev/null 2>&1"
sh "docker logout > /dev/null 2>&1"
echo "End of Registry Push"
}

View File

@@ -44,4 +44,4 @@ rf_driver: {
#endif
tx_gain: 75.0, /* TX gain (in dB) */
rx_gain: 55.0, /* RX gain (in dB) */
rx_gain: 52.0, /* RX gain (in dB) */

175
ci-scripts/attenuatorctl.py Normal file
View File

@@ -0,0 +1,175 @@
#!/usr/bin/env python3
import argparse
import logging
import itertools
import usb.core
import usb.util
import sys
import time
logging.basicConfig(
level=logging.DEBUG,
stream=sys.stdout,
format="%(message)s"
)
# helper class parsing command line options for channels and attenuators
class ValidateChAtt(argparse.Action):
def _parse_channels(s):
if len(s.split("-")) == 2:
s, e = [int(x) for x in s.split("-")]
chs = [x for x in range(s, e+1)]
if len(chs) == 0:
raise Exception(f"empty range")
elif len(s.split(",")) > 1:
chs = [int(x) for x in s.split(",")]
elif s.isdigit():
chs = [int(s)]
else:
raise Exception(f"could not parse channel expression")
for c in chs:
if not 1 <= c <= 4:
raise Exception(f"channel number must be within [1,4], but have {c}")
return chs
def __call__(self, parse, args, values, option_string=None):
ch, att = values
try:
chs = ValidateChAtt._parse_channels(ch)
except Exception as e:
parse.exit(1, f"while parsing channel expression {ch}: {e}\n")
if not att.isdigit():
parse.exit(1, f'expected number for attenuation, but got {att}\n')
if not 0 <= int(att) <= 63:
parse.exit(1, f'attenuation must be within [0,63], but is {att}\n')
opts = getattr(args, self.dest) or {}
for c in chs:
opts[c] = int(att)
setattr(args, self.dest, opts)
def _parse_args() -> argparse.Namespace:
epilog = '''
[CHs] can have the following forms:
(1) single channel number w (within [1-4])
(2) a range of channels in the form x-y (x <= y)
(3) a list of channels in the form a,b,c
[ATT] must be within [0,63] (dB)
--set and --reach are mutually exclusive
Examples:
- reset all channels to 0: -s 1-4 0
- set channels 3 and 4 to attenuation 60: -s 3,4 60
- perform attenuation sweep during 10s, reaching ch. 1+2 to 60: -r 1,2 60 -d 10
'''
parser = argparse.ArgumentParser(description='Mini-Circuit RC*DAT attenuator controller',
epilog=epilog,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('--info', '-i', action='store_true', default=False,
help='Get Infos for all connected Mini-Circuits RC*DAT',)
parser.add_argument('--set', '-s', nargs=2, metavar=("[CHs]","[ATT]"),
action=ValidateChAtt, help="Set a fixed attenuation ATT on channels CHs")
parser.add_argument('--reach', '-r', nargs=2, metavar=("[CHs]","[ATT]"),
action=ValidateChAtt, help="Perform an \"attenuation sweep\": reach attenuation ATT on channels CHs")
parser.add_argument('--duration', '-d', action='store', type=float, default=5.0,
help='DURATION for attenuation sweep to --reach given attenuation (Default: 5)',)
parser.add_argument('--progress', '-p', action='store_true', default=False,
help='If provided, will show progress during attenuation sweep',)
return parser.parse_args()
def _exec(dev, cmd):
dev.write(1, cmd)
ans = dev.read(0x81,64)
# take from ans(wer) while valid bytes
sn = itertools.takewhile(lambda x: x < 255 and x > 0, ans)
# turn bytes into characters and accumulate into string
return "".join(map(chr, sn))
def devId(dev):
return f"{dev.idVendor:04x}:{dev.idProduct:04x}"
def _info(dev):
ident = devId(dev)
SerialN = _exec(dev, "*:SN?")
ModelN = _exec(dev, "*:MN?")
Fw = _exec(dev, "*:FIRMWARE?")
logging.info(f'{ident}: model is {ModelN}')
logging.info(f'{ident}: serial number is {SerialN}')
logging.info(f'{ident}: FW version is {Fw}')
def _get_attenuation(dev):
ident = devId(dev)
att = _exec(dev, "*:ATT?")
# remove leading "*" and split by channels
return [float(n) for n in att[1:].split(" ")]
def _set_attenuation(dev, ch_att):
ident = devId(dev)
for ch, att in ch_att:
#logging.debug(f"{ident}: Set attenuation channel {ch}: {att} dB")
att = round(4 * att) / 4 # round to closest 0.25dB
resp = _exec(dev, f"*:CHAN:{ch}:SETATT:{att};" )
def _continuous_set_attenuation(dev, ch_att_end, duration, show_progress=False, step_duration=0.25):
ident = devId(dev)
current = _get_attenuation(dev)
steps = duration / step_duration
ch_att_step = [(ch, (att_end - current[ch - 1]) / steps) for ch, att_end in ch_att_end]
logging.info(f"{ident}: sweep attenuation during {duration} s in {steps} steps: increments {ch_att_step}")
for i in range(1, int(steps)+1):
next_att = [(ch, current[ch - 1] + i * att_step) for ch, att_step in ch_att_step]
_set_attenuation(dev, next_att)
if show_progress:
logging.debug(f"{ident}: attenuation for channel(s): {next_att}")
time.sleep(step_duration)
_set_attenuation(dev, ch_att_end)
def _get_usb_devs(idVendor, idProduct):
devs = []
for dev in usb.core.find(idVendor=idVendor, idProduct=idProduct, find_all=True):
for configuration in dev:
for interface in configuration:
ifnum = interface.bInterfaceNumber
if not dev.is_kernel_driver_active(ifnum):
continue
try:
dev.detach_kernel_driver(ifnum)
except e:
pass
devs.append(dev)
return devs
if __name__ == '__main__':
# Parse the arguments
args = _parse_args()
if args.set and args.reach:
logging.error("--set and --reach are mutually exclusive")
sys.exit(1)
# 20ce:0023 is Mini-Circuit RC*DAT device
devs = _get_usb_devs(idVendor=0x20ce, idProduct=0x0023)
if len(devs) == 0:
logging.error('no Mini-Circuits RC*DAT device detected')
sys.exit(-1)
if len(devs) > 1:
logging.error('more than one Mini-Circuits RC*DAT device detected')
sys.exit(-1)
dev = devs[0]
if args.info:
_info(dev)
if args.set:
_set_attenuation(dev, [(k,v) for k,v in args.set.items()])
if args.reach:
_continuous_set_attenuation(dev, [(k,v) for k,v in args.reach.items()], args.duration, args.progress)
ident = devId(dev)
for i, a in enumerate(_get_attenuation(dev)):
logging.info(f"{ident}: Attenuation channel {i+1}: {a} dB")
sys.exit(0)

View File

@@ -12,6 +12,14 @@ idefix:
IF: wwan0
MTU: 1500
raspix:
Host: raspix
AttachScript: sudo /opt/mbim_scripts/start_quectel_mbim.sh
DetachScript: sudo /opt/mbim_scripts/stop_quectel_mbim.sh
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
up2:
Host: up2
AttachScript: sudo /opt/mbim/start_quectel_mbim.sh
@@ -77,6 +85,14 @@ oc-cn5g-20897:
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72"
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72 %%log_dir%%"
oc-cn5g-00103-ho:
Host: groot
NetworkScript: echo "inet 172.21.6.111"
RunIperf3Server: False
Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ho"
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ho"
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ho %%log_dir%%"
oc-cn5g-20897-aerial:
Host: gracehopper1-oai
NetworkScript: echo "inet 172.21.6.105"
@@ -455,3 +471,93 @@ l2sim4g_ext_dn:
Host: "%%current_host%%"
NetworkScript: docker exec l2sim4g-trf-gen ip a show dev eth0
CmdPrefix: docker exec l2sim4g-trf-gen
rfsim5g_multiue1:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue1
AttachScript: docker start rfsim5g-oai-nr-ue
DetachScript: docker stop rfsim5g-oai-nr-ue
MTU: 1500
rfsim5g_multiue2:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue2
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue2
AttachScript: true
DetachScript: true
MTU: 1500
rfsim5g_multiue3:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue3
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue3
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue4:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue4
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue4
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue5:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue5
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue5
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue6:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue6
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue6
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue7:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue7
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue7
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue8:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue8
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue8
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue9:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue9
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue9
AttachScript: "true"
DetachScript: "true"
MTU: 1500
rfsim5g_multiue10:
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue10
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue10
AttachScript: "true"
DetachScript: "true"
MTU: 1500

View File

@@ -26,65 +26,26 @@ import os
import xml.etree.ElementTree as ET
import json
# Define the mapping of physim_test values to search patterns
PHYSIM_PATTERN_MAPPING = {
'nr_ulsim': [
r'(Total PHY proc rx)\s+(\d+\.\d+)\s+us', # Pattern for RX PHY processing time
r'(ULSCH total decoding time)\s+(\d+\.\d+)\s+us', # Pattern for ULSCH decoding time
],
'nr_dlsim': [
r'(PHY proc tx)\s+(\d+\.\d+)\s+us', # Pattern for TX PHY processing time
r'(DLSCH encoding time)\s+(\d+\.\d+)\s+us', # Pattern for DLSCH encoding time
],
'ldpctest': [
r'(Encoding time mean):\s+(\d+\.\d+)\s+us', # Pattern for encoding time mean
r'(Decoding time mean):\s+(\d+\.\d+)\s+us', # Pattern for decoding time mean
],
}
# Define test conditions based on the simulation type
PHYSIM_TEST_CONDITION = {
'nr_ulsim': 'test OK', # For nr_ulsim, check if 'test OK' is present
'nr_dlsim': 'test OK', # For nr_dlsim, check if 'test OK' is present
'ldpctest': None, # No condition for ldpctest, just process the patterns
}
class Analysis():
def analyze_physim(log, physim_test, options, threshold):
search_patterns = PHYSIM_PATTERN_MAPPING.get(physim_test)
test_condition = PHYSIM_TEST_CONDITION.get(physim_test)
success = False
msg = ''
def _get_test_description(properties):
env_vars = None
for p in properties:
if p["name"] == "ENVIRONMENT":
env_vars = p["value"] # save for later if no custom property
if p["name"] == "TEST_DESCRIPTION":
return p["value"]
# if we came till here, it means there is no custom test property
# saved in JSON. See if we have a description in environment variables
if not env_vars:
return "<none>"
for ev in env_vars:
name, value = ev.split("=", 1)
if name == "TEST_DESCRIPTION":
return value
return "<none>"
try:
with open(log, 'r') as f:
log_content = f.read()
except FileNotFoundError as e:
msg = f'{log} file not found, exception: {e}'
return False, msg
except Exception as e:
msg = f'Error while parsing log file {log}: exception: {e}'
return False, msg
if test_condition and test_condition not in log_content:
msg = f"Test did not succeed, '{test_condition}' not found in log file {log}."
return False, msg
time1_match = re.search(search_patterns[0], log_content)
time2_match = re.search(search_patterns[1], log_content)
if not(time1_match and time2_match):
msg = f"Processing time not found in log file {log}."
return False, msg
success = float(time2_match.group(2)) < float(threshold)
if success:
msg = f'{time1_match.group(1)}: {time1_match.group(2)} us\n{time2_match.group(1)}: {time2_match.group(2)} us'
else:
msg = f'{time1_match.group(1)}: {time1_match.group(2)} us\n{time2_match.group(1)}: {time2_match.group(2)} us exceeds a limit of {threshold} us'
return success,msg
def analyze_oc_physim(result_junit, details_json, logPath):
def analyze_physim(result_junit, details_json, logPath):
try:
tree = ET.parse(result_junit)
root = tree.getroot()
@@ -116,7 +77,7 @@ class Analysis():
for test in root: # for each test
test_name = test.attrib["name"]
test_exec = json_test_desc[test_name]["properties"][1]["value"][0]
desc = json_test_desc[test_name]["properties"][1]["value"][1]
desc = Analysis._get_test_description(json_test_desc[test_name]["properties"])
# get runtime and checks
test_check = test.attrib["status"] == "run"
time = round(float(test.attrib["time"]), 1)
@@ -129,13 +90,16 @@ class Analysis():
with open(f'{log_dir}/{test_name}.log', 'w') as f:
f.write(output)
# prepare result and info
info = f"Runtime: {f'{time:.3f}'[:5]} s"
resultstr = 'PASS' if (test_check and time_check and output_check) else 'FAIL'
info = f"{test_name}.log: test {resultstr}"
for l in output.splitlines():
if l.startswith("CHECK "):
info += f"\n{l}"
if test_check:
if not output_check:
info += " Test log exceeds maximal allowed length 100 kB"
info += "\nTest log exceeds maximal allowed length 100 kB"
if not time_check:
info += " Test exceeds 150s"
info += "\nTest exceeds 150s"
if not (time_check and output_check):
nb_failed += 1 # time threshold/output length error, not counted for by ctest as of now
test_result[test_name] = [desc, info, resultstr]

View File

@@ -34,7 +34,6 @@ import time
import os
import cls_oai_html
import cls_analysis
import constants as CONST
import helpreadme as HELP
import cls_containerize
@@ -417,34 +416,3 @@ class Cluster:
c.run(f'cp -r {ctx.logPath} {os.getcwd()}/test_log_{ctx.test_id}/')
return status
def deploy_oc_physim(self, ctx, HTML, oc_release, node):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
raise ValueError(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {self.ranBranch} ranCommitID {self.ranCommitID}')
image_tag = cls_containerize.CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)
logging.debug(f'Running physims from server: {node}')
script = "scripts/oc-deploy-physims.sh"
options = f"oaicicd-core-for-ci-ran {oc_release} {image_tag} {self.eNBSourceCodePath}"
ret = cls_cmd.runScript(node, script, 600, options)
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
with cls_cmd.getConnection(node) as ssh:
details_json = archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/{oc_release}-tests.json')
result_junit = archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/{oc_release}-run.xml')
archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/physim_log.txt')
archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/physim_pods_summary.txt')
archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/LastTestsFailed.log')
test_status, test_summary, test_result = cls_analysis.Analysis.analyze_oc_physim(result_junit, details_json, ctx.logPath)
if test_summary:
if test_status:
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result)
logging.info('\u001B[1m Physical Simulator Pass\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('At least one physical simulator test failed!', 'KO', ["See below for details"])
HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result)
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('Physical simulator failed', 'KO', [test_result])
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
return test_status

View File

@@ -45,12 +45,6 @@ def getConnection(host, d=None):
else:
return RemoteCmd(host, d=d)
def runScript(host, path, timeout, parameters=None, redirect=None, silent=False):
if is_local(host):
return LocalCmd.exec_script(path, timeout, parameters, redirect, silent)
else:
return RemoteCmd.exec_script(host, path, timeout, parameters, redirect, silent)
# provides a partial interface for the legacy SSHconnection class (getBefore(), command())
class Cmd(metaclass=abc.ABCMeta):
def cd(self, d, silent=False):
@@ -111,12 +105,12 @@ class LocalCmd(Cmd):
logging.debug(f'Working dir is {self.cwd}')
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
def exec_script(path, timeout, parameters=None, redirect=None, silent=False):
def exec_script(self, path, timeout, parameters=None, redirect=None, silent=False):
if redirect and not redirect.startswith("/"):
raise ValueError(f"redirect must be absolute, but is {redirect}")
c = f"{path} {parameters}" if parameters else path
if not redirect:
ret = sp.run(c, shell=True, timeout=timeout, stdout=sp.PIPE, stderr=sp.STDOUT)
ret = sp.run(c, shell=True, cwd=self.cwd, timeout=timeout, stdout=sp.PIPE, stderr=sp.STDOUT)
ret.stdout = ret.stdout.decode('utf-8').strip()
else:
with open(redirect, "w") as f:
@@ -238,18 +232,15 @@ class RemoteCmd(Cmd):
cfg['sock'] = paramiko.ProxyCommand(ucfg['proxycommand'])
return cfg
def exec_script(host, path, timeout, parameters=None, redirect=None, silent=False):
def exec_script(self, path, timeout, parameters=None, redirect=None, silent=False):
if redirect and not redirect.startswith("/"):
raise ValueError(f"redirect must be absolute, but is {redirect}")
p = parameters if parameters else ""
r = f"> {redirect}" if redirect else ""
if not silent:
logging.debug(f"local> ssh {host} bash -s {p} < {path} {r} # {path} from localhost")
client = RemoteCmd._ssh_init()
cfg = RemoteCmd._lookup_ssh_config(host)
client.connect(**cfg)
logging.debug(f"local> ssh {self.hostname} bash -s {p} < {path} {r}")
bash_opt = 'BASH_XTRACEFD=1' # write bash set -x output to stdout, see bash(1)
stdin, stdout, stderr = client.exec_command(f"{bash_opt} bash -s {p} {r}", timeout=timeout)
stdin, stdout, stderr = self.client.exec_command(f"{bash_opt} bash -s {p} {r}", timeout=timeout)
# open() the file f at path, read() it and write() it into the stdin of the bash -s cmd
with open(path) as f:
stdin.write(f.read())
@@ -259,7 +250,6 @@ class RemoteCmd(Cmd):
if redirect: cmd += f" &> {redirect}"
ret = sp.CompletedProcess(args=cmd, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
ret.stdout = ret.stdout.decode('utf-8').strip()
client.close()
return ret
def run(self, line, timeout=300, silent=False, reportNonZero=True):

View File

@@ -53,6 +53,7 @@ from cls_ci_helper import archiveArtifact
# (e.g., cls_cluster.py)
#-----------------------------------------------------------
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-enb-asan', 'oai-gnb-asan', 'oai-lte-ue-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72']
DEFAULT_REGISTRY = "gracehopper3-oai.sboai.cs.eurecom.fr"
def CreateWorkspace(host, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
if ranCommitID == '':
@@ -66,7 +67,8 @@ def CreateWorkspace(host, sourcePath, ranRepository, ranCommitID, ranTargetBranc
ranTargetBranch = 'develop'
options += f" {ranTargetBranch}"
logging.info(f'execute "{script}" with options "{options}" on node {host}')
ret = cls_cmd.runScript(host, script, 90, options)
with cls_cmd.getConnection(host) as c:
ret = c.exec_script(script, 90, options)
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
return ret.returncode == 0
@@ -117,7 +119,7 @@ def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'):
def WriteEnvFile(ssh, services, wd, tag, flexric_tag):
ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False)
registry = "oai-ci" # pull_images() gives us this registry path
registry = "oai-ci/" # pull_images() gives us this registry path
envs = {"REGISTRY":registry, "TAG": tag, "FLEXRIC_TAG": flexric_tag}
if ret.returncode == 0: # it exists, we have to update
# transforms env file to dictionary
@@ -132,7 +134,8 @@ def WriteEnvFile(ssh, services, wd, tag, flexric_tag):
# or -asan images. We need to detect which kind we did pull.
fullImageName = GetImageName(ssh, svc, f"{wd}/docker-compose.y*ml")
image = fullImageName.split("/")[-1].split(":")[0]
checkimg = f"{registry}/{image}-asan:{tag}"
# registry now includes the trailing slash ("oai-ci/")
checkimg = f"{registry}{image}-asan:{tag}"
ret = ssh.run(f'docker image inspect {checkimg}', reportNonZero=False)
if ret.returncode == 0:
logging.info(f"detected pulled image {checkimg}")
@@ -303,13 +306,18 @@ class Containerize():
result = re.search('build_cross_arm64', self.imageKind)
if result is not None:
self.dockerfileprefix = '.ubuntu.cross-arm64'
result = re.search('native_arm', self.imageKind)
result = re.search('native_armv9', self.imageKind)
if result is not None:
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb', ''))
imageNames.append(('ran-build-fhi72', 'build.fhi72.native_arm', 'ran-build-fhi72', ''))
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup', ''))
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue', ''))
imageNames.append(('oai-gnb-aerial', 'gNB.aerial', 'oai-gnb-aerial', ''))
result = re.search('native_armv8', self.imageKind)
if result is not None:
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb', ''))
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup', ''))
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue', ''))
cmd.cd(lSourcePath)
# if asterix, copy the entitlement and subscription manager configurations
@@ -362,7 +370,6 @@ class Containerize():
cmd.close()
logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
return False
else:
result = re.search(r'Size *= *(?P<size>[0-9\-]+) *bytes', cmd.getBefore())
@@ -389,13 +396,13 @@ class Containerize():
elif image != 'ran-build':
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
if image == 'oai-gnb-aerial':
cmd.run('cp -f /opt/nvidia-ipc/nvipc.src.2025.05.20.tar.gz .')
cmd.run('cp -f /opt/nvidia-ipc/nvipc_src.2025.10.09.tar.gz .')
logfile = f'{lSourcePath}/cmake_targets/log/{name}.docker.log'
ret = cmd.run(f'{self.cli} build {self.cliBuildOptions} --target {image} --tag {name}:{imageTag} --file docker/Dockerfile.{pattern}{self.dockerfileprefix} {option} . > {logfile} 2>&1', timeout=1200)
t = (name, archiveArtifact(cmd, ctx, logfile))
log_files.append(t)
if image == 'oai-gnb-aerial':
cmd.run('rm -f nvipc.src.2025.05.20.tar.gz')
cmd.run('rm -f nvipc_src.2025.10.09.tar.gz')
# check the status of the build
ret = cmd.run(f"{self.cli} image inspect --format=\'Size = {{{{.Size}}}} bytes\' {name}:{imageTag}")
if ret.returncode != 0:
@@ -486,7 +493,6 @@ class Containerize():
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
ssh.close()
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
return False
else:
logging.debug('L2sim proxy image for tag ' + tag + ' already exists, skipping build')
@@ -555,7 +561,6 @@ class Containerize():
if ret.returncode != 0:
logging.error(f'No {baseImage} image present, cannot build tests')
HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
return False
# build ran-unittests image
@@ -566,7 +571,6 @@ class Containerize():
if ret.returncode != 0:
logging.error(f'Cannot build unit tests')
HTML.CreateHtmlTestRow("Unit test build failed", 'KO', [dockerfile])
HTML.CreateHtmlTabFooter(False)
return False
HTML.CreateHtmlTestRowQueue("Build unit tests", 'OK', [dockerfile])
@@ -585,18 +589,16 @@ class Containerize():
if ret.returncode == 0:
HTML.CreateHtmlTestRowQueue('Unit tests succeeded', 'OK', [ret.stdout])
HTML.CreateHtmlTabFooter(True)
return True
else:
HTML.CreateHtmlTestRowQueue('Unit tests failed (see also doc/UnitTests.md)', 'KO', [ret.stdout])
HTML.CreateHtmlTabFooter(False)
return False
def Push_Image_to_Local_Registry(self, node, HTML, tag_prefix=""):
lSourcePath = self.eNBSourceCodePath
logging.debug('Pushing images to server: ' + node)
ssh = cls_cmd.getConnection(node)
imagePrefix = 'porcepix.sboai.cs.eurecom.fr'
imagePrefix = DEFAULT_REGISTRY
ret = ssh.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}')
if ret.returncode != 0:
msg = 'Could not log into local registry'
@@ -667,7 +669,7 @@ class Containerize():
msg = "Pulled Images:\n" + '\n'.join(pulled_images)
return True, msg
def Pull_Image_from_Registry(self, HTML, node, images, tag=None, tag_prefix="", registry="porcepix.sboai.cs.eurecom.fr", username="oaicicd", password="oaicicd"):
def Pull_Image_from_Registry(self, HTML, node, images, tag=None, tag_prefix="", registry=DEFAULT_REGISTRY, username="oaicicd", password="oaicicd"):
logging.debug(f'\u001B[1m Pulling image(s) on server: {node}\u001B[0m')
if not tag:
tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)

View File

@@ -77,7 +77,8 @@ class CoreNetwork:
words = line[1:].strip().split(" ")
script_name = words[0]
options = " ".join(words[1:])
ret = cls_cmd.runScript(host, script_name, 300, parameters=options, silent=silent)
with cls_cmd.getConnection(host) as c:
ret = c.exec_script(script_name, 300, parameters=options, silent=silent)
return ret
def _command(self, cmd_list, must_succeed=False, silent=False):

View File

@@ -64,18 +64,3 @@ class Native():
logging.error('\u001B[1m Building OAI Failed\u001B[0m')
HTML.CreateHtmlTestRow(options, 'KO', CONST.ALL_PROCESSES_OK)
return success
def Run_Physim(ctx, HTML, host, directory, options, physim_test, threshold):
logging.debug(f'Runnin {physim_test} on server: {host}')
workSpacePath = f'{directory}/cmake_targets'
runLogFile=f'{workSpacePath}/physim.log'
with cls_cmd.getConnection(host) as cmd:
cmd.run(f'sudo LD_LIBRARY_PATH=.:{DPDK_PATH}/lib64/ {workSpacePath}/ran_build/build/{physim_test} {options} > {runLogFile} 2>&1')
physim_file = archiveArtifact(cmd, ctx, runLogFile)
success, msg = cls_analysis.Analysis.analyze_physim(physim_file, physim_test, options, threshold)
if success:
HTML.CreateHtmlTestRowQueue(options, 'OK', [msg])
else:
logging.error(msg)
HTML.CreateHtmlTestRowQueue(options, 'KO', [msg])
return success

View File

@@ -247,7 +247,7 @@ class HTMLManagement():
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' </table>\n')
self.htmlFile.write(' <p></p>\n')
self.htmlFile.write(' <div class="well well-lg">End of Test Report -- Copyright <span class="glyphicon glyphicon-copyright-mark"></span> 2018 <a href="http://www.openairinterface.org/">OpenAirInterface</a>. All Rights Reserved.</div>\n')
self.htmlFile.write(' <div class="well well-lg">End of Test Report -- Copyright <span class="glyphicon glyphicon-copyright-mark"></span> 2025 <a href="http://www.openairinterface.org/">OpenAirInterface</a>. All Rights Reserved.</div>\n')
self.htmlFile.write('</div></body>\n')
self.htmlFile.write('</html>\n')
self.htmlFile.close()
@@ -533,6 +533,6 @@ class HTMLManagement():
self.htmlFile.write(' <td bgcolor = "green" ><font color="white"><b>' + value[2] + '</b></font></td>\n')
else:
self.htmlFile.write(' <td bgcolor = "red" ><font color="white"><b>' + value[2] + '</b></font></td>\n')
self.htmlFile.write(' <td bgcolor = "lightcyan">' + value[1] + '</td>\n')
self.htmlFile.write(f' <td colspan="2" bgcolor = "lightcyan"><pre style="display: inline flow-root list-item; margin: 0 3px 0 3px; min-width: 24em;">{value[1]}</pre></td>\n')
self.htmlFile.close()

View File

@@ -46,6 +46,7 @@ import constants as CONST
import cls_module
import cls_corenetwork
import cls_analysis
import cls_cmd
from cls_ci_helper import archiveArtifact
@@ -234,7 +235,8 @@ def Custom_Command(HTML, node, command):
def Custom_Script(HTML, node, script):
logging.info(f"Executing custom script on {node}")
ret = cls_cmd.runScript(node, script, 90)
with cls_cmd.getConnection(node) as c:
ret = c.exec_script(script, 90)
logging.debug(f"Custom_Script: {script} on node: {node} - return code {ret.returncode}, output:\n{ret.stdout}")
status = 'OK'
message = [ret.stdout]
@@ -249,6 +251,34 @@ def IdleSleep(HTML, idle_sleep_time):
HTML.CreateHtmlTestRow(f"{idle_sleep_time} sec", 'OK', CONST.ALL_PROCESSES_OK)
return True
def Deploy_Physim(ctx, HTML, node, workdir, script, options):
logging.debug(f'Running physims on server {node} workdir {workdir}')
with cls_cmd.getConnection(node) as c:
sys_info = c.exec_script("scripts/sys-info.sh", 5)
ret = c.exec_script(script, 1000, options)
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
HTML.CreateHtmlTestRowQueue('Query system info', 'OK', [sys_info.stdout])
with cls_cmd.getConnection(node) as ssh:
details_json = archiveArtifact(ssh, ctx, f'{workdir}/desc-tests.json')
result_junit = archiveArtifact(ssh, ctx, f'{workdir}/results-run.xml')
archiveArtifact(ssh, ctx, f'{workdir}/physim_log.txt')
archiveArtifact(ssh, ctx, f'{workdir}/LastTestsFailed.log')
archiveArtifact(ssh, ctx, f'{workdir}/LastTest.log')
test_status, test_summary, test_result = cls_analysis.Analysis.analyze_physim(result_junit, details_json, ctx.logPath)
if test_summary:
if test_status:
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result)
logging.info('\u001B[1m Physical Simulator Pass\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('At least one physical simulator test failed!', 'KO', ["See below for details"])
HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result)
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('Physical simulator failed', 'KO', [test_result])
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
return test_status
#-----------------------------------------------------------
# OaiCiTest Class Definition
#-----------------------------------------------------------
@@ -473,6 +503,11 @@ class OaiCiTest():
t = iperf_time * 2.5
cmd_ue.run(f'rm {client_filename}', reportNonZero=False, silent=True)
if cn.runIperf3Server():
# Clean up any existing iperf3 server processes on this port.
ret = cmd_svr.run(f"{cn.getCmdPrefix()} pkill -f '.*iperf3.*{port}'", reportNonZero=False)
# If pkill succeeds, it means there was a leftover iperf3 server.
if ret.returncode == 0:
logging.warning(f'Iperf3 server on port {port} detected and terminated')
cmd_svr.run(f'{cn.getCmdPrefix()} timeout -vk3 {t} iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} >> /dev/null &', timeout=t)
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> {client_filename}', timeout=t)
dest_filename = archiveArtifact(cmd_ue, ctx, client_filename)

View File

@@ -15,7 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
@include "neighbour-config.conf"
nr_cellid = 12345678L;

View File

@@ -0,0 +1,76 @@
Active_gNBs = ( "CU-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe88;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "CU-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 001; mnc = 03; mnc_length = 2; snssaiList = ({ sst = 1 }) });
@include "neighbour-config-ho.conf"
nr_cellid = 12345678L;
tr_s_preference = "f1";
local_s_address = "172.21.19.98";
remote_s_address = "0.0.0.0";
local_s_portd = 2153;
remote_s_portd = 2154;
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "172.21.6.109"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.19.98/22";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.19.98/22";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="info";
ngap_log_level ="info";
};

View File

@@ -0,0 +1,82 @@
Active_gNBs = ( "cu-cp-0");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "cu-cp-0";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
@include "neighbour-config.conf"
nr_cellid = 12345678L;
tr_s_preference = "f1";
local_s_address = "192.168.71.150";
remote_s_address = "192.168.71.171";
local_s_portd = 2153;
remote_s_portd = 2153;
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
E1_INTERFACE =
(
{
type = "cp";
ipv4_cucp = "192.168.71.150";
port_cucp = 38462;
ipv4_cuup = "0.0.0.0"; # multiple CU-UPs
port_cuup = 38462;
}
)
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150";
};
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config : {
global_log_level = "info";
pdcp_log_level = "info";
rrc_log_level = "info";
f1ap_log_level = "info";
ngap_log_level = "info";
};

View File

@@ -23,7 +23,6 @@ gNBs =
////////// Physical parameters:
min_rxtxtime = 2;
do_CSIRS = 1;
do_SRS = 1;
servingCellConfigCommon = (
@@ -135,29 +134,19 @@ gNBs =
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 3;
nrofDownlinkSymbols = 10;
nrofUplinkSlots = 1;
nrofUplinkSymbols = 2;
ssPBCH_BlockPower = -25;
}
);
servingCellConfigDedicated = ({
dl_bwp-Id_1 = 1;
dl_bwp1_locationAndBandwidth = 28875; # RBstart=0, L=106 (275*(L-1))+RBstart
dl_bwp1_subcarrierSpacing = 1;
firstActiveDownlinkBWP-Id = 1;
defaultDownlinkBWP-Id = 1;
ul_bwp-Id_1 = 1;
ul_bwp1_locationAndBandwidth = 28875; # RBstart=0, L=106 (275*(L-1))+RBstart
ul_bwp1_subcarrierSpacing = 1;
firstActiveUplinkBWP-Id = 1;
});
first_active_bwp = 1;
bwp_list = ({ scs = 1; bwpStart = 0; bwpSize = 106;});
# ------- SCTP definitions
SCTP :

View File

@@ -0,0 +1,210 @@
Active_gNBs = ( "DU0-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe88;
gNB_DU_ID = 0xe00;
gNB_name = "DU0-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1 ;
plmn_list = ({ mcc = 001; mnc = 03; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# 4186.56 MHz
absoluteFrequencySSB = 679104;
dl_frequencyBand = 77;
# 4175.82 MHz
dl_absoluteFrequencyPointA = 678388;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 51;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 51;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_address = "172.21.19.98";
remote_n_address = "172.21.19.98";
local_n_portd = 2154;
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 230;
# ul_prbblack_SNR_threshold = 10;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 100;
pucch0_dtx_threshold = 10;
max_ldpc_iterations = 20;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0;
att_rx = 0;
sl_ahead = 3;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
# USRP is connected to an Octoclock in order to establish synchroniation with other USRPs
clock_src = "external";
time_src = "external";
}
);
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -0,0 +1,210 @@
Active_gNBs = ( "DU1-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe88;
gNB_DU_ID = 0xe01;
gNB_name = "DU1-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1 ;
plmn_list = ({ mcc = 001; mnc = 03; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 11111111L;
////////// Physical parameters:
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 1;
# downlinkConfigCommon
#frequencyInfoDL
# 4186.56 MHz
absoluteFrequencySSB = 679104;
dl_frequencyBand = 77;
# 4175.82 MHz
dl_absoluteFrequencyPointA = 678388;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 51;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 51;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 2;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_address = "172.21.19.99";
remote_n_address = "172.21.19.98";
local_n_portd = 2154;
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 230;
# ul_prbblack_SNR_threshold = 10;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 100;
pucch0_dtx_threshold = 10;
max_ldpc_iterations = 20;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0;
att_rx = 0;
sl_ahead = 3;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
# USRP is connected to an Octoclock in order to establish synchroniation with other USRPs
clock_src = "external";
time_src = "external";
}
);
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -197,7 +197,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; # 150;
pucch_TargetSNRx10 = 200; #200;
ulsch_max_frame_inactivity = 10;
dl_max_mcs = 28;
ul_max_mcs = 28;
}

View File

@@ -0,0 +1,227 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
nfapi = "AERIAL";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1; }); });
nr_cellid = 12345678L;
uess_agg_levels = [0,6,0,0,0];
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 0;
min_rxtxtime = 2;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# center frequency = 3350.01 MHz
# selected SSB frequency = 3349.92 MHz
absoluteFrequencySSB = 623328;
dl_frequencyBand = 78;
# frequency point A = 3300.87 MHz
dl_absoluteFrequencyPointA = 620058;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
initialDLBWPlocationAndBandwidth = 1099;
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 159;# testMAC 158; OAI gNB 98
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 12;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant = -90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 1;
nrofDownlinkSymbols = 10;
nrofUplinkSlots = 3;
nrofUplinkSymbols = 0;
ssPBCH_BlockPower = -10;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "172.21.6.103"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.202";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.202";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
remote_s_address = "127.0.0.1"; // pnf addr [!]
local_s_address = "127.0.0.2"; // vnf addr
local_s_portc = 50001; // vnf p5 port
remote_s_portc = 50000; // pnf p5 port [!]
local_s_portd = 50011; // vnf p7 port [!]
remote_s_portd = 50010; // pnf p7 port [!]
tr_s_preference = "aerial";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220; # 150;
pucch_TargetSNRx10 = 200; #200;
dl_max_mcs = 28;
ul_max_mcs = 28;
ul_min_mcs = 16;
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -198,7 +198,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
# ulsch_max_frame_inactivity = 0;
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
dl_max_mcs = 9;

View File

@@ -16,6 +16,7 @@ gNBs =
////////// Physical parameters:
CSI_report_type = "ssb_sinr";
min_rxtxtime = 6;
disable_harq = 1;
cu_sibs = [2];
@@ -205,7 +206,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
# ulsch_max_frame_inactivity = 0;
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
dl_max_mcs = 9;

View File

@@ -24,6 +24,7 @@ gNBs =
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 1;
uess_agg_levels = [4,2,0,0,0];
servingCellConfigCommon = (
{
@@ -139,9 +140,9 @@ gNBs =
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 2;
nrofDownlinkSlots = 1;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSlots = 3;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -20;
@@ -178,11 +179,12 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 300;
pucch_TargetSNRx10 = 300;
ulsch_max_frame_inactivity = 0;
pusch_TargetSNRx10 = 320;
pucch_TargetSNRx10 = 320;
pusch_FailureThres = 100;
ul_max_mcs = 28;
ul_max_mcs = 28;
ul_bler_target_upper = 0.20;
ul_bler_target_lower = 0.10;
}
);

View File

@@ -106,8 +106,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
@@ -193,8 +192,6 @@ RUs = (
eNB_instances = [0];
ru_thread_core = 6;
sl_ahead = 10; #5;
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000,0x00007fff, 0x0000];
tr_preference = "raw_if4p5"; # important: activate FHI7.2
do_precoding = 0; # needs to match O-RU configuration
}

View File

@@ -175,7 +175,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 270;
pucch_TargetSNRx10 = 270;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
ul_max_mcs = 25;
}
);

View File

@@ -0,0 +1,237 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 001; mnc = 03; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
// Include neighbour configuration for N2 handover
@include "neighbour-config-ho.conf"
nr_cellid = 12345678L;
////////// Physical parameters:
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3610.56 MHz
absoluteFrequencySSB = 679104;
dl_frequencyBand = 77;
# this is 3599.94 MHz
dl_absoluteFrequencyPointA = 678388;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 51;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 51;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "172.21.6.109"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.19.98";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.19.98";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0;
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
clock_src = "external";
time_src = "external";
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -112,7 +112,7 @@ gNBs =
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
p0_nominal = -80;
ssb_PositionsInBurst_Bitmap = 1;
@@ -175,7 +175,7 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 180;
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
}
);
@@ -184,7 +184,7 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
prach_dtx_threshold = 150;
#pucch0_dtx_threshold = 150;
}
);
@@ -198,7 +198,7 @@ RUs = (
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 65;
max_rxgain = 70;
eNB_instances = [0];
sf_extension = 0
sdr_addrs = "addr=192.168.80.52,clock_source=internal,time_source=internal"

View File

@@ -18,8 +18,6 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
min_rxtxtime = 6;
servingCellConfigCommon = (
@@ -145,64 +143,10 @@ gNBs =
);
# Dedicated Serving Cell Configuration
servingCellConfigDedicated = ({
# BWP-Downlink
# BWP 1 Configuration
dl_bwp-Id_1 = 1;
dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp1_subcarrierSpacing = 1;
# BWP 2 Configuration
dl_bwp-Id_2 = 2;
dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp2_subcarrierSpacing = 1;
# BWP 3 Configuration
dl_bwp-Id_3 = 3;
dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_bwp3_subcarrierSpacing = 1;
firstActiveDownlinkBWP-Id = 1; #BWP-Id
defaultDownlinkBWP-Id = 1; #BWP-Id
# bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
# ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
# ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
# spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
# UplinkConfig
# BWP-Uplink
# BWP 1 Configuration
ul_bwp-Id_1 = 1;
ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp1_subcarrierSpacing = 1;
# BWP 2 Configuration
ul_bwp-Id_2 = 2;
ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp2_subcarrierSpacing = 1;
# BWP 3 Configuration
ul_bwp-Id_3 = 3;
ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_bwp3_subcarrierSpacing = 1;
firstActiveUplinkBWP-Id = 1; #BWP-Id
}
);
first_active_bwp = 1;
bwp_list = ({ scs = 1; bwpStart = 0; bwpSize = 106;},
{ scs = 1; bwpStart = 0; bwpSize = 51;},
{ scs = 1; bwpStart = 0; bwpSize = 24;});
# ------- SCTP definitions
@@ -233,7 +177,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 250;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -146,6 +146,7 @@ MACRLCs:
tr_n_preference: local_RRC
pusch_TargetSNRx10: 200
pucch_TargetSNRx10: 200
stats_max_ue: 17
L1s:
- num_cc: 1

View File

@@ -196,6 +196,7 @@ RUs = (
att_tx = 0
att_rx = 0;
bands = [78];
sl_ahead=3;
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
sf_extension = 0;

View File

@@ -21,10 +21,6 @@ gNBs =
nr_cellid = 12345678L
////////// Physical parameters:
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 1;
do_CSIRS = 1;
do_SRS = 0;
uess_agg_levels = [2, 2, 2, 0, 0];
servingCellConfigCommon = (
@@ -186,6 +182,7 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
stats_max_ue = 17;
}
);

View File

@@ -0,0 +1,54 @@
neighbour_list = (
{
nr_cellid = 12345678;
neighbour_cell_configuration = (
{
gNB_ID = 0xe01;
nr_cellid = 11111111;
physical_cellId = 1;
absoluteFrequencySSB = 679104;
subcarrierSpacing = 1; #30 KHz
band = 77;
plmn = { mcc = 001; mnc = 03; mnc_length = 2};
tracking_area_code = 1;
}
)
},
{
nr_cellid = 11111111;
neighbour_cell_configuration = (
{
gNB_ID = 0xe00;
nr_cellid = 12345678;
physical_cellId = 0;
absoluteFrequencySSB = 679104;
subcarrierSpacing = 1; #30 KHz
band = 77;
plmn = { mcc = 001; mnc = 03; mnc_length = 2};
tracking_area_code = 1;
}
)
}
);
nr_measurement_configuration = {
Periodical = {
enable = 1;
includeBeamMeasurements = 1;
maxNrofRS_IndexesToReport = 4;
};
A2 = {
enable = 1;
threshold = 110;
timeToTrigger = 1;
};
A3 = ({
cell_id = -1; #Default
offset = 10;
hysteresis = 0;
timeToTrigger = 1
})
};

View File

@@ -1,52 +1,51 @@
neighbour_list = (
{
nr_cellid = 1;
neighbour_cell_configuration = (
{
gNB_ID = 0xb00;
nr_cellid = 2;
physical_cellId = 0x002;
absoluteFrequencySSB = 641280 ;
subcarrierSpacing = 1; #30 KHz
plmn = { mcc = 216; mnc = 03; mnc_length = 2};
tracking_area_code = 2;
},
{
gNB_ID = 0xa00;
nr_cellid = 3;
physical_cellId = 0x003;
absoluteFrequencySSB = 641280 ;
subcarrierSpacing = 1; #30 KHz
plmn = { mcc = 999; mnc = 99; mnc_length = 2};
tracking_area_code = 3;
},
{
gNB_ID = 0xc00;
nr_cellid = 4;
physical_cellId = 0x004;
absoluteFrequencySSB = 641280 ;
subcarrierSpacing = 1; #30 KHz
plmn = { mcc = 999; mnc = 99; mnc_length = 2};
tracking_area_code = 4;
}
)
},
{
nr_cellid = 2;
neighbour_cell_configuration = (
{
gNB_ID = 0xe00;
nr_cellid = 1;
physical_cellId = 0x000;
absoluteFrequencySSB = 641280 ;
subcarrierSpacing = 1; #30 KHz
plmn = { mcc = 001; mnc = 01; mnc_length = 2};
tracking_area_code = 1;
}
)
}
);
############################################################
# gNB-to-gNB neighbour list + measurement configuration #
# for the 2-cell rfsim setup (gNB_ID 0xe00 & 0xb00) #
############################################################
neighbour_list = (
##########################################################
# Entry USED BY gNB_ID = 0xe00 (nr_cellid = 1) #
##########################################################
{
nr_cellid = 0; # Serving cell of gNB 0xe00
neighbour_cell_configuration = (
{
gNB_ID = 0xb00;
nr_cellid = 1; # Cell served by gNB 0xb00
physical_cellId = 1;
absoluteFrequencySSB= 621312;
subcarrierSpacing = 1; # 30 kHz
band = 78;
plmn = { mcc = 208; mnc = 99; mnc_length = 2 };
tracking_area_code = 1;
}
);
},
##########################################################
# Entry USED BY gNB_ID = 0xb00 (nr_cellid = 2) #
##########################################################
{
nr_cellid = 1; # Serving cell of gNB 0xb00
neighbour_cell_configuration = (
{
gNB_ID = 0xe00;
nr_cellid = 0; # Cell served by gNB 0xe00
physical_cellId = 0;
absoluteFrequencySSB= 641280;
subcarrierSpacing = 1; # 30 kHz
band = 78;
plmn = { mcc = 208; mnc = 99; mnc_length = 2 };
tracking_area_code = 1;
}
);
}
);
############################################################
# Common NR measurement-event configuration #
############################################################
nr_measurement_configuration = {
Periodical = {

View File

@@ -14,7 +14,6 @@ key = "fec86ba6eb707ed08905757b1bb44b8f";
opc= "C42449363BBAD02B66D16BC975D77CC1";
dnn= "oai";
nssai_sst=1;
nssai_sd=16777215;
}
MACRLCs = (

View File

@@ -4,7 +4,6 @@ uicc0 = {
opc= "c42449363bbad02b66d16bc975d77cc1";
dnn= "oai";
nssai_sst=1;
nssai_sd=66051;
}
thread-pool = "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1"

View File

@@ -86,7 +86,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -100,8 +100,8 @@ gNBs =
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -96,8 +96,8 @@ gNBs =
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -105,8 +105,8 @@ gNBs =
powerRampingStep = 1;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -80,7 +80,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -85,7 +85,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -84,7 +84,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -17,9 +17,6 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -83,7 +80,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -82,7 +82,7 @@ gNBs =
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64

View File

@@ -0,0 +1,47 @@
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 24.04
#
#---------------------------------------------------------------------
FROM ran-base:develop AS ran-tests
#RUN apt-get update && \
# DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
# DEBIAN_FRONTEND=noninteractive apt-get install --yes \
# libgtest-dev \
# libyaml-cpp-dev
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
COPY . .
WORKDIR /oai-ran/build
# TODO should SANITIZE be ON? it makes it compile much longer
RUN cmake -GNinja -DENABLE_PHYSIM_TESTS=ON \
-DSANITIZE_UNDEFINED=OFF -DSANITIZE_ADDRESS=OFF \
-DCMAKE_C_FLAGS=-Werror -DCMAKE_CXX_FLAGS=-Werror \
-DPHYSIM_CHECK_FILES="ThresholdsGracehopper.cmake" \
.. && \
ninja ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim

View File

@@ -242,10 +242,22 @@ def ExecuteActionWithParam(action, ctx):
st = test.findtext('idle_sleep_time_in_sec') or "5"
success = cls_oaicitest.IdleSleep(HTML, int(st))
elif action == 'Deploy_Run_PhySim':
elif action == 'Deploy_Run_OC_PhySim':
oc_release = test.findtext('oc_release')
node = test.findtext('node') or None
success = CLUSTER.deploy_oc_physim(ctx, HTML, oc_release, node)
script = "scripts/oc-deploy-physims.sh"
image_tag = cls_containerize.CreateTag(CLUSTER.ranCommitID, CLUSTER.ranBranch, CLUSTER.ranAllowMerge)
options = f"oaicicd-core-for-ci-ran {oc_release} {image_tag} {CLUSTER.eNBSourceCodePath}"
workdir = CLUSTER.eNBSourceCodePath
success = cls_oaicitest.Deploy_Physim(ctx, HTML, node, workdir, script, options)
elif action == 'Build_Deploy_Docker_PhySim' or action == 'Build_Deploy_Source_PhySim':
node = test.findtext('node') or None
ctest_opt = test.findtext('ctest-opt') or ''
script = "scripts/docker-build-and-deploy-physims.sh" if action == 'Build_Deploy_Docker_PhySim' else 'scripts/source-deploy-physims.sh'
options = f"{CONTAINERS.eNBSourceCodePath} {ctest_opt}"
workdir = CONTAINERS.eNBSourceCodePath
success = cls_oaicitest.Deploy_Physim(ctx, HTML, node, workdir, script, options)
elif action == 'DeployCoreNetwork' or action == 'UndeployCoreNetwork':
cn_id = test.findtext('cn_id')
@@ -274,13 +286,6 @@ def ExecuteActionWithParam(action, ctx):
return True
success = CONTAINERS.Create_Workspace(node, HTML)
elif action == 'Run_Physim':
physim_options = test.findtext('physim_run_args')
physim_test = test.findtext('physim_test')
physim_threshold = test.findtext('physim_time_threshold') or 'inf'
node = test.findtext('node')
success = cls_native.Native.Run_Physim(ctx, HTML, node, RAN.eNBSourceCodePath, physim_options, physim_test, physim_threshold)
elif action == 'LicenceAndFormattingCheck':
node = test.findtext('node')
success = SCA.LicenceAndFormattingCheck(ctx, node, HTML)
@@ -316,11 +321,15 @@ def ExecuteActionWithParam(action, ctx):
# Change all execution targets to localhost
node = 'localhost'
command = test.findtext('command')
# Allow referencing repository workspace path in XML via %%workspace%%
command = command.replace("%%workspace%%", CONTAINERS.eNBSourceCodePath)
success = cls_oaicitest.Custom_Command(HTML, node, command)
elif action == 'Custom_Script':
node = test.findtext('node')
script = test.findtext('script')
# Allow referencing repository workspace path in XML via %%workspace%%
script = script.replace("%%workspace%%", CONTAINERS.eNBSourceCodePath)
success = cls_oaicitest.Custom_Script(HTML, node, script)
elif action == 'Pull_Cluster_Image':

View File

@@ -1,3 +1,7 @@
set -x
sudo mbimcli -p -d /dev/cdc-wdm0 --set-radio-state=off
IF=wwan0
sudo ip link set ${IF} down
sudo ip addr flush dev ${IF}

View File

@@ -15,16 +15,18 @@ fi
# The script assumes you've build the following images:
#
# docker build . -f docker/Dockerfile.gNB.ubuntu22 -t oai-gnb
# docker build . -f docker/Dockerfile.nrUE.ubuntu22 -t oai-nr-ue
# docker build . -f docker/Dockerfile.gNB.ubuntu -t oai-gnb
# docker build . -f docker/Dockerfile.nr-cuup.ubuntu -t oai-nr-cuup
# docker build . -f docker/Dockerfile.nrUE.ubuntu -t oai-nr-ue
#
# The images above depend on the following images:
#
# docker build . -f docker/Dockerfile.build.ubuntu22 -t ran-build
# dokcer build . -f docker/Dockerfile.base.ubuntu22 -t ran-base
# docker build . -f docker/Dockerfile.build.ubuntu -t ran-build
# docker build . -f docker/Dockerfile.base.ubuntu -t ran-base
docker tag oai-nr-ue oai-ci/oai-nr-ue:develop-${SHORT_COMMIT_SHA}
docker tag oai-gnb oai-ci/oai-gnb:develop-${SHORT_COMMIT_SHA}
docker tag oai-nr-cuup oai-ci/oai-nr-cuup:develop-${SHORT_COMMIT_SHA}
python3 main.py --mode=InitiateHtml --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \
--ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \

View File

@@ -22,5 +22,5 @@ git config user.name "OAI Jenkins"
git config advice.detachedHead false
mkdir -p cmake_targets/log
git checkout -f ${ref}
[ -n "${merge}" ] && git merge --ff ${merge} -m "Temporary merge for CI"
[ -n "${merge}" ] && git fetch origin ${merge} && git merge --ff FETCH_HEAD -m "Temporary merge for CI"
exit 0

View File

@@ -0,0 +1,46 @@
#!/bin/bash
function die() { echo $@; exit 1; }
[ $# -ge 1 ] || die "usage: $0 <directory> [ctest-options]"
IMAGE=ran-physimtests:ci-temp
CONTAINER=ran-physimtests
function cleanup-docker() {
docker stop ${CONTAINER}
docker rm ${CONTAINER}
docker rmi ${IMAGE}
docker volume prune --force
}
trap cleanup-docker EXIT
set -x
DIR=$1
RESULT_DIR=${DIR}/
shift
CTEST_OPT=$@
# build physims
docker build --progress=plain --tag ${IMAGE} --file ${DIR}/ci-scripts/docker/Dockerfile.physim.ubuntu ${DIR} &>> ${RESULT_DIR}/physim_log.txt
if [ $? -ne 0 ]; then
echo "build of physims failed"
exit 1
fi
# get a JSON description of all tests to run
docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --rm --name ${CONTAINER} ${IMAGE} ctest ${CTEST_OPT} --show-only=json-v1 &> ${RESULT_DIR}/desc-tests.json
JSON_RES=$?
# run the actual tests: we don't suppy --rm as we have to copy the files
# similar to unit tests, we can't mount the file where we write physims-5g-run.xml to
# as it would write a file as root, but this script is run as a normal user
docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ${CONTAINER} ${IMAGE} ctest ${CTEST_OPT} --output-junit results-run.xml --test-output-size-passed 100000 --test-output-size-failed 100000 &>> ${RESULT_DIR}/physim_log.txt
RUN_RES=$?
docker cp ${CONTAINER}:/oai-ran/build/results-run.xml ${RESULT_DIR}/
docker cp ${CONTAINER}:/oai-ran/build/Testing/Temporary/LastTestsFailed.log ${RESULT_DIR}/
docker cp ${CONTAINER}:/oai-ran/build/Testing/Temporary/LastTest.log ${RESULT_DIR}/
# if both were successful, return 0
# TODO not sure
#[[ $JSON_RES -eq 0 && $RUN_RES -eq 0 ]] && exit 0
exit 0

View File

@@ -1,7 +1,5 @@
#!/bin/bash
set -e
function die() { echo $@; exit 1; }
[ $# -eq 4 ] || die "usage: $0 <namespace> <release> <image tag> <oai directory>"
@@ -11,23 +9,31 @@ IMG_TAG=${3}
OAI_DIR=${4}
cat /opt/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
set -x
oc project ${OC_NS} > /dev/null
oc tag oaicicd-ran/oai-physim:${IMG_TAG} ${OC_NS}/oai-physim:${IMG_TAG}
helm install ${OC_RELEASE} ${OAI_DIR}/charts/${OC_RELEASE} --set global.image.version=${IMG_TAG} --wait
helm install ${OC_RELEASE} ${OAI_DIR}/charts/${OC_RELEASE} --set global.image.version=${IMG_TAG} --wait --timeout 120s
set +x
POD_ID=$(oc get pods | grep oai-${OC_RELEASE} | awk '{print $1}')
sleep 10
wait_creating=30
while [[ $(oc describe pod "$POD_ID" | grep "ContainerCreating") && ${wait_creating} > 0 ]]; do
sleep 1;
let wait_creating=$wait_creating-1
done
echo "Monitoring logs for 'FINISHED' in pod '$POD_ID'"
oc logs -f -n ${OC_NS} "$POD_ID" | while read -r line; do
if [[ "$line" == *"FINISHED"* ]]; then
echo "'FINISHED' detected in logs. Copying logs..."
oc logs -n ${OC_NS} "$POD_ID" >> ${OAI_DIR}/ci-scripts/physim_log.txt
oc describe pod $POD_ID >> ${OAI_DIR}/ci-scripts/physim_pods_summary.txt
oc cp "$POD_ID":/opt/oai-physim/Testing/Temporary/LastTestsFailed.log ${OAI_DIR}/ci-scripts/LastTestsFailed.log
oc cp "$POD_ID":/opt/oai-physim/${OC_RELEASE}-tests.json ${OAI_DIR}/ci-scripts/${OC_RELEASE}-tests.json
oc cp "$POD_ID":/opt/oai-physim/${OC_RELEASE}-run.xml ${OAI_DIR}/ci-scripts/${OC_RELEASE}-run.xml
oc cp "$POD_ID":/opt/oai-physim/Testing/Temporary/LastTestsFailed.log ${OAI_DIR}/LastTestsFailed.log
oc cp "$POD_ID":/opt/oai-physim/Testing/Temporary/LastTest.log ${OAI_DIR}/LastTest.log
oc cp "$POD_ID":/opt/oai-physim/${OC_RELEASE}-tests.json ${OAI_DIR}/desc-tests.json
oc cp "$POD_ID":/opt/oai-physim/${OC_RELEASE}-run.xml ${OAI_DIR}/results-run.xml
break
fi
done
set -x
oc logs -n ${OC_NS} "$POD_ID" >> ${OAI_DIR}/physim_log.txt
oc describe pod $POD_ID >> ${OAI_DIR}/physim_log.txt
helm uninstall ${OC_RELEASE} --wait
oc delete istag oai-physim:${IMG_TAG} -n ${OC_NS}
oc logout > /dev/null

View File

@@ -0,0 +1,30 @@
function die() { echo $@; exit 1; }
[ $# -ge 1 ] || die "usage: $0 <directory> [ctest-options]"
set -x
DIR=$1
shift
CTEST_OPT=$@
cd ${DIR}/cmake_targets/ran_build/build
ninja ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim
# get a JSON description of all tests to run
ctest ${CTEST_OPT} --show-only=json-v1 &> ${DIR}/desc-tests.json
JSON_RES=$?
# we run the T2 offload tests, so provide some additional permissions
# to be able to initialize DPDK
sudo setcap cap_dac_override,cap_sys_admin+ep nr_ulsim
sudo setcap cap_dac_override,cap_sys_admin+ep nr_dlsim
ctest ${CTEST_OPT} --output-junit ${DIR}/results-run.xml --test-output-size-passed 100000 --test-output-size-failed 100000 &>> ${DIR}/physim_log.txt
RUN_RES=$?
cp Testing/Temporary/LastTestsFailed.log ${DIR}/
cp Testing/Temporary/LastTest.log ${DIR}/
# if both were successful, return 0
# TODO not sure
#[[ $JSON_RES -eq 0 && $RUN_RES -eq 0 ]] && exit 0
exit 0

17
ci-scripts/scripts/sys-info.sh Executable file
View File

@@ -0,0 +1,17 @@
CORES=$(nproc)
MODEL=$(lscpu | awk -F: '/Model name/ {print $2; exit}' | xargs)
MAX_FREQ=$(lscpu | awk -F: '/CPU max MHz/ {printf "%.2f MHz", $2; exit}')
CURRENT_FREQ=$(awk -F: '/cpu MHz/ {printf " %.2f MHz", $2; exit}' /proc/cpuinfo)
RAM=$(free -h --si | awk '/Mem:/ {print $2}')
# sudo -n: non-interactive, will silently fail in case we don't have privileges
DMID=$(sudo -n dmidecode -t memory 2>/dev/null)
if [ $? -eq 0 ]; then
RAM_TYPE=$(echo "$DMID" | awk -F: '/Type:/ {print $2}' | grep -Ev 'Unknown|Other|None' | head -1 | xargs)
else
RAM_TYPE="can't query"
fi
echo "CPU: model ${MODEL}"
echo "${CORES} cores, max CPU freq ${MAX_FREQ}, current ${CURRENT_FREQ}"
echo "RAM ${RAM} type ${RAM_TYPE}"

View File

@@ -36,17 +36,20 @@ class TestCmd(unittest.TestCase):
self.assertEqual(ret.stdout, "test")
def test_local_script(self):
ret = cls_cmd.runScript("localhost", "tests/scripts/hello-world.sh", 1)
with cls_cmd.getConnection("localhost") as ssh:
ret = ssh.exec_script("tests/scripts/hello-world.sh", 1)
self.assertEqual(ret.args, "tests/scripts/hello-world.sh")
self.assertEqual(ret.returncode, 0)
self.assertEqual(ret.stdout, "+ echo hello, world\nhello, world")
ret = cls_cmd.runScript("localhost", "tests/scripts/hello-fail.sh", 1, "TESTFAIL")
with cls_cmd.getConnection("localhost") as ssh:
ret = ssh.exec_script("tests/scripts/hello-fail.sh", 1, "TESTFAIL")
self.assertEqual(ret.args, "tests/scripts/hello-fail.sh TESTFAIL")
self.assertEqual(ret.returncode, 1)
self.assertEqual(ret.stdout, "TESTFAIL")
ret = cls_cmd.runScript("localhost", "tests/scripts/hello-fail.sh", 1, "TESTFAIL2", "/tmp/result")
with cls_cmd.getConnection("localhost") as ssh:
ret = ssh.exec_script("tests/scripts/hello-fail.sh", 1, "TESTFAIL2", "/tmp/result")
self.assertEqual(ret.args, "tests/scripts/hello-fail.sh TESTFAIL2 &> /tmp/result")
self.assertEqual(ret.returncode, 1)
self.assertEqual(ret.stdout, "")
@@ -75,17 +78,20 @@ class TestCmd(unittest.TestCase):
@unittest.skip("need to be able to passwordlessly SSH to localhost, also disable stty -ixon")
def test_remote_script(self):
ret = cls_cmd.runScript("127.0.0.1", "tests/scripts/hello-world.sh", 1)
with cls_cmd.getConnection("127.0.0.1") as ssh:
ret = ssh.exec_script("tests/scripts/hello-world.sh", 1)
self.assertEqual(ret.args, "tests/scripts/hello-world.sh")
self.assertEqual(ret.returncode, 0)
self.assertEqual(ret.stdout, "+ echo hello, world\nhello, world")
ret = cls_cmd.runScript("127.0.0.1", "tests/scripts/hello-fail.sh", 1, "TESTFAIL")
with cls_cmd.getConnection("127.0.0.1") as ssh:
ret = ssh.exec_script("tests/scripts/hello-fail.sh", 1, "TESTFAIL")
self.assertEqual(ret.args, "tests/scripts/hello-fail.sh TESTFAIL")
self.assertEqual(ret.returncode, 1)
self.assertEqual(ret.stdout, "TESTFAIL")
ret = cls_cmd.runScript("127.0.0.1", "tests/scripts/hello-fail.sh", 1, "TESTFAIL2", "/tmp/result")
with cls_cmd.getConnection("127.0.0.1") as ssh:
ret = ssh.exec_script("tests/scripts/hello-fail.sh", 1, "TESTFAIL2", "/tmp/result")
self.assertEqual(ret.args, "tests/scripts/hello-fail.sh TESTFAIL2 &> /tmp/result")
self.assertEqual(ret.returncode, 1)
self.assertEqual(ret.stdout, "")

View File

@@ -26,7 +26,7 @@ class TestDeploymentMethods(unittest.TestCase):
# the pull function has the authentication at the internal cluster hardcoded
# this is a refactoring opportunity: we should do it in a separate step
# and allow to have pull work with any registry
registry = "porcepix.sboai.cs.eurecom.fr"
registry = cls_containerize.DEFAULT_REGISTRY
with cls_cmd.getConnection("localhost") as cmd:
ret = cmd.run(f"ping -c1 -w1 {registry}")
if ret.returncode != 0: # could not ping once -> skip test

View File

@@ -1,7 +1,6 @@
- Build_Proxy
- Build_Cluster_Image
- Pull_Cluster_Image
- Run_Physim
- Build_eNB
- Initialize_eNB
- Terminate_eNB
@@ -23,7 +22,9 @@
- Deploy_Object
- Undeploy_Object
- Cppcheck_Analysis
- Deploy_Run_PhySim
- Deploy_Run_OC_PhySim
- Build_Deploy_Docker_PhySim
- Build_Deploy_Source_PhySim
- LicenceAndFormattingCheck
- Push_Local_Registry
- Pull_Local_Registry

View File

@@ -44,7 +44,7 @@
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>obelix</node>
<node>localhost</node>
<images>oai-enb oai-lte-ue</images>
</testCase>
<testCase id="800813">
@@ -88,16 +88,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE</desc>
<id>l2sim4g_ue</id>
<nodes>obelix</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping trf-gen from LTE-UE 1</desc>
<id>l2sim4g_ue</id>
<nodes>obelix</nodes>
<nodes>localhost</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>obelix</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -106,9 +106,9 @@
<class>Ping</class>
<desc>Ping LTE-UE 1 from trf-gen</desc>
<id>l2sim4g_ext_dn</id>
<nodes>obelix</nodes>
<nodes>localhost</nodes>
<svr_id>l2sim4g_ue</svr_id>
<svr_node>obelix</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -117,9 +117,9 @@
<class>Iperf</class>
<desc>Iperf UDP Downlink</desc>
<id>l2sim4g_ue</id>
<nodes>obelix</nodes>
<nodes>localhost</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>obelix</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 1M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -129,9 +129,9 @@
<class>Iperf</class>
<desc>Iperf UDP Uplink</desc>
<id>l2sim4g_ue</id>
<nodes>obelix</nodes>
<nodes>localhost</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>obelix</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 3M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -149,7 +149,7 @@
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>obelix</node>
<node>localhost</node>
<images>oai-enb oai-lte-ue</images>
</testCase>

View File

@@ -103,16 +103,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -121,9 +121,9 @@
<class>Ping</class>
<desc>Ping LTE-UE from Traffic-Gen</desc>
<id>rfsim4g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -136,8 +136,8 @@
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
<nodes>acamas</nodes>
<svr_node>acamas</svr_node>
<nodes>localhost</nodes>
<svr_node>localhost</svr_node>
</testCase>
<testCase id="030011">
@@ -148,8 +148,8 @@
<iperf_args>-u -t 30 -b 1M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
<nodes>acamas</nodes>
<svr_node>acamas</svr_node>
<nodes>localhost</nodes>
<svr_node>localhost</svr_node>
</testCase>
<testCase id="100011">

View File

@@ -83,9 +83,9 @@
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -94,9 +94,9 @@
<class>Ping</class>
<desc>Ping LTE-UE from eNB</desc>
<id>rfsim4g_enb_nos1</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -105,9 +105,9 @@
<class>Iperf</class>
<desc>Iperf UDP DL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -117,9 +117,9 @@
<class>Iperf</class>
<desc>Iperf UDP UL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 1M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -103,16 +103,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -121,9 +121,9 @@
<class>Ping</class>
<desc>Ping LTE-UE from Traffic-Gen</desc>
<id>rfsim4g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -132,9 +132,9 @@
<class>Iperf</class>
<desc>Iperf UDP DL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -144,9 +144,9 @@
<class>Iperf</class>
<desc>Iperf UDP UL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 1M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -103,16 +103,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -121,9 +121,9 @@
<class>Ping</class>
<desc>Ping LTE-UE from Traffic-Gen</desc>
<id>rfsim4g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -132,9 +132,9 @@
<class>Iperf</class>
<desc>Iperf UDP DL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -144,9 +144,9 @@
<class>Iperf</class>
<desc>Iperf UDP UL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 1M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -80,9 +80,9 @@
<class>Iperf2_Unidir</class>
<desc>Iperf2 UDP DL</desc>
<id>rfsim4g_ue_fembms</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_enb_fembms</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -80,9 +80,9 @@
<class>Iperf</class>
<desc>Iperf UDP DL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -103,9 +103,9 @@
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -114,9 +114,9 @@
<class>Ping</class>
<desc>Ping LTE-UE from Traffic-Gen</desc>
<id>rfsim4g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -125,9 +125,9 @@
<class>Iperf</class>
<desc>Iperf UDP DL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
@@ -137,9 +137,9 @@
<class>Iperf</class>
<desc>Iperf UDP UL</desc>
<id>rfsim4g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_args>-u -t 30 -b 1M</iperf_args>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>

View File

@@ -76,16 +76,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
<nodes>acamas acamas acamas</nodes>
<nodes>localhost localhost localhost</nodes>
</testCase>
<testCase id="020021">
<class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
<nodes>acamas acamas acamas</nodes>
<nodes>localhost localhost localhost</nodes>
<svr_id>rfsim5g_5gc_fixed_ip</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>

View File

@@ -55,6 +55,10 @@
000031
020022
040026
040025
000031
020022
040027
100021
222222
</TestCaseRequestedList>
@@ -64,7 +68,7 @@
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
<images>oai-gnb-asan oai-nr-ue-asan</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
@@ -103,7 +107,7 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="000024">
@@ -118,9 +122,9 @@
<class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -128,30 +132,30 @@
<testCase id="030020">
<class>Custom_Command</class>
<desc>Simulate a DL radio channel with noise (3 dB)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo channelmod modify 0 noise_power_dB 3 | ncat --send-only 192.168.71.181 8091</command>
</testCase>
<testCase id="030021">
<class>Iperf</class>
<desc>Iperf (DL/5Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 5M -t 20 -R</iperf_args>
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030022">
<class>Iperf</class>
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -159,7 +163,7 @@
<testCase id="040001">
<class>Custom_Command</class>
<desc>Trigger Reestablishment</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci force_reestab | ncat 192.168.71.171 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
</testCase>
@@ -167,9 +171,9 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.5 -w25</ping_args>
<ping_packetloss_threshold>80</ping_packetloss_threshold>
</testCase>
@@ -177,56 +181,56 @@
<testCase id="040002">
<class>Custom_Command</class>
<desc>Verify Reestablishment</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci get_reestab_count | ncat 192.168.71.150 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
</testCase>
<testCase id="040021">
<class>Custom_Command</class>
<desc>Simulate a disruption of DL radio channel (ploss 55)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo channelmod modify 0 ploss 55 | ncat 192.168.71.181 8091</command>
</testCase>
<testCase id="040022">
<class>Custom_Command</class>
<desc>Get UE sync state (UE ID 0)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_NOT_SYNC</command>
</testCase>
<testCase id="040023">
<class>Custom_Command</class>
<desc>Restoration of the original DL channel conditions (ploss 20)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo channelmod modify 0 ploss 20 | ncat 192.168.71.181 8091</command>
</testCase>
<testCase id="040024">
<class>Custom_Command</class>
<desc>Get UE sync state (UE ID 0)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_CONNECTED</command>
</testCase>
<testCase id="040025">
<class>Custom_Command</class>
<desc>Trigger Handover</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci trigger_f1_ho | ncat 192.168.71.150 9090</command>
</testCase>
<testCase id="040026">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 0?</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584"</command>
</testCase>
<testCase id="040027">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 1?</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3585"</command>
</testCase>
@@ -245,7 +249,7 @@
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
<images>oai-gnb-asan oai-nr-ue-asan</images>
</testCase>
</testCaseList>

View File

@@ -70,16 +70,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -88,9 +88,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -100,9 +100,9 @@
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -112,9 +112,9 @@
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 30</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -125,16 +125,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10</id>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
<nodes>localhost localhost localhost localhost localhost localhost localhost localhost localhost localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -143,9 +143,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -154,9 +154,9 @@
<class>Ping</class>
<desc>Ping ext-dn from Second NR-UE</desc>
<id>rfsim5g_ue2</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -165,9 +165,9 @@
<class>Ping</class>
<desc>Ping Second NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue2</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -176,9 +176,9 @@
<class>Ping</class>
<desc>Ping ext-dn from both UEs</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<nodes>acamas acamas</nodes>
<nodes>localhost localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -187,33 +187,33 @@
<class>Ping</class>
<desc>Ping ext-dn from all UEs</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10</id>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
<nodes>localhost localhost localhost localhost localhost localhost localhost localhost localhost localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25 -s 1016</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -222,21 +222,21 @@
<class>Attach_UE</class>
<desc>Attach OAI UE 1 and 2</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<nodes>acamas acamas</nodes>
<nodes>localhost localhost</nodes>
</testCase>
<testCase id="444444">
<class>Detach_UE</class>
<desc>Detach OAI UE 1 and 2</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<nodes>acamas acamas</nodes>
<nodes>localhost localhost</nodes>
</testCase>
<testCase id="444445">
<class>Detach_UE</class>
<desc>Detach OAI UE 3 to 10</desc>
<id>rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10</id>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
<nodes>localhost localhost localhost localhost localhost localhost localhost localhost</nodes>
</testCase>
<testCase id="100001">

View File

@@ -88,7 +88,7 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="000004">
@@ -101,9 +101,9 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args> -c 20 -i0.5</ping_args>
<ping_packetloss_threshold>80</ping_packetloss_threshold>
</testCase>
@@ -112,33 +112,33 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -146,14 +146,14 @@
<testCase id="040001">
<class>Custom_Command</class>
<desc>Force Msg3 C-RNTI RA</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ciUE force_crnti_ra | ncat 192.168.71.150 8091</command>
</testCase>
<testCase id="040002">
<class>Custom_Command</class>
<desc>Force RRC_IDLE (UE ID 0)</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091</command>
</testCase>

View File

@@ -70,16 +70,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -88,33 +88,33 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/10Mbps/UDP)(30 sec)</desc>
<desc>Iperf (DL/10Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 10M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -49,7 +49,7 @@
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>acamas</node>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config -f</command>
</testCase>
<testCase id="800813">
@@ -77,9 +77,9 @@
<class>Ping</class>
<desc>Ping gNB from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -88,33 +88,33 @@
<class>Ping</class>
<desc>Ping NR-UE from gNB</desc>
<id>rfsim5g_gnb_nos1</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
<testCase id="030011">
<class>Iperf</class>
<desc>Iperf (DL/30kbps/UDP)(30 sec)</desc>
<desc>Iperf (DL/30kbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 0.03M -t 20 -R -c 10.0.1.1</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030012">
<class>Iperf</class>
<desc>Iperf (UL/30kbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/30kbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 0.03M -t 20 -c 10.0.1.1</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -70,16 +70,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -88,9 +88,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>

View File

@@ -0,0 +1,205 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-tdd-multiue</htmlTabRef>
<htmlTabName>Monolithic SA TDD gNB multiue</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
800813
000001
000002
000003
000008
020001
020002
020003
020004
020105
444445
030001
030002
444444
100001
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-ue</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
</testCase>
<testCase id="000001">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_multiue</yaml_path>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
</testCase>
<testCase id="000002">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_multiue</yaml_path>
<services>oai-gnb</services>
</testCase>
<testCase id="000003">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_multiue</yaml_path>
<services>oai-nr-ue</services>
</testCase>
<testCase id="000008">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10</id>
<nodes>localhost localhost localhost localhost localhost localhost localhost localhost localhost localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_multiue1</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020002">
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_multiue1</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020003">
<class>Ping</class>
<desc>Ping ext-dn from Second NR-UE</desc>
<id>rfsim5g_multiue2</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020004">
<class>Ping</class>
<desc>Ping Second NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_multiue2</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020005">
<class>Ping</class>
<desc>Ping ext-dn from both UEs</desc>
<id>rfsim5g_multiue1 rfsim5g_multiue2</id>
<nodes>localhost localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020105">
<class>Ping</class>
<desc>Ping ext-dn from all UEs</desc>
<id>rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10</id>
<nodes>localhost localhost localhost localhost localhost localhost localhost localhost localhost localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25 -s 1016</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_multiue1</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_multiue1</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="444444">
<class>Detach_UE</class>
<desc>Detach OAI UEs</desc>
<id>rfsim5g_multiue1</id>
<nodes>localhost</nodes>
</testCase>
<testCase id="100001">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_multiue</yaml_path>
<d_retx_th>1,0,0,0</d_retx_th>
<u_retx_th>1,0,0,0</u_retx_th>
<node>localhost</node>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-ue</images>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,199 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-f1-n2-ho</htmlTabRef>
<htmlTabName>F1 SA TDD N2 Handover</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
800813
000001
000002
000003
020001
000004
040001
050001
020001
020002
050002
030001
030002
050003
020001
020002
050004
050001
020001
020002
050002
100001
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
</testCase>
<testCase id="000001">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_n2_ho</yaml_path>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
</testCase>
<testCase id="000002">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G CU-CP/CU-UP/DU 0 + UE RFsim SA</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_n2_ho</yaml_path>
<services>oai-cucp-0 oai-cuup-0 oai-du-0 oai-nr-ue</services>
</testCase>
<testCase id="000003">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>localhost</nodes>
</testCase>
<testCase id="000004">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G CU-CP/CU-UP/DU 1 RFsim SA</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_n2_ho</yaml_path>
<services>oai-cucp-1 oai-cuup-1 oai-du-1</services>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 50 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020002">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 50 -i 0.25</ping_args>
<ping_packetloss_threshold>10</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/10Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/4Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="040001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="050001">
<class>Custom_Command</class>
<desc>Trigger N2 Handover</desc>
<node>localhost</node>
<command>echo ci trigger_n2_ho 1,1 | ncat 192.168.71.150 9090</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="050002">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 1?</desc>
<node>localhost</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.180 9090 | grep "1234"</command>
</testCase>
<testCase id="050003">
<class>Custom_Command</class>
<desc>Trigger N2 Handover</desc>
<node>localhost</node>
<command>echo ci trigger_n2_ho 0,1 | ncat 192.168.71.180 9090</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="050004">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 0?</desc>
<node>localhost</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584"</command>
</testCase>
<testCase id="100001">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy all OAI 5G stack</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_n2_ho</yaml_path>
<d_retx_th>10,100,100,100</d_retx_th>
<u_retx_th>10,100,100,100</u_retx_th>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
</testCase>
</testCaseList>

View File

@@ -74,16 +74,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -92,9 +92,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -102,7 +102,7 @@
<testCase id="040001">
<class>Custom_Command</class>
<desc>Trigger Reestablishment</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci force_reestab | ncat 192.168.71.140 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
<command_fail>yes</command_fail>
</testCase>
@@ -111,9 +111,9 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i0.5 -w25</ping_args>
<ping_packetloss_threshold>80</ping_packetloss_threshold>
</testCase>
@@ -121,7 +121,7 @@
<testCase id="040002">
<class>Custom_Command</class>
<desc>Verify Reestablishment</desc>
<node>acamas</node>
<node>localhost</node>
<command>echo ci get_reestab_count | ncat 192.168.71.140 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
<command_fail>yes</command_fail>
</testCase>

View File

@@ -69,16 +69,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -87,9 +87,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>

View File

@@ -74,7 +74,7 @@
<testCase id="000005">
<class>Custom_Command</class>
<desc>Check that UE synched</desc>
<node>acamas</node>
<node>localhost</node>
<command>docker logs rfsim5g-oai-nr-ue-2 | grep -m 1 "PSBCH RX:OK"</command>
</testCase>

View File

@@ -49,7 +49,7 @@
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>acamas</node>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f</command>
</testCase>
<testCase id="800813">
@@ -83,9 +83,9 @@
<class>Ping</class>
<desc>Ping gNB from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -94,9 +94,9 @@
<class>Ping</class>
<desc>Ping NR-UE from gNB</desc>
<id>rfsim5g_gnb_nos1</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>

View File

@@ -72,16 +72,16 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -90,9 +90,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -101,40 +101,40 @@
<class>Attach_UE</class>
<desc>Verify 2nd PDU session is up</desc>
<id>rfsim5g_ue_pdu_2</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
</testCase>
<testCase id="020003">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE on PDU session ID 2</desc>
<id>rfsim5g_ue_pdu_2</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="030001">
<class>Iperf</class>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="030002">
<class>Iperf</class>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<nodes>acamas</nodes>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>acamas</svr_node>
<svr_node>localhost</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -40,7 +40,7 @@
<class>Build_Image</class>
<desc>Build all Images</desc>
<node>gracehopper3-oai</node>
<kind>native_arm</kind>
<kind>native_armv9</kind>
</testCase>
<testCase id="000010">

View File

@@ -0,0 +1,53 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>build-tab</htmlTabRef>
<htmlTabName>Build Container Images for ARM</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
800813
000001
000010
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace for server 0</desc>
<node>jetson3-oai</node>
</testCase>
<testCase id="000001">
<class>Build_Image</class>
<desc>Build all Images</desc>
<node>jetson3-oai</node>
<kind>native_armv8</kind>
</testCase>
<testCase id="000010">
<class>Push_Local_Registry</class>
<desc>Push Images to Local Registry</desc>
<node>jetson3-oai</node>
<tag_prefix>armv8_</tag_prefix>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,37 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-AERIAL-SA-CN-START</htmlTabRef>
<htmlTabName>Deploy 5GC</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
555000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="555000">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g-20897-aerial</cn_id>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,38 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-AERIAL-SA-CN-STOP</htmlTabRef>
<htmlTabName>Undeploy 5GC</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
000555
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000555">
<class>UndeployCoreNetwork</class>
<always_exec>true</always_exec>
<desc>Terminate 5G Core</desc>
<cn_id>oc-cn5g-20897-aerial</cn_id>
</testCase>
</testCaseList>

View File

@@ -25,7 +25,6 @@
<htmlTabName>AERIAL 100 MHz TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
555000
111111
000222
800813
@@ -40,15 +39,8 @@
000222
222222
333333
000555
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="555000">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g-20897-aerial</cn_id>
</testCase>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
@@ -160,12 +152,5 @@
<node>gracehopper1-oai</node>
<images>oai-gnb-aerial</images>
</testCase>
<testCase id="000555">
<class>UndeployCoreNetwork</class>
<always_exec>true</always_exec>
<desc>Terminate 5G Core</desc>
<cn_id>oc-cn5g-20897-aerial</cn_id>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,144 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-AERIAL-SA-UL-Heavy</htmlTabRef>
<htmlTabName>AERIAL 100 MHz DSUUU SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
111111
000222
800813
002222
002223
000111
000011
000032
000033
000022
000222
222222
333333
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>gracehopper1-oai</node>
<images>oai-gnb-aerial</images>
<tag_prefix>arm_</tag_prefix>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace for server 0</desc>
<node>gracehopper1-oai</node>
</testCase>
<testCase id="002222">
<class>Deploy_Object</class>
<desc>Deploy PNF/Nvidia CUBB in a container</desc>
<node>gracehopper1-oai</node>
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_ul</yaml_path>
<services>nv-cubb</services>
</testCase>
<testCase id="002223">
<class>Deploy_Object</class>
<desc>Deploy VNF in a container</desc>
<node>gracehopper1-oai</node>
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_ul</yaml_path>
<services>oai-gnb-aerial</services>
</testCase>
<testCase id="000111">
<class>Attach_UE</class>
<desc>Attach Quectel</desc>
<id>up2-aerial</id>
</testCase>
<testCase id="000011">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>up2-aerial</id>
<svr_id>oc-cn5g-20897-aerial</svr_id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000022">
<class>Iperf</class>
<desc>iperf (DL/UDP/200M)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 200M -t 30 -R</iperf_args>
<svr_id>oc-cn5g-20897-aerial</svr_id>
<id>up2-aerial</id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
</testCase>
<testCase id="000032">
<class>Iperf</class>
<desc>iperf (UL/UDP/200M)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 200M -t 30 -l 1428</iperf_args>
<svr_id>oc-cn5g-20897-aerial</svr_id>
<id>up2-aerial</id>
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="000033">
<class>Iperf</class>
<desc>iperf (UL/UDP/220M)(30 sec)(single-ue profile)</desc>
<may_fail>true</may_fail>
<iperf_args>-u -b 220M -t 30 -l 1428</iperf_args>
<svr_id>oc-cn5g-20897-aerial</svr_id>
<id>up2-aerial</id>
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
<testCase id="000222">
<class>Detach_UE</class>
<always_exec>true</always_exec>
<desc>Detach Quectel</desc>
<id>up2-aerial</id>
</testCase>
<testCase id="222222">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy gNB</desc>
<node>gracehopper1-oai</node>
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial_ul</yaml_path>
<d_retx_th>20,100,100,100</d_retx_th>
<u_retx_th>20,100,100,100</u_retx_th>
</testCase>
<testCase id="333333">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>gracehopper1-oai</node>
<images>oai-gnb-aerial</images>
</testCase>
</testCaseList>

View File

@@ -36,18 +36,6 @@
102002
302002
102003
102004
102005
102006
102007
102008
102009
102010
102011
102012
102013
102014
102015
100100
100010
100020
@@ -118,80 +106,8 @@
<testCase id="102003">
<class>Attach_UE</class>
<desc>Attach UE 3</desc>
<id>amarisoft_ue_3</id>
</testCase>
<testCase id="102004">
<class>Attach_UE</class>
<desc>Attach UE 4</desc>
<id>amarisoft_ue_4</id>
</testCase>
<testCase id="102005">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 5</desc>
<id>amarisoft_ue_5</id>
</testCase>
<testCase id="102006">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 6</desc>
<id>amarisoft_ue_6</id>
</testCase>
<testCase id="102007">
<class>Attach_UE</class>
<desc>Attach UE 7</desc>
<id>amarisoft_ue_7</id>
</testCase>
<testCase id="102008">
<class>Attach_UE</class>
<desc>Attach UE 8</desc>
<id>amarisoft_ue_8</id>
</testCase>
<testCase id="102009">
<class>Attach_UE</class>
<desc>Attach UE 9</desc>
<id>amarisoft_ue_9</id>
</testCase>
<testCase id="102010">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 10</desc>
<id>amarisoft_ue_10</id>
</testCase>
<testCase id="102011">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 11</desc>
<id>amarisoft_ue_11</id>
</testCase>
<testCase id="102012">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 12</desc>
<id>amarisoft_ue_12</id>
</testCase>
<testCase id="102013">
<class>Attach_UE</class>
<desc>Attach UE 13</desc>
<id>amarisoft_ue_13</id>
</testCase>
<testCase id="102014">
<class>Attach_UE</class>
<desc>Attach UE 14</desc>
<id>amarisoft_ue_14</id>
</testCase>
<testCase id="102015">
<class>Attach_UE</class>
<desc>Attach (RedCap) UE 15</desc>
<id>amarisoft_ue_15</id>
<desc>Attach UE 3 - 15</desc>
<id>amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
</testCase>
<testCase id="100010">

View File

@@ -0,0 +1,268 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-F1-HO-B210</htmlTabRef>
<htmlTabName>F1 Handover 20 MHz TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
000012
000013
000014
000015
000016
000017
000018
000019
000020
000021
000022
000023
000024
000025
000026
000027
000028
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
</testCase>
<testCase id="000002">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<images>oai-gnb</images>
<node>groot</node>
</testCase>
<testCase id="000003">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<images>oai-gnb</images>
<node>rocket</node>
</testCase>
<testCase id="000004">
<class>Create_Workspace</class>
<desc>Create new Workspace for groot</desc>
<node>groot</node>
</testCase>
<testCase id="000005">
<class>Create_Workspace</class>
<desc>Create new Workspace on rocket</desc>
<node>rocket</node>
</testCase>
<testCase id="000006">
<class>Custom_Command</class>
<desc>Set attenuator to 0 for DU0 and 17 for DU1</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25</command>
</testCase>
<testCase id="000007">
<class>Deploy_Object</class>
<desc>Deploy gNB-CU in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
<node>groot</node>
<services>oai-cu</services>
</testCase>
<testCase id="000008">
<class>Deploy_Object</class>
<desc>Deploy gNB-DU0 (TDD/Band77/20MHz/B210) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
<services>oai-du0</services>
<node>groot</node>
</testCase>
<testCase id="000009">
<class>Deploy_Object</class>
<desc>Deploy gNB-DU1 (TDD/Band77/20MHz/B210) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
<node>rocket</node>
<services>oai-du1</services>
</testCase>
<testCase id="000010">
<class>Attach_UE</class>
<desc>Attach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000011">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000012">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="000013">
<class>Custom_Command</class>
<desc>Attenuate DU0 by 15 and remove the attenuation on DU1 to trigger Handover</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5</command>
</testCase>
<testCase id="000014">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000015">
<class>Custom_Command</class>
<desc>UE connected to DU1?</desc>
<node>groot</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585"</command>
</testCase>
<testCase id="000016">
<class>Custom_Command</class>
<desc>Attenuate DU1 by 17dB and remove attenuation on DU0 to trigger Handover</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5</command>
</testCase>
<testCase id="000017">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000018">
<class>Custom_Command</class>
<desc>UE connected to DU0?</desc>
<node>groot</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3584"</command>
</testCase>
<testCase id="000019">
<class>Custom_Command</class>
<desc>Attenuate DU0 by 15 and remove the attenuation on DU1 to trigger Handover</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5</command>
</testCase>
<testCase id="000020">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000021">
<class>Custom_Command</class>
<desc>UE connected to DU1?</desc>
<node>groot</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585"</command>
</testCase>
<testCase id="000022">
<class>Detach_UE</class>
<always_exec>true</always_exec>
<desc>Detach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000023">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy CU-DU0</desc>
<node>groot</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
</testCase>
<testCase id="000024">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy DU1 </desc>
<node>rocket</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
</testCase>
<testCase id="000025">
<class>Custom_Command</class>
<desc>Reset all channels on the attenuator to 0</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1-4 0</command>
<always_exec>true</always_exec>
</testCase>
<testCase id="000026">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>groot</node>
<images>oai-gnb</images>
</testCase>
<testCase id="000027">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>rocket</node>
<images>oai-gnb</images>
</testCase>
<testCase id="000028">
<class>UndeployCoreNetwork</class>
<always_exec>true</always_exec>
<desc>Terminate 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,230 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>TEST-MONO-N2-HO-B210</htmlTabRef>
<htmlTabName>Monolithic N2 Handover 20 MHz TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
000001
000002
000023
000003
000004
000005
000006
000007
000008
000009
000010
000011
000012
000013
000014
000015
000017
000018
000019
000016
000020
000021
000022
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
</testCase>
<testCase id="000002">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<images>oai-gnb</images>
<node>groot</node>
</testCase>
<testCase id="000023">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<images>oai-gnb</images>
<node>rocket</node>
</testCase>
<testCase id="000003">
<class>Create_Workspace</class>
<desc>Create new Workspace for groot</desc>
<node>groot</node>
</testCase>
<testCase id="000005">
<class>Create_Workspace</class>
<desc>Create new Workspace on rocket</desc>
<node>rocket</node>
</testCase>
<testCase id="000004">
<class>Custom_Command</class>
<desc>Set initial attenuation on target gNB</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25</command>
</testCase>
<testCase id="000005">
<class>Deploy_Object</class>
<desc>Deploy Monolithic gNB-PCI0 (TDD/Band77/20MHz/B210) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_n2_ho_b210</yaml_path>
<node>groot</node>
<services>oai-gnb-pci0</services>
</testCase>
<testCase id="000006">
<class>Deploy_Object</class>
<desc>Deploy Monolithic gNB-PCI1 (TDD/Band77/20MHz/B210) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_n2_ho_b210</yaml_path>
<node>rocket</node>
<services>oai-gnb-pci1</services>
</testCase>
<testCase id="000007">
<class>Attach_UE</class>
<desc>Attach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000008">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000009">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="000010">
<class>Custom_Command</class>
<desc>Gradually attenuate gNB-PCI0 (ch1-2=15dB) and gNB-PCI1 (ch3-4=0dB) over 5s to trigger N2 Handover to gNB-PCI1</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5</command>
</testCase>
<testCase id="000011">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000012">
<class>Custom_Command</class>
<desc>UE connected to gNB-PCI1?</desc>
<node>rocket</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585"</command>
</testCase>
<testCase id="000013">
<class>Custom_Command</class>
<desc>Gradually attenuate gNB-PCI0 (ch1-2=0dB) and gNB-PCI1 (ch3-4=15dB) over 5s to trigger N2 Handover back to gNB-PCI0</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5</command>
</testCase>
<testCase id="000014">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000015">
<class>Custom_Command</class>
<desc>UE connected to gNB-PCI0?</desc>
<node>groot</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3584"</command>
</testCase>
<testCase id="000016">
<class>Custom_Command</class>
<always_exec>true</always_exec>
<desc>Reset all attenuators to 0dB</desc>
<node>rocket</node>
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1-4 0</command>
</testCase>
<testCase id="000017">
<class>Detach_UE</class>
<always_exec>true</always_exec>
<desc>Detach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000018">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy Monolithic gNB-PCI0</desc>
<node>groot</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n2_ho_b210</yaml_path>
</testCase>
<testCase id="000019">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy Monolithic gNB-PCI1</desc>
<node>rocket</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n2_ho_b210</yaml_path>
</testCase>
<testCase id="000020">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>groot</node>
<images>oai-gnb</images>
</testCase>
<testCase id="000021">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>rocket</node>
<images>oai-gnb</images>
</testCase>
<testCase id="000022">
<class>UndeployCoreNetwork</class>
<always_exec>true</always_exec>
<desc>Terminate 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
</testCase>
</testCaseList>

View File

@@ -22,7 +22,7 @@
-->
<testCaseList>
<htmlTabRef>TEST-SA-FR1-N310-2x2-60MHz</htmlTabRef>
<htmlTabName>60 MHz 2x2 TDD SA</htmlTabName>
<htmlTabName>60 MHz 2x2 TDD SA DSUUU</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
@@ -114,8 +114,8 @@
<testCase id="071000">
<class>Iperf</class>
<desc>iperf (DL/200Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 200M -t 30 -R</iperf_args>
<desc>iperf (DL/150Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 150M -t 30 -R</iperf_args>
<svr_id>matix-cn5g</svr_id>
<id>up2</id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
@@ -124,8 +124,8 @@
<testCase id="071001">
<class>Iperf</class>
<desc>iperf (UL/180Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 180M -t 30</iperf_args>
<desc>iperf (UL/250Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 250M -t 30</iperf_args>
<svr_id>matix-cn5g</svr_id>
<id>up2</id>
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
@@ -147,8 +147,8 @@
<node>matix</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_2x2_60MHz</yaml_path>
<services>oai-gnb</services>
<d_retx_th>10,100,100,100</d_retx_th>
<u_retx_th>10,100,100,100</u_retx_th>
<d_retx_th>15,100,100,100</d_retx_th>
<u_retx_th>20,100,100,100</u_retx_th>
</testCase>
<testCase id="333333">

View File

@@ -109,8 +109,8 @@
<testCase id="000100">
<class>Iperf</class>
<desc>iperf (DL/30Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 30M -t 30 -i 1 -R</iperf_args>
<desc>iperf (DL/60Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 60M -t 30 -i 1 -R</iperf_args>
<id>oai_ue_caracal</id>
<svr_id>oc-cn5g</svr_id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>

View File

@@ -0,0 +1,179 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>LONGRUN-5G-NRUE</htmlTabRef>
<htmlTabName>Longrun 40 MHz TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
060000
010000 010001
800813
020000
800814
020001
000001
001000
000100
001000
000100
001000
000100
001000
000200
001000
000200
001000
000200
040001 040000
333333
444444
060001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="060000">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g</cn_id>
</testCase>
<testCase id="010000">
<class>Pull_Cluster_Image</class>
<desc>Pull Images from Cluster</desc>
<images>oai-gnb</images>
<node>avra</node>
</testCase>
<testCase id="010001">
<class>Pull_Cluster_Image</class>
<desc>Pull Images from Cluster</desc>
<images>oai-nr-ue</images>
<node>caracal</node>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>avra</node>
</testCase>
<testCase id="020000">
<class>Deploy_Object</class>
<desc>Deploy gNB (TDD/Band78/40MHz/N310) in a container</desc>
<node>avra</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_gnb</yaml_path>
<num_attempts>3</num_attempts>
</testCase>
<testCase id="800814">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>caracal</node>
</testCase>
<testCase id="020001">
<class>Deploy_Object</class>
<desc>Deploy nrUE (TDD/Band78/40MHz/N310) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_nrue</yaml_path>
<node>caracal</node>
<num_attempts>3</num_attempts>
</testCase>
<testCase id="000001">
<class>Attach_UE</class>
<desc>Attach OAIUE</desc>
<id>oai_ue_caracal</id>
</testCase>
<testCase id="000100">
<class>Iperf</class>
<desc>iperf (DL/10Mbps/UDP)(10 min)</desc>
<iperf_args>-u -b 10M -t 600 -i 1 -R</iperf_args>
<id>oai_ue_caracal</id>
<svr_id>oc-cn5g</svr_id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
</testCase>
<testCase id="000200">
<class>Iperf</class>
<desc>iperf (UL/2Mbps/UDP)(10 min)</desc>
<iperf_args>-u -b 2M -t 600 -i 1 </iperf_args>
<id>oai_ue_caracal</id>
<svr_id>oc-cn5g</svr_id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
</testCase>
<testCase id="001000">
<class>Ping</class>
<desc>Ping: 20pings in 20sec</desc>
<id>oai_ue_caracal</id>
<svr_id>oc-cn5g</svr_id>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>25</ping_rttavg_threshold>
</testCase>
<testCase id="040000">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy gNB</desc>
<node>avra</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_gnb</yaml_path>
<d_retx_th>20,100,100,100</d_retx_th>
<u_retx_th>20,100,100,100</u_retx_th>
</testCase>
<testCase id="040001">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy nr UE</desc>
<node>caracal</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_nrue</yaml_path>
</testCase>
<testCase id="333333">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>avra</node>
<images>oai-gnb</images>
</testCase>
<testCase id="444444">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>caracal</node>
<images>oai-nr-ue</images>
</testCase>
<testCase id="060001">
<class>UndeployCoreNetwork</class>
<desc>Terminate 5G Core</desc>
<always_exec>true</always_exec>
<cn_id>oc-cn5g</cn_id>
</testCase>
</testCaseList>

View File

@@ -42,7 +42,7 @@
<class>Build_eNB</class>
<desc>Build gNB (USRP)</desc>
<node>caracal</node>
<Build_eNB_args>--gNB -w USRP --ninja -c -P --build-lib ldpc_cuda --build-lib ldpc_aal --cmake-opt -DASN1C_EXEC=/opt/asn1c/bin/asn1c</Build_eNB_args>
<Build_eNB_args>--gNB -w USRP --ninja -c -P --build-lib ldpc_cuda --build-lib ldpc_aal --cmake-opt -DASN1C_EXEC=/opt/asn1c/bin/asn1c --cmake-opt -DPHYSIM_CHECK_FILES="ThresholdsOffload.cmake"</Build_eNB_args>
</testCase>
<testCase id="100000">

View File

@@ -1,396 +0,0 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
030105 040301 040502 040606 040601 040603 040608 040605 040646 040641 040643 040648 040645 040401 040201 030201
-->
<testCaseList>
<htmlTabRef>test-ldpc-gpu</htmlTabRef>
<htmlTabName>Test-ldpc-GPU</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021
000022 000023 000024 000025 000026 000027 000028 000029 000030 000031 000032 000033 000034 000035 000036 000037 000038 000039 000040 000041
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000002">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000003">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000004">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000005">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000006">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000007">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000008">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000009">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000010">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000011">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000012">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000013">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000014">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000015">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000016">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000017">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000018">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000019">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000020">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000021">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000022">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 1 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000023">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 1 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000024">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 100 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000025">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 100 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000026">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 193 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000027">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 193 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000028">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 500 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000029">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 500 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000030">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 561 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000031">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 561 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000032">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 600 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000033">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 600 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000034">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 641 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000035">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 641 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000036">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 2000 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000037">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 2000 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000038">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3000 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000039">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3000 -s10 -n100 -G 1</physim_run_args>
</testCase>
<testCase id="000040">
<class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3840 -s10 -n100</physim_run_args>
</testCase>
<testCase id="000041">
<class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<node>caracal</node>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3840 -s10 -n100 -G 1</physim_run_args>
</testCase>
</testCaseList>

View File

@@ -37,7 +37,7 @@
</testCase>
<testCase id="010201">
<class>Deploy_Run_PhySim</class>
<class>Deploy_Run_OC_PhySim</class>
<desc>Deploy and run physical simulator on openshift</desc>
<oc_release>physims-4g</oc_release>
<node>avra</node>

View File

@@ -37,7 +37,7 @@
</testCase>
<testCase id="010201">
<class>Deploy_Run_PhySim</class>
<class>Deploy_Run_OC_PhySim</class>
<desc>Deploy and run physical simulator on openshift</desc>
<oc_release>physims-5g</oc_release>
<node>avra</node>

View File

@@ -0,0 +1,46 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>physim-tab</htmlTabRef>
<htmlTabName>PhySim</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
800813
010201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
</testCase>
<testCase id="010201">
<class>Build_Deploy_Docker_PhySim</class>
<desc>Build and Deploy PhySim</desc>
<node>localhost</node>
<ctest-opt>-R 5g -E "nr_dlsim|nr_ulsim|ldpctest" -j32</ctest-opt> <!-- one nr_dlsim test fails on ARM -->
</testCase>
</testCaseList>

View File

@@ -0,0 +1,46 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>physim-timed-tab</htmlTabRef>
<htmlTabName>PhySim with timing check</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
800813
010202
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
</testCase>
<testCase id="010202">
<class>Build_Deploy_Docker_PhySim</class>
<desc>Build and Deploy PhySim with timing check</desc>
<node>localhost</node>
<ctest-opt>-R 5g -R "nr_dlsim|nr_ulsim|ldpctest" -E physim.5g.nr_dlsim.mcs.mimo.test9 -j1</ctest-opt> <!-- one nr_dlsim test fails on ARM -->
</testCase>
</testCaseList>

Some files were not shown because too many files have changed in this diff Show More