Commit Graph
31584 Commits
Author SHA1 Message Date
Thomas Schlichter 9048ab1860 CI: fix missing rfsimulator section in UE conf files for 4G RF-Sim tests 2026-01-29 14:49:21 +01:00
Robert Schmidt a0a68d56d5 Merge remote-tracking branch 'origin/remove-dead-code' into integration_2026_w05 (!3831)
semi-manual remove of not used #define commands

As i was upset to see all these #define with no code under, i made a
global pass to remove the obvious cases semi-manual remove of not used
bodies

manual script, then a lot of manual review

    grep -IRs "#define" ../openair* ../common/* ../executables/ ../nfapi/ ../radio/ | \
        fgrep -v '(' | fgrep -v '//' |awk '{print $2}' | egrep -v "#define *$n"| \
            while read n ; do
              grep -IRs $n ../openair* ../common/* ../executables/ ../nfapi/ ../radio/  | grep -v "#define *$n" | grep -q $n || echo $n;
            done

will give a decent list of #define never used.  Then, I think we should
keep lists of # define when it comes from standards, even if the code
doesn't use it right now
2026-01-29 08:23:41 +01:00
Robert Schmidt 0eb33e69c7 Merge remote-tracking branch 'origin/add-support-eth-pdu-sess' into integration_2026_w05 (!3769)
Add Ethernet PDU session support and make PDU session request configurable

This MR adds support for Ethernet PDU sessions, and makes PDU sessions
configurable: per-PDU session ID, type (IPv4/IPv4v6/IPv6/Ethernet [1]),
DNN, NSSAI.

Concretely, it adds a new configuration file section pdu_sessions below
uicc0 that looks like this if everything is specified (default values
are shown):

    uicc0:
      [...]
      pdu_sessions:
        - id: 1
          type: "IPv4"
          nssai_sst: 1
          nssai_sd: 0xffffff
          dnn: "oai"

It is possible to list multiple PDU sessions (add new line   - id: 2 to
request a second PDU session). It is backwards-compatible to the current
PDU session configuration (uicc0.dnn/nssai_sst/etc), the idea being that
either legacy or new configuration could be used, but (1) if
pdu_sessions exist, it will overwrite the legacy configuration, and (2)
multiple PDU sessions, and type, can only be configured using the new
config. The old parameters --extra-pdu-id and --default-pdu-id are not
accepted anymore. Documentation has been added to the UE tutorial.

It is possible to test an Ethernet PDU session [1]. It is possible to
test the PDU session inside the UE by verifying it has an TAP interface
oaitap_ue1, and ARPing the data network (arping has been added to
oai-nr-ue container for that purpose):

    ip addr add 192.168.72.140/26 dev oaitap_ue1  # same subnet as data network!
    ip link set dev oaitap_ue1 up
    arping -c 20 -I oaitap_ue1 192.168.72.135     # will send ARP request in Ethernet frame to get IP address of data network

[1] See description MR !3769 for more information. On the UE side, only
the type has to be changed to "Ethernet".
2026-01-29 07:52:48 +01:00
Jaroslava Fiedlerova e1a327ca4f Merge remote-tracking branch 'origin/nr_ue_multiple_rf' into integration_2026_w05 (!3593)
NR UE: add support for multiple RF frontends

This MR adds basic support for multiple RF-frontends at the UE.
There are multiple reasons why we might want this:
1. There might be different antennas needed for different bands (e.g. NTN or
   TN antennas). These antennas might be connected to different RF-frontends.
   In case of Handover, the UE needs to dynamically switch between these
   RF-frontends.
2. Each rf-simulator connection carries baseband I/Q samples. To be able to
   perform a handover between two cells at different frequencies, there must
   be two rf-simulator connections, as the baseband channels should not
   interfere and thus cannot simply be added.
3. When we want to support multiple UE simulation within one instance of
   nr-uesoftmodem, and allow multiple cells and probably even handover between
   these cells, we need either:
   1. dedicated RF-frontends for each simulated UE, or
   2. dedicated RF-frontends for each connected cell and dynamically assign
      simulated UEs accordingly.

This MR implements what is needed for 1., 2. and 3.1.
2026-01-28 20:19:48 +01:00
Jaroslava Fiedlerova db902afbe4 Merge remote-tracking branch 'origin/liteon_FFT' into integration_2026_w05 (!3875)
Fix FFT size for xran_fh_tx_send_slot_BySymbol() and xran_fh_rx_read_slot_BySymbol()

This MR handles
- Fix FFT size for xran_fh_tx_send_slot_BySymbol() and
  xran_fh_rx_read_slot_BySymbol() (!3809)
- Fix E release build
2026-01-28 20:17:20 +01:00
Jaroslava Fiedlerova efdd43cf66 Merge remote-tracking branch 'origin/debian_redhat_packages' into integration_2026_w05 (!3507)
Create Debian and Redhat packages with CPack

Use CPack in CMakelists in order to create packages, creation command is
available in build_oai script and options description is available in
packages.md
2026-01-28 20:16:22 +01:00
Robert Schmidt 780a2467aa Add documentation for multi-PDU session configuration 2026-01-28 17:48:43 +01:00
Robert Schmidt 6e69491f4a Convert legacy PDU session config to new format 2026-01-28 17:48:43 +01:00
calvin_peyron f7e714894a Add documentation to package creation and installation 2026-01-28 11:43:44 +01:00
calvin_peyron 26d24dbd0b Create Debian and RPM packages from CMakeLists
Packages must have a name, a version, a section, an architecture, a maintainer, a description (long and summary), dependencies
Shared libraries must be stripped, have soversion, version (debug symbols are found in separate packages), since MODULE is used instead of SHARED it works as a plugin library which is opened using dlopen-like functionality, see:  https://cmake.org/cmake/help/latest/command/add_library.html
Packages must have postin and postun scripts
Since it is not recommended to modify CMAKE_EXE_LINKER_FLAGS, cmake's path variables are used : https://discourse.cmake.org/t/how-do-i-replace-the-compiler-options-for-one-target/7815/5
2026-01-28 11:36:34 +01:00
Jaroslava Fiedlerova ee406b06a4 Merge remote-tracking branch 'origin/issue-1043' into integration_2026_w05 (!3860)
NGAP: improve error handling in RRCReconfiguration from Handover Command decoding

This MR refactors doRRCReconfiguration_from_HandoverCommand for consistency and
safety, and enables NGAP Handover Cancel encoding/decoding.
- Refactored doRRCReconfiguration_from_HandoverCommand function:
  - Changed signature to return byte_array_t instead of taking a buffer parameter
  - Prevents buffer overflow by auto-sizing memory with uper_encode_to_new_buffer
  - Input validation
  - HandoverCommand structure validation
  - Error handling and cleanup for encode/decode failures
  - ASN.1 structure cleanup on all error paths
  - Updated caller in rrc_gNB_NGAP.c: use new byte_array_t return signature,
    added buffer cleanup with free_byte_array(), sends Handover Cancel to AMF on
    decoding failure (source gNB)
  - Improved error logging
- NGAP Handover Cancel encoding/decoding support
  - Added missing Handover Cancel ack case handler for
    NGAP_ProcedureCode_id_HandoverCancel in ngap_gNB_decode_initiating_message()
    to decode and log incoming Handover Cancel Ack message
  - Added NGAP_ProcedureCode_id_HandoverCancel to the list of supported
    initiating message procedure codes in ngap_gNB_encode_initiating() allowing
    the gNB to encode and send Handover Cancel messages

Note: The Handover Cancel procedure is already implemented elsewhere in the NGAP
stack; these changes complete support by ensuring the procedure code is
recognized in both encoder and decoder.

Closes #1043
2026-01-27 20:30:51 +01:00
Jaroslava Fiedlerova c2d3a3d0c2 Merge remote-tracking branch 'origin/oru-rebased' into integration_2026_w05 (!3848)
Initial implementation of O-RU for 7.2 emulator

Added new executable nr-oru which acts as a 7.2 O-RU.
2026-01-27 20:30:12 +01:00
Thomas Schlichter fce8185467 use function pointer instead of weak function for openair0_write_reorder_common() 2026-01-27 16:46:02 +01:00
Robert Schmidt f9e7e5199d Remove remaining unused RAL code 2026-01-27 13:28:35 +01:00
Laurent THOMAS dd8a25524a remove dead code in common_lib.h 2026-01-27 13:23:18 +01:00
Laurent THOMAS 5b0d34c3ad semi-manual remove of not used #define commands. I let the unused defintions that come from standard bodies 2026-01-27 13:23:10 +01:00
Robert Schmidt 831e407298 Remove outdated comment 2026-01-27 11:47:40 +01:00
Robert Schmidt eea52e4384 Dockerfile nrUE ubuntu: install arping
The CN team would like to test the ethernet PDU session capabilities of
the UPF. Install arping in the UE by default for ubuntu to help them
test the PDU session by pinging over ARP.
2026-01-27 11:47:40 +01:00
Robert Schmidt dc968d4dc9 Handle PDU session type Ethernet in NAS and SDAP 2026-01-27 11:47:40 +01:00
Robert Schmidt 78720d5d9c Make default oaitun_ueY name for default (first) PDU session
Look up the index of a PDU session in the list of PDU sessions upon
accept to determine if the PDU session is the default (first PDU
session) or not. If it is the default, it will not append a suffix to
the interface name (oaitun_ueY), otherwise append the PDU session ID
(e.g., for 5: oaitun_ueYp5).
2026-01-27 11:47:40 +01:00
Robert Schmidt 27e01e081b Read PDU session configuration and request
Use the new PDU session configuration functionality of the parent
commit. It is now possible to request multiple PDU sessions, and to
request specific PDU session types. While the new uicc0.pdu_sessions is
preferred, it is still possible to use the "legacy"
uicc0.dnn/nssai_sst/nssai_sd.

The old parameters --default-pdu-id and --extra-pdu-id are not allowed
anymore, as it is possible to manually define this in the UE
configuration. Correspondingly, fix the use of those options, where
applicable.

Note: since the default_pdu_id is changed to -1, all interface names
will have pX to interface names appended (oaitun_ue1pX). The next commit
will correct this.
2026-01-27 11:47:40 +01:00
Robert Schmidt 9b4898ee57 Add new PDU session list configuration
Add new configuration description for PDU sessions, including conformity
checks.
2026-01-27 11:47:40 +01:00
Thomas Schlichter a91838937f Add documentation on multiple NR UE RF-frontends to RUNMODEM.md 2026-01-27 11:30:16 +01:00
Thomas Schlichter 3435fcc010 update documentation and configuration files reflecting the rfsimulator changes 2026-01-27 11:30:16 +01:00
Thomas Schlichter 4d215b5c95 rfsimulator: add support for providing different parameters to each instance 2026-01-27 11:30:16 +01:00
Thomas Schlichter ce83a78271 remove unused variables from struct openair0_config 2026-01-27 11:30:16 +01:00
Thomas Schlichter b24052d2dc rfsimulator: remove static variable last_TS from function rxAddInput()
This static variable creates issues when there are multiple instances of the LEO channel model in use.
2026-01-27 11:30:16 +01:00
Thomas Schlichter fb9e848d5b NR UE: don't allocate unnecessary data buffers
When writing dummy data or reading to trash, we don't need to allocate data buffers for each antenna.
We can allocate just for one antenna and use this buffer for each antenna.
2026-01-27 11:30:16 +01:00
Thomas Schlichter 8e18e5b3aa NR UE: wrap all direct trx_*() function calls in nr_ue_ru_*() functions 2026-01-27 11:30:14 +01:00
Thomas Schlichter 6297c40423 remove unused variables from struct openair0_config 2026-01-27 11:10:54 +01:00
Thomas Schlichter 0b06d55f5f NR UE: introduce support to define multiple cells
This feature shall allow in future to simulate an arbitratry number of UEs connected to an other arbitrary number of cells.
Therefore each RF-frontend (also called RU) needs to be configured for one specific cell.
In case of handover of a UE from one cell to another cell, it needs to switch RUs accordingly (TODO).

There has to be a 1-to-1 mapping between RUs and cells.
Each UE will be assigned to one of the defined cells.
Initially all UEs are assigned to cell 0.
2026-01-27 11:10:53 +01:00
Thomas Schlichter bcccfd90b8 NR UE: don't use downlink_frequency[cc_idP][0] and uplink_frequency_offset[cc_idP][0] in MAC, store mac->dl_frequency instead 2026-01-27 10:24:54 +01:00
Thomas Schlichter dfb217ad0e NR UE: don't use get_softmodem_params()->numerology in MAC, store mac->numerology instead 2026-01-27 10:24:54 +01:00
Thomas Schlichter b495576c83 make sure defint64val is set for TYPE_UINT64 configuration parameters 2026-01-27 10:24:54 +01:00
Thomas Schlichter 168f329491 NR UE: remove unused array of PHY_VARS_NR_UE pointers 2026-01-27 10:24:53 +01:00
Thomas Schlichter 90ad9fac1a NR UE: introduce support to define multiple RUs 2026-01-27 10:23:01 +01:00
Jaroslava Fiedlerova 623dc19d22 Merge remote-tracking branch 'origin/uci_csi_on_pusch' into integration_2026_w05 (!3766)
UE support to send CSI report on PUSCH

Earlier work on UCI on PUSCH implemented only ACK/NACK. This MR extends that
to send CSI report too.

This branch is verified with MATLAB implementation for multiplexing CSI part 1
and part 2 on PUSCH. It is also verified with srsRAN gNB which successfully
decodes CSI part 1 on PUSCH.
2026-01-26 16:21:31 +01:00
Jaroslava Fiedlerova b68b42c6e8 Merge remote-tracking branch 'origin/fix_rsrp_overflow' into integration_2026_w05 (!3823)
Fix RSRP overflow

If UE L1 measure an RSRP = 0 it would report to L2 and RSRP value of -INT_MAX
dBm causing overflow in the qsort to determine the best RSRPs
2026-01-26 11:46:41 +01:00
Thomas Schlichter 256a54ce6c NR UE: move initialization of frame_parms->N_RB_DL and frame_parms->ssb_start_subcarrier to nr_init_frame_parms_ue_sa()
This harmonizes the implementations of nr_init_frame_parms_ue(), nr_init_frame_parms_ue_sa() and nr_init_frame_parms_ue_sl().
2026-01-26 11:41:33 +01:00
Thomas Schlichter eed98b2bf9 NR UE: support nr_get_carrier_frequencies() on constant PHY_VARS_NR_UE 2026-01-26 11:41:33 +01:00
Thomas Schlichter 877b8ed0a0 remove some unused global variables from nr-softmodem.c and nr-uesoftmodem.c 2026-01-26 11:41:33 +01:00
Thomas Schlichter af4ceea12c NR UE: remove global variable rx_gain_off, which has no function
The global variable rx_gain_off was always 0.0, as it was not even modified by the NR UE command line parameter --ue-rxgain-off.
That command line parameter modified only a parameter in the struct nrUE_params_t, which was not used at all and is removed in this commit, too.
Also, the global variable rx_gain_off was just added to rx_total_gain_dB and subtracted from it again in nr_rf_card_config_gain().
So we simplify that function slightly, too.
2026-01-26 11:41:33 +01:00
Thomas Schlichter fef4e7b23e NR UE: move openair0_config_t and openair0_device_t out of PHY_VARS_NR_UE and consistently use UE->rf_map.card 2026-01-26 11:41:33 +01:00
Jaroslava Fiedlerova 7c64fe0f60 Merge remote-tracking branch 'origin/shm-channel-fix' into integration_2026_w05 (!3853)
Clear memory in shm_td_iq_channel after RX

Clear memory in shm_td_iq_channel after RX. This prevents the IQ
from being read twice. This can happen if the application crashes
and will keep the other side reading historical IQ samples.
2026-01-26 10:43:20 +01:00
Jaroslava Fiedlerova 2acc8b6a08 Merge remote-tracking branch 'origin/vrtsim-fix-timing' into integration_2026_w05 (!3850)
Update vrtsim timing job thread

List of changes:
- avoid calculating accumulated rounding error by calculating absolute
  sample index based on CLOCK_REALTIME every time.
- use threadCreate instead of plain pthread_create which assigns a unique
  thread name and simplifies debugging
2026-01-26 10:42:18 +01:00
Sakthivel Velumani f9fb02b1d7 clean-up: minimize code repetition
harmonize ACK and CSI mapping into a single function.
2026-01-26 10:02:30 +01:00
Sakthivel Velumani 36a5dbdfff mac: harmonize function to get csi reports
Use nr_get_csi_measurements() function to get CSI report for PUCCH and
UCI on PUSCH.

Harmonize filling csi report for UCI on PUSCH for periodic and aperiodic
CSI reports.
2026-01-26 10:02:30 +01:00
Sakthivel Velumani cecfec82a8 mac: harmonize csi_payload_t struct
1. Reuse csi_payload_t struct to hold CSI report payload on PUSCH and
PUCCH PDU.
2. Move the struct to fapi header file
2026-01-26 10:02:30 +01:00
Sakthivel Velumani d1febb5fc2 clean-up: reduce nested if in CSI meas function 2026-01-26 10:02:30 +01:00
Sakthivel Velumani 207b061e22 ulsim: enable CSI part 2 in unit test 2026-01-26 10:02:30 +01:00