Compare commits

..

535 Commits

Author SHA1 Message Date
Raymond Knopp
85f62d5e82 Merge remote-tracking branch 'origin/precoder_optimization' into testing_rk_precoder 2025-09-19 15:56:23 +02:00
Raymond Knopp
3675d21ce4 Merge branch 'develop' into tx_symbol_processing 2025-09-19 15:49:05 +02:00
Robert Schmidt
5b5c06449a 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-19 09:07:36 +02:00
Robert Schmidt
7ff0a7c8bb 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-19 09:07:36 +02:00
Robert Schmidt
bd815a373a Doc: Add PhySim-Gracehopper and update existing PhySim-Cluster 2025-09-19 09:07:36 +02:00
Robert Schmidt
4f9579e787 Add PhySim-GraceHopper-5G to test pipelines 2025-09-19 09:07:36 +02:00
Robert Schmidt
1ccb8f702f 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-19 09:07:36 +02:00
Robert Schmidt
f400b51143 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-19 09:07:36 +02:00
Robert Schmidt
f3a5bf34f4 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-19 09:07:36 +02:00
Robert Schmidt
1fdff427cc 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-19 09:07:36 +02:00
Robert Schmidt
de6f62a051 Physim deploy(): add deployment timeout 2025-09-19 09:07:36 +02:00
Robert Schmidt
53e038aa8e Rename to analyze_physim() 2025-09-19 09:07:36 +02:00
Robert Schmidt
218c65d6e8 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-19 09:07:36 +02:00
Robert Schmidt
fb2912922b Add new T2 Offload test 2025-09-19 09:07:36 +02:00
Robert Schmidt
6a22052f09 Add script to run PhySims from source
physim

script more
2025-09-19 09:07:36 +02:00
Robert Schmidt
ac5063b7b0 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-19 09:07:36 +02:00
Robert Schmidt
5b92198c43 Clean up output of xmlstarlet command 2025-09-19 09:07:36 +02:00
Robert Schmidt
e0882b0c32 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-19 09:07:36 +02:00
Robert Schmidt
49793a6695 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-19 09:07:36 +02:00
Robert Schmidt
aadf58d515 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-19 09:07:36 +02:00
Robert Schmidt
f6f40ccbfc 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-19 09:07:36 +02:00
Robert Schmidt
6d05612e14 Add new Physim test for gracehopper 2025-09-19 09:07:36 +02:00
Robert Schmidt
58fedcdf84 Deployment script of physims via docker 2025-09-19 09:07:36 +02:00
Robert Schmidt
92a4a96460 Add Dockerfile for physim build in CI 2025-09-19 09:07:36 +02:00
Robert Schmidt
312ff87ed0 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-19 09:07:36 +02:00
Robert Schmidt
0c58e58efb Query system info 2025-09-19 09:07:36 +02:00
Robert Schmidt
1e628e9e1a Rename to deploy_physim()
deploy_oc_physim() is not specific to OpenShift anymore, so rename to a
neutral name.
2025-09-19 09:07:36 +02:00
Robert Schmidt
bf2a116ba7 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-19 09:07:36 +02:00
Robert Schmidt
8396d90c37 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-19 09:07:36 +02:00
Robert Schmidt
e72daf3603 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-19 09:07:36 +02:00
Robert Schmidt
9630007e1f 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-19 09:07:36 +02:00
Robert Schmidt
62f9a286c6 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-19 09:07:36 +02:00
Robert Schmidt
c1c9c39e46 HTML report: Update to 2025 2025-09-19 09:07:36 +02:00
Calvin Peyron
682728f58f Physim doc: mention unmaintained simulators 2025-09-19 09:07:36 +02:00
Reem Bahsoun
d7f90ae364 Add the Handover pipeline to the RAN-Container-Parent 2025-09-19 09:07:36 +02:00
Reem Bahsoun
f765b6bd80 Add the required files for Handover CI setup (.conf, .yml, .xml) 2025-09-19 09:07:36 +02:00
Reem Bahsoun
bb703f8eca Add UE host (raspix) and OC CN for HO CI setup 2025-09-19 09:07:36 +02:00
Robert Schmidt
60dd8eec7f Do not trigger ul failure in measgap scheduling and standardize the verification if MAC is active in other scheduling functions 2025-09-19 09:07:35 +02:00
rmagueta
cf6b6d4428 Refactor and minor improvements in get_MeasConfig function 2025-09-19 09:06:43 +02:00
rmagueta
affe31a299 Add support for band in neighbourConfiguration 2025-09-19 09:06:43 +02:00
francescomani
80e35875fe common function to generate csi_MeasConfig
(also used to get the correct CSI meas structure in case of BWP switch)
2025-09-19 09:06:43 +02:00
francescomani
5c96e592d9 clone cellGroup for BWP switch to avoid removing BWP currently in use from gNB list 2025-09-19 09:06:43 +02:00
francescomani
564e7807ff bugfix in BWP release at UE 2025-09-19 09:06:43 +02:00
francescomani
bdbcc70420 include missing harq information in phy-sim nr_mac_config_t initialization 2025-09-19 09:06:43 +02:00
francescomani
e5bddca656 option to trigger reconfiguration with BWP switching 2025-09-19 09:06:43 +02:00
francescomani
a86455ebf0 configure only 1 BWP at a given time (1st active BWP) 2025-09-19 09:06:43 +02:00
francescomani
84f02dc511 separate functions to configure initial BWPs 2025-09-19 09:06:43 +02:00
francescomani
78f3d0e642 rework BWP configuration via file 2025-09-19 09:06:43 +02:00
francescomani
139038735d formatting and refactoring with intermediate variable names to avoid too long lines 2025-09-19 09:06:43 +02:00
francescomani
6cc2fc6407 function to determine max UL MIMO layers 2025-09-19 09:06:43 +02:00
francescomani
d768a94c42 rework PTRS configuration via file 2025-09-19 09:06:43 +02:00
Robert Schmidt
60b6a8f363 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-19 09:06:43 +02:00
Robert Schmidt
33ecb1ce9c 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-19 09:06:43 +02:00
Robert Schmidt
20545d63ab 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-19 09:06:43 +02:00
Robert Schmidt
7d60c3e103 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-19 09:06:43 +02:00
Robert Schmidt
18a7fa3785 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-19 09:06:43 +02:00
Robert Schmidt
bcb8382b96 Add documentation on UL-heavy TDD patterns 2025-09-19 09:06:43 +02:00
Francesco Mani
2410b37611 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-19 09:06:43 +02:00
Robert Schmidt
d62286a2de 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-19 09:06:43 +02:00
Robert Schmidt
faab8d6da2 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-19 09:06:43 +02:00
Robert Schmidt
9baab451a5 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-19 09:06:43 +02:00
Robert Schmidt
bad52220ab 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-19 09:06:43 +02:00
francescomani
1ab78fe6ed fix bug in computing number of LCG IDs with data at UE 2025-09-19 09:06:43 +02:00
Thomas Schlichter
df2b033d67 update doc/MAC/mac-usage.md 2025-09-19 09:06:43 +02:00
Thomas Schlichter
37ab89ba36 enable SSB-SINR reporting for NTN GEO scenario 2025-09-19 09:06:43 +02:00
Thomas Schlichter
bceaadc272 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-19 09:06:43 +02:00
Thomas Schlichter
186cc1d796 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-19 09:06:43 +02:00
Thomas Schlichter
237f8bbf0c 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-19 09:06:43 +02:00
Thomas Schlichter
2c1a655e72 gNB: consider the measured PUSCH SNR when computing the UL MCS if only one round is used 2025-09-19 09:06:43 +02:00
Thomas Schlichter
493d67b763 gNB: consider also the min_mcs when computing the DL MCS if only one round is used 2025-09-19 09:06:43 +02:00
Thomas Schlichter
f878df579a gNB: adjust the dl_max_mcs based on the reported SSB-SINR 2025-09-19 09:06:43 +02:00
Thomas Schlichter
df25e2c438 gNB: add SSB-SINR measurement values to the MAC statistics output 2025-09-19 09:06:43 +02:00
Thomas Schlichter
e7c18ccd90 gNB: compute and store SSB-SINR in dB instead of just the SINR-index 2025-09-19 09:06:43 +02:00
Nick Hedberg
fbe6275cd7 Populate sampled_ue_antennas 2025-09-19 09:06:43 +02:00
Reem Bahsoun
9e075d8153 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-19 09:06:42 +02:00
Rúben Soares Silva
7a4466c2f4 Alter Aerial documentation to mention mandatory L1 compilation flag 2025-09-19 09:06:42 +02:00
Florian Kaltenberger
1a0c4cadde 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-19 09:06:42 +02:00
Guido Casati
6fd20e5394 Fix AMF related prints in NGAP 2025-09-19 09:06:42 +02:00
Guido Casati
b5e0e18b8f 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-19 09:06:42 +02:00
Guido Casati
6427902627 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-19 09:06:42 +02:00
Laurent THOMAS
949b8b6e9b refine the LTE prach fix from cppcheck error detection 2025-09-19 09:06:42 +02:00
Laurent THOMAS
0ca5a2bb6a array test overflow and possible divide by 0 fixes 2025-09-19 09:06:42 +02:00
Laurent THOMAS
cb32df526e return a error case before a SEGV if the pointer is null 2025-09-19 09:06:42 +02:00
Laurent THOMAS
b4dbdf50fd fix as i can a error detected by cppcheck, w[lprime] is only 0, 1 or -1 2025-09-19 09:06:42 +02:00
Laurent THOMAS
7498cda438 avoid a cppcheck warning 2025-09-19 09:06:42 +02:00
Laurent THOMAS
434244ae16 fix lack of test for fopen() return value 2025-09-19 09:06:42 +02:00
Laurent THOMAS
b8984859df fix printf() format errors 2025-09-19 09:06:42 +02:00
Laurent THOMAS
5e7b724dc3 fix several not tested malloc or calloc return value 2025-09-19 09:06:42 +02:00
francescomani
8a398e815b reset MSG3 C-RNTI flag in case of MAC reset 2025-09-19 09:06:42 +02:00
Romain Beurdouche
2437b67950 fix(ldpc_aal): Documentation
The tuning of the BLER is necessary for Intel ACC, not for the T2.
2025-09-19 09:06:42 +02:00
Romain Beurdouche
fe6e780848 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-19 09:06:42 +02:00
Romain Beurdouche
fd04e8cf6f 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-19 09:06:42 +02:00
alexjiao
d9b698098e Fix for function compute_csi_rm_unav_res 2025-09-19 09:06:42 +02:00
alexjiao
0383d077c8 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-09-19 09:06:42 +02:00
Reem Bahsoun
c12ff2324d Replace old nvIPC library with the new one 2025-09-19 09:06:42 +02:00
Reem Bahsoun
4b220e4f9e Change cuBB tag to release 25-2 in YAML and documentation 2025-09-19 09:06:42 +02:00
ndomingues
58c805213c Fix RA 2-Step MgsB Ack at UE
Update condition to prepare MsgB Ack the same way as Msg4 Ack
2025-09-19 09:06:42 +02:00
francescomani
a8dd95f2b5 fix max feedback time parameter (needs to be computed every time we have that information) 2025-09-19 09:06:42 +02:00
Robert Schmidt
649efe8ca4 UL scheduler log: print TDA, it has more info 2025-09-19 09:06:42 +02:00
francescomani
46d773e91f adding other missing beam reaset in RA functions 2025-09-19 09:06:42 +02:00
francescomani
fce360098b adding a missing beam reaset in pf_dl 2025-09-19 09:06:42 +02:00
francescomani
98f4324883 remove unnecessary input in get_cce_index 2025-09-19 09:06:42 +02:00
Raymond Knopp
921e160e5c 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-19 09:06:42 +02:00
Raymond Knopp
4a2b1afdb1 Add reset of dlsch_precoding timing counter in nr_dlsim 2025-09-19 09:06:42 +02:00
Raymond Knopp
b45a94cc5f addition of aarch64 native implementation for rotate_cpx_vector for the case output_shift=15 2025-09-19 09:06:42 +02:00
Raymond Knopp
8ff5a08d2a Change target architecture in arm container build to armv8.2-a
This enables some additional instructions needed in the follow-up
commit.
2025-09-19 09:06:42 +02:00
Robert Schmidt
4662791a7b 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-19 09:06:42 +02:00
Robert Schmidt
c979915cd4 Increase DL UDP traffic for OAIUE OTA pipeline 2025-09-19 09:06:42 +02:00
Robert Schmidt
64eb202904 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-09-19 09:06:42 +02:00
Robert Schmidt
8b48e472a3 Adjust configuration for OAI OTA test 2025-09-19 09:06:42 +02:00
Jaroslava Fiedlerova
ee0259072b CI: update XML and yaml files for 10 UEs/process RFSim test 2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
aaad6505b4 Fix NR UE mislabeling MSG2 as DLSCH PDU 2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
91e2475e85 Add RFSim 10 UEs/process RFSim test
Add an RFSim test for 10 UEs in a single process.
2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
6bfa5787bf Make openair0_cfg thread safe
Move openair0_cfg to PHY_VARS_NR_UE making it UE instance specific
and thread safe.
2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
3142fd70e0 Make map_current_symbol thread safe
Use local function pointers instead of static global variables.
2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
9749e5b05e 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-09-19 09:06:42 +02:00
Bartosz Podrygajlo
def9c8562d 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-09-19 09:06:42 +02:00
Bartosz Podrygajlo
2f20d5f2c6 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-09-19 09:06:42 +02:00
Bartosz Podrygajlo
3bfe0c208a 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-09-19 09:06:42 +02:00
Bartosz Podrygajlo
3645767918 Introduce MAX_NUM_NR_UE_INST
Add a new define for maximum number of NR UE per process
2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
e53a8b039a Add deregistration for all UE instances. 2025-09-19 09:06:42 +02:00
Cedric Roux
13a5d8cba6 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-09-19 09:06:42 +02:00
Cedric Roux
f96819a3db T: add a tracer 'gnb_mac'
To see MAC scheduling decisions. May be useful for debugging.
2025-09-19 09:06:42 +02:00
Cedric Roux
58f3a997ee T: add some traces
To be used by next commit.
2025-09-19 09:06:42 +02:00
Cedric Roux
63a2afdcdc T: fix a typo 2025-09-19 09:06:42 +02:00
Cedric Roux
9b32ff4644 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-09-19 09:06:42 +02:00
Cedric Roux
2aaaa25bb7 T: tti view: add automax ability
Also, update a cmake file because compilation of the tracer 'ue' fails
otherwise.
2025-09-19 09:06:42 +02:00
Cedric Roux
382cdf719c T: scrolltti: handle tick discontinuities
For TDD.
2025-09-19 09:06:42 +02:00
Cedric Roux
b0f28ff9d2 T: throughputlog: handle tick discontinuities
Think: TDD.
2025-09-19 09:06:42 +02:00
Cedric Roux
ca52d66e9c T GUI: add a get_range() API function for xy_plot 2025-09-19 09:06:42 +02:00
Cedric Roux
b799ddff3e nr rlc: add an API function to retrieve the occupancy of TX list 2025-09-19 09:06:42 +02:00
Robert Schmidt
d046ab5c68 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-09-19 09:06:42 +02:00
Robert Schmidt
cbeffaa4c0 CI: Upgrade RFsim CNs to v2.1.10 2025-09-19 09:06:42 +02:00
Teodora
f52d46eb37 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-09-19 09:06:42 +02:00
Teodora
307dd79a57 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-09-19 09:06:42 +02:00
Teodora
1380f1e5ca Add support for RU username parameter for connection to a RU via M-plane
The "sudo" access group is required by OAI gNB.
2025-09-19 09:06:42 +02:00
Teodora
abcfe77f3c Rearrange <edit-config>, <validate>, and <commit> RPCs
Refactor these RPCs to facilitate their use in other Management functionalities,
not only Configuration Management.
2025-09-19 09:06:42 +02:00
Teodora
f17c31281d 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-09-19 09:06:42 +02:00
Teodora
8e2614d1c3 Correct the Tx gain 2025-09-19 09:06:42 +02:00
Teodora
d25fdbc6aa Add managed delay node in Rx endpoint creation 2025-09-19 09:06:42 +02:00
Teodora
6dad657131 Correctly fill the cyclic prefix for Tx/Rx endpoints 2025-09-19 09:06:42 +02:00
Teodora
7af23aee06 Correctly fill the frame structure for Tx/Rx endpoints and fft size for Rx endpoints 2025-09-19 09:06:42 +02:00
Teodora
1d12132952 Properly pass the frequency offset to Tx/Rx endpoints 2025-09-19 09:06:42 +02:00
Teodora
e91ec53c25 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-09-19 09:06:42 +02:00
Teodora
5ebfa58d67 Set the correct yang node name for MTU retrieval 2025-09-19 09:06:42 +02:00
Robert Schmidt
deb8347d34 nfapi.md: fix link to current document 2025-09-19 09:06:42 +02:00
Rúben Soares Silva
53c91a0ac0 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-09-19 09:06:42 +02:00
Rúben Soares Silva
4f677b8558 Change last_idx type to int16 to properly avoid unpacking if the tlv length is 0 2025-09-19 09:06:42 +02:00
Thomas Schlichter
6f07a2b73f NR UE: modify shift value in nr_dlsch_mmse() for improved performance 2025-09-19 09:06:42 +02:00
Bartosz Podrygajlo
ee931a71c8 Consider PDSCH EPRE to DMRS EPRE in NR UE 2025-09-19 09:06:42 +02:00
Robert Schmidt
42b16ad21e DLSCH sched: Fix coefficients for UE list ordering
Update the comparator() to properly sort UEs based on their coefficient
by appliey a consistent logic of -1/0/1 (see man qsort) for
smaller/equal/larger.  The previous logic was only sorting based on 0/1
(equal/larger), which would result in some UEs with a high coefficient
not necessarily advancing to the start of the list, which could reduce
the likelihood of them being scheduled when they actually should (in
other words, this should improve fairness).

See also: 62e4025bc8 ("Integrate inactivity scheduling into main
    allocation loop")
2025-09-19 09:06:42 +02:00
Robert Schmidt
172b1e86fe DLSCH sched: only sort relevant part of list
This reduces the amount of elements to compare.

See also: 7ee8e8eaba ("Fix bug: only sort relevant part of list")
2025-09-19 09:06:42 +02:00
francescomani
d7e378b04a fix for config UE TCI state ID 2025-09-19 09:06:42 +02:00
francescomani
be14295280 fix for UECAP F1 handling in dora/phytest mode 2025-09-19 09:06:42 +02:00
Romain Beurdouche
1f2770d7ae feat(rf_emulator): documentation 2025-09-19 09:06:42 +02:00
Robert Schmidt
4378431a32 CI: integrate RFemulator phytest in timing-phytest pipeline 2025-09-19 09:06:42 +02:00
Robert Schmidt
deb76e776e Remove --emulate-rf option and corresponding code
With the RFemulator, there is no need for a dedicated --emulate-rf
option anymore. For all uses of --emulate-rf, RFemulator should be used
instead.
2025-09-19 09:06:39 +02:00
Romain Beurdouche
7f8f6b134f feat(rf_emulator): Add parameters
Add two parameters:
* `enable_noise` to enable noise injection at TX
* `noise_level_dBFS` to set noise level
2025-09-19 09:05:19 +02:00
Romain Beurdouche
73a47770e6 feat(rf_emulator): Add late writes counter 2025-09-19 09:05:19 +02:00
Romain Beurdouche
8450e9918f feat(rf_emulator): Add noise generation 2025-09-19 09:05:19 +02:00
Romain Beurdouche
39458e2c48 feat(rf_emulator): Count late reads
Count late reads and print every second instead of printing each.
2025-09-19 09:05:19 +02:00
Romain Beurdouche
a3ff93088a feat(rf_emulator): Add a dummy RF library
Add a simple RF emulator library with no real RF.
It only synchronizes the gNB with the real time clock.
It is to be used for stress test or benchmarking in phy-test mode.
2025-09-19 09:05:19 +02:00
Romain Beurdouche
fdc9f961d2 feat(ldpc_aal): add decoding timer 2025-09-19 09:05:19 +02:00
Romain Beurdouche
d2f2ff301d feat(nr-gnb): Log decoding timers in the gNB
Log the LDPC reversed interleaving, reversed rate matching and decoding
time stats in nrL1_stats.log for the gNB.
2025-09-19 09:05:19 +02:00
Romain Beurdouche
fc475e84e8 feat(nr_ulsim): detailed ULSCH decoding timers
Add timers to provide ULSCH decoding time split between decoding,
rate recovery and deinterleaving.
2025-09-19 09:05:19 +02:00
Romain Beurdouche
ee14b06647 feat(time_meas): Standard deviation & merge
`diff_square` was not merged in `merge_meas` so that calculation of the
standard deviation was not working with merged timers.
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
4a5eb5afe1 Rename VRTSIM cmake option to OAI_VRTSIM 2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
ca816601bb VRTsim: Add a timeout in taps client
Add a timeout in nanomsg receive code to allow the client
thread to exit cleanly.
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
d49ffbec5a Update vrtsim documentation 2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
42ac85250d VRTSIM: allow client reconnection via a connection descriptor file
Replace the unwieldy unix socket implementation of peer information
exchange with an authorative connection descriptor file that
informs the client of the connection method an number of antennas
on the server.

This allows the server to run without the client and allows the
client to reconnect as long as the server is running, as many times
as needed.
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
1098e7f202 Clean exit of vrtsim client if server is stopped first
Force exit in case current sample is not modified by the server with 2s.
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
b33d2ede0e Make vrtsim output to stdout more readable. 2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
41e32a7215 Simplify shm td iq channel implementation
Move the channel state management outside the channel implementation.
This simplifies the channel implementation but forces users of the
channel to manage it's state manually.
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
704ccdf778 Detect disconnecton & handle error states in vrtsim
Add handling for error states in vrtsim which allows to close the
softmodems with CTRL+C without hanging, improving user experience
 - Client detection of stale timer.
 - Abort state for client and server
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
02fb2cd31b Taps client client for vrtsim
Added a libary that can connect to a channel emulator and provide taps
as they are generated.

 - Enable connection from vrtsim to channel emulation server
 - Depends on flatbuffers definition file from raytracing-channel-emulator
 - Depends on libanomsg-dev and flatbuffers-compiler (Ubuntu) or equivalent
 - Added a compile time option ENABLE_TAPS_CLIENT to prevent other users
   from being affected by additional dependencies
2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
fd37f84fbe Fixes for vrtsim
- Allow client to exit cleanly if server is down
 - Ensure timing_thread is joined only once avoiding exit_function loop
 - Free noise_device
 - Save previously sent samples for channel modelling
2025-09-19 09:05:19 +02:00
francescomani
4b43607edd remove unused deinterleaving function from dlsch ue 2025-09-19 09:05:19 +02:00
francescomani
6b304bec21 use common channel level for PDSCH 2025-09-19 09:05:19 +02:00
francescomani
a458fba182 use common channel level for PUSCH 2025-09-19 09:05:19 +02:00
francescomani
1abab39d90 use common channel level for DCI reception 2025-09-19 09:05:19 +02:00
francescomani
c5aba5c67d use common channel level for PBCH 2025-09-19 09:05:19 +02:00
francescomani
f41adf0956 common channel level function 2025-09-19 09:05:19 +02:00
Sagar Arora
534a8b5ffc Align add_boolean_option as per cmake documentation use only ON/OFF for uniformity
Signed-off-by: Sagar Arora <sagar.arora@openairinterface.org>
2025-09-19 09:05:19 +02:00
Laurent THOMAS
2a1e9d364e cleaning syntax of nr-ru.c 2025-09-19 09:05:19 +02:00
Cedric Roux
ecbd387102 hack: ignore empty Cell Group Config returned by DU
Interoperability testing with srsRAN DU shows than when receiving
RRCReconfigurationCompleteIndicator in a UEContextModificationRequest
the DU replies in the UEContextModificationResponse with an empty
CellGroupConfig.

This CellGroupConfig is encoded as 2 zero bytes. Let's ignore this
message when we receive it, don't forward it to the UE in a
RRC Reconfiguration, as it should per standard (38.473 8.3.4.2):

    If the CellGroupConfig IE is included in the DU to CU RRC Information
    IE contained in the UE CONTEXT MODIFICATION RESPONSE message, the
    gNB-CU shall perform RRC Reconfiguration as described in TS 38.331 [8].
    The CellGroupConfig IE shall transparently be signaled to the UE as
    specified in TS 38.331 [8].

To be removed/reworked in the future if the interoperability
situation improves.
2025-09-19 09:05:19 +02:00
Cedric Roux
481c03602d GTPU: CU has to send NR-U Sequence Number
This is in 3GPP TS 38.425.

Because it was not done, there was a problem of interoperability
between openair CU and srsran DU. No DL traffic was reaching the UE.

A new GTPU API function is introduced: gtpv1uSendDirectWithNRUSeqNum().
It is only used in the gNB CU, in PDCP. So it was decided to not add a
new parameter to gtpv1uSendDirect() but instead add a new API function.
2025-09-19 09:05:19 +02:00
Cedric Roux
4b3887d76d GTPU: basic support of DL USER DATA
See 3GPP TS 38.425 5.5.2.1.

Only sending part, only dealing with NR-U Sequence Number.
2025-09-19 09:05:19 +02:00
Cedric Roux
b497f7ed78 GTPU: add an API to better deal with extension headers
And adapt existing code to use it.

Only for transmission for the moment.
2025-09-19 09:05:19 +02:00
Cedric Roux
dc467f47d7 ds: add a new type "byte array producer"
Introduced to write bytes to a byte array with size checking.
2025-09-19 09:05:19 +02:00
francescomani
af3321c1d0 separate computation of size and value for DCI precoding information 2025-09-19 09:05:19 +02:00
Laurent THOMAS
829ebe516e remove unused global 2025-09-19 09:05:19 +02:00
Laurent THOMAS
5526a5a3bb rename a global "ru" in root_unit and include correctly the .h file, that leads to mistakes fixes 2025-09-19 09:05:19 +02:00
Laurent THOMAS
ba0b04b94b remove dirty and unused functions with global vars (not working anyway) 2025-09-19 09:05:19 +02:00
Laurent THOMAS
c5aebc38c3 remove a dependancy of gNB to LTE that is not used and adds global vars to gNB 2025-09-19 09:05:19 +02:00
Laurent THOMAS
5fc521b237 remove dead code and replace unmanaged asn1_xer_print global variable by the appropriate existing debug flag 2025-09-19 09:05:19 +02:00
Laurent THOMAS
dd6cc63db3 Limit visibilty of roundKeys 2025-09-19 09:05:19 +02:00
Laurent THOMAS
3dd0a62672 remove dead function 2025-09-19 09:05:19 +02:00
Laurent THOMAS
acbd50bbe6 Remove threequarter_fs, log_level; make functions static
2 functions with same name as static to make it clearer they are separate.

remove unused copy of log_level global var.

remove threequarter sampling variable from the radio board general
configuration. The decision of sampling rate is made above. A better
behavior can be done later, like ask to the radio board what sampling
rate it can do,then use it to decide the appropiate sampling rate from
the gNB configuration. In UE case, it is another issue, as the sampling
rate would change after we decode SIB1, but also it is not developped
yet.
2025-09-19 09:05:19 +02:00
Laurent THOMAS
1d3f99d29a Change tracy version to latest release 2025-09-19 09:05:19 +02:00
Robert Schmidt
b89d3b6520 Explain steps to build Dockerfiles without BuildKit
The Dockerfiles are reused for building on different architectures
(amd64/arm64). They differ, though, on some steps for downloading or
installing platform-specific utilities.

This is handled automatically when using BuildKit, which is the default
in docker versions v23.0+. Older docker versions require some special
settings. Explain this in the README.

Closes: #973
2025-09-19 09:05:19 +02:00
Robert Schmidt
0cc4238277 gNB MAC doc: add dl/ul_min_mcs
Previous commits removed min_grant_mcs and instead introduced
dl/ul_min_mcs as a more generic replacement.

Fixes: 96b0cae63e ("Drop 'min_grant_mcs' configuration parameter ")
Fixes: 699afafc6f ("Add support for 'dl_min_mcs' and 'ul_min_mcs'
    configuration parameters")
2025-09-19 09:05:19 +02:00
Jaroslava Fiedlerova
482dae70aa CI: Update UHD version to 4.8 2025-09-19 09:05:19 +02:00
Robert Schmidt
60f5822916 Write simple CI documentation and add sample script 2025-09-19 09:05:19 +02:00
Robert Schmidt
2775b69e06 CI: correct log analysis filename interpolation
A previous commit changed to use archiveArtifact() to recover CI logs,
and then attempted to "guess" the L1/MAC stats file name through a
regex. However, the format "enb-[0-9]+" is not correct, as
archiveArtifact() puts the task ID ("[0-9]+") BEFORE the file name
(here, "enb"). So, make it more generic and match the final "-enb.log"
("$" means "end of string").

Fixes: 244ea8fc22 ("Use archiveArtifact() for TerminateeNB()")
2025-09-19 09:05:19 +02:00
Robert Schmidt
a4a00cc9b4 CI: Sleep: print time to wait 2025-09-19 09:05:19 +02:00
Robert Schmidt
5a3e9556da Remove HTML 'no analysis function'
For some network functions, we don't match an analysis function. In the
console logs we print an info message. In the HTML, it's just noise.
2025-09-19 09:05:19 +02:00
Robert Schmidt
fbed2f1152 Run_Physim(): avoid large console logs, rewrite file
Many of these tests exit with an exit code != 0. Thus, the CI
automatically logs the result. Rather, write everything including stderr
to the file for analysis.

Also, rewrite the file with ">" instead of appending through ">>". While
appending works because the CI removes files after archiving, it seems
"cleaner" to remove files.
2025-09-19 09:05:19 +02:00
Robert Schmidt
c6ee6aad3f Remove "forcedWorkspaceCleanup" option
It is superseded by the CreateWorkspace() function and task step (which
removes and recreates a workspace), and this option was not actually
used in any function except for the build of unit tests, but no XML
step actually specified this option.
2025-09-19 09:05:19 +02:00
Robert Schmidt
a6ff4b79b3 Fix: new Iperf test need to get ctx 2025-09-19 09:05:19 +02:00
Robert Schmidt
a9863b2194 Ignore eNB{,1,2}{UserName,IPAddress,Password} parameters
After having transitioned to direct node names in the XML, these
parameters are not relevant anymore.

The best way to view this patch is with

    git show <SHA> --ignore-all-space
2025-09-19 09:05:19 +02:00
Robert Schmidt
4f1b256a79 Remove SSH connection
Remove this class. It is not safe to use (no return codes, can get out
of sync), hardcodes the use of passwords, and it's API is cumbersone.

More explanations can also be found in !1867. It is superseded by
cls_cmd.py
2025-09-19 09:05:19 +02:00
Robert Schmidt
a390864c99 LogCollecteNB() not used anymore
Since 28ce0dc444 ("Main: pass in ctx"), the CI always collects logs
into cmake_targets/log/. Hence, LogCollecteNB() is never called. We can
remove it.

Further, change the cmake_targets/log/ to ci-log/, which is shorter, and
append a / on the zip path to make sure that only contents is zipped.
2025-09-19 09:05:19 +02:00
Robert Schmidt
13607b9d9f Reimplement Initialize_eNB()/Terminate_eNB()
Reimplement these functions by

- using cls_cmd
- retain only the necessary steps from the timing-phytest function
- pass in ctx and node information, instead of server ID
- remove all superfluous variables that don't seem to be used
- make some lists (corresponding indices are "server ID") into normal
  variables.
2025-09-19 09:05:19 +02:00
Robert Schmidt
057ae42113 cls_containerize: yamlPath/services as normal string
These variables were set as lists, to be indexed by the "server ID".
Since this has been removed from all XMLs, it is not necessary anymore.
2025-09-19 09:05:19 +02:00
Robert Schmidt
1131aa2c13 Run_Physim(): pass node 2025-09-19 09:05:19 +02:00
Robert Schmidt
41430a80f3 Pass node to various Build*() functions
Pass node directly from XML to these functions

- BuildClusterImage()
- BuildImage()
- BuildProxy()
- BuildRunTests()

instead of reading the "server ID" and looking up from
eNB_IPAddress/eNB1_IPAddress/eNB2_IPAddress.

Improve the proxy build unit test by properly passing ctx information.
2025-09-19 09:05:19 +02:00
Robert Schmidt
141148a4a7 File not used by CI 2025-09-19 09:05:19 +02:00
Robert Schmidt
cbe24b5a80 Remove unused variables 2025-09-19 09:05:19 +02:00
Robert Schmidt
05839e0ba7 Deploy_Run_PhySim(): pass node name
harmonize with other code that takes a "node" parameter.
2025-09-19 09:05:19 +02:00
Robert Schmidt
8b86f0df2c CppCheckAnalysis()/LicenceFormattingCheck(): use node
- ubuntu18 eNB_IPAddress obelix => obelix
- cppcheck eNB_IPAddress 172.21.18.47 => carabe
2025-09-19 09:05:19 +02:00
Robert Schmidt
ac91be64e7 Push_Local_Registry(): pass node 2025-09-19 09:05:19 +02:00
Robert Schmidt
99eabf9069 Create/Deploy/Undeploy(): use node
Pass the node name for a host on which to create a workspace or
deploy/undeploy.

Add a new test for the creation of workspaces.

To help myself and the reviewer, here is a list of
"eNB_IPAddress"/"eNB1_IPAddress" parameters I copied from the various
pipelines:
- rfsim 4G eNB_IPAddress none => localhost
- rfsim 5g eNB_IPAddress none => localhost
- flexric eNB_IPAddress none => localhost
- l2sim 4g eNB_IPAddress none => localhost
- l2sim 4G eNB1_IPAddress 172.21.16.128 => obelix => localhost
- cluster image eNB_IPAddress poseidon
- ubuntu18 eNB_IPAddress obelix => obelix
- ubuntu-arm eNB_IPAddress gracehopper3-oai => gracehopper3-oai
- arm-cross eNB_IPAddress alambix => alambix
- lte-tdd eNB_IPAddress 172.21.18.45 => starsky
- lte-fdd eNB_IPAddress 172.21.18.46 => hutch
- lte-oaiue eNB_IPAddress 172.21.18.46 => hutch
- lte-oaiue eNB1_IPAddress 172.21.18.47 => carabe
- lte-tdd-2x2 eNB_IPAddress 172.21.16.128 => obelix
- nsa eNB_IPAddress 172.21.16.137 => nepes
- nsa eNB1_IPAddress 172.21.16.109 => ofqot
- sa-aerial eNB_IPAddress gracehopper1-oai => gracehopper1-oai
- aw2s eNB_IPAddress 172.21.16.124 => avra
- sabox eNB_IPAddress 172.21.16.109 => ofqot
- sa-oaiue eNB_IPAddress avra => avra
- sa-oaiue eNB1_IPAddress caracal => caracal
- cppcheck eNB_IPAddress 172.21.18.47 => carabe
- timing-phytest eNB_IPAddress caracal => caracal
- physim 4g eNB_IPAddress avra => avra
- physim 5g eNB_IPAddress avra => avra
2025-09-19 09:05:19 +02:00
Robert Schmidt
7445b6d974 Pull_Image_from_Registry()/Clean_Test_Server_Images(): pass node
Pass the node name for a host onto/from which to pull/clean the images.
For doing this, I used:

- rfsim 4G eNB_IPAddress none => localhost
- rfsim 5g eNB_IPAddress none => localhost
- flexric eNB_IPAddress none => localhost
- l2sim 4g eNB_IPAddress none => localhost
- l2sim 4G eNB1_IPAddress 172.21.16.128 => obelix => localhost
2025-09-19 09:05:19 +02:00
Robert Schmidt
2bc7b34550 Integrate all SA-OAIUE pipeline related files into one 2025-09-19 09:05:19 +02:00
Robert Schmidt
2237b08183 Integrate all NSA-related XML files into one
Is simpler to test manually and view the results.
2025-09-19 09:05:19 +02:00
Robert Schmidt
bd31f4d28d Remove unused file 2025-09-19 09:05:19 +02:00
Robert Schmidt
8717ad3d55 Remove unused parameters 2025-09-19 09:05:19 +02:00
Robert Schmidt
4b50523c19 Cluster: build FHI7.2 in parallel 2025-09-19 09:05:19 +02:00
Robert Schmidt
0fc47411bf Remove unnecessary HTML printing, simplify code 2025-09-19 09:05:19 +02:00
Robert Schmidt
60f2652625 AnalyzeBuildLogs(): only analyze one file at a time
Will be used in a follow-up commit to simplify analysis of log files and
HTML file printing.
2025-09-19 09:05:19 +02:00
Robert Schmidt
65a3209e8a Remove unused variables 2025-09-19 09:05:19 +02:00
Bartosz Podrygajlo
62de2b36dc Make run_locally.sh script take the full path to the xml file
Use full path to xml file in run_locally.sh to allow usage of system
command line completion feature.
2025-09-19 09:05:19 +02:00
Robert Schmidt
181c2585ae Complete run_locally.sh to produce valid HTML 2025-09-19 09:05:19 +02:00
Robert Schmidt
9962ed4b73 CI: Clarify HTML message if a (ctest-executed) test fails 2025-09-19 09:05:19 +02:00
Robert Schmidt
ca4118d6a8 Disable various UHD features
build_oai primarily builds UHD for OAI. Thus, a number of targets (B100,
USRP1/2, ...) can be omitted, as OAI does not run on them. Further,
disable documentation and man pages, which is typically not necessary
for the averages user, and does not need to be installed for containers.
2025-09-19 09:05:19 +02:00
Raymond Knopp
8f6bfb40dc UHD installation: remove multiple packages at once
Removing packages individually is slow, because apt starts to (re-)read
it's database over and over again. Do it at once to speed up.
2025-09-19 09:04:43 +02:00
Robert Schmidt
fc3ed6af80 Do not collect log files that don't exist
Since one of the parent commits, build_oai does not redirect files to a
log folder. Hence, there is no need to collect those.
2025-09-19 09:03:07 +02:00
Robert Schmidt
be75595b54 Remove unused build_helper function 2025-09-19 09:03:07 +02:00
Robert Schmidt
5726f14ad4 Don't redirect installation log files to a file
Similarly to the parent, don't redirect log files to a file. It makes
the CI more complicated, and also raises user awareness of what is being
installed.
2025-09-19 09:03:07 +02:00
Robert Schmidt
f44b190ca1 build_oai: don't redirect compilations to a file
Redirecting to a file has the problem that it is difficult in the CI to
recover these files. Furthermore, at least with ninja, when running
build_oai interactively, the build output will only take some lines
(because ninja rewrites lines), so the change should not be that big to
users.

One CI function would print the entire output from build_oai to the
console. Since that output might be long now, do not do this. The file
is archived, anyway.
2025-09-19 09:03:07 +02:00
Robert Schmidt
a8ef9bb7f8 Remove UE_AUTOTEST_TRACE CMake option
This only triggers the build of some dedicated logs that contain
information that is logged already, anyways.
2025-09-19 09:03:07 +02:00
Robert Schmidt
1bdef5f8e9 Remove useless Doxygen variable 2025-09-19 09:03:07 +02:00
Robert Schmidt
2ec7550973 Remove auto-test options in build_oai 2025-09-19 09:03:07 +02:00
Robert Schmidt
2e8708977d Increase AL candidates count on AW2S pipeline
Increase the number of aggregration level candidates. Since we have many
UEs with concurrent traffic in that pipeline, we should ensure that we
can allocate many DCIs to not waste resources (e.g., not all RBs used
because could not find DCIs for specific UEs).
2025-09-19 09:03:07 +02:00
Robert Schmidt
a55ac81f50 Fix AL candidate documentation to right default
The default aggregation level candidate numbers in gnb_config.c (search
"uess_num_agg_level_candidates") is 0,2,0,0,0, so write that instead.
2025-09-19 09:03:07 +02:00
Robert Schmidt
80c070f000 Handle TDD pattern 2 in UL TDA allocation
Add the possibility to use UL slots in TDD pattern 2. For simplicity, we
require the mixed slot to be of the same symbols in pattern 1 & 2. For
UL slots, simply use the right amount of UL TDAs, depending on which
number of UL slots among pattern 1 & 2 is bigger.

One complication is the TDA for the mixed slot. The current code assumes
that k2 has to be equal or larger than (number of DL slots +1) (because
the spec says min k2=2, but we might want to schedule DSUUU). Then,
there could be for instance the following cases:

- only pattern 1: DSUUU DSUUU ...: the mixed slot has to be reached an
  entire period in advance
- pattern 1 & 2: DSUUU DDDDD: normal mixed slot k2, e.g., like for 7DS2U
- pattern 1 & 2: DSUUU DDDSU: the mixed slot has to be reached
  N_ul2+N_dl1+1 slots in advance

I can't think of more cases right now. To avoid unscheduled slots, I put
an assertion (which could also trivially be taken out).
2025-09-19 09:03:07 +02:00
Rúben Soares Silva
30829ce163 P5 Config: Pack/Unpack TDD table with 10.02 and 10.04 formats
Adds the capability to pack/unpack the TDD table in CONFIG.request
following both SCF222.10.02 (Tag 0x1027) and SCF222.10.04 (Tag 0x1035)
formats In the case of Aerial, the TDD table is packed following the
10.04 format, but with the 10.02 tag Prevent the packing of Digital
Beamforming table and Precoding Matrix table for Aerial
2025-09-19 09:03:07 +02:00
Robert Schmidt
dd7b8e6b8f Select best out of multiple TDAs
A new function get_best_ul_tda() allows to select the "best" TDA out of
a number of TDA. Specifically, get_best_ul_tda() considers in how many
RBs a given TDA might be allocated, and multiplies this number of RBs
with the number of symbols in the TDA to form a "score". The TDA with
the best "score" is selected, considering it maximizes resource usage.

In phytest scheduler, we use this function to verify that the given TDA
can be really allocated in all selected slots.
2025-09-19 09:03:07 +02:00
Robert Schmidt
2b7802f519 Correctly interpret SRS numberOfSymbols
A length of 0 is to be interpreted as 1 symbol, a length of 1 is 2, etc.
2025-09-19 09:03:07 +02:00
Robert Schmidt
6fd51b5ce4 Schedule SRS longer in advance, cleanup
Schedule SRS longer in advance, so that it would also be enough even
with big k2 for UL TDA.

Remove useless types: we do not use the information on sched_srs
anymore, so remove it.

Check that the VRB map is free before making allocations.
2025-09-19 09:03:07 +02:00
Robert Schmidt
9f67b3f85e Only add SRS TDA if SRS is activated
Since the parent commit, the TDA for UL scheduling is dynamically
selected, instead of being hardcoded to specific indices. We can thus
also omit the SRS TDA if no SRS is configured.

Also add SRS-specific TDAs if we schedule further into the future.
2025-09-19 09:03:07 +02:00
Robert Schmidt
e6b3a78ee0 Refactor TDA allocation: scheduler can take advantage of multiple k2
Add multiple TDAs with k2 larger than the min_rxtxtime, to potentially
allow to allocate all available slots. For this, nr_rrc_config_ul_tda()
inspects the TDD pattern, and allocates as many TDAs as necessary. It
also sorts the TDA list, with smaller k2 and larger symbol lengths
first.

This in turn is now used by get_num_ul_tda() to use a k2 and the slot
configuration to find a suitable TDA, assuming a list as sorted in
nr_rrc_config_ul_tda().

Note that since get_num_ul_tda() does only inspect the available UL
slots, there might be overlap (e.g., when scheduling SRS), which will be
fixed in a follow-up commit.

Also, TDD pattern 2 is not handled here yet, and a follow-up commit will
fix it.
2025-09-19 09:03:07 +02:00
Robert Schmidt
df6774f534 Add ULSCH preprocessor slot logic for scheduling multiple slots
Add a loop to advance slots as determined by current ("DL") slot, and
advance further into the future (for "UL" slots) if TDAs allow. Ensure
to schedule all TDAs if it's the last DL slot, to guarantee a previously
scheduled TDA will also reoccur (i.e., for guaranteeing that
retransmissions can be made).

Note that the check for number of UE being zero is removed, as this
allows to keep "ul_next" close to the "min_next" slot. This way, we can
use fs_get_max(); otherwise, if we did not always execute this loop,
they might diverge far from each other, making the logic inside the loop
more complicated.

This commit introduces a new type "fsn_t" (frame-slot number) that
encapsulates a single frame-slot combination in a single struct. The
helper functions (in gNB_scheduler_ulsch.c) should be moved to a new
file under common/, but we don't do this here to limit the amount of
code changes.
2025-09-19 09:03:07 +02:00
Robert Schmidt
9bd2bb92ce Use k2 to decide which TDA to use
For scheduling multiple ULSCH ahead, we will have to use different k2.
Hence, we will need to check for k2 in the TDA selection as well. The
function get_ul_tda() is renamed to get_num_ul_tda() to reflect that it
might return multiple TDAs (not done in this commit, but in a follow-up
MR). get_num_ul_tda() also returns a pointer to the first suitable TDA.

In the phy-test scheduler, simplify the selection of the TDA to use: do
not hardcode a specific K2, but rather, use the first one (with any k2).
2025-09-19 09:03:07 +02:00
Robert Schmidt
00e5073999 Provide selected TDA to pf_ul() 2025-09-19 09:03:07 +02:00
Robert Schmidt
cd2bfb6847 Introduce dedicated ul_tda array 2025-09-19 09:03:07 +02:00
Robert Schmidt
978fe70312 Count and print failed CCE allocations for UL/DL 2025-09-19 09:03:07 +02:00
Robert Schmidt
c3d9bfc661 pf_ul(): report if UEs scheduled
For the multi-UL slot scheduling functionality in a follow-up commit, it
would be important to know if the scheduler allocated any UEs. If
pf_ul() allocated for some UEs, we might run it again on a different
slot. If on the other hand, no UEs were allocated, there is no point in
running it again.
2025-09-19 09:03:07 +02:00
Robert Schmidt
ec1a540865 config_frame_structure(): make const 2025-09-19 09:03:07 +02:00
Robert Schmidt
a90ce41b44 Refactor get_feasible_msg3_tda()
Simplify the code. Consider any slot for Msg3, and check that the TDA
fits in a given slot (as before).
2025-09-19 09:03:07 +02:00
Robert Schmidt
8f33b03e70 Remove dedicated Msg3 TDA
A dedicated Msg3 TDA is simply not necessary: get_feasible_msg3_tda()
already iterates through all TDAs to find a suitable one for Msg3, and
takes things such as parameter Δ already into account.

The only prerequisite is that the ra_ResponseWindow is long enough. In
some configurations, Msg3 TDA ensured that Msg2 still happened during
ra_ResponseWindow, while Msg3 was outside of it. This is not necessarily
the case anymore, unless ra_ResponseWindow is long enough.

For the normal user, removing ra_ResponseWindow from the config will be
enough.
2025-09-19 09:03:07 +02:00
Robert Schmidt
60a28c9a58 Remove most ra_ResponseWindow config options
Since the parent commit, the ra_ResponseWindow will be chosen
automatically. Correspondingly, remove most ra_ResponseWindow options
from configuration files in the repository.

One problem in some mu=1 configs is that the ra_ResponseWindow=4 (10
slots), which might be overly restrictive if the L1 slot ahead is
somewhat close to 10 (e.g., 6), in which case we might not be always
able to allocate Msg2 in time.

A notable exception here is gnb-vnf.sa.band66.u0.25prb.nfapi.conf, in
which we still provide it (1) since it uses a non-standard configuration
of a ra_ResponseWindow longer than 10ms (see also issue #916 for more
information) and (2) as an example.
2025-09-19 09:03:07 +02:00
Robert Schmidt
6beb7d0620 Select ra_ResponseWindow automatically if not configured
If the config file does not specify ra_ResponseWindow, select it to be
10 slots in mu=0, or 20 slots for all others.

This should give us enough flexibility to allocate Msg2 without running
out of the response window. The next commit will remove most
ra_ResponseWindow options in configs.
2025-09-19 09:03:07 +02:00
Robert Schmidt
2167f7d497 Comments on func 2025-09-19 09:03:07 +02:00
Robert Schmidt
a39d2b60eb Refactor TDA allocation
Make it simpler to see, in function nr_rrc_config_ul_tda(), which UL
TDAs we allocate for a UE.
2025-09-19 09:03:07 +02:00
Robert Schmidt
b5ea99627b Integrate inactivity scheduling into main allocation loop
Scheduling for inactivity only deviates in details from the main
scheduling logic: we simply allocate a fixed number of RBs instead of
making it dependent of data.

In this commit, add an additional flag to sort UEs that are scheduled
for inactivity in front of "normal" UEs (with traffic). Then, schedule
those UEs by limiting/fixing the amount of RBs to schedule to
min_grant_prb.

Update the comparator() to properly sort UEs based on this flag and the
coefficient by applying a consistent logic of -1/0/1 (see man qsort) for
smaller/equal/larger. The inactivity flag, if set, will always have
higher priority over the coefficient to schedule these UEs first, as was
the case prior to this commit.
2025-09-19 09:03:07 +02:00
Robert Schmidt
715511951b Fix bug: only sort relevant part of list
This reduces the amount of elements to compare.
2025-09-19 09:03:07 +02:00
Robert Schmidt
cce58ee802 Refactor to call post-processor in place
Remove sched_ctrl->sched_ulsch, and call the post-processing function
post_process_ulsch() in the places where sched_ctrl->sched_ulsch has
been assigned. This will have two effects:

- it is not necessary to have the final loop over all UEs, which might
  be costly especially towards many UEs.
- till now, there is only a single sched_ulsch; however, a later commit
  will allow to schedule multiple PUSCH transmissions from a single (DL)
  slot. This would require to make sched_ctrl->sched_ulsch, and
  also iterate through all sched_ulsch. In this new scheme, we can
  simply call post_process_ulsch() multiple times, which is simpler (and
  therefore, implicitly handleded as of this commit).
2025-09-19 09:03:07 +02:00
Robert Schmidt
3b2acfc67f Refactor ULSCH phy-test scheduler
Write a single NR_sched_pusch_t structure in a single statement (where
possible). Assign to sched_ctrl->sched_pusch later, where the
post-processing functionality will be called in a follow-up commit.
2025-09-19 09:03:07 +02:00
Robert Schmidt
8539e8839e Refactor ULSCH main allocation procedure
Write a single NR_sched_pusch_t structure in a single statement (where
possible). Assign to sched_ctrl->sched_pusch in one place, where the
post-processing functionality will be called in a follow-up commit.
2025-09-19 09:03:07 +02:00
Robert Schmidt
0f3439cf57 Refactor retransmission's NR_sched_pusch_t usage
Avoid to overwrite the existing retInfo. Instead, create a new
NR_sched_pusch_t and assign to sched_ctrl->sched_pusch in one place. A
follow-up commit will directly trigger the post processor here.
2025-09-19 09:03:07 +02:00
Robert Schmidt
7c86fe7c87 Refactor inactivity-based PUSCH allocation
Write a single NR_sched_pusch_t structure in a single statement (where
possible). Assign to sched_ctrl->sched_pusch in one place, where the
post-processing functionality will be called in a follow-up commit.
2025-09-19 09:03:07 +02:00
Robert Schmidt
ebb8047daa UL harq PID: similar to parent, reduce scope of sched_pusch 2025-09-19 09:03:07 +02:00
Robert Schmidt
7d8ebff30d Store selected MCS in UE iterator
PF uses MCS and average throughput to decide which UE to schedule. Thus,
the first loop selects the MCS, and the second does the main UE
allocation after sorting by priority, depending on the MCS.

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.
2025-09-19 09:03:07 +02:00
Robert Schmidt
9bafc1610a Remove unused parameter from sched_pusch 2025-09-19 09:03:07 +02:00
Robert Schmidt
68ec44f8c5 Read TX power from HARQ.sched_pusch
A later commit will remove sched_ctrl->sched_pusch. Instead, the TX
power is also stored for each HARQ process (as they contain
sched_pusch). Read it from there, which should have the same effect.
2025-09-19 09:03:07 +02:00
Robert Schmidt
b7fc18a36e Refactor post processor into post_process_ulsch()
Introduce an array with information on FAPI structures to save resource
allocation into. It's in nr_mac_gNB.h because the next commit reuses
this for all preprocessors.
2025-09-19 09:03:07 +02:00
calvin_peyron
050941b487 "as" should be in capital letters 2025-09-19 09:03:07 +02:00
Calvin Peyron
f8813df28f Rename ubuntuXX to ubuntu 2025-09-19 09:03:07 +02:00
Calvin Peyron
1fff828286 Fix warning tmp may be uninitialized leads to error 2025-09-19 09:03:07 +02:00
calvin_peyron
0884416a3a Remove redundancy
As DEBIAN_FRONTEND has been set as environment variable, there is no need to use DEBIAN_FRONTEND=noninteractive inside RUN lines, it is redundant, hence it has been removed.
2025-09-19 09:03:07 +02:00
calvin_peyron
a54aba96e2 Upgrade CI images to Ubuntu 24
Libboost went from 1.74.0 to 1.83.0 alongside Ubuntu update.
GCC version is set as default to be more practical.
In Ubuntu22, apt sources were in .list files, in Ubuntu24 they are in .sources files.
Add --break-system-packages for pip installation to use same logic as before, see the pip update 23.0.1 (2023-02-17).
With Ubuntu24 liboai_device requires libpython3.12
2025-09-19 09:03:07 +02:00
francescomani
a2dbdbd986 minor refactoring in nfapi_nr_interface_scf 2025-09-19 09:03:07 +02:00
Gabriele Gemmi
e84b5bc491 compute prgsize from number of RA RB 2025-09-19 09:03:07 +02:00
Gabriele Gemmi
f5fed4b00c Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02) 2025-09-19 09:03:07 +02:00
Gabriele Gemmi
515981f1af Compute DCI prgsize from Coreset 2025-09-19 09:03:07 +02:00
Gabriele Gemmi
e757fb5873 Configuration of FAPI Beamforming PDU for Aerial PBBF 2025-09-19 09:03:07 +02:00
francescomani
fd3ee33705 add option to directly send the beam index to L1 via FAPI without look-up table (for 7.2 split) 2025-09-19 09:03:07 +02:00
Laurent THOMAS
75a3c3891c add gtpu error packet parsing and display 2025-09-19 09:03:07 +02:00
francescomani
af90cc6840 print UE command line parameters also at MAC 2025-09-19 09:03:07 +02:00
Robert Schmidt
e36307e777 CI AW2S-Amarisoft: verify RedCap'edness of a UE
Since the parent commit, UE 1 is normal (no RedCap), UE 2 is RedCap.
Verify that the gNB agrees with that and detects the second UE as RedCap
by analyzing some logs.

The first check is a bit elaborate, but basically is

    [ $(docker logs | grep XYZ | wc -l) -eq 0 ]
    ^   ^             ^          ^      ^
    1   2             3          4      5

(1) is the if statement, that compares
  (4) the number of occurrences
  (3) of "RedCap" in the
  (2) docker logs
(5) to being equal to

Note for all UEs which number, and whether it is RedCap (so this need to
be kept in sync with the Amarisoft UE sim configuration file in use!).
2025-09-19 09:03:07 +02:00
Robert Schmidt
179a20f9fd Make some Amarisoft UEs RedCap UEs
Change the parameters to be redcap (release: 17, redcap: "redcap") on
some UEs, and modify the path to the updated configuration.
Specifically, make UE 1 normal (no RedCap), UE 2 RedCap, UEs 3&4 normal,
UEs 5&6 RedCap, etc.

RedCap UEs should now only be able to connect if the gNB is handling Redcap
UEs, which is done in the parent commit.
2025-09-19 09:03:07 +02:00
Robert Schmidt
e6b5f5c0a3 CI AW2S: modify configuration to have RedCap UEs connect 2025-09-19 09:03:07 +02:00
Robert Schmidt
f72b8b9851 Remove unused Amarisoft CI XML file 2025-09-19 09:03:07 +02:00
Romain Beurdouche
2e12d71db2 feat(ldpc_cl): Remove ldpc_cl 2025-09-19 09:03:07 +02:00
Romain Beurdouche
665f5be4b1 fix(nrLDPC_decoder_CL): Apply clang-format 2025-09-19 09:03:07 +02:00
Romain Beurdouche
219b3dd300 fix(nrLDPC_decoder_LYC): apply clang-format 2025-09-19 09:03:07 +02:00
Romain Beurdouche
a11bba607a feat(LDPCImplementation.md): Add short introduction and TOC 2025-09-19 09:03:07 +02:00
Romain Beurdouche
865a5a5611 fix(LDPCdecoder): Cleanup segment decoder interface
Variables 'harq_pid', 'ulsch_id' and 'C' of the segment decoder
interface were not used any more by the implementations and set to zero
by all the callers.
Then it is more relevant and compliant to remove them.
2025-09-19 09:03:07 +02:00
Romain Beurdouche
ea31c31508 feat(LDPCImplementation.md): Remove ldpc_cl logs
Recommended: Remove logs of a library that is not working as far as we
know.

Pop this commit if this seems not necessary.
2025-09-19 09:03:07 +02:00
Romain Beurdouche
d01508ade1 fix(LDPCImplementation.md): Remove libconfig logs
libconfig log do not display anymore by default so we may better not
show them in the documentation to avoid any misunderstanding.
2025-09-19 09:03:07 +02:00
Thomas Schlichter
544bb3441f NR UE: further simplify and optimize the usage of the PDCCH LLR array
The initial version of this patch was provided by "Laurent THOMAS <laurent.thomas@open-cells.com>"
2025-09-19 09:03:07 +02:00
Thomas Schlichter
2f1ce61304 NR UE: fix pdcch llr_size calculation in nr_rx_pdcch() 2025-09-19 09:03:07 +02:00
Thomas Schlichter
0907d53b93 NR UE NTN: consider acceleration on orbital path to calculate N_UE_TA_drift_variant
The acceleration magnitude on the orbital path can be calculated as:

t = 2 * pi * r / v
omega = 2 * pi / t = v / r
acceleration = omega² * r = v² / r

Where t is the orbital period, r is the orbital radius, v is the orbital velocity, omega is the angular velocity.
The acceleration direction is from the SAT position towards the earth center.
To calculate the acceleration towards the UE, this is projected on the direction from the SAT to the UE.
2025-09-19 09:03:07 +02:00
Laurent THOMAS
71c5c9cdfc When a client connects, we need to start the send/receive loop but the first reception is void data 2025-09-19 09:03:07 +02:00
francescomani
35385efda1 remove fixed size H_awgn_mimo that may cause segfault in simulator in case of more than 4 antennas 2025-09-19 09:03:07 +02:00
Cedric Roux
28728665fa fix a T trace 2025-09-19 09:03:07 +02:00
francescomani
877ecd7b78 highlighting UE LOG with sync SSC printed 2025-09-19 09:03:07 +02:00
francescomani
e5006c9eb5 workaround to take into account SS0 1st symbol depending on SSB 2025-09-19 09:03:07 +02:00
francescomani
b76cd315ea formatting 2025-09-19 09:03:07 +02:00
Sakthivel Velumani
525583d86b Not include DC for CSI IM measurement
DC subcarrier has a significantly higher energy compared to other CSI IM
resource elements. This causes the average interference + noise
estimation to be higher than CSI-RS signal power making the CQI 0. With
a third-party gnb that schedules PDSCH based on CQI, the UE never
receives DL DCI once it starts sending CSI reports.
2025-09-19 09:03:07 +02:00
Sakthivel Velumani
daecbc98a2 Fix PUCCH 2 DMRS in UE
for start RB not multiple of 4
2025-09-19 09:03:07 +02:00
Robert Schmidt
e1edccdfcd Trace analysis results 2025-09-19 09:03:07 +02:00
Robert Schmidt
b88eab09e3 Use Ninja for FHI72 builds 2025-09-19 09:03:07 +02:00
Robert Schmidt
aab1c6a52e Remove LogCollectBuild step: not used by any pipeline 2025-09-19 09:03:07 +02:00
Robert Schmidt
af08ec336e gNB caracal USRP build: don't stop if we can't reboot
Sometimes the connection fails because of the reboot. Without may_fail,
it would stop the build, which will then run the wrong code, possibly.
Instead, continue; if there is a problem with USRP, it will be visible
when starting nr-softmodem.
2025-09-19 09:03:06 +02:00
Robert Schmidt
d1ff1e6142 Use archiveArtifact() for TerminateeNB() 2025-09-19 09:03:06 +02:00
Robert Schmidt
5fcea61e48 Ignore main.py TerminateeNB mode
No pipeline uses it. With the changes in the next commit, pipelines
would start to fail. Remove it for simplicity.
2025-09-19 09:03:06 +02:00
Robert Schmidt
2e0eabc6f2 Remove unused function 2025-09-19 09:03:06 +02:00
Robert Schmidt
8c788bf789 Use archiveArtifact() for SCA.CppCheckAnalysis() 2025-09-19 09:03:06 +02:00
Robert Schmidt
b6ec6a470b Remove cppcheck reference file: nobody knows about it, nobody checks 2025-09-19 09:03:06 +02:00
Robert Schmidt
36d0af079b Use archiveArtifact() for LicenceAndFormattingCheck() 2025-09-19 09:03:06 +02:00
Robert Schmidt
7dfab866cc Remove unused testCase_Id 2025-09-19 09:03:06 +02:00
Robert Schmidt
3f341c0e46 No need for all the useless docker image rm 2025-09-19 09:03:06 +02:00
Robert Schmidt
198f6cc694 Collect the ninja logs for various ran-build images 2025-09-19 09:03:06 +02:00
Robert Schmidt
7e65e0bc04 Use archiveArtifact() for Build()/BuildCluster()
I have to make both together, since they both depend on
AnalyzeBuildLogs().

- remove mkdir for legacy sub-logfiles in build_oai, that does not exist
  anymore; also, remove corresponding log analysis, I think we don't use
  it and it is overkill (either build works or not)
- manually try to copy "all.txt"
- explicitly list log files to copy, then analyze
- AnalyzeBuildLogs(): pass log files to inspect explicitly
2025-09-19 09:03:06 +02:00
Robert Schmidt
83487a9459 use archiveArtifact() for BuildProxy() 2025-09-19 09:03:06 +02:00
Robert Schmidt
f3484ce99b Use archiveArtifact() for BuildRunTests()
Collect also unit test logs, so that developers could see the reason for
failed logs.
2025-09-19 09:03:06 +02:00
Robert Schmidt
20da33823d Use archiveArtifact() for cls_native.run_physim() 2025-09-19 09:03:06 +02:00
Robert Schmidt
797afda6b8 Use archiveArtifact() for cls_native.Build() 2025-09-19 09:03:06 +02:00
Robert Schmidt
28381a22d5 Use archiveArtifact() for deploy_oc_physim() 2025-09-19 09:03:06 +02:00
Robert Schmidt
7caed03d5f Use archiveArtifact() for Ping+IPerf 2025-09-19 09:03:06 +02:00
Robert Schmidt
9227b6a247 Use archiveArtifact() for module_UE 2025-09-19 09:03:06 +02:00
Robert Schmidt
edbb82644a Use archiveArtifact() for (Un-)DeployObject() 2025-09-19 09:03:06 +02:00
Robert Schmidt
da265a36a1 Use archiveArtifact() for CN undeploy 2025-09-19 09:03:06 +02:00
Robert Schmidt
513f6e3750 Simplify ShowTestID()
make it a non-class function, stateless, more information on the current
CI step (the number).
2025-09-19 09:03:06 +02:00
Robert Schmidt
8024f91f8e Main: pass in ctx
Set the context for each task step. Set the artifact result path based
on the XML, so it is harmonized; currently, most pipelines use the "YAML
path" of docker-compose, but that does not always make sense. For
instance, Ping/Iperf() needs to look up this path, but does not
inherently belong to one specific YAML path (there might even be more).
2025-09-19 09:03:06 +02:00
Robert Schmidt
4027267924 Add CI helper class
This class provides a generic "context" for individual tasks about the
current task step, and where to log results. It's used by
archiveArtifact() that would automatically log files in the right
directory, based on a directory in the context, and in a way that order
of files is preserved for long-running pipelines.
2025-09-19 09:03:06 +02:00
Robert Schmidt
10d08baf27 Fix Python "invalid escape sequence" warnings
cls_containerize.py:139: SyntaxWarning: invalid escape sequence '\.'
      lineHasCommit = re.search(f'COMMIT [a-zA-Z0-9\.:/\-]*{image}', str(line)) is not None
    cls_containerize.py:441: SyntaxWarning: invalid escape sequence '\-'
      result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', cmd.getBefore())
    cls_containerize.py:493: SyntaxWarning: invalid escape sequence '\-'
      result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', cmd.getBefore())
    cls_containerize.py:616: SyntaxWarning: invalid escape sequence '\-'
      result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', ret.stdout)
2025-09-19 09:03:06 +02:00
Robert Schmidt
d98fe67b63 Example tracing for QLog
Note: this does not actually work. In the pipelines, we see that for
some reason, quectel-CM cannot establish a connection. Manually, it
works though(?)
2025-09-19 09:03:06 +02:00
Robert Schmidt
77a4248a2a Add example tracing for Amarisoft UE sim
Commented, as the resulting files are very big.
2025-09-19 09:03:06 +02:00
Robert Schmidt
df2be91a5c CI: log UE files in artifacts 2025-09-19 09:03:06 +02:00
Robert Schmidt
f237c8b742 Add possibility to trace UEs 2025-09-19 09:03:06 +02:00
Robert Schmidt
5a5e26b272 5g rfsim NTN LEO/GEO: remove leading undeploy step
It is not necessary (the final undeploys at the end are "always_exec"),
and makes the CI potentially fail since there is nothing to copy at this
point.
2025-09-19 09:03:06 +02:00
Robert Schmidt
31fea37667 CI UE Attach: add more frequent checks, improve output
check for IP once before sleeping in case UE IP address exists, which
should speed up the CI. With this, Only print the actual attach command
once. Print errors only at the beginning. This should simplify attach
command output logs.
2025-09-19 09:03:06 +02:00
Robert Schmidt
580ccbde81 CI: add simple unit test for UE handling 2025-09-19 09:03:06 +02:00
Robert Schmidt
0a5d8384f9 CI: Remove old tracing information
It will be replaced with a new mechanism in a later commit.
2025-09-19 09:03:06 +02:00
Robert Schmidt
4dd026499a CI: use getConnection() to simplify code 2025-09-19 09:03:06 +02:00
Robert Schmidt
1be5e2ed53 CI: shorten UE names (IP might not be available) 2025-09-19 09:03:06 +02:00
Robert Schmidt
f7397fd10f Remove unused statement 2025-09-19 09:03:06 +02:00
Xin Zhe Khooi
665a19c166 ldpc_aal: handle T2 case in runtime 2025-09-19 09:03:06 +02:00
Robert Schmidt
bb2d07188a Rename nrLDPC_coding_t2 options to nrLDPC_coding_aal 2025-09-19 09:03:06 +02:00
Robert Schmidt
31ebac1f7e Rename libldpc_t2 to libldpc_aal
Rename the library to reflect that it's more a generic AAL driver than
specifically for AAL. To this end, rename some documentation.

As of this commit, the options are still called nrLDPC_coding_t2. The
next commit will correct this.

Co-authored-by: Xin Zhe Khooi <khooixz@comp.nus.edu.sg>
2025-09-19 09:03:06 +02:00
Xin Zhe Khooi
1d3a43075e ldpc_t2: generalize for broader BBDEV support (ACC100/200)
- Generalized LDPC T2 implementation to support other DPDK BBDEV
  accelerators (e.g., Intel ACC100/200)
- Added BBDEV capability checks during initialization
- Introduced LLR scaling to improve decoding performance on Intel ACC
  cards
- Implemented self-managed HARQ buffers for ACC200 (no internal HARQ
  memory)
- Library usage documentation update, and added developer documentation

Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
2025-09-19 09:03:06 +02:00
Cedric Roux
75e3c76726 time manager tests: increase some sleep
The CI fails sometimes, because some processes/threads are created in
unpredictable order and if the client connects before the server is
ready some tests fail, as seen in the following log:

[UTIL]   client/server iq-samples: launch sub-processes
[UTIL]   threadCreate() for time client: creating thread (no affinity, default priority)
[UTIL]   time manager configuration: [time source: server] [mode: client] [server IP: 127.0.0.1} [server port: 7374]
[UTIL]   time client: connection to 127.0.0.1:7374 failed, try again in 1s
[UTIL]   threadCreate() for time source iq samples: creating thread (no affinity, default priority)
[UTIL]   threadCreate() for time server: creating thread (no affinity, default priority)
[UTIL]   time manager configuration: [time source: iq_samples] [mode: server] [server IP: 127.0.0.1} [server port: 7374]
[UTIL]   client/server: rlc ticks: 1000 pdcp ticks: 1000 x2ap ticks: 1000
CMDLINE: "/oai-ran/build/common/utils/time_manager/tests/test_time_manager_auto" "--time_management.mode" "server" "--time_management.time_source" "iq_samples"
[UTIL]   client/server: rlc ticks: 0 pdcp ticks: 0 x2ap ticks: 0
CMDLINE: "/oai-ran/build/common/utils/time_manager/tests/test_time_manager_auto" "--time_management.mode" "client"
[UTIL]   client-server iq-samples: ERROR

The client/server iq-samples test is started.
Then we see this log:
[UTIL]   time manager configuration: [time source: server] [mode: client] [server IP: 127.0.0.1} [server port: 7374]
Which means that the client is running.

It tries to connect to the server (not running yet), but fails, so sleeps
for 1 second before attempting another connection to the server:
[UTIL]   time client: connection to 127.0.0.1:7374 failed, try again in 1s

The sleep is done by the time_client thread, the main thread of the test
program continues and does a sleep(1).

Then the server arrives:
[UTIL]   time manager configuration: [time source: iq_samples] [mode: server] [server IP: 127.0.0.1} [server port: 7374]

It sends all the ticks (to no client, since the client is still sleeping).

Then the test is over, the sleep(1) of the client finishes and the program
exits. The client never connected to the server.
We have this log:
[UTIL]   client/server: rlc ticks: 0 pdcp ticks: 0 x2ap ticks: 0

And the test fails.

It's complicated to write an automatic test involving several uncoordinated
programs. The operating system may create processes in any order. We use
some sleeping to wait, but it may be too short or too long, leading to test
failure.

Let's see with more sleep if the CI fails less.
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
4ebc585852 Fix periodic CSI scheduling in UE
Changed the search structure to have periodic resoruce id in the outer
loop and configured resource set as inner loop to prevent configuring
resource that is not needed.

Use const for input pointers.
2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
eb2972a034 Add CI unit test for highrate iperf test 2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
4e59f378cd CI: refactor iperf3 UDP analysis function
- Add helper function to normalize bitrate values to Mbps for calculations.
- Add helper function to extract data from iperf test report.
- Clean up the UDP analysis function, improve test report formatting.
- Fix an issue where Gbps values were incorrectly reported due to inconsistent
  unit parsing.
- Update CI unit test report checks to match the new formatting.
2025-09-19 09:03:06 +02:00
Robert Schmidt
b8312c30dc Remove F1 interface names from configuration files
These options are not taken into account, they are not even defined in
the configuration module.
2025-09-19 09:03:06 +02:00
Robert Schmidt
5c46a91957 Remove old 4G F1 configuration files
4G F1 has been removed from the code base, so these configs are now
useless.

See also commit 9dc2282249 ("Remove 4G F1")
2025-09-19 09:03:06 +02:00
Robert Schmidt
c22d643e45 Remove unused control port number from F1
Remove these F1-C port numbers. The configuration is not actually
applied, and the default F1-C port number 38472 (see F1AP_PORT_NUMBER)
is hardcoded in the F1 module.

For the moment, I leave the configuration option, in case we want to
allow to configure the port numbers later).
2025-09-19 09:03:06 +02:00
Robert Schmidt
e5abc46b9f Harmonize GTP log messages
Make a common pattern, which makes it simpler to find them in gNB logs,
and, maybe more importantly, link tunnel creation and update (the update
message was missing the "incoming" TEID, so it is not easy to link to
creation apart from the UE ID, but even then the UE might have multiple
tunnels).
2025-09-19 09:03:06 +02:00
Robert Schmidt
d5e36e8475 Refactor gtpv1u_bearer_t and use internally
Reuse the gtpv1u_bearer_t for internal functions. Hopefully this will
also simplify implementation of IPv6, as it encapsulates IP address
handling within gtpv1u_bearer_t.
2025-09-19 09:03:06 +02:00
Robert Schmidt
f5bd42dbba Refactor GTP: pass addr structure directly
This should simplify future transition to IPv6, as we can pass the right
address directly.
2025-09-19 09:03:06 +02:00
Robert Schmidt
630e8cdcf0 Refactor port number out of newGtpuCreateTunnel()
The (remote) port number of the GTP module is configured during
initialization. It is therefore not required when calling
newGtpuCreateTunnel(), and could even lead to bugs (if another port
number is used than specified during GTP init).
2025-09-19 09:03:06 +02:00
Robert Schmidt
e5870977fd Receiver thread: independent of ITTI
This also seems to reduce the packet loss on my machine.
Especially in uplink there are no losses anymore.
2025-09-19 09:03:06 +02:00
Robert Schmidt
16c01d4c04 Reduce receiver mutex scope
This seems to reduce packet loss on my machine.
2025-09-19 09:03:06 +02:00
Robert Schmidt
3eb8f7124b Remove unused struct member 2025-09-19 09:03:06 +02:00
Robert Schmidt
f63f496b6d Reformat gtp_itf.cpp 2025-09-19 09:03:06 +02:00
Robert Schmidt
60c0deedaa DU Buffer Report/DL Delivery Status: remove unused code 2025-09-19 09:03:06 +02:00
Robert Schmidt
eee4f733d1 Add CU-UP load tester and documentation
This is a simple CU-UP load tester. It sets up a configurable number of UEs in the
CU-UP, then sends GTP traffic in downlink/uplink in the N3-F1/F1-N3
direction at the CU-UP. It then compares the sent and received data.

Additional parameters, such as amount of traffic, test length, packet
size, and IP addresses/ports are configurable.

To run:

    mkdir build && cd build && cmake .. -GNinja && ninja nr-cuup nr-cuup-load-test params_libconfig
    ./tests/nr-cuup/nr-cuup-load-test
    ./nr-cuup -O ../tests/nr-cuup/load-test.conf

The tester should be able to detect lost and reordered packets.

Example lost: Receive order 2,3,5,6 (lost packet 4)
=> on packet 2, expected 2, next=expected+1=3
=> on packet 3, expected 3, next=expected+1=4
=> on packet 5, expected 4, diff=5-4=1 (lost 1), next=payload+1=6
=> on packet 6, expected 6
=> 1 lost

Example reordered: Receiver order 2,5,3,6 (lost packet 4)
=> on packet 2, expected 2, next=expected+1=3
=> on packet 5, expected 3, diff=5-3=2 (lost 2), next=payload+1=6
=> on packet 3, expected 6, (reduce lost by 1 to 1), next=expected=6
=> on packet 6, expected 6
=> 1 lost

Example reordered: Receiver order 2,5,3,4,6 (no losses)
2025-09-19 09:03:06 +02:00
Robert Schmidt
2d40124504 Code does nothing: gtpv1u_data_g never populated, always HASH_TABLE_KEY_NOT_EXISTS 2025-09-19 09:03:06 +02:00
Robert Schmidt
0999bd6024 OAI hashtable not used in GTP 2025-09-19 09:03:06 +02:00
Robert Schmidt
dc3b43de07 Make GTP compile on its own, without LTE
Avoid the include gtpv1_u_messages_types.h, as this pulls in e.g., LTE
RRC definitions. The CU-UP load tester integrated in one of the
following commits should be able to build without LTE RRC, if it was for
GTP. Unfortunately, ITTI also pulls in LTE RRC, so it's also somewhat
useless...

Put some forward declarations instead. That also shows that the API is
unnecessarily complex, and would need some cleanup.
2025-09-19 09:03:06 +02:00
Robert Schmidt
87ac99c489 Correctly link sctp into SCTP_CLIENT
Remove sctp from all other targets, since we use sctp::sctp on
SCTP_CLIENT (would fail if it does not exist), and SCTP_CLIENT already
fulfils the SCTP dependency.
2025-09-19 09:03:06 +02:00
Robert Schmidt
d9361aeebc Correct Findsctp.cmake
- Provide some documentation
- Make cmake keywards and sctp lib name lowercase
- Use standard form of find_package_handle_standard_args()
- Make an imported target sctp::sctp that will fail if being used in
  cmake unless defined, which will avoid that "sctp" appears in the
  cmake code but is silently discarded

See also:
https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#a-sample-find-module
2025-09-19 09:03:06 +02:00
Robert Schmidt
01fa8e3c3e CMake module path to beginning
Move the path to the beginning, so that we can use it early.
Specifically, it was after the SCTP module, and the next commit will use
the Findsctp.cmake module to find SCTP. Use the cmake-proper variable.
2025-09-19 09:03:06 +02:00
Laurent THOMAS
42e4e8d1ef fix array sizes and aligment issues in 5G UE dci decoder 2025-09-19 09:03:06 +02:00
Laurent THOMAS
b1f830a287 fix SIMD tail length in nr_pdcch_detection_mrc() and replace >> operator by / 2025-09-19 09:03:06 +02:00
Laurent THOMAS
d0223139ac move static some functions that are used only in one file 2025-09-19 09:03:06 +02:00
Laurent THOMAS
aa24a1f246 generalize constant nb re per rn in dci_nr.c 2025-09-19 09:03:06 +02:00
Laurent THOMAS
e07c7cc5e3 simplify and make more local variables in nr_rx_pdcch() and fix small bugs (size 9 RE instaed of 12 RE) 2025-09-19 09:03:06 +02:00
Laurent THOMAS
291a30890c reduce size and make local rxdataF_comp in nr_rx_pdcch() 2025-09-19 09:03:06 +02:00
Laurent THOMAS
e84e666a68 simplify nr_pdcch_channel_compensation() 2025-09-19 09:03:06 +02:00
Laurent THOMAS
875cc5c6b2 simplify function nr_pdcch_extract_rbs_single() 2025-09-19 09:03:06 +02:00
Laurent THOMAS
7a012a3310 add assert in a case of wrong gNB configuration file 2025-09-19 09:03:06 +02:00
Cedric Roux
d178adee19 rfsim: add a T trace to dump RX IQ data
Only for one antenna.
2025-09-19 09:03:06 +02:00
Cedric Roux
bde6e2a0c5 T hacks: add ofdm-plot
Used to... surprise... plot OFDM data as output (or input) by gnb!

Limitation: only one antenna.
2025-09-19 09:03:06 +02:00
Cedric Roux
e2f985b0d3 T: dump logs to stderr, not stdout
This is a problem with the new tool ant0 when we dump IQ to stdout.
The logs will mess up the recording.
2025-09-19 09:03:06 +02:00
Cedric Roux
e85aeb2051 rfsim: add a T trace to dump IQ data
Only for one antenna.
2025-09-19 09:03:06 +02:00
Cedric Roux
b8090d6f0f T hacks: add ant0 utility to dump IQ data as float complex
Or as int16.
2025-09-19 09:03:06 +02:00
francescomani
7e36158227 config_isparamset doesn't work for array types, using numelt instead 2025-09-19 09:03:06 +02:00
Thomas Schlichter
563819eb33 NR UE: invalidate SI window on successful SI reception to avoid wrongly reusing this old SI window for new SI reception
This fix was suggested by Francesco Mani
2025-09-19 09:03:06 +02:00
Thomas Schlichter
fe1e51eb8d gNB: fix case when multiple Rel-17 SIBs would be defined
The boolean value v17_sib was not set to true when allocating si_schedulingInfo_v17 and schedulingInfo2_r17.
So multiple Rel-17 SIBs would lead to multiple allocations and only the last SIB being actually configured.

Fix this by removing the redundant v17_sib variable and directly check if the memory was already allocated.
Also move the definition and allocation of si_schedulingInfo_v17 closer to its actual usage.
2025-09-19 09:03:06 +02:00
Thomas Schlichter
16499f1334 NTN config: setting sib1_tda is not required anymore 2025-09-19 09:03:06 +02:00
Thomas Schlichter
2f803844b6 set ntn-UlSyncValidityDuration-r17 to 5 seconds for LEO scenario
Now that we reliably receive SIB19, we can set the ntn-UlSyncValidityDuration-r17 to a sane value
and thus make sure that the UE always has up-to-date SIB19 information.
2025-09-19 09:03:06 +02:00
Thomas Schlichter
2bbed8296a NR UE: fix calculation of SI window expiry 2025-09-19 09:03:06 +02:00
Thomas Schlichter
1ac51d465a gNB: fix scheduling of rel-17 SIBs 2025-09-19 09:03:06 +02:00
Romain Beurdouche
a8c6d48856 feat(LDPCImplementation.md): Fix documentation
* Outdated names of the functions of the segment coding interface.
* Ambiguity about loading of the segment coding libraries.
2025-09-19 09:03:06 +02:00
Robert Schmidt
912a2bc546 Telnet CI: Handle error of no RNTI 2025-09-19 09:03:06 +02:00
Robert Schmidt
ddb4467fd9 Bugfix: when no UE found, return -1 2025-09-19 09:03:06 +02:00
Robert Schmidt
864382ffb0 Add XML step to check UE is on dedicated BWP 2025-09-19 09:03:06 +02:00
Robert Schmidt
3b044bf8b3 Remove non-existing XML steps 2025-09-19 09:03:06 +02:00
Robert Schmidt
2b5f6f2464 Add telnet command to get UE's BWP 2025-09-19 09:03:06 +02:00
francescomani
a969706b03 use CSET0 for common search space in dedicated BWP 2025-09-19 09:03:06 +02:00
luis_pereira87
c4f6563642 CI: Add DedicatedBWP to '40 MHz TDD F1+E1 SA' in 'RAN-SA-B200-Module-SABOX-Container' 2025-09-19 09:03:06 +02:00
luis_pereira87
9b74093bcb Remove 'searchspaceid' from 'verify_agg_levels' function because it was used only for LOG 2025-09-19 09:03:06 +02:00
luis_pereira87
448aa2c5d0 Add a 'common' type SearchSpace in the NR_BWP_DownlinkDedicated IE for DedicatedBWPs to get DCIs decoded in common searchspace of a DedicatedBWP
After RRCSetup, until RRCReconfigurationComplete, gNB continues to schedule ULSCH using DCIs in a common searchspace.
In theory, the UE should decode DCIs in:

            <downlinkBWP-ToAddModList>
                <BWP-Downlink>
                    <bwp-Common>
                        <pdcch-ConfigCommon>
                            <setup>
                                <commonSearchSpaceList>
                                    ...
                                </commonSearchSpaceList>

However, due to the limited amount of time to investigate this issue, the easy way I found to get DCIs decoded in common searchspace of a DedicatedBWP was by adding a common searchspace in the bwp-Dedicated:

                    <bwp-Dedicated>
                        <pdcch-Config>
                            <setup>
                                <searchSpacesToAddModList>
                                    <SearchSpace>
                                        ...
                                    </SearchSpace>
                                </searchSpacesToAddModList>

This way, let's call it a workaround.
2025-09-19 09:03:06 +02:00
luis_pereira87
b0be4931bb Fix fill 'initialDownlinkBWP->pdsch_Config' when there are DedicatedBWPs
This fixes the reported 'RSRP = 0' issue when the UE is in the InitialBWP and we have DedicatedBWPs configured
2025-09-19 09:03:06 +02:00
luis_pereira87
ce4e54e08b Improve CORESET selection 2025-09-19 09:03:06 +02:00
luis_pereira87
d61211e01d Improve SearchSpace selection
There is a removal of the NR_SearchSpace__searchSpaceType_PR because, at this point, the gNB already selected the searchspace and it calls this function only to find the coreset with controlResourceSetId based on the previously searchspace id selected;
There is no need to send a pointer to the entire searchspace structure because we only need the controlResourceSetId: NR_ControlResourceSetId_t coreset_id = *ss->controlResourceSetId;

It also prevents a segmentation fault, in develop when NR_SearchSpace__searchSpaceType_PR_common because gNB calls sched_ctrl->coreset = get_coreset(nr_mac, scc, bwpd, sched_ctrl->search_space, target_ss); the bwpd is NR_BWP_DownlinkDedicated_t *bwpd = NULL; and is it incompatible with the cast to NR_BWP_Downlink_t in coreset = ((NR_BWP_Downlink_t*)bwp)->bwp_Common->pdcch_ConfigCommon->choice.setup->commonControlResourceSet; this was never noticed until now because gNB barely used NR_SearchSpace__searchSpaceType_PR_common
2025-09-19 09:03:06 +02:00
Matthias Mehlhose
ed91d883e1 mod: use random numbers in unit test function 2025-09-19 09:03:06 +02:00
Mario Joa-Ng
964d8e3c35 mod: unit test code to compare CM and SIMD results on both antennas 2025-09-19 09:03:06 +02:00
Matthias Mehlhose
c5159a65c3 Initial unit test to refactor and fix nr_layer_precoder_simd function (See #955) 2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
ccb68d7471 CI: adjust gNB conf file in OAIUE pipeline
Following frequency change in the pipeline, we observed degraded UL channel
conditions resulting in low UL throughput. Increasing attenuation on the gNB
side was found to mitigate this issue by improving UL channel quality
and reducing UL noise power.

Increase tested UL and DL bitrates in OAIUE pipeline.
2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
cc7e32d944 CI: change frequency for AW2S pipeline 2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
69e65df4be CI: change frequency for OAIUE pipeline 2025-09-19 09:03:06 +02:00
Jaroslava Fiedlerova
57978c73c4 CI: change frequency for phytests with USRP N310 2025-09-19 09:03:06 +02:00
Laurent THOMAS
e302845688 Fix a 4G UE bug 2025-09-19 09:03:06 +02:00
Laurent THOMAS
a720e8e63f trace to try to debug old 4G bug 2025-09-19 09:03:06 +02:00
Robert Schmidt
3901b78ef4 Remove unused parameter from build_oai 2025-09-19 09:03:06 +02:00
Laurent THOMAS
ecc4b247ca Fix potential out-of-bound write
Tell strncpy() the size including the NULL byte to make sure we copy all
data.

This just fixes these warnings:

    openair3/NAS/TOOLS/conf_usim.c: In function ‘gen_usim_data’:
    openair3/NAS/TOOLS/conf_usim.c:191:17: warning: ‘strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]
    openair3/NAS/TOOLS/conf_usim.c:190:53: note: length computed here
    openair3/NAS/TOOLS/conf_usim.c:195:17: warning: ‘strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]
    openair3/NAS/TOOLS/conf_usim.c:194:54: note: length computed here

add copy with limited size and truncate properly with null C string termination.

As clang-format doesn't handle tab indented files and as it is not the
OAI coding rule, the entire file is re-indented with present OAI coding
rule.
2025-09-19 09:03:06 +02:00
Laurent THOMAS
3ef10e9525 Remove specific directory for LTE SIM management tools
Move into openair3/NAS/TOOLS/CMakeLists.txt, and simplify the
CMakeLists.txt.

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
38d9041606 Set sib1 reception flag as per spec
TS 38.213 4.1 says coreset 0 is present only if kssb < 24 for FR1 and <
12 for FR2. This commit sets get_sib1 flag based on kssb.

Also, setting of mac state is taken out of function nr_ue_decode_mib().
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
f80150c06e Add new physim test cases for nr_dlsim
Following tests are added:
  1. 256QAM with TDL-A channel model
  2. 256QAM with 2 layers
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
4e14efeaa1 Fix bug in LLR threshold buffer
The LLR threshold buffers hold only for one symbol but the LLRs are
computed for all symbols together. So only the threshold of last symbol
was used for computing LLR for all other symbols.

This commit calls nr_dlsch_llr for each symbol togther with rest of
nr_rx_pdsch() and calls nr_dlsch_layer_demapping at the last symbol.

Fixes issue 948.
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
e1dddd5970 Dlsim dump processing buffers
Write extracted rxF buffer to output bin file.
Fix offset in writing rxF buffer.
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
6cb6f0d63f Fix counting error bits in nr_dlsim
Recently f buffer was changed to hold packed bits and the correspoinding
change in dlsim was not done so the number of error bits before decoding
was incorrectly reported. This commit fixes it.
2025-09-19 09:03:06 +02:00
Sakthivel Velumani
9ea802275c Fix alignment of LLR buffer in UE 2025-09-19 09:03:06 +02:00
francescomani
13511fd009 fix tun_if.c warning: specified bound 16 equals destination size 2025-09-19 09:03:06 +02:00
francescomani
fac8a39a50 take into account starting PRB when deciding even/odd PRB for CSI PDSCH rate-matching 2025-09-19 09:03:05 +02:00
Robert Schmidt
c1701b0a9a Avoid uninitialized variable btilde
Pre-initialize this variable. It should be set in pucch2x_scrambling(),
but the compiler warns with

    In function ‘pucch2x_modulation’,
        inlined from ‘generate_pucch2x’ at oai/openair1/PHY/LTE_UE_TRANSPORT/pucch_ue.c:425:3:
    oai/openair1/PHY/LTE_UE_TRANSPORT/pucch_ue.c:361:18: warning: ‘btilde’ may be used uninitialized [-Wmaybe-uninitialized]
      361 |     d[i] = btilde[i] == 1 ? -amp : amp;
    oai/openair1/PHY/LTE_UE_TRANSPORT/pucch_ue.c: In function ‘generate_pucch2x’:
    oai/openair1/PHY/LTE_UE_TRANSPORT/pucch_ue.c:387:11: note: ‘btilde’ declared here
      387 |   uint8_t btilde[20];
2025-09-19 09:03:05 +02:00
Robert Schmidt
cdbd8f7a95 Remove --usim-test command line option
Remove the --usim-test option: to my knowledge, it's not used by users,
and is misleadingly placed in various places where there should not be a
difference w.r.t. USIM configuration.

When making the changes, I assumed that --usim-test would be 0 (the
default), which is the case in all executables when not specified in
options except for the nr_dlsim, nr_pbchsmi, nr_ulsim simulators.

The only exception is the initialization of PDCP from the MAC, which is
not correct (the PDCP is in the CU, so it does not make sense to call it
from the MAC which is in the DU). Instead, always initialize from main,
even in the NSA case (NSA was covered by the incorrect initialization
from MAC).

This in turn let to some more cleanup around function du_rlc_data_req().
After receiving GTP packets at the DU, they were given to the PDCP to
enqueue the packet at RLC. This does not work anymore, since the PDCP is
not initialized; it also does not seem necessary, as this enqueue
functionality is necessary to decouple PDCP and RLC to avoid deadlocks
in monolithic, but in split-mode, this cannot happen. Instead, call
directly into the RLC when receiving GTP packets.
2025-09-19 09:03:05 +02:00
Abdo-Gaber
19d691da39 Add Readme for the Data Recording Application
It provides and overview about the Architecture, Requirement Packages,
Configuration Files, How to run Data Recording Application, and an
Overview on Collected Data Set.
2025-09-19 09:03:05 +02:00
Abdo-Gaber
4712b9ac8f Add Data Recording Application v1.0 (main app, SigMF Interface, Config files, Sync validation)
The data recording App includes the following files:
- The main app: data_recording_app_v1.0.py that has the data control service, interact with tracers, and data sync and conversion service
- The configuration file: common/utils/data_recording/config/config_data_recording.json
- The wireless dictionary file: common/utils/data_recording/config/wireless_link_parameter_map.yaml
- The SigMF Interface (common/utils/data_recording/lib/sigmf_interface.py) to store recorded data and meta-data in SigMF format
- A simple script (common/utils/data_recording/sync_validation_demo.py) to validate that the recorded bits from gNB and UE are in Sync
- For more info look to doc/data_recording.md

A squashed commit further updates:
- Enhance Data Recording App structure
- Support the new state machine of T-Tracers
- Add new files for Config Interface, sync Service, def of data recording messages, and common utilties
- Make part of logging on Terminal configurable
2025-09-19 09:03:05 +02:00
Abdo-Gaber
bf1c58c3d6 Add Data Collection Services (T-Tracer for gNB and UE)
- Add _tracer_app_gnb and t_tracer_app_ue apps to common/utils/T/tracer/Makefile
- Add Data collection Service for gNB: common/utils/T/tracer/t_tracer_app_gnb.c
- Add Data Collection Service for UE: common/utils/T/tracer/t_tracer_app_ue.c
- Add Shared memory configuration (common/utils/T/tracer/shared_memory_config.h),
  since We will have too much memory consumption on the stack if the
  T-tracer is not fast enough to process the traces or if we have too
  much traces. As a result, tracers start to capture data, write data in
  shared memory, then close the T-Tracer after getting the recording of
  N slots
- Support the operation of : COnfig, Record, and Stop
- Poll from Socket and not use get_events to mitigate long-time waiting
  if there is no data in buffer or the UE is already released or crashed
- Add extra offset to improve data sync
2025-09-19 09:03:05 +02:00
Abdo-Gaber
de9a4ea4af Add Trace RX Payload on gNB (msg: GNB_PHY_UL_PAYLOAD_RX_BITS) including UTC time
Log gNB RX Payload for both CRC valid and invalid cases
2025-09-19 09:03:05 +02:00
Abdo-Gaber
4cb0db600b Add traces on UE PHY UL and related requirement: Tx Scrambled bits and Tx payload bits
- Update input parameters to nr_ulsch_encoding () in
  nr_transport_proto_ue.h to get number_dmrs_symbols to be added to
  meta-data.
- In nr_ulsch_coding.c: Trace UE PHY UL Payload TX bits (T_message:
  T_UE_PHY_UL_PAYLOAD_TX_BITS) including related meta-data and UTC time.
- In nr_ulsch_ue.c: Trace UE PHY UL Scrambled TX bits (T_message:
  T_UE_PHY_UL_SCRAMBLED_TX_BITS) including related meta-data and UTC
  time.
- Fix the input prameters in nr_ulsch_encoding () called in
  (openair1/SIMULATION/NR_PHY/ulschsim.c) since a new input parameter
  has been added.
2025-09-19 09:03:05 +02:00
Abdo-Gaber
51540d1f2b Add traces on gNB PHY UL and related requirement: FD PUSH IQ, FD DMRS, and UL Channel estimates wi/wo interpolation
- The required memories have been created and initialized in:
  openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
- Those memories: memory for DMRS signals, memory for channel estimates
  based on DMRS positions, memory to store slot grid with channel
  coefficients based on DMRS positions after interpolation, and memory
  to store extracted data including PUSCH + DMRS.
- The input parameters to nr_pusch_channel_estimation() has been updated
  to get the pointer to the added memories of pusch_dmrs_slot_mem and
  pusch_ch_est_dmrs_pos_slot_mem
  (openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h)
- The DMRS grid of NR slot and the estimated channel coefficients at
  DMRS locations are logged to created memories in:
  openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
- The function inner_rx in
  openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c is updated to log
  the extracted ULSCH PRBs and the interpolated channel coefficients.
- The T-macro() has been called in
  (openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c) to trace added
  traces: T_GNB_PHY_UL_FD_DMRS, T_GNB_PHY_UL_FD_CHAN_EST_DMRS_POS,
  T_GNB_PHY_UL_FD_PUSCH_IQ, T_GNB_PHY_UL_FD_CHAN_EST_DMRS_INTERPL
2025-09-19 09:03:05 +02:00
Abdo-Gaber
eca2af37a8 Add log tools to get and process UTC Time during data tracing 2025-09-19 09:03:05 +02:00
Abdo-Gaber
fa895fb648 Add new trace messages on UE and gNB
GNB_PHY_UL_FD_PUSCH_IQ,
GNB_PHY_UL_FD_DMRS,
GNB_PHY_UL_FD_CHAN_EST_DMRS_POS,
GNB_PHY_UL_PAYLOAD_RX_BITS,
UE_PHY_UL_SCRAMBLED_TX_BITS,
UE_PHY_UL_PAYLOAD_TX_BITS
2025-09-19 09:03:05 +02:00
Abdo-Gaber
f7468c67ef T_tracer Extension to Support up to 35 Parameters in the T() macro 2025-09-19 09:03:05 +02:00
Laurent THOMAS
d546b957c3 bad type multi casts with wrong meaning like cast to ** a array of 2D (wrong in C) 2025-09-19 09:03:05 +02:00
Laurent THOMAS
20521226b4 enhance llr unitary tests 2025-09-19 09:03:05 +02:00
Laurent THOMAS
eba960b682 factorize code that initialize all 0xff simd vectors 2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
27e3f13ed2 CI: move RFSim 4G to acamas 2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
209e2bccb6 rfsimulator: fix model name for channel
bridge->nb_cnx++ is done before calling snprintf(modelname,... in the function,
so we take the model name of the next channel. This commit corrects the issue by
using bridge->nb_cnx - 1, ensuring that the model name corresponds to the currently
connected client.
This bug was introduced by MR !3455.

Co-authored-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
Co-authored-by: Laurent THOMAS <laurent.thomas@open-cells.com>
2025-09-19 09:03:05 +02:00
Marius Tillner
d8554ac0d9 bugfix: avoid segmentation fault when Redcap tries to connect to gNB as NR_ServingCellConfig_t scd is NULL when Redcap does RA 2025-09-19 09:03:05 +02:00
Robert Schmidt
c34b08df85 RAN-Container-Parent: Auto-generate artifact in failure case
RAN-Container-Parent uses Jenkinsfile-GitLab-Container, which only
triggers sub pipelines, then collects their results. However, if a sub
pipeline did not generate an artifact, the result was skipped. It would
also not show it in the automatically generated result page, when it
should.

Remedy this by automatically generating a file with a link to the
pipeline if the artifact could not be retrieved, which

1. Will give a link, which is easier for developers to follow to the
   pipeline than manually clicking through Jenkins,
2. Makes the failed pipeline appear in the list of failed pipelines.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
d01958a019 CI: test T2 with DPDK 22.11
Build and run OAI physims with DPDK version 22.11 for testing with the latest
T2 firmware release. Environment variables PKG_CONFIG_PATH and LD_LIBRARY_PATH
are set to point to the custom installation path of DPDK v22.11.
2025-09-19 09:03:05 +02:00
francescomani
c99e528a63 use function to count number of dmrs symbols 2025-09-19 09:03:05 +02:00
francescomani
2fbd672e04 replace get_dmrs_symbols_in_slot with new function (does exactly the same) 2025-09-19 09:03:05 +02:00
francescomani
6901cf48d9 function to count bits with a mask for start and stop 2025-09-19 09:03:05 +02:00
Robert Schmidt
53580862f7 Verify 2nd PDU session is up 2025-09-19 09:03:05 +02:00
Robert Schmidt
fe81eeb1b0 CI 5G RFsim nFAPI u0/25PRB: Add Ping test on second PDU session 2025-09-19 09:03:05 +02:00
Reem Bahsoun
1e872cf363 Add WNC RU in Aerial doc + update cuBB iamge name and number of cores used (related to MR 3477) 2025-09-19 09:03:05 +02:00
Reem Bahsoun
a56ce6f20d Add high throuput testing on CI 2025-09-19 09:03:05 +02:00
Reem Bahsoun
2539daef03 Change frequency to match the WNC RU range of frequencies 2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
e4e2aa1c22 CI: adjust UL throughput target for 2x2 RFSim5G test on acamas
This commit reduces the UL throughput target in the 2x2 test to align
with the host’s performance capabilities. The adjustment ensures more
reliable and consistent CI results.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
daed677994 CI: add sleep after UE deployment in TDD dora test
Give more time to the gNB-UE to establish the connection before ping
test is triggered.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
22c7943e66 CI: Increase sleep time in RFSim5G
Based on observations from testing on acamas, the interval between DL
disruption and the UE synch check needs to be increased - the UE takes
longer to go out of sync . A sleep of 15 seconds has proven to be a
reliable value to ensure constant results.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
647d490241 CI: add SYS_NICE capability in some RFSim5G tests
Add SYS_NICE capability to enable setting thread priority and affinity
in rfsim5g tests. This improves execution speed in test cases with
heavier processing workloads.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
b9c08993d5 CI: replace nc by ncat
When migrating from RHEL (on cacofonix) to Ubuntu 22.04 (on acamas), the `nc`
command needs to be replaced by `ncat`. The version of `nc` available on Ubuntu
is the OpenBSD variant, which lacks support for some options used in our scripts.
`ncat` from the Nmap is used instead.
2025-09-19 09:03:05 +02:00
Jaroslava Fiedlerova
3687748cd9 CI: move RFSim 5G to acamas 2025-09-19 09:03:05 +02:00
Bartosz Podrygajlo
7f6b2ff5bc NR UE: Enable additional PDU session
Add new command line / config parameter --extra-pdu-id which when
configured creates an extra PDU session.

Rename --default_pdu_id to --default-pdu-id
2025-09-19 09:03:05 +02:00
Bartosz Podrygajlo
d61f449afb Fix a wraparound bug with equal priority remaining buffer size in MAC 2025-09-19 09:03:05 +02:00
rmagueta
3067e616c8 Inter-frequency handover documentation update 2025-09-19 09:03:05 +02:00
rmagueta
7da2dcde2b Get measurement of neighboring cells and measurement gaps working after RRCReestablishment 2025-09-19 09:03:05 +02:00
rmagueta
1c947ceca1 Get new measConfig and measurementTimingConfiguration for target gNB-DU during handover 2025-09-19 09:03:05 +02:00
rmagueta
608de4d5b3 Send MeasConfig to DU, Receive MeasGapConfig from DU 2025-09-19 09:03:05 +02:00
rmagueta
7cfec04648 Refactor code, add inter-freq neighbors, avoid mem leak
Previously, we only supported intra-frequency handovers, so the
measurements where only for intra-frequency, reusing the same
measurement object. Now that we would support inter-frequency handover,
also add multiple MeasObjects for each neighbor.
2025-09-19 09:03:05 +02:00
rmagueta
97c98a441e Refactor get_MeasConfig(): create subfunctions 2025-09-19 09:03:05 +02:00
rmagueta
b790fa03d0 Add logic for measgap scheduling 2025-09-19 09:03:05 +02:00
rmagueta
60438f4e8e Handle Measurement Timing Configuration in DU/MAC handler 2025-09-19 09:03:05 +02:00
rmagueta
d6db6f54fb Add MeasGap Configuration in Radio config
Add some helper functions that will be used by the MAC handler to fill
the right MeasGap configuration based on Measurement Configuration sent
by the CU, in the next commit.
2025-09-19 09:03:05 +02:00
rmagueta
ecc7ef84fe UE RRC: Print warning that measurement gaps are not supported 2025-09-19 09:03:05 +02:00
rmagueta
d9427243c3 Add F1AP procedures related to measurementTimingConfiguration 2025-09-19 09:03:05 +02:00
Robert Schmidt
2270ece020 Cleanup possible transmission interrupt states 2025-09-19 09:03:05 +02:00
fatich
c0cabf7c64 fix(RLC): Count dropped DL SDUs by the RLC
When a downlink SDU was discarded by the RLC Acknowledged Mode entity due to a full transmit buffer (tx_maxsize), the drop statistics were not being updated.
The `txpdu_dd_pkts` and `txpdu_dd_bytes` counters remained at 0.
It should be noted that while the statistics are named `txpdu_dd_*`, the drop at this stage occurs at the SDU level.
2025-09-19 09:03:05 +02:00
Cedric Roux
fa448fa919 nr rlc: speedup RX path of RLC AM
rx_list is replaced by an array of size 2^(SN size - 1)
which is 131072 for an SN size of 18 bits, leading to
1048576 bytes of memory used. (Less for smaller SN sizes.)

A lot of RX processing was to run through rx_list. When the list was
big (with some non-ideal channel), it can take some time. Removing this
list should improve things. Checking with benchmark_nr_rlc_am_entity
a speedup of more thant x10 is achieved (except for the case 1024 which
is surprisingly faster than the others in the develop branch).

The only thing that may be slower is when looking for cur->next where
the SN is different, in which case we need to look for all SN one by
one until we find something or reach the limit (rx_highest_status).
These are the functions get_first_rx_pdu() and get_next_rx_pdu().
2025-09-19 09:03:05 +02:00
Cedric Roux
5fc7d3abb4 nr rlc: discarding a packet when RX buffer is full is a warning
We want to see it. It's not normal, may disturb the system.
2025-09-19 09:03:05 +02:00
Cedric Roux
ff47cdee88 fix compilation of nr rlc tests
./run_tests.sh in openair2/LAYER2/nr_rlc/tests was not functional anymore.
2025-09-19 09:03:05 +02:00
alexjiao
ca0bbaeac5 Fix PDSCH overlap with ZP CSI-RS case
When PDSCH overlap with ZP CSI-RS, nb_re_pdsch needs to be reduced by number of CSI-RS RE.
2025-09-19 09:03:05 +02:00
Rajesh Guttula
8263b8ccfd Extnded changes to "Initial support for RedCap" feature in gNB
The changes done in this commit are to contribute the supporting changes
for the existing "Initial support for RedCap" feature in gNB.

In this patch, handle and store the RedCap related IE's present in "NR
UE Capability Information" msg which are

- 'supportOfRedCap-r17'
- 'supportOf16DRB-RedCap-r17'
- 'longSN-RedCap-r17'
- 'am-WithLongSN-RedCap-r17'

use 'longSN-RedCap-r17' and 'am-WithLongSN-RedCap-r17' IEs to set the SN
length to either 12 Bit or 18 Bit accordingly.
2025-09-19 09:03:05 +02:00
Laurent THOMAS
0ed8566a45 add telnet commands trace 2025-09-19 09:03:05 +02:00
Laurent THOMAS
0793e8226c fix gNB that should always perform tx in case of rfsim (like continuous-tx 2025-09-19 09:03:05 +02:00
Laurent THOMAS
bf5e7b421c fix bug in rfsim->nb_cnx for client side. it has no usage except a cpu optimisation in case one single rfsim socket and SISO case 2025-09-19 09:03:05 +02:00
Laurent THOMAS
bb3e838851 clarify first transmission to client, split process_recv in 2 functions 2025-09-19 09:03:05 +02:00
Laurent THOMAS
92b30fa714 split rfsimulator too long function in smaller ones. Clean code for bad "UE" instead of rfsim client/server. Simplify logic 2025-09-19 09:03:05 +02:00
Laurent THOMAS
cf25fa375c trace in 4G RAR processing to debug ci result 2025-09-19 09:03:05 +02:00
Laurent THOMAS
98bdb24d53 RF simulator: Fix concurrency issues during new client connections
Fix concurrency issues happening when a new client connects, sometimes
leading to a total softmodem deadlock.

Key changes:
- Fix sample sending on new client connection: send the first
  sample only to the newly connected client.
- Remove the --rfsimulator.hanging-workaround option
- Replace global nb_ue and Sockmutex with nb_cnx and Sockmutex
  in rfsimulator_state_t for better concurrency and clarity.
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
fadcf619e4 Set PNF slot_ahead to 1 when using WLS as the transport mechanism 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
250561b2b1 Fix compilation for simulators and LTE softmodem
Add nr_fapi_p5 library to the simulators common library for access to the utility function `copy_config_request`

Add dummy VNF/PNF functions to be referenced by lte-softmodem, before LTE and NR implementations of the VNF/PNF are separated
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
583a16c946 Add documentation for different VNF/PNF transport
Add a section in nfapi.md related to the different transport mechanisms available for VNF/PNF communication
Edit NR_NFAPI_archi.md to describe the VNF and PNF processing logic, as well as adding a flowchart for each of the components execution
Add the necessary patch to install the WLS library in the system
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
949d8daa1d Prevent pulling TLV tag and length over end of the buffer.
Checks whether there are at least 4 bytes available to pull tag and length values.
On tlv_list unpack, if the size is sent as 0, immediately exit the function
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
d8139780ab Add VNF callback for ERROR.indication
Created a function nr_error_ind_cb for the VNF that takes a received ERROR.indication and shows some details regarding the reported error from the PNF, since up until now it was not handled and treated as an unknown message.
Proper error handling procedure not created, only shows that the error occurred.
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
2c065f7379 Use existing VNF functions for P7 messages
Remove duplicated functions in fapi_vnf_p7.c, leaving only functions for messages that require usage of the secondaty data_buf for unpacking

Move vnf_info struct declaration to nfapi_vnf.h to be available in fapi_nvIPC.c
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
72ca42d40e Change Aerial VNF to use existing functions to process P5 messages
Remove fapi_vnf_p5.c and .h files as they're now unused

Move scheduler functions to fapi_nvIPC.c
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
0b49045152 Initial refactoring for P5 messages in Aerial VNF 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
59d16dc5ca Implementation of VNF using WLS as message transport
Add check to vnf_nr_handle_param_response for when phy_info is not found

The WLS VNF is in charge of Enqueueing the used blocks after usage for transport, this is done by keeping track of all blocks used, and calling WLS_Enqueue for all of them upon receiving a SLOT.indication
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
3084b10097 Implementation of PNF using WLS as message transport
The common library exposes functions for the PNF to return the received blocks to the VNF for it to call WLS_Enqueue on them.
This is done in order to ensure the Blocks are returned after processing, also preventing the Dequeueing of blocks that are still being used, i.e. the internal value is not -1
All saved blocks are to be enqueued at the reception of a SLOT.indication by the VNF

Additionally, the definition of NFAPI_MAX_PACKED_MESSAGE_SIZE was moved to nfapi_interface.h and removed from the other headers, this is done to allow to set the maximum message size when using WLS by only changing the value in one place

Fixup fapi_nr_message_header_unpack call in nfapi_hex_parser
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
42a487f3a1 Separate VNF socket send functions into separate socket library 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
55aa6eaa14 Separate PNF socket send functions into separate socket library 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
ce1d31bcdf Fix non-SCTP socket communication for P5 messages between PNF and VNF.
Switches the used socket type in pnf_interface.c and vnf_interface.c.
These values must always be the same in both components so the same socket type is used in both
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
b8c6dc82ab Add default PNF timing_info value for when the TLV is not sent
Intended to allow FAPI PNF to work without this nFAPI TLV being sent
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
f49c93e494 Add send function pointers to PNF 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
3499f1f95a Add send function pointers to VNF 2025-09-19 09:03:05 +02:00
Rúben Soares Silva
8da9849b2f Change VNF to use functions pointers to pack/unpack messages.
Adds 3 new function pointers to the P5 and P7 VNF structures, allowing to configure which function to use to pack/unpack the messages, as well as unpack the message header, being then used seamlessly regardless of using the FAPI or nFAPI functions.
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
857df18c1f Change PNF to use functions pointers to pack/unpack messages.
Adds 3 new function pointers to the P5 and P7 PNF structures, allowing to configure which function to use to pack/unpack the messages, as well as unpack the message header, being then used seamlessly regardless of using the FAPI or nFAPI functions.

Changes the header unpack and message unpack functions to return true on success and false on failure, instead of an int
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
ee1f515215 Refactor fapi_nr_p5_message_unpack to have the same signature as nfapi_nr_p5_message_header_unpack.
This change is done in preparation to add the header unpack functions to the VNF and PNF structures as function pointers, used to peek the message headers prior to processing.
Add a faux fapi_nr_p7_message_header_unpack with the same signature as nfapi_nr_p7_message_header_unpack, to be used for the P7 header unpack function pointer.
2025-09-19 09:03:05 +02:00
Rúben Soares Silva
2f24896ad9 Use P5 copy function for config.request instead of memcpy 2025-09-19 09:03:04 +02:00
Romain Beurdouche
45563a84ed feat(oran_fhlib_5g): pkgconfig fix for E release
E release had the same issue of not using pkgconfig properly as F release.
This issue was fixed in F release when enabling its compatibility with DPDK 21+.
This commit brings this fix to E release.
2025-09-19 09:03:04 +02:00
Romain Beurdouche
753bc58160 feat(oran_fhlib_5g): Enable to include a BBDEV device while initializing EAL
In order to be usable in parallel of FHI 7.2, BBDEV devices should be included in the EAL initialization that is prformed by xran.
This commit adds a way of adding the BBDEV device from OAI.
Also fixes an issue with pkgconfig in xran.
2025-09-19 09:03:04 +02:00
Romain Beurdouche
a3917591a9 feat(oran_fhlib_5g): F release works with DPDK21+
Modify xran F release patch to make it compile and run with DPDK 21+
(tested with DPDK 22.11)
2025-09-19 09:03:04 +02:00
Robert Schmidt
24ba1f824c get xran stats
Get xran stats in the trx_oran_get_stats function
and use trx_oran_get_stats upon stopping and ending RF.

Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
2025-09-19 09:03:04 +02:00
Robert Schmidt
709f73ad13 Do not include xran internal data: not needed 2025-09-19 09:03:04 +02:00
Robert Schmidt
c24409e404 Use locally available data instead of peaking into xran internals
Look up xran_fh_init/xran_fh_config through driver instead of peaking
into xran internals. Note that xran writes values back into these
structs during initialization, and hence it is important to store them
_after initialization_.

Some remarks regarding less obvious changes:
- slotnum is replaced by slots_in_sf: SLOTNUM_PER_SUBFRAME uses the time
  duration of a slot (=interval_us_local) to calculate the numbers of
  slots in a subframe, which can be done with a simple shift instead
- The prach duration should be queried from the PRACH configuration
  table. The function to query the occasion info is part of the MAC
  layer code while this information can be used outside of this layer.
  Use header `nr_prach_config.h` to not duplicate functionality.

Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
2025-09-19 09:03:04 +02:00
Romain Beurdouche
c344e7d950 Split out PRACH-specific functions into separate header
Split out type and function definitions for a cleaner separation for
some consumers of these functions. Concretely, nr_mac_common.h includes
various ASN.1 NR RRC headers, but not all consumers of these APIs might
need these headers. For instance, the next commit will use these
functions in the driver for 7.2 (it needs to compute PRACH length), but
the driver itself does not depend on nor does it need the ASN.1 NR RRC
headers. Defining a new header avoids the problem.
2025-09-19 09:03:04 +02:00
Robert Schmidt
51aa82ce38 Use buffers as set up by driver
The buffers are set up by the OAI xran driver, so instead of peaking
into xran internal data, access the buffers through the driver directly.

The buffers get set up through the following xran calls

In xran_5g_fronthault_config():
- src   => sFrontHaulTxBbuIoBufCtrl
- srccp => sFrontHaulTxPrbMapBbuIoBufCtrl
- dst   => sFrontHaulRxBbuIoBufCtrl
- dstcp => sFrontHaulRxPrbMapBbuIoBufCtrl

In xran_5g_prach_req()
- prach(dst)       => sFHPrachRxBbuIoBufCtrl
- prach(dst)decomp => sFHPrachRxBbuIoBufCtrlDecomp

Note that in all cases:
- the xran buffer array is [XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]
  (of [internal] type BbuIoBufCtrlStruct, but we give an sBufferList)
- the driver buffer array is [XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]

Hence, we switch the order of indexing, leave out the sector, and omit
the sBufferList member.
2025-09-19 09:03:04 +02:00
Robert Schmidt
0f830be0a8 Avoid use of xran_get_slot_idx_from_tti() and use public API
xran_get_slot_idx_from_tti() has been introduced to access data
information from xran. However, it makes no sense, as the used macros to
calculate frame, slot, subframe, are already in the public API. Hence,
use these macros directly.

It would be possible to remove xran_get_slot_idx_from_tti(), but doing
so we would need to update the patch ID, causing trouble to users.
2025-09-19 09:03:04 +02:00
Cedric Roux
c36374ee12 bugfix: UE AMBR is optional
This was a problem with open5gs and more than one PDU session.
The core network sets UE AMBR only once, leading to failure in the gNB
for the second PDU session.

(A proper handling of AMBR has to be develop at some point in the gNB.)
2025-09-19 09:03:04 +02:00
francescomani
0fbf7ff346 DLSCH RB extraction bugfix: check DMRS bitmap only in DMRS symbols 2025-09-19 09:03:04 +02:00
Laurent THOMAS
4247051f0d clarify and indent correctly the function initial sync 2025-09-19 09:03:04 +02:00
Laurent THOMAS
fb927c160a when we try to detect a specific PCI, and it fails, the SSS detection return successful detection, with wrong frequency offset 2025-09-19 09:03:04 +02:00
Raymond Knopp
84bef36248 fixed precoder_simd after CI run (test for n_layers=1) failed 2025-09-18 19:04:41 +02:00
Raymond Knopp
7f97d8c3d1 aarch64 optimizations for precoding, more complete timing reporting in
nr_dlsim
2025-09-18 19:04:41 +02:00
Raymond Knopp
68e7772f57 optimization of DLSCH precoding for AVX2 2025-09-18 19:04:41 +02:00
Raymond Knopp
15d51bb7a8 precoder optimizations for AVX512 2025-09-18 19:04:41 +02:00
Raymond Knopp
013d136c3f Handle larger RB step size in precoding 2025-09-18 19:04:41 +02:00
Raymond Knopp
f792ef424c Add measurements for performance analysis 2025-09-18 19:04:35 +02:00
Raymond Knopp
547897e9c5 retriger CI 2025-07-12 18:09:41 +02:00
Raymond Knopp
3268dd16fa removed warnings in nr_dlsch.c and changed return of do_onelayer 2025-07-12 11:06:18 +02:00
Raymond Knopp
bb4a768d86 Merge remote-tracking branch 'origin/develop' into tx_symbol_processing 2025-07-10 14:20:19 +02:00
Raymond Knopp
16d4426f29 small correction in resource mapping for symbol-based parallelism 2025-07-10 14:19:35 +02:00
Raymond Knopp
3a64961cfa added thread-pool support for TX symbol processing 2025-06-22 07:52:07 +02:00
480 changed files with 17564 additions and 14545 deletions

View File

@@ -1,51 +1,5 @@
# 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,6 +19,8 @@
# * contact@openairinterface.org
# */
# Author: laurent THOMAS, Lionel GAUTHIER
cmake_minimum_required (VERSION 3.16)
project (OpenAirInterface LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
@@ -171,6 +173,9 @@ else ()
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
@@ -464,6 +469,9 @@ 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
##############
@@ -541,6 +549,7 @@ 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")
@@ -581,7 +590,12 @@ 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}")
@@ -609,6 +623,11 @@ 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)
@@ -923,9 +942,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
@@ -1148,7 +1167,6 @@ 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
@@ -1184,6 +1202,7 @@ 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
)
@@ -1298,6 +1317,12 @@ 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)
@@ -1324,6 +1349,10 @@ 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)
@@ -1653,6 +1682,13 @@ 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
@@ -1678,8 +1714,9 @@ 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)
target_link_libraries(oai_iqplayer PRIVATE log_headers)
add_library(oai_iqplayer MODULE
${OPENAIR_DIR}/radio/iqplayer/iqplayer_lib.c
)
#################################
# add executables for operation
@@ -1689,6 +1726,10 @@ 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)
@@ -1728,7 +1769,6 @@ 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()
@@ -1832,7 +1872,6 @@ 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()
@@ -1854,7 +1893,6 @@ 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)
@@ -1907,14 +1945,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
@@ -1976,6 +2014,7 @@ 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
@@ -1996,6 +2035,7 @@ 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
@@ -2025,6 +2065,7 @@ 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
@@ -2036,9 +2077,7 @@ target_link_libraries(nr_ulsim PRIVATE
)
target_link_libraries(nr_ulsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
# these simulators do not compile:
# dlsim_tm7 pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim
foreach(myExe dlsim ulsim)
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
add_executable(${myExe}
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c
@@ -2058,23 +2097,22 @@ 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})
@@ -2084,17 +2122,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
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
#all "add_library" definitions
ITTI lte_rrc nr_rrc s1ap x2ap m2ap m3ap f1ap
params_libconfig
oai_eth_transpro HASHTABLE UTIL
SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
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
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
GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE SIMU
CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU OPENAIR0_LIB
dfts config_internals nr_common crc_byte)
if (TARGET ${i})
add_dependencies(${i} generate_T)
@@ -2102,6 +2140,8 @@ 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")

233
ci-scripts/Jenkinsfile vendored
View File

@@ -1,233 +0,0 @@
#!/bin/groovy
/*
* 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
*/
def pythonExecutor = params.pythonExecutor
def testXMLFile = params.pythonTestXmlFile
def mainPythonAllXmlFiles = ""
def buildStageStatus = true
def JOB_TIMESTAMP
// Choose test stage name or fallback default
def testStageName = params.pipelineTestStageName != null ? params.pipelineTestStageName : 'Template Test Stage'
// Name of the resource
def lockResources = []
if (params.LockResources != null && params.LockResources.trim().length() > 0)
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
// Global Parameters. Normally they should be populated when the master job
// triggers the slave job with parameters
def sourceRepository = params.eNB_Repository ?: env.GIT_URL
def sourceBranch = params.eNB_Branch ?: env.GIT_BRANCH
def targetRepository = params.Target_Repository ?: sourceRepository
def targetBranch = params.eNB_TargetBranch ?: 'develop'
def commitID = params.eNB_CommitID ?: env.GIT_COMMIT
def is_MR = params.eNB_mergeRequest ?: false
def flexricOption = ""
def runWithOC = false
//-------------------------------------------------------------------------------
// Pipeline start
pipeline {
agent {
label pythonExecutor
}
options {
timestamps()
ansiColor('xterm')
lock(extra: lockResources)
}
stages {
stage("Build Init") {
steps {
script {
echo '\u2705 \u001B[94mBuild Init\u001B[0m'
JOB_TIMESTAMP = sh(returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"').trim()
}
// update the build name and description
buildName "${params.eNB_MR}"
buildDescription "Branch : ${sourceBranch}"
}
}
stage ('Verify Parameters') {
steps {
script {
echo '\u2705 \u001B[94mVerify Parameters\u001B[0m'
def allParametersPresent = true
if (params.LockResources == null) {
echo "no LockResources given"
allParametersPresent = false
}
if (params.eNB_SourceCodePath == null) {
echo "no eNB_SourceCodePath given"
allParametersPresent = false
}
if (params.OC_Credentials != null) {
echo "This pipeline is configured to run with Opensift Cluster."
runWithOC = true
if (params.OC_ProjectName == null) {
echo "no OC_ProjectName given"
allParametersPresent = false
}
}
if (params.Flexric_Tag != null) {
echo "This pipeline is configured to run with a FlexRIC deployment."
echo "Appending FlexRicTag option to the list of options"
flexricOption = "--FlexRicTag=${params.Flexric_Tag}"
echo "Using new Flexric option: ${flexricOption}"
}
echo "CI executor node : ${pythonExecutor}"
echo "Source Repository : ${sourceRepository}"
echo "Source Branch : ${sourceBranch}"
echo "Target Repository : ${targetRepository}"
echo "Target Branch : ${targetBranch}"
echo "Commit ID : ${commitID}"
if (allParametersPresent) {
echo '\u2705 \u001B[94m All parameters are present\u001B[0m'
if (is_MR) {
sh "git fetch"
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${sourceBranch} --src-commit ${commitID} --target-branch ${targetBranch} --target-commit latest"
} else {
sh "git fetch"
sh "git checkout -f ${commitID}"
}
} else {
echo "\u274C Some parameters are missing"
sh "./ci-scripts/fail.sh"
}
}
}
}
stage ("Deploy and Test") {
steps {
script {
dir ('ci-scripts') {
echo "\u2705 \u001B[94m Deploy and Test: ${testStageName}\u001B[0m"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
sh """
python3 main.py --mode=InitiateHtml --ranRepository=${targetRepository} \
--ranBranch=${sourceBranch} --ranCommitID=${commitID} \
--ranAllowMerge=${is_MR} --ranTargetBranch=${targetBranch} \
${flexricOption} ${mainPythonAllXmlFiles}
"""
if (runWithOC) {
withCredentials([usernamePassword(credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password')]) {
sh """
python3 main.py --mode=InitiateHtml --ranRepository=${targetRepository} \
--ranBranch=${sourceBranch} --ranCommitID=${commitID} \
--ranAllowMerge=${is_MR} --ranTargetBranch=${targetBranch} \
${flexricOption} ${mainPythonAllXmlFiles}
"""
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
timeout (time: 60, unit: 'MINUTES') {
sh """
python3 main.py --mode=TesteNB --ranRepository=${targetRepository} \
--ranBranch=${sourceBranch} --ranCommitID=${commitID} \
--ranAllowMerge=${is_MR} --ranTargetBranch=${targetBranch} \
--eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} \
--OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName} \
${flexricOption}
"""
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
}
}
}
}
} else {
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
timeout (time: 60, unit: 'MINUTES') {
sh """
python3 main.py --mode=TesteNB --ranRepository=${targetRepository} \
--ranBranch=${sourceBranch} --ranCommitID=${commitID} \
--ranAllowMerge=${is_MR} --ranTargetBranch=${targetBranch} \
--eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} \
${flexricOption}
"""
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
}
}
}
}
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
}
}
}
}
stage ("Log Collection") {
steps {
script {
echo '\u2705 \u001B[94mLog Collection\u001B[0m'
dir ('ci-scripts') {
// Zipping all archived log files
sh "mkdir test_logs"
sh "mv *.log* test_logs || true"
// Zip all log files matching cmake_targets/{*.log*,log/*} into test_logs_XXXX.zip
if (fileExists('../cmake_targets/log')) {
sh "mv ../cmake_targets/log/* test_logs || true"
}
sh "zip -r -qq test_logs_${env.BUILD_ID}.zip *test_log*/"
sh "rm -rf *test_log*/"
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
}
if (fileExists("test_results.html")) {
def reportName = "test_results-${env.JOB_NAME}.html"
sh "mv test_results.html ${reportName}"
sh """
sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' \
-e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' \
-e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' \
-e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' \
-e 's#TEMPLATE_STAGE_NAME#${testStageName}#' ${reportName}
"""
archiveArtifacts artifacts: "${reportName}"
}
}
}
}
}
}
}

View File

@@ -35,8 +35,6 @@ def gitCommitAuthorEmailAddr
// list of failing stages
def failingStages = ""
OAI_Registry = "gracehopper3-oai.sboai.cs.eurecom.fr"
pipeline {
agent {
label nodeExecutor
@@ -267,24 +265,6 @@ 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 {
@@ -774,6 +754,23 @@ 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 {
@@ -837,11 +834,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 = OAI_Registry + '/oai-gnb:' + env.gitlabSourceBranch + '-' + shortenShaOne
fullRanTag = 'porcepix.sboai.cs.eurecom.fr/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 = OAI_Registry + '/oai-gnb:develop-' + shortenShaOne
fullRanTag = 'porcepix.sboai.cs.eurecom.fr/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,9 +31,6 @@ 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
@@ -82,22 +79,14 @@ 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 ${OAI_Registry} > /dev/null 2>&1"
sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
listOfImages.eachWithIndex { item, iindex ->
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"
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}"
}
// Proxy is not following the same pattern.
sh "docker image tag proxy:develop ${DH_Account}/proxy:develop"
@@ -106,7 +95,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 ${OAI_Registry} > /dev/null 2>&1"
sh "docker logout porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
sh "docker logout > /dev/null 2>&1"
}
}
@@ -116,7 +105,7 @@ pipeline {
post {
always {
script {
sh "docker logout ${OAI_Registry} > /dev/null 2>&1"
sh "docker logout porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
sh "docker logout > /dev/null 2>&1"
echo "End of Registry Push"
}

View File

@@ -43,6 +43,10 @@ import constants as CONST
def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER):
py_param_file_present = False
py_params={}
force_local = False
while len(argvs) > 1:
myArgv = argvs.pop(1) # 0th is this file's name
@@ -168,4 +172,4 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER):
HELP.GenericHelp(CONST.Version)
sys.exit('Invalid Parameter: ' + myArgv)
return mode, force_local
return py_param_file_present, py_params, mode, force_local

View File

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

View File

@@ -1,175 +0,0 @@
#!/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

@@ -85,7 +85,7 @@ 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:
oc-cn5g-00102-ho:
Host: groot
NetworkScript: echo "inet 172.21.6.111"
RunIperf3Server: False
@@ -300,14 +300,6 @@ oai_ue_caracal:
IF: oaitun_ue1
MTU: 1500
oai_ue_jetson2:
Host: jetson2-oai
AttachScript: 'docker start oai-nr-ue'
DetachScript: 'docker stop oai-nr-ue'
NetworkScript: ip a show dev oaitun_ue1
IF: oaitun_ue1
MTU: 1500
lte_oai_ue_carabe:
Host: carabe
NetworkScript: docker exec lte-b200-ue-fdd-10Mhz-tm1 ip a show dev oaitun_ue1

View File

@@ -53,7 +53,6 @@ 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 == '':
@@ -119,7 +118,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
@@ -134,8 +133,7 @@ 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]
# registry now includes the trailing slash ("oai-ci/")
checkimg = f"{registry}{image}-asan:{tag}"
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}")
@@ -396,13 +394,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.10.09.tar.gz .')
cmd.run('cp -f /opt/nvidia-ipc/nvipc_src.2025.08.27.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.10.09.tar.gz')
cmd.run('rm -f nvipc_src.2025.08.27.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:
@@ -598,7 +596,7 @@ class Containerize():
lSourcePath = self.eNBSourceCodePath
logging.debug('Pushing images to server: ' + node)
ssh = cls_cmd.getConnection(node)
imagePrefix = DEFAULT_REGISTRY
imagePrefix = 'porcepix.sboai.cs.eurecom.fr'
ret = ssh.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}')
if ret.returncode != 0:
msg = 'Could not log into local registry'
@@ -669,7 +667,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=DEFAULT_REGISTRY, username="oaicicd", password="oaicicd"):
def Pull_Image_from_Registry(self, HTML, node, images, tag=None, tag_prefix="", registry="porcepix.sboai.cs.eurecom.fr", 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

@@ -233,10 +233,10 @@ def Custom_Command(HTML, node, command):
HTML.CreateHtmlTestRowQueue(command, status, message)
return status == 'OK' or status == 'Warning'
def Custom_Script(HTML, node, script, args):
def Custom_Script(HTML, node, script):
logging.info(f"Executing custom script on {node}")
with cls_cmd.getConnection(node) as c:
ret = c.exec_script(script, 90, args)
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]
@@ -255,7 +255,7 @@ 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)
ret = c.exec_script(script, 600, 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:
@@ -299,16 +299,18 @@ class OaiCiTest():
self.iperf_packetloss_threshold = ''
self.iperf_bitrate_threshold = ''
self.iperf_profile = ''
self.iperf_options = ''
self.iperf_tcp_rate_target = ''
self.finalStatus = False
self.air_interface=''
self.ue_ids = []
self.nodes = []
self.svr_node = None
self.svr_id = None
self.cmd_prefix = '' # prefix before {lte,nr}-uesoftmodem
def InitializeUE(self, node, HTML):
ues = [cls_module.Module_UE(n.strip(), node) for n in self.ue_ids]
def InitializeUE(self, HTML):
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
messages = []
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.initialize) for ue in ues]
@@ -319,8 +321,8 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'OK', messages)
return True
def AttachUE(self, node, HTML):
ues = [cls_module.Module_UE(ue_id, node) for ue_id in self.ue_ids]
def AttachUE(self, HTML):
ues = [cls_module.Module_UE(ue_id, server_name) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.attach) for ue in ues]
attached = [f.result() for f in futures]
@@ -335,8 +337,8 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not retrieve UE IP address(es) or MTU(s) wrong!"])
return success
def DetachUE(self, node, HTML):
ues = [cls_module.Module_UE(ue_id, node) for ue_id in self.ue_ids]
def DetachUE(self, HTML):
ues = [cls_module.Module_UE(ue_id, server_name) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.detach) for ue in ues]
[f.result() for f in futures]
@@ -344,8 +346,8 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
return True
def DataDisableUE(self, node, HTML):
ues = [cls_module.Module_UE(n.strip(), node) for n in self.ue_ids]
def DataDisableUE(self, HTML):
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.dataDisable) for ue in ues]
status = [f.result() for f in futures]
@@ -358,8 +360,8 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not disable UE data!"])
return success
def DataEnableUE(self, node, HTML):
ues = [cls_module.Module_UE(n.strip(), node) for n in self.ue_ids]
def DataEnableUE(self, HTML):
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(f'disabling data for UEs {ues}')
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.dataEnable) for ue in ues]
@@ -373,8 +375,8 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not enable UE data!"])
return success
def CheckStatusUE(self, node, HTML):
ues = [cls_module.Module_UE(n.strip(), node) for n in self.ue_ids]
def CheckStatusUE(self,HTML):
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(f'checking status of UEs {ues}')
messages = []
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
@@ -444,10 +446,10 @@ class OaiCiTest():
return (True, message)
def Ping(self, ctx, node, HTML, infra_file="ci_infra.yaml"):
def Ping(self, ctx, HTML, infra_file="ci_infra.yaml"):
if self.ue_ids == [] or self.svr_id == None:
raise Exception("no module names in self.ue_ids or/and self.svr_id provided")
ues = [cls_module.Module_UE(ue_id, node, infra_file) for ue_id in self.ue_ids]
ues = [cls_module.Module_UE(ue_id, server_name, infra_file) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(self.Ping_common, ctx, cn, ue) for ue in ues]
@@ -501,11 +503,6 @@ 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)
@@ -518,12 +515,12 @@ class OaiCiTest():
return (status, f'{ue_header}\n{msg}')
def Iperf(self, ctx, node, HTML, infra_file="ci_infra.yaml"):
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}"')
def Iperf(self, ctx, HTML, infra_file="ci_infra.yaml"):
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
if self.ue_ids == [] or self.svr_id == None:
raise Exception("no module names in self.ue_ids or/and self.svr_id provided")
ues = [cls_module.Module_UE(ue_id, node, infra_file) for ue_id in self.ue_ids]
ues = [cls_module.Module_UE(ue_id, server_name, infra_file) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(self.Iperf_Module, ctx, cn, ue, i, len(ues)) for i, ue in enumerate(ues)]
@@ -547,10 +544,10 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
return success
def Iperf2_Unidir(self, ctx, node, HTML, infra_file="ci_infra.yaml"):
def Iperf2_Unidir(self, ctx, HTML, infra_file="ci_infra.yaml"):
if self.ue_ids == [] or self.svr_id == None or len(self.ue_ids) != 1:
raise Exception("no module names in self.ue_ids or/and self.svr_id provided, multi UE scenario not supported")
ue = cls_module.Module_UE(self.ue_ids[0].strip(), node, infra_file)
ue = cls_module.Module_UE(self.ue_ids[0].strip(),self.nodes[0].strip(), infra_file)
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
ueIP = ue.getIP()
if not ueIP:
@@ -850,8 +847,8 @@ class OaiCiTest():
global_status = CONST.OAI_UE_PROCESS_COULD_NOT_SYNC
return global_status
def TerminateUE(self, ctx, node, HTML):
ues = [cls_module.Module_UE(n.strip(), node) for n in self.ue_ids]
def TerminateUE(self, ctx, HTML):
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
futures = [executor.submit(ue.terminate, ctx) for ue in ues]
archives = [f.result() for f in futures]

View File

@@ -1,4 +1,4 @@
Active_gNBs = ( "CU-OAI");
Active_gNBs = ( "oai-cu");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ gNBs =
# cell_type = "CELL_MACRO_GNB";
gNB_name = "CU-OAI";
gNB_name = "oai-cu";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;

View File

@@ -23,6 +23,7 @@ gNBs =
////////// Physical parameters:
min_rxtxtime = 2;
do_CSIRS = 1;
do_SRS = 1;
servingCellConfigCommon = (
@@ -134,11 +135,11 @@ gNBs =
# 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 = 3;
nrofDownlinkSymbols = 10;
nrofUplinkSlots = 1;
nrofUplinkSymbols = 2;
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}

View File

@@ -1,4 +1,4 @@
Active_gNBs = ( "DU0-OAI");
Active_gNBs = ( "oai-du0");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -8,7 +8,7 @@ gNBs =
////////// Identification parameters:
gNB_ID = 0xe88;
gNB_DU_ID = 0xe00;
gNB_name = "DU0-OAI";
gNB_name = "oai-du0";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1 ;
@@ -18,6 +18,9 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -26,11 +29,11 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# 4186.56 MHz
absoluteFrequencySSB = 679104;
dl_frequencyBand = 77;
# 4175.82 MHz
dl_absoluteFrequencyPointA = 678388;
# 4.01 GHz
absoluteFrequencySSB = 629376;
dl_frequencyBand = 78;
# 4 GHz
dl_absoluteFrequencyPointA = 628720;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -50,7 +53,7 @@ gNBs =
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
@@ -81,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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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
@@ -107,7 +110,9 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
@@ -159,7 +164,9 @@ MACRLCs = (
tr_n_preference = "f1";
local_n_address = "172.21.19.98";
remote_n_address = "172.21.19.98";
local_n_portc = 500;
local_n_portd = 2154;
remote_n_portc = 501;
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 230;
@@ -174,6 +181,7 @@ L1s = (
prach_dtx_threshold = 100;
pucch0_dtx_threshold = 10;
max_ldpc_iterations = 20;
sl_ahead = 3;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
@@ -185,8 +193,7 @@ RUs = (
nb_rx = 1
att_tx = 0;
att_rx = 0;
sl_ahead = 3;
bands = [77];
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];

View File

@@ -1,4 +1,4 @@
Active_gNBs = ( "DU1-OAI");
Active_gNBs = ( "oai-du1");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -8,7 +8,7 @@ gNBs =
////////// Identification parameters:
gNB_ID = 0xe88;
gNB_DU_ID = 0xe01;
gNB_name = "DU1-OAI";
gNB_name = "oai-du1";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1 ;
@@ -18,6 +18,9 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -26,11 +29,11 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# 4186.56 MHz
absoluteFrequencySSB = 679104;
dl_frequencyBand = 77;
# 4175.82 MHz
dl_absoluteFrequencyPointA = 678388;
# 4.01 GHz
absoluteFrequencySSB = 629376;
dl_frequencyBand = 78;
# 4 GHz
dl_absoluteFrequencyPointA = 628720;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -50,7 +53,7 @@ gNBs =
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
@@ -81,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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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
@@ -107,8 +110,10 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 2;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
@@ -159,7 +164,9 @@ MACRLCs = (
tr_n_preference = "f1";
local_n_address = "172.21.19.99";
remote_n_address = "172.21.19.98";
local_n_portc = 500;
local_n_portd = 2154;
remote_n_portc = 501;
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 230;
@@ -174,6 +181,7 @@ L1s = (
prach_dtx_threshold = 100;
pucch0_dtx_threshold = 10;
max_ldpc_iterations = 20;
sl_ahead = 3;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
@@ -185,8 +193,7 @@ RUs = (
nb_rx = 1
att_tx = 0;
att_rx = 0;
sl_ahead = 3;
bands = [77];
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];

View File

@@ -1,227 +0,0 @@
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

@@ -16,7 +16,7 @@ gNBs =
////////// Physical parameters:
CSI_report_type = "ssb_sinr";
do_SINR = 1;
min_rxtxtime = 6;
disable_harq = 1;
cu_sibs = [2];

View File

@@ -106,7 +106,8 @@ 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
@@ -192,6 +193,8 @@ 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

@@ -1,237 +0,0 @@
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

@@ -184,7 +184,7 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 150;
prach_dtx_threshold = 130;
#pucch0_dtx_threshold = 150;
}
);

View File

@@ -18,6 +18,8 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
min_rxtxtime = 6;
servingCellConfigCommon = (

View File

@@ -1,256 +0,0 @@
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 = 208; mnc = 97; mnc_length = 2;});
////////// Physical parameters:
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
absoluteFrequencySSB = 621312;
# this is 3300.60 MHz
dl_absoluteFrequencyPointA = 620040;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=106 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
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 = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# 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 = 12;
preambleReceivedTargetPower = -104;
#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=spar e1
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 = "CI_MME_IP_ADDR"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
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;
}
);
prs_config = (
{
NumPRSResources = 1;
PRSResourceSetPeriod = [20, 2];
SymbolStart = [7];
NumPRSSymbols = [6];
NumRB = 106;
RBOffset = 0;
CombSize = 4;
REOffset = [0];
PRSResourceOffset = [0];
PRSResourceRepetition = 1;
PRSResourceTimeGap = 1;
NPRS_ID = [0];
MutingPattern1 = [];
MutingPattern2 = [];
MutingBitRepetition = 1;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
sf_extension = 0;
eNB_instances = [0];
}
);
rfsimulator :
{
serveraddr = "server";
serverport = 4043;
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
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";
f1ap_log_level = "debug";
};

View File

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

View File

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

View File

@@ -21,6 +21,10 @@ 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 = (
@@ -182,7 +186,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
stats_max_ue = 17;
}
);

View File

@@ -6,9 +6,9 @@ neighbour_list = (
gNB_ID = 0xe01;
nr_cellid = 11111111;
physical_cellId = 1;
absoluteFrequencySSB = 679104;
absoluteFrequencySSB = 629376;
subcarrierSpacing = 1; #30 KHz
band = 77;
band = 78;
plmn = { mcc = 001; mnc = 03; mnc_length = 2};
tracking_area_code = 1;
}
@@ -21,9 +21,9 @@ neighbour_list = (
gNB_ID = 0xe00;
nr_cellid = 12345678;
physical_cellId = 0;
absoluteFrequencySSB = 679104;
absoluteFrequencySSB = 629376;
subcarrierSpacing = 1; #30 KHz
band = 77;
band = 78;
plmn = { mcc = 001; mnc = 03; mnc_length = 2};
tracking_area_code = 1;
}

View File

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

View File

@@ -1,89 +0,0 @@
PRSs =
(
{
Active_gNBs = 1;
prs_config0 = (
{
gNB_id = 0;
NumPRSResources = 1;
PRSResourceSetPeriod = [20, 2];
SymbolStart = [7];
NumPRSSymbols = [6];
NumRB = 106;
RBOffset = 0;
CombSize = 4;
REOffset = [0];
PRSResourceOffset = [0];
PRSResourceRepetition = 1;
PRSResourceTimeGap = 1;
NPRS_ID = [0];
MutingPattern1 = [];
MutingPattern2 = [];
MutingBitRepetition = 1;
}
);
prs_config1 = (
{
gNB_id = 1;
NumPRSResources = 1;
PRSResourceSetPeriod = [20, 2];
SymbolStart = [7];
NumPRSSymbols = [6];
NumRB = 106;
RBOffset = 0;
CombSize = 4;
REOffset = [0];
PRSResourceOffset = [1];
PRSResourceRepetition = 1;
PRSResourceTimeGap = 1;
NPRS_ID = [1];
MutingPattern1 = [];
MutingPattern2 = [];
MutingBitRepetition = 1;
}
);
prs_config2 = (
{
gNB_id = 2;
NumPRSResources = 1;
PRSResourceSetPeriod = [20, 2];
SymbolStart = [7];
NumPRSSymbols = [6];
NumRB = 106;
RBOffset = 0;
CombSize = 4;
REOffset = [0];
PRSResourceOffset = [2];
PRSResourceRepetition = 1;
PRSResourceTimeGap = 1;
NPRS_ID = [2];
MutingPattern1 = [];
MutingPattern2 = [];
MutingBitRepetition = 1;
}
);
prs_config3 = (
{
gNB_id = 3;
NumPRSResources = 1;
PRSResourceSetPeriod = [20, 2];
SymbolStart = [7];
NumPRSSymbols = [6];
NumRB = 106;
RBOffset = 0;
CombSize = 4;
REOffset = [0];
PRSResourceOffset = [3];
PRSResourceRepetition = 1;
PRSResourceTimeGap = 1;
NPRS_ID = [3];
MutingPattern1 = [];
MutingPattern2 = [];
MutingBitRepetition = 1;
}
);
}
);

View File

@@ -2,7 +2,9 @@ uicc0 = {
imsi = "208970100001127";
key = "fec86ba6eb707ed08905757b1bb44b8f";
opc= "c42449363bbad02b66d16bc975d77cc1";
dnn= "oai.ipv4";
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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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 = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (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 = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (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 = 4;
#one (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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,6 +17,9 @@ gNBs =
////////// Physical parameters:
do_CSIRS = 0;
do_SRS = 0;
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -80,7 +83,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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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;
#one (0..15) 4,8,12,16,...60,64
#oneHalf (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

@@ -42,6 +42,5 @@ WORKDIR /oai-ran/build
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

@@ -85,7 +85,15 @@ def CheckClassValidity(xml_class_list,action,id):
resp=True
return resp
def ExecuteActionWithParam(action, ctx, node):
#assigning parameters to object instance attributes (even if the attributes do not exist !!)
def AssignParams(params_dict):
for key,value in params_dict.items():
setattr(CiTestObj, key, value)
setattr(RAN, key, value)
setattr(HTML, key, value)
def ExecuteActionWithParam(action, ctx):
global RAN
global HTML
global CONTAINERS
@@ -94,6 +102,7 @@ def ExecuteActionWithParam(action, ctx, node):
if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image" or action == "Build_Run_Tests":
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
CONTAINERS.imageKind=test.findtext('kind')
node = test.findtext('node')
proxy_commit = test.findtext('proxy_commit')
if proxy_commit is not None:
CONTAINERS.proxyCommit = proxy_commit
@@ -109,6 +118,7 @@ def ExecuteActionWithParam(action, ctx, node):
success = CONTAINERS.BuildRunTests(ctx, node, HTML)
elif action == 'Initialize_eNB':
node = test.findtext('node')
datalog_rt_stats_file=test.findtext('rt_stats_cfg')
if datalog_rt_stats_file is None:
RAN.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
@@ -129,6 +139,7 @@ def ExecuteActionWithParam(action, ctx, node):
success = RAN.InitializeeNB(ctx, node, HTML)
elif action == 'Terminate_eNB':
node = test.findtext('node')
#retx checkers
string_field = test.findtext('d_retx_th')
if (string_field is not None):
@@ -147,35 +158,68 @@ def ExecuteActionWithParam(action, ctx, node):
elif action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Terminate_UE' or action == 'CheckStatusUE' or action == 'DataEnable_UE' or action == 'DataDisable_UE':
CiTestObj.ue_ids = test.findtext('id').split(' ')
if force_local:
# Change all execution targets to localhost
CiTestObj.nodes = ['localhost'] * len(CiTestObj.ue_ids)
else:
if test.findtext('nodes'):
CiTestObj.nodes = test.findtext('nodes').split(' ')
if len(CiTestObj.ue_ids) != len(CiTestObj.nodes):
logging.error('Number of Nodes are not equal to the total number of UEs')
sys.exit("Mismatch in number of Nodes and UIs")
else:
CiTestObj.nodes = [None] * len(CiTestObj.ue_ids)
if action == 'Initialize_UE':
success = CiTestObj.InitializeUE(node, HTML)
success = CiTestObj.InitializeUE(HTML)
elif action == 'Attach_UE':
success = CiTestObj.AttachUE(node, HTML)
success = CiTestObj.AttachUE(HTML)
elif action == 'Detach_UE':
success = CiTestObj.DetachUE(node, HTML)
success = CiTestObj.DetachUE(HTML)
elif action == 'Terminate_UE':
success = CiTestObj.TerminateUE(ctx, node, HTML)
success = CiTestObj.TerminateUE(ctx, HTML)
elif action == 'CheckStatusUE':
success = CiTestObj.CheckStatusUE(node, HTML)
success = CiTestObj.CheckStatusUE(HTML)
elif action == 'DataEnable_UE':
success = CiTestObj.DataEnableUE(node, HTML)
success = CiTestObj.DataEnableUE(HTML)
elif action == 'DataDisable_UE':
success = CiTestObj.DataDisableUE(node, HTML)
success = CiTestObj.DataDisableUE(HTML)
elif action == 'Ping':
CiTestObj.ping_args = test.findtext('ping_args')
CiTestObj.ping_packetloss_threshold = test.findtext('ping_packetloss_threshold')
CiTestObj.ue_ids = test.findtext('id').split(' ')
CiTestObj.svr_id = test.findtext('svr_id')
CiTestObj.svr_id = test.findtext('svr_id') or None
if test.findtext('svr_node'):
CiTestObj.svr_node = test.findtext('svr_node') if not force_local else 'localhost'
if force_local:
# Change all execution targets to localhost
CiTestObj.nodes = ['localhost'] * len(CiTestObj.ue_ids)
else:
if test.findtext('nodes'):
CiTestObj.nodes = test.findtext('nodes').split(' ')
if len(CiTestObj.ue_ids) != len(CiTestObj.nodes):
logging.error('Number of Nodes are not equal to the total number of UEs')
sys.exit("Mismatch in number of Nodes and UIs")
else:
CiTestObj.nodes = [None] * len(CiTestObj.ue_ids)
ping_rttavg_threshold = test.findtext('ping_rttavg_threshold') or ''
success = CiTestObj.Ping(ctx, node, HTML)
success = CiTestObj.Ping(ctx, HTML)
elif action == 'Iperf' or action == 'Iperf2_Unidir':
CiTestObj.iperf_args = test.findtext('iperf_args')
CiTestObj.ue_ids = test.findtext('id').split(' ')
CiTestObj.svr_id = test.findtext('svr_id')
CiTestObj.svr_id = test.findtext('svr_id') or None
if force_local:
# Change all execution targets to localhost
CiTestObj.nodes = ['localhost'] * len(CiTestObj.ue_ids)
else:
if test.findtext('nodes'):
CiTestObj.nodes = test.findtext('nodes').split(' ')
if len(CiTestObj.ue_ids) != len(CiTestObj.nodes):
logging.error('Number of Nodes are not equal to the total number of UEs')
sys.exit("Mismatch in number of Nodes and UIs")
else:
CiTestObj.nodes = [None] * len(CiTestObj.ue_ids)
if test.findtext('svr_node'):
CiTestObj.svr_node = test.findtext('svr_node') if not force_local else 'localhost'
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
@@ -185,10 +229,14 @@ def ExecuteActionWithParam(action, ctx, node):
if CiTestObj.iperf_profile != 'balanced' and CiTestObj.iperf_profile != 'unbalanced' and CiTestObj.iperf_profile != 'single-ue':
logging.error(f'test-case has wrong profile {CiTestObj.iperf_profile}, forcing balanced')
CiTestObj.iperf_profile = 'balanced'
CiTestObj.iperf_options = test.findtext('iperf_options') or 'check'
if CiTestObj.iperf_options != 'check' and CiTestObj.iperf_options != 'sink':
logging.error('test-case has wrong option ' + CiTestObj.iperf_options)
CiTestObj.iperf_options = 'check'
if action == 'Iperf':
success = CiTestObj.Iperf(ctx, node, HTML)
success = CiTestObj.Iperf(ctx, HTML)
elif action == 'Iperf2_Unidir':
success = CiTestObj.Iperf2_Unidir(ctx, node, HTML)
success = CiTestObj.Iperf2_Unidir(ctx, HTML)
elif action == 'IdleSleep':
st = test.findtext('idle_sleep_time_in_sec') or "5"
@@ -196,6 +244,7 @@ def ExecuteActionWithParam(action, ctx, node):
elif action == 'Deploy_Run_OC_PhySim':
oc_release = test.findtext('oc_release')
node = test.findtext('node') or None
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}"
@@ -203,6 +252,7 @@ def ExecuteActionWithParam(action, ctx, node):
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}"
@@ -215,6 +265,7 @@ def ExecuteActionWithParam(action, ctx, node):
success = core_op(cn_id, ctx, HTML)
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace":
node = test.findtext('node')
CONTAINERS.yamlPath = test.findtext('yaml_path')
string_field=test.findtext('d_retx_th')
if (string_field is not None):
@@ -236,12 +287,15 @@ def ExecuteActionWithParam(action, ctx, node):
success = CONTAINERS.Create_Workspace(node, HTML)
elif action == 'LicenceAndFormattingCheck':
node = test.findtext('node')
success = SCA.LicenceAndFormattingCheck(ctx, node, HTML)
elif action == 'Cppcheck_Analysis':
node = test.findtext('node')
success = SCA.CppCheckAnalysis(ctx, node, HTML)
elif action == 'Push_Local_Registry':
node = test.findtext('node')
tag_prefix = test.findtext('tag_prefix') or ""
success = CONTAINERS.Push_Image_to_Local_Registry(node, HTML, tag_prefix)
@@ -249,6 +303,7 @@ def ExecuteActionWithParam(action, ctx, node):
if force_local:
# Do not pull or remove images when running locally. User is supposed to handle image creation & cleanup
return True
node = test.findtext('node')
tag_prefix = test.findtext('tag_prefix') or ""
images = test.findtext('images').split()
# hack: for FlexRIC, we need to overwrite the tag to use
@@ -261,21 +316,22 @@ def ExecuteActionWithParam(action, ctx, node):
success = CONTAINERS.Clean_Test_Server_Images(HTML, node, images, tag=tag)
elif action == 'Custom_Command':
node = test.findtext('node')
if force_local:
# 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')
args = test.findtext('args')
# Allow referencing repository workspace path in XML via %%workspace%%
script = script.replace("%%workspace%%", CONTAINERS.eNBSourceCodePath)
success = cls_oaicitest.Custom_Script(HTML, node, script, args)
success = cls_oaicitest.Custom_Script(HTML, node, script)
elif action == 'Pull_Cluster_Image':
tag_prefix = test.findtext('tag_prefix') or ""
images = test.findtext('images').split()
node = test.findtext('node')
success = CLUSTER.PullClusterImage(HTML, node, images, tag_prefix=tag_prefix)
else:
@@ -293,16 +349,8 @@ def test_in_list(test, list):
return True
return False
test_runner_abort = False
def receive_signal(signum, frame):
global test_runner_abort
if not test_runner_abort:
logging.warning("received signal, canceling steps")
logging.info("send signal again to exit immediately")
test_runner_abort = True
else:
logging.warning("received signal again, exiting")
sys.exit(1)
sys.exit(1)
def ShowTestID(ctx, desc):
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
@@ -347,7 +395,16 @@ CLUSTER = cls_cluster.Cluster()
import args_parse
# Force local execution, move all execution targets to localhost
force_local = False
mode, force_local = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER)
py_param_file_present, py_params, mode, force_local = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER)
#-----------------------------------------------------------
# TEMPORARY params management (UNUSED)
#-----------------------------------------------------------
#temporary solution for testing:
if py_param_file_present == True:
AssignParams(py_params)
#-----------------------------------------------------------
# mode amd XML class (action) analysis
@@ -493,7 +550,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
#logging.info('test will be run: ' + test)
todo_tests.append(test)
signal.signal(signal.SIGINT, receive_signal)
signal.signal(signal.SIGUSR1, receive_signal)
HTML.CreateHtmlTabHeader()
@@ -503,8 +560,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
i = 0
for test_case_id in todo_tests:
for test in all_tests:
if test_runner_abort:
task_set_succeeded = False
id = test.get('id')
if test_case_id != id:
continue
@@ -513,7 +568,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
ctx = TestCaseCtx(i, int(id), logPath)
HTML.testCase_id=CiTestObj.testCase_id
desc = test.findtext('desc')
node = test.findtext('node') if not force_local else 'localhost'
always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes']
may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes']
HTML.desc = desc
@@ -528,7 +582,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
HTML.CreateHtmlTestRowQueue(msg, "SKIP", [])
break
try:
test_succeeded = ExecuteActionWithParam(action, ctx, node)
test_succeeded = ExecuteActionWithParam(action, ctx)
if not test_succeeded and may_fail:
logging.warning(f"test ID {test_case_id} action {action} may or may not fail, proceeding despite error")
elif not test_succeeded:

View File

@@ -28,6 +28,11 @@ 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 \
--ranTargetBranch=NONE \
--XMLTestFile=xml_files/${TESTCASE} --local
python3 main.py --mode=InitiateHtml --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \
--ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \
--ranTargetBranch=NONE \

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 fetch origin ${merge} && git merge --ff FETCH_HEAD -m "Temporary merge for CI"
[ -n "${merge}" ] && git merge --ff ${merge} -m "Temporary merge for CI"
exit 0

View File

@@ -1,5 +1,7 @@
#!/bin/bash
set -e
function die() { echo $@; exit 1; }
[ $# -eq 4 ] || die "usage: $0 <namespace> <release> <image tag> <oai directory>"
@@ -9,17 +11,11 @@ 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 --timeout 120s
set +x
POD_ID=$(oc get pods | grep oai-${OC_RELEASE} | awk '{print $1}')
wait_creating=30
while [[ $(oc describe pod "$POD_ID" | grep "ContainerCreating") && ${wait_creating} > 0 ]]; do
sleep 1;
let wait_creating=$wait_creating-1
done
sleep 10
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
@@ -31,7 +27,6 @@ oc logs -f -n ${OC_NS} "$POD_ID" | while read -r line; do
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

View File

@@ -1,89 +0,0 @@
#!/bin/bash
[[ $# -lt 1 ]] && { echo "Usage: $0 <distance_in_meters...>"; exit 1; }
DISTANCES=("$@")
IP=192.168.71.150
PORT=8091
NCAT_TIMEOUT=1 #s
SLEEP_WAIT=4 #s
MAX_RETRIES=3
set_and_verify_distance() {
local distance=$1
echo "Testing PRS ToA estimation for distance: $distance m"
# it seems that grep returns immediately with this syntax, but not echo | ncat | grep
# so prefer this to receive new distance immediately. We use --idle to keep
# ncat open for some additional time
local setdist_resp="$(grep --max-count 1 new_offset <(echo rfsimu setdistance rfsimu_channel_enB0 $distance | ncat --idle ${NCAT_TIMEOUT} ${IP} ${PORT}))"
echo "> response: ${setdist_resp}"
local gettoa_resp="$(echo "ciUE get_max_dl_toa" | ncat ${IP} ${PORT} | grep "UE max PRS DL ToA")"
echo "> response: ${gettoa_resp}"
[[ -z "$setdist_resp" || -z "$gettoa_resp" ]] && return 1
# Extract ToA values
[[ "$setdist_resp" =~ new_offset\ ([0-9]+) ]] && local set_toa="${BASH_REMATCH[1]}" || { echo "> Set ToA extraction failed for distance: $distance m"; return 1; }
[[ "$gettoa_resp" =~ UE\ max\ PRS\ DL\ ToA\ ([0-9]+) ]] && local est_toa="${BASH_REMATCH[1]}" || { echo "> Estimated ToA extraction failed for distance: $distance m"; return 1; }
# Compare extracted ToA values
[[ $set_toa == $est_toa ]] && echo "PRS SUCCESS for distance: $distance m" || { echo "PRS FAILURE for distance: $distance m (Actual ToA=$set_toa, Estimated ToA=$est_toa)" ; return 1; }
}
test_distance() {
local distance=$1 retries=0
# retry loop incase we didn't receive the response
while (( retries < MAX_RETRIES )); do
echo " Attempt $((retries + 1))/$MAX_RETRIES"
# Always reset to 0 m before testing target distance
if ! set_and_verify_distance 0; then
echo " Set distance 0 m failed during attempt $((retries + 1))"
else
sleep "$SLEEP_WAIT"
# Now test the actual target distance
if set_and_verify_distance "$distance"; then
return 0
fi
fi
((retries++))
if (( retries < MAX_RETRIES )); then
sleep "$SLEEP_WAIT"
else
echo " ERROR: No valid response after $MAX_RETRIES retries for distance: $distance m"
return 1
fi
done
}
num_success=0
num_fail=0
for d in "${DISTANCES[@]}"; do
if test_distance "$d"; then
((num_success++))
else
((num_fail++))
fi
sleep "$SLEEP_WAIT"
done
# ---- Summary ----
echo
echo "==================== SUMMARY ===================="
echo "Total tests run : ${#DISTANCES[@]}"
echo "Successful tests: ${num_success}"
echo "Failed tests : ${num_fail}"
echo "================================================="
if [ $num_success -gt 0 ]; then
exit 0
else
exit 1
fi

View File

@@ -23,7 +23,7 @@ class TestPingIperf(unittest.TestCase):
self.html.testCaseId = "000000"
self.ci = cls_oaicitest.OaiCiTest()
self.ci.ue_ids = ["test"]
self.node = "localhost"
self.ci.nodes = ["localhost"]
self.ctx = TestCaseCtx.Default(tempfile.mkdtemp())
def tearDown(self):
with cls_cmd.LocalCmd() as c:
@@ -35,7 +35,7 @@ class TestPingIperf(unittest.TestCase):
self.ci.svr_id = "test"
infra_file = "tests/config/infra_ping_iperf.yaml"
# TODO Should need nothing but options and UE(s) to use
success = self.ci.Ping(self.ctx, self.node, self.html, infra_file=infra_file)
success = self.ci.Ping(self.ctx, self.html, infra_file=infra_file)
self.assertTrue(success)
def test_iperf(self):
@@ -50,7 +50,7 @@ class TestPingIperf(unittest.TestCase):
self.ci.iperf_profile = "balanced"
infra_file = "tests/config/infra_ping_iperf.yaml"
# TODO Should need nothing but options and UE(s) to use
success = self.ci.Iperf(self.ctx, self.node, self.html, infra_file=infra_file)
success = self.ci.Iperf(self.ctx, self.html, infra_file=infra_file)
self.assertTrue(success)
def test_iperf2_unidir(self):
@@ -62,7 +62,7 @@ class TestPingIperf(unittest.TestCase):
self.ci.iperf_profile = "balanced"
infra_file = "tests/config/infra_ping_iperf.yaml"
# TODO Should need nothing but options and UE(s) to use
success = self.ci.Iperf2_Unidir(self.ctx, self.node, self.html, infra_file=infra_file)
success = self.ci.Iperf2_Unidir(self.ctx, self.html, infra_file=infra_file)
self.assertTrue(success)
def test_iperf_highrate(self):
@@ -77,7 +77,7 @@ class TestPingIperf(unittest.TestCase):
self.ci.iperf_profile = "balanced"
infra_file = "tests/config/infra_ping_iperf.yaml"
# TODO Should need nothing but options and UE(s) to use
success = self.ci.Iperf(self.ctx, self.node, self.html, infra_file=infra_file)
success = self.ci.Iperf(self.ctx, self.html, infra_file=infra_file)
self.assertTrue(success)
if __name__ == '__main__':

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 = cls_containerize.DEFAULT_REGISTRY
registry = "porcepix.sboai.cs.eurecom.fr"
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

@@ -44,7 +44,7 @@
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<node>obelix</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>
<node>localhost</node>
<nodes>obelix</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping trf-gen from LTE-UE 1</desc>
<id>l2sim4g_ue</id>
<node>localhost</node>
<nodes>obelix</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>obelix</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>
<node>localhost</node>
<nodes>obelix</nodes>
<svr_id>l2sim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>obelix</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>
<node>localhost</node>
<nodes>obelix</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>obelix</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>
<node>localhost</node>
<nodes>obelix</nodes>
<svr_id>l2sim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>obelix</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>localhost</node>
<node>obelix</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<svr_node>localhost</svr_node>
<nodes>acamas</nodes>
<svr_node>acamas</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>
<node>localhost</node>
<svr_node>localhost</svr_node>
<nodes>acamas</nodes>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping Traffic-Gen from LTE-UE</desc>
<id>rfsim4g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_enb_fembms</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_enb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim4g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas acamas acamas</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>
<node>localhost</node>
<nodes>acamas acamas acamas</nodes>
<svr_id>rfsim5g_5gc_fixed_ip</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>

View File

@@ -55,10 +55,6 @@
000031
020022
040026
040025
000031
020022
040027
100021
222222
</TestCaseRequestedList>
@@ -68,7 +64,7 @@
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-ue-asan</images>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
@@ -107,7 +103,7 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="000024">
@@ -122,9 +118,9 @@
<class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -132,30 +128,30 @@
<testCase id="030020">
<class>Custom_Command</class>
<desc>Simulate a DL radio channel with noise (3 dB)</desc>
<node>localhost</node>
<node>acamas</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/3Mbps/UDP)(20 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<desc>Iperf (DL/5Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 5M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -163,7 +159,7 @@
<testCase id="040001">
<class>Custom_Command</class>
<desc>Trigger Reestablishment</desc>
<node>localhost</node>
<node>acamas</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>
@@ -171,9 +167,9 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i0.5 -w25</ping_args>
<ping_packetloss_threshold>80</ping_packetloss_threshold>
</testCase>
@@ -181,56 +177,56 @@
<testCase id="040002">
<class>Custom_Command</class>
<desc>Verify Reestablishment</desc>
<node>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3585"</command>
</testCase>
@@ -249,7 +245,7 @@
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>localhost</node>
<images>oai-gnb-asan oai-nr-ue-asan</images>
<images>oai-gnb-asan oai-nr-cuup-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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020011">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -121,7 +121,7 @@
<class>Ping</class>
<desc>Ping ext-dn from both UEs</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<node>carabe</node>
<nodes>carabe carabe</nodes>
<svr_id>oai_ext_dn</svr_id>
<svr_node>carabe</svr_node>
<ping_args>-c 20</ping_args>
@@ -132,14 +132,14 @@
<class>Attach_UE</class>
<desc>Attach OAI UE 1 and 2</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<node>carabe</node>
<nodes>carabe carabe</nodes>
</testCase>
<testCase id="444444">
<class>Detach_UE</class>
<desc>Detach OAI UE 1 and 2</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<node>carabe</node>
<nodes>carabe carabe</nodes>
</testCase>
<testCase id="100001">

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>
<node>localhost</node>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue2</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas acamas</nodes>
</testCase>
<testCase id="444444">
<class>Detach_UE</class>
<desc>Detach OAI UE 1 and 2</desc>
<id>rfsim5g_ue rfsim5g_ue2</id>
<node>localhost</node>
<nodes>acamas acamas</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>
<node>localhost</node>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="000004">
@@ -101,9 +101,9 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>localhost</node>
<node>acamas</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>localhost</node>
<node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (DL/10Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 10M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>localhost</node>
<node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (DL/30kbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 0.03M -t 20 -R -c 10.0.1.1</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (UL/30kbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 0.03M -t 20 -c 10.0.1.1</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>

View File

@@ -48,52 +48,56 @@
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<svr_id>0</svr_id>
<images>oai-gnb-asan oai-nr-ue</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<node>localhost</node>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_multiue1</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -102,9 +106,9 @@
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_multiue1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -113,9 +117,9 @@
<class>Ping</class>
<desc>Ping ext-dn from Second NR-UE</desc>
<id>rfsim5g_multiue2</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -124,9 +128,9 @@
<class>Ping</class>
<desc>Ping Second NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_multiue2</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -135,9 +139,9 @@
<class>Ping</class>
<desc>Ping ext-dn from both UEs</desc>
<id>rfsim5g_multiue1 rfsim5g_multiue2</id>
<node>localhost</node>
<nodes>acamas acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -146,33 +150,33 @@
<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>
<node>localhost</node>
<nodes>acamas acamas acamas acamas acamas acamas acamas acamas acamas acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_multiue1</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_multiue1</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -181,7 +185,7 @@
<class>Detach_UE</class>
<desc>Detach OAI UEs</desc>
<id>rfsim5g_multiue1</id>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="100001">
@@ -191,14 +195,15 @@
<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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<svr_id>0</svr_id>
<images>oai-gnb-asan oai-nr-ue</images>
</testCase>

View File

@@ -31,6 +31,9 @@
000002
000003
020001
020002
030001
030002
000004
040001
050001
@@ -55,55 +58,59 @@
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<node>localhost</node>
<svr_id>0</svr_id>
<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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000003">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 50 -i 0.25</ping_args>
<svr_node>acamas</svr_node>
<ping_args>-c 100 -i 0.25</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
@@ -111,33 +118,33 @@
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 50 -i 0.25</ping_args>
<svr_node>acamas</svr_node>
<ping_args>-c 100 -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>
<desc>Iperf (DL/10Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (UL/4Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>
@@ -151,7 +158,7 @@
<testCase id="050001">
<class>Custom_Command</class>
<desc>Trigger N2 Handover</desc>
<node>localhost</node>
<node>acamas</node>
<command>echo ci trigger_n2_ho 1,1 | ncat 192.168.71.150 9090</command>
<command_fail>yes</command_fail>
</testCase>
@@ -159,14 +166,14 @@
<testCase id="050002">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 1?</desc>
<node>localhost</node>
<node>acamas</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>
<node>acamas</node>
<command>echo ci trigger_n2_ho 0,1 | ncat 192.168.71.180 9090</command>
<command_fail>yes</command_fail>
</testCase>
@@ -174,7 +181,7 @@
<testCase id="050004">
<class>Custom_Command</class>
<desc>UE (1) connected to DU-PCI 0?</desc>
<node>localhost</node>
<node>acamas</node>
<command>echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584"</command>
</testCase>
@@ -182,8 +189,9 @@
<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>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<d_retx_th>10,100,100,100</d_retx_th>
<u_retx_th>10,100,100,100</u_retx_th>
</testCase>
@@ -192,7 +200,7 @@
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<node>localhost</node>
<svr_id>0</svr_id>
<images>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images>
</testCase>

View File

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

View File

@@ -1,100 +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
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-prs</htmlTabRef>
<htmlTabName>Monolithic gNB with PRS</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
800813
000012
000013
040001
040023
100011
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-asan</images>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>localhost</node>
</testCase>
<testCase id="000012">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G gNB+UE RF sim SA</desc>
<node>localhost</node>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_prs</yaml_path>
<services>oai-gnb oai-nr-ue</services>
</testCase>
<testCase id="000013">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
</testCase>
<testCase id="040001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>2</idle_sleep_time_in_sec>
</testCase>
<testCase id="040023">
<class>Custom_Script</class>
<always_exec>true</always_exec>
<desc>Set and verify distance at 50, 100, 150 m</desc>
<node>localhost</node>
<script>scripts/set-and-verify-distance-prs.sh</script>
<args>50 100 150</args>
</testCase>
<testCase id="100011">
<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_prs</yaml_path>
<d_retx_th>30,100,100,100</d_retx_th>
<u_retx_th>30,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-ue-asan</images>
</testCase>
</testCaseList>

View File

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

View File

@@ -63,14 +63,14 @@
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>localhost</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<ping_args>-c 20 -i 0.25</ping_args>
@@ -81,7 +81,7 @@
<class>Detach_UE</class>
<desc>Detach OAI UE 1</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>localhost</nodes>
</testCase>
<testCase id="100001">

View File

@@ -49,7 +49,7 @@
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_gnb_nos1</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ue</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<node>localhost</node>
<nodes>acamas</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>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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)(20 sec)</desc>
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</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>
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
<iperf_args>-u -b 1M -t 20</iperf_args>
<id>rfsim5g_ue</id>
<node>localhost</node>
<nodes>acamas</nodes>
<svr_id>rfsim5g_ext_dn</svr_id>
<svr_node>localhost</svr_node>
<svr_node>acamas</svr_node>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
</testCase>

View File

@@ -1,37 +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
-->
<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

@@ -1,38 +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
-->
<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,6 +25,7 @@
<htmlTabName>AERIAL 100 MHz TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
555000
111111
000222
800813
@@ -39,8 +40,15 @@
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>
@@ -152,5 +160,12 @@
<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

@@ -1,144 +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
-->
<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,6 +36,18 @@
102002
302002
102003
102004
102005
102006
102007
102008
102009
102010
102011
102012
102013
102014
102015
100100
100010
100020
@@ -106,8 +118,80 @@
<testCase id="102003">
<class>Attach_UE</class>
<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>
<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>
</testCase>
<testCase id="100010">

View File

@@ -1,101 +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
-->
<testCaseList>
<htmlTabRef>LONGRUN-5G-NRUE</htmlTabRef>
<htmlTabName>Longrun 30 MHz TDD SA JETSON</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
800813
020001
000001
001000
000100
001000
000100
001000
000100
001000
000100
001000
000100
001000
000100
001000
000100
001000
000100
001000
000100
040001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<node>jetson2-oai</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_b200_jetson_nrue</yaml_path>
<node>jetson2-oai</node>
<num_attempts>3</num_attempts>
</testCase>
<testCase id="000001">
<class>Attach_UE</class>
<desc>Attach OAIUE</desc>
<id>oai_ue_jetson2</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_jetson2</id>
<svr_id>oc-cn5g-20897-aerial</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_jetson2</id>
<svr_id>oc-cn5g-20897-aerial</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="040001">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy nr UE</desc>
<node>jetson2-oai</node>
<yaml_path>ci-scripts/yaml_files/5g_sa_b200_jetson_nrue</yaml_path>
</testCase>
</testCaseList>

View File

@@ -51,8 +51,6 @@
000024
000025
000026
000027
000028
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -60,7 +58,7 @@
<testCase id="000001">
<class>DeployCoreNetwork</class>
<desc>Initialize 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
<cn_id>oc-cn5g-00102-ho</cn_id>
</testCase>
<testCase id="000002">
@@ -90,134 +88,127 @@
</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>
<services>oai_cu</services>
</testCase>
<testCase id="000008">
<testCase id="000007">
<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>
<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">
<testCase id="000008">
<class>Attach_UE</class>
<desc>Attach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000011">
<testCase id="000009">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<svr_id>oc-cn5g-00102-ho</svr_id>
<ping_args>-c 100 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000012">
<testCase id="000010">
<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="000011">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="000013">
<testCase id="000012">
<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>
<desc>Trigger Handover</desc>
<node>groot</node>
<command>echo ci trigger_f1_ho | ncat 127.0.0.1 9090</command>
</testCase>
<testCase id="000014">
<testCase id="000013">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<svr_id>oc-cn5g-00102-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000015">
<testCase id="000014">
<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 id="000015">
<class>Custom_Command</class>
<desc>Trigger Handover</desc>
<node>groot</node>
<command>echo ci trigger_f1_ho | ncat 127.0.0.1 9090</command>
</testCase>
<testCase id="000017">
<testCase id="000016">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<svr_id>oc-cn5g-00102-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000018">
<testCase id="000017">
<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 id="000018">
<class>Custom_Command</class>
<desc>Trigger Handover</desc>
<node>groot</node>
<command>echo ci trigger_f1_ho | ncat 127.0.0.1 9090</command>
</testCase>
<testCase id="000020">
<testCase id="000019">
<class>Ping</class>
<desc>Ping: 50pings in 10sec</desc>
<id>raspix</id>
<svr_id>oc-cn5g-00103-ho</svr_id>
<svr_id>oc-cn5g-00102-ho</svr_id>
<ping_args>-c 50 -i 0.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="000021">
<testCase id="000020">
<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">
<testCase id="000021">
<class>Detach_UE</class>
<always_exec>true</always_exec>
<desc>Detach Quectel</desc>
<id>raspix</id>
</testCase>
<testCase id="000023">
<testCase id="000022">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy CU-DU0</desc>
@@ -225,7 +216,7 @@
<yaml_path>ci-scripts/yaml_files/5g_sa_f1_b210_ho</yaml_path>
</testCase>
<testCase id="000024">
<testCase id="000023">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy DU1 </desc>
@@ -233,15 +224,7 @@
<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">
<testCase id="000024">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
@@ -249,7 +232,7 @@
<images>oai-gnb</images>
</testCase>
<testCase id="000027">
<testCase id="000025">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
@@ -257,11 +240,11 @@
<images>oai-gnb</images>
</testCase>
<testCase id="000028">
<testCase id="000026">
<class>UndeployCoreNetwork</class>
<always_exec>true</always_exec>
<desc>Terminate 5G Core</desc>
<cn_id>oc-cn5g-00103-ho</cn_id>
<cn_id>oc-cn5g-00102-ho</cn_id>
</testCase>
</testCaseList>

View File

@@ -1,230 +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
-->
<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

@@ -1,179 +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
-->
<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 --cmake-opt -DPHYSIM_CHECK_FILES="ThresholdsOffload.cmake"</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</Build_eNB_args>
</testCase>
<testCase id="100000">

View File

@@ -21,7 +21,7 @@
-->
<testCaseList>
<htmlTabRef>physim-tab</htmlTabRef>
<htmlTabRef>build-tab</htmlTabRef>
<htmlTabName>PhySim</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
@@ -38,9 +38,9 @@
<testCase id="010201">
<class>Build_Deploy_Docker_PhySim</class>
<desc>Build and Deploy PhySim</desc>
<desc>Deploy 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>
<ctest-opt>-R 5g -E physim.5g.nr_dlsim.mcs.mimo.test9 -j16</ctest-opt> <!-- one nr_dlsim test fails on ARM -->
</testCase>
</testCaseList>

View File

@@ -1,46 +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
-->
<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>

View File

@@ -178,7 +178,7 @@ services:
retries: 5
oai_enb:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: l2sim4g-oai-enb
network_mode: "host"
@@ -210,7 +210,7 @@ services:
retries: 5
oai_ue1:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: l2sim4g-oai-lte-ue1
network_mode: "host"
@@ -229,7 +229,7 @@ services:
retries: 5
oai_ue2:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: l2sim4g-oai-lte-ue2
network_mode: "host"

View File

@@ -178,7 +178,7 @@ services:
retries: 5
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -197,7 +197,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -1,6 +1,6 @@
services:
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -19,7 +19,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -178,7 +178,7 @@ services:
retries: 5
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -197,7 +197,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -178,7 +178,7 @@ services:
retries: 5
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -197,7 +197,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -1,6 +1,6 @@
services:
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -19,7 +19,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -1,6 +1,6 @@
services:
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -19,7 +19,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -178,7 +178,7 @@ services:
retries: 5
oai_enb0:
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-enb
networks:
@@ -197,7 +197,7 @@ services:
retries: 5
oai_ue0:
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
privileged: true
container_name: rfsim4g-oai-lte-ue0
networks:

View File

@@ -92,7 +92,7 @@ services:
retries: 5
oai-cu:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-cu
cap_drop:
- ALL
@@ -121,7 +121,7 @@ services:
retries: 5
oai-du-pci0:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du-pci0
cap_drop:
- ALL
@@ -152,7 +152,7 @@ services:
retries: 5
oai-du-pci1:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du-pci1
cap_drop:
- ALL
@@ -187,7 +187,7 @@ services:
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL

View File

@@ -90,7 +90,7 @@ services:
start_period: 10s
start_interval: 500ms
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-gnb
cap_drop:
- ALL
@@ -113,7 +113,7 @@ services:
retries: 5
ipc: host
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL

View File

@@ -90,7 +90,7 @@ services:
timeout: 5s
retries: 5
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-gnb
cap_add:
- SYS_NICE
@@ -114,7 +114,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL
@@ -141,7 +141,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue2:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue2
cap_drop:
- ALL
@@ -168,7 +168,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue3:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue3
cap_drop:
- ALL
@@ -195,7 +195,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue4:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue4
cap_drop:
- ALL
@@ -222,7 +222,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue5:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue5
cap_drop:
- ALL
@@ -249,7 +249,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue6:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue6
cap_drop:
- ALL
@@ -276,7 +276,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue7:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue7
cap_drop:
- ALL
@@ -303,7 +303,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue8:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue8
cap_drop:
- ALL
@@ -330,7 +330,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue9:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue9
cap_drop:
- ALL
@@ -357,7 +357,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue10:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue10
cap_drop:
- ALL

View File

@@ -90,7 +90,7 @@ services:
timeout: 5s
retries: 5
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-gnb
cap_drop:
- ALL
@@ -112,7 +112,7 @@ services:
timeout: 5s
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL

View File

@@ -90,7 +90,7 @@ services:
timeout: 5s
retries: 5
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-gnb
cap_drop:
- ALL
@@ -115,7 +115,7 @@ services:
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL

View File

@@ -71,7 +71,7 @@ services:
interface_name: eth1
oai-cucp:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-cucp
cap_drop:
- ALL
@@ -100,7 +100,7 @@ services:
retries: 5
oai-cuup:
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
container_name: rfsim5g-oai-cuup
cap_drop:
- ALL
@@ -131,7 +131,7 @@ services:
retries: 5
oai-cuup2:
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
container_name: rfsim5g-oai-cuup2
cap_drop:
- ALL
@@ -165,7 +165,7 @@ services:
retries: 5
oai-cuup3:
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
container_name: rfsim5g-oai-cuup3
cap_drop:
- ALL
@@ -199,7 +199,7 @@ services:
retries: 5
oai-du:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du
cap_drop:
- ALL
@@ -230,7 +230,7 @@ services:
retries: 5
oai-du2:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du2
cap_drop:
- ALL
@@ -264,7 +264,7 @@ services:
retries: 5
oai-du3:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du3
cap_drop:
- ALL
@@ -298,7 +298,7 @@ services:
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL
@@ -328,7 +328,7 @@ services:
retries: 5
oai-nr-ue2:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue2
cap_drop:
- ALL
@@ -358,7 +358,7 @@ services:
retries: 5
oai-nr-ue3:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue3
cap_drop:
- ALL

View File

@@ -1,6 +1,6 @@
services:
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-gnb
cap_drop:
- ALL
@@ -25,7 +25,7 @@ services:
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL

View File

@@ -1,6 +1,6 @@
services:
oai-flexric:
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
container_name: oai-flexric
networks:
public_net:
@@ -13,7 +13,7 @@ services:
timeout: 5s
xapp-rc-moni:
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_rc_moni"
container_name: xapp-rc-moni
depends_on:
@@ -30,7 +30,7 @@ services:
timeout: 5s
xapp-kpm-moni:
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_kpm_moni"
container_name: xapp-kpm-moni
depends_on:
@@ -47,7 +47,7 @@ services:
timeout: 5s
xapp-kpm-rc:
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
command: "stdbuf -o0 /usr/local/flexric/xApp/c/kpm_rc/xapp_kpm_rc"
container_name: xapp-kpm-rc
depends_on:
@@ -64,7 +64,7 @@ services:
timeout: 5s
xapp-gtp-mac-rlc-pdcp-moni:
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_gtp_mac_rlc_pdcp_moni"
container_name: xapp-gtp-mac-rlc-pdcp-moni
depends_on:
@@ -81,7 +81,7 @@ services:
timeout: 5s
oai-gnb:
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
privileged: true
container_name: rfsim5g-oai-gnb
environment:
@@ -101,7 +101,7 @@ services:
retries: 5
oai-nr-ue:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
@@ -120,7 +120,7 @@ services:
retries: 5
oai-nr-ue2:
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
privileged: true
container_name: rfsim5g-oai-nr-ue2
environment:

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