Commit Graph
545 Commits
Author SHA1 Message Date
maki 67717ed5c1 update 2026-09-19 23:28:08 +09:00
maki c50fe1af53 feat(nr): implement rank-8 PDSCH 2026-09-15 00:36:01 +09:00
Guido Casati 6f9a716eb9 RRC/MAC: add SIB4 inter-frequency neighbour support
Add SIB4 encode/decode helpers and populate SIB4 from configured
inter-frequency carriers and neighbour cells, wiring it into DU F1
Setup handling and MAC SystemInformation.

Changes:
- Add do_SIB4_NR() and NR_SIB4.h inclusion in asn1_msg.c/asn1_msg.h to
  UPER-encode NR_SIB4_t into a byte_array_t.
- Extend nr_mac_configure_other_sib() in NR_MAC_gNB/config.c with an
  NR_SIB_4 case that validates the SIB container, decodes NR_SIB4_t via
  uper_decode, logs failures, and appends SIB4 to SystemInformation.
- Introduce build_inter_freq_carrier_from_cfg() and
  get_sib4_inter_freq_neighbors() in rrc_gNB_du.c to build
  NR_InterFreqCarrierFreqInfo_t and NR_SIB4_t from inter-frequency and
  neighbour cell configuration, skipping invalid or empty carriers.
- Handle NR_SIB_4 in rrc_gNB_process_f1_setup_req() by deriving SIB4
  from neighbour/inter-frequency configuration, encoding it with
  do_SIB4_NR(), validating the resulting byte_array_t and adding the SI
  message for the DU cell when encoding succeeds.
2026-04-10 10:22:50 +02:00
Guido Casati 817d1a6cb5 RRC/MAC: add SIB3 intra-freqeuncy neighbour support
Introduce NR SIB3 encoding in RRC and wire SIB3 neighbour information
into CU–DU F1 Setup and DU SystemInformation. Extend MAC to decode NR
SIB3 from CU-provided SIB containers and attach the decoded SIB3 to the
DU SystemInformation structure.

Changes:
- Add NR_SIB3 ASN.1 include and a do_SIB3_NR() encoder in asn1_msg
  so SIB3 can be serialized into a byte_array_t buffer.
- Introduce get_q_offset_asn1() and get_sib3_intra_freq_neighbors() in
  rrc_gNB_du.c to build an intra-frequency neighbour cell list for SIB3,
  mapping q_OffsetCell dB values to NR_Q_OffsetRange and optionally
  filling q_RxLevMinOffsetCell and q_QualMinOffsetCell.
- Limit the number of intra-frequency neighbours in SIB3 to
  NR_maxCellIntra, logging a warning and skipping additional cells when
  the limit is reached.
- Hook SIB3 construction and encoding into rrc_gNB_process_f1_setup_req()
  so SIB type 3 entries are added to the F1 Setup Response when
  neighbour configuration and matching neighbours are available.
- Handle NR_SIB_3 in nr_mac_configure_other_sib() by validating the CU
  SIB3 container buffer, decoding it with uper_decode into an NR_SIB3_t,
  and attaching the resulting SIB3 to the MAC SystemInformation via
  add_sib_to_systeminformation().
2026-04-10 10:22:50 +02:00
Guido Casati e27f8c24cf Refactor (F1AP/RRC): convert SIB containers to byte_array_t
Unify SIB container handling by introducing a typed SIB enum and storing
SIB payloads as byte_array_t across common NR types, F1AP helpers, MAC,
and RRC DU setup code.

Changes:
- Include byte_array support in nr_common.h, add nr_sib_type_t (NR_SIB_1–NR_SIB_21),
  and change nr_SIBs_t to hold only nr_sib_type_t SIB_type.
- Switch f1ap_sib_msg_t in f1ap_messages_types.h to use a byte_array_t SI_container
  instead of raw pointer and length fields.
- Update F1AP encode/decode, equality, copy, and free helpers in
  f1ap_interface_management.c to work on SI_container.buf / SI_container.len and
  use eq_byte_array, copy_byte_array, and free_byte_array.
- Adapt F1AP tests in f1ap_lib_test.c to build and inspect SIB containers via
  SI_container.buf and SI_container.len.
- Replace magic SIB numbers with nr_sib_type_t values in gnb_config.c
  (get_sys_info and fill_du_sibs) to validate and configure DU SIBs.
- Rework nr_mac_configure_other_sib in NR_MAC_gNB/config.c to decode SIB2
  from a byte_array_t container, fix freeing by releasing the decoded sib2 on
  failure, and use NR_SIB_2 / NR_SIB_19 for CU/DU SIB selection.
- Add an add_si_msg helper in rrc_gNB_du.c and refactor the SIB2 branch of
  rrc_gNB_process_f1_setup_req to populate cell->SI_msg from encoded local
  byte array while iterating SIBs with FOR_EACH_SEQ_ARR.
2026-04-10 10:22:50 +02:00
francescomani 7cf76f69bd further L2 cleanup for unused arguments in functions 2026-03-27 18:01:25 +01:00
Robert Schmidt 8107939f08 Change OAI license to CSSL v1.0 (and others)
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
  scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly

For automated changes based on OAI PL v1.1:

    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
    perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml

The rest (cmake, files with missing license, cmake) manually.
2026-03-27 16:36:37 +01:00
Robert Schmidt 6ae4ec37ca Remove most doxygen file-level commands, copyrights, and authors
Remove the \file directive, as it is always superfluous  because the
current file is implicit [1]:

> If the file name is omitted (i.e. the line after \file is left blank)
> then the documentation block that contains the \file command will belong
> to the file it is located in.

Author names and e-mails are not relevant for us: it can always be
inferred from git blame, and is often outdated.

Eurecom code has been contributed and was under OAI PL v1.0/v1.1.

For the cpack package contact: put generic email address that is
independent of an individual and that will remain reachable.

[1] https://www.doxygen.nl/manual/commands.html#cmdfile
2026-03-27 14:52:47 +01:00
Jaroslava Fiedlerova 4472b9d82a Merge remote-tracking branch 'origin/fix-delta-mcs' into integration_2026_w13 (!3912)
Fix Delta MCS mode, reimplement UL power control

This change set fixes the "delta-MCS" mode, and reimplements the UL power
control loops at gNB, i.e., for PUSCH and PUCCH. It further adds new T traces
to log PUSCH/PUCCH power infrmation, and cleans up code.

The "delta-MCS" mode in OAI refers to configuring a UE with deltaMCS in the
PUSCH-PowerControl IE (see TS 38.331). In this mode, the UE adjusts the PUSCH
power for transmissions to take into account for MCS (see TS 38.213 Sec. 7.1).
In other words, the target SNR can be set to a somewhat low value, and the UE
will still use the right power for UL transmissions. Note that the spec only
foresees this adjustment of UL power when using one layer. In contrast, in the
"normal" mode, the gNB sends TPC commands to keep a UE at a fixed target SNR
(default: 20dB), regardless of the MCS or number of layers. Future work is
planned to completely remove this fixed target SNR, which is not done in this
MR yet.

Further, there is a new power control loop implementation. Prior to this MR, on
each UL transmissions, the gNB uses the SNR to decide about TPC sent to a UE in
the next transmissions. The new implementation relies on averaging the SNR, and
a "TPC in flight" average to account for the slow reaction of the average SNR.
The sum of both quantities is the current SNR that is used by the UE. See the
commit messages or documentation for more information.

Further cleanup to group data (e.g., power control configuration, refactoring of
code to save space, ...) is done. Two new T traces GNB_MAC_PUSCH_POWER_CONTROL
and GNB_MAC_PUCCH_POWER_CONTROL are added; documentation exists to explain how
to graphically plot corresponding graphs.
2026-03-26 13:57:27 +01:00
Gabriele Gemmi 610795c7d8 Read DBT from libconfig 2026-03-25 14:17:55 +00:00
Gabriele Gemmi d448e99e64 read DBT from csv 2026-03-25 14:17:45 +00:00
Robert SchmidtandMaxime Elkael db0f6696f4 Reimplement (PUSCH) power control
Introduce new data structures to track the average SNR and RSSI, and
that allow to dynamically modify the target SNR (per UE) as well as
continuously get TPC updates based on the average SNR. The target SNR is
per power control loop (which a future commit will extend to use for
PUCCH).

Concretely, it maintains an average of measured SNR and RSSI.  It also
updates "tpc_in_flight", which tracks TPC changes that don't show up in
the average yet. For instance, imagine that the target SNR of 15 changes
to 20. Three successive TPC commands need to be sent (+3, +1, +1), but
it will take time to show up in the average SNR. To account for this,
tpc_in_flight is updated by the TPCs sent, and an average will make it
go down back to zero at the same pace as the average SNR approaches the
target SNR.  The sum of average SNR and tpc_in_flight sums up to the
actual, current SNR, which approximates the target SNR.

The SNR is kept within -1<=targetSNR<=+2dB to avoid too many TPC
changes.

The current average SNR (sum of average SNR and tpc_in_flight) is used
to continuously get TPC updates, taking into account recent TPCs sent,
the difference to target SNR, and RSSI.

If there is DTX, tpc_in_flight is modified to artificially introduce TPC
commands which increase the currently used SNR of the UE. This is
temporary, as tpc_in_flight eventually will go back to zero. If the DTX
was due to sudden SNR drop (e.g., higher path loss), this will allow to
quickly adapt the UE's SNR to new conditions.

The periodical logs are extended to not only show the current SNR, but
also the difference from the target for better analysis.

Co-authored-by: Maxime Elkael <m.elkael@northeastern.edu>
2026-03-23 17:47:32 +01:00
Gabriele Gemmi 3f3576bba6 Minimal TLVs to do Beamforming with Aerial 25.2 2026-03-07 23:49:05 +00:00
Jaroslava Fiedlerova 6f9e624193 Merge remote-tracking branch 'origin/config_csi_beam' into integration_2026_w09 (!3870)
Configure CSI-RS according to beam_id used by UE

This MR is to configure CSI-RS according to beam_id used by UE and
reconfigure upon beam change.

It has been tested with RFSIM, Liteon and Microamp under multiple beams.
2026-02-26 22:43:19 +01:00
Mario Joa-Ng a77ba75b10 Configure CSI-RS according to beam_id used by UE and reconfigure upon beam change.
No need to call get_config_srs() anymore in update_cellGroupConfig_for_BWP_switch().
2026-02-26 18:20:25 +01:00
francescomani 5ed309166b use FAPI field to set SSB case from upper layers 2026-02-25 12:43:10 +01:00
Robert Schmidt 76c2dbf23f Merge remote-tracking branch 'origin/beam_fix' into integration_2026_w07 (!3883)
Improvements in handling beamforming inputs

Fix a bug in setting analog beamforming structure and improves config
file parameter
2026-02-12 12:04:22 +01:00
francescomani a2a354a447 fix analog beamforming fapi structure generation 2026-02-06 09:03:32 +01:00
Guido Casati 5d657c801c Refactor (F1AP): align cell lists definitions with TS 38.473
* Commit applies to Setup Request, CU/DU Configuration Update
* Set standard compliant max number of cells per DU
* Allocate large lists on the heap to prevent stack overflow
  due to the large size
* Update relevant free functions
* Also, fix bug in eq_f1ap_cu_configuration_update

Also, improve comments in struct definition.
2026-02-02 16:26:10 +01:00
Jaroslava Fiedlerova 5225f60194 Merge remote-tracking branch 'origin/NR_TCI_states' into integration_2026_w04 (!3430)
NR gNB handling TCI state indication for beam switching

This MR implements the procedure to send in DLSCH MAC-CE for TCI state
indication to UE
- if new beam is reported via SSB RSRP, gNB allocates MAC-CE with TCI
  indication
- DLSCH is scheduled to be transmitted with priority
- a timer is started when receiving ACK according to the delay mandated
  by standard (8.10.3 of 38.133)
- at timer expiry the gNB switches beam
2026-01-21 17:37:15 +01:00
francescomani 15bd09dd24 use commonControlResourceSet instead of CSET0 as coreset for common SearchSpaces in case of MUX pattern 3 2026-01-21 03:53:22 +01:00
francescomani e22c6c8438 change sched_ctrlCommon to be SIB1 specific and to allow to store search spaces for each SSB at pre-configuration 2026-01-16 00:55:04 +01:00
francescomani 75820422a4 check if CSET0 exceeds upper BW limit 2026-01-16 00:43:00 +01:00
francescomani c1747a8109 phy: remove unnecessary vendor extension fields
When doing analogue beamforming, the beam ID for a pre-defined beam
table is passed directly to RU and there is no need to store the beam
table in PHY.
2025-12-15 14:40:44 +00:00
Sakthivel Velumani 644579a4cf clean-up: rename functions
Rename few functions and array related to beam index storing and
allocation. Reduce code duplication in function to get ssb index
bitmap.
2025-12-15 14:40:42 +00:00
Sakthivel Velumani 15e59665e6 mac: change array beam_allocation to int16_t
int16_t is sufficient to hold beam_id and -1 if not allocated. Following
commits will bring changes to only pass LSB 15 bits as beam_id to PHY.
2025-12-15 14:35:50 +00:00
Robert Schmidt 5c3c374c1b Add implementation to trigger BWP switch from external source 2025-12-03 17:22:06 +01:00
francescomani 98618a7dc8 The network must configure BWPs with consecutive IDs from 1
... so if we want to have 1 BWP configured at any given time we need to
reconfigure BWP 1 every time. This means that since the gNB has more
than 1 BWPs (for use for different UEs), that there is a "gNB BWP ID"
(as used by the gNB), which can be any BWP ID X, and one "UE BWP ID",
which is always 1. This commit implements this distinction.
2025-12-03 17:20:11 +01:00
Robert Schmidt 6fe7581eed Merge remote-tracking branch 'origin/cfra-no-msg3' into integration_2025_w48
CFRA: mark RA complete when sending Msg2

The current contention-free random access forces a "Msg3" (which does
not exist in CFRA) to be received by a UE. Sometimes, this "Msg3" is not
received (for whatever reason), and the MAC declare that RA failed.

This is problematic, as the spec says that RA is complete once Msg2 is
received by the UE. Since the gNB cannot know when this is, simply mark
it as complete once we sent Msg2.

We still send Msg3 in CFRA, which is explained further in the commits.

Also, improve logging and stabilize an RFsim test by reducing sl_ahead.
2025-11-28 18:25:18 +01:00
Robert Schmidt d5eb935ecf Log preambles for pre-configured RA 2025-11-28 08:29:44 +01:00
Robert Schmidt 87adaafcfc Refactor process_addmod_bearers_cellGroupConfig() and set priority
Move the file process_addmod_bearers_cellGroupConfig() to the file where
it is used. Correctly set priorities as requested in RLC bearer
configuration.
2025-11-26 18:18:25 +01:00
Laurent THOMAS e056acc896 use c16_t type for pm weights, as it is already same type
simplify SIMD version of precoder
2025-10-09 16:04:43 +02:00
Robert Schmidt 47a961d876 Merge remote-tracking branch 'origin/refactor-ulsch' into integration_2025_w33 (!3521)
Refactor ULSCH scheduler towards more TDD pattern flexibility

Refactors ULSCH scheduler, notably to support "UL-heavy" TDD patterns,
e.g., DSUUU. Also allows to run TDD pattern2 with UL slots, which was a
limitation in the previous code.
2025-08-14 14:30:58 +02:00
Robert Schmidt 4aea866b6a 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-08-14 12:50:03 +02:00
Robert Schmidt 90406c101e Introduce dedicated ul_tda array 2025-08-14 12:50:03 +02:00
Robert Schmidt d90c432f10 Merge remote-tracking branch 'origin/aerial_pbbf' into integration_2025_w33 (!3556)
Introduce support for Cat-B RU using Predefined-Beam BF with Aerial L1

This merge introduces the support for BeamID based Beamforming in OAI L2 using FAPI and leveraging Aerial L1. Support for OAI L1 is not in the scope of this MR.

Main changes:

- Introduced a third state for the analog_beamforming parameter.
  0=disabled,1=analog_bf,2=oran_bf
- Correctly populated the FAPI BF PDUs (prg_size, num_prgs,
  dig_bf_interfaces)
2025-08-14 10:37:57 +02:00
francescomani 071d28b3c9 print UE command line parameters also at MAC 2025-08-13 11:05:44 +02:00
francescomani 4b85f35369 add option to directly send the beam index to L1 via FAPI without look-up table (for 7.2 split) 2025-08-12 18:51:16 +02:00
Matthias Mehlhose 5b0b40c102 mod: use random numbers in unit test function 2025-07-29 15:40:01 +00:00
Mario Joa-Ng 905a8a495e mod: unit test code to compare CM and SIMD results on both antennas 2025-07-29 15:38:23 +00:00
Robert Schmidt 06a5166f17 Merge remote-tracking branch 'origin/ntn_continuous_sib19_updates' into integration_2025_w27 (!3398)
continuously update SIB19 information for rfsim NTN LEO scenarios

Contains mainly these changes:

- gNB: add function nr_update_sib19() allowing to update SIB19
  information
- rfsimulator: update SIB19 contents every frame for LEO channel
  simulations
- NR UE: improve initial timing advance calculation from SIB19

Before, we only considered ta_Common_r17 and the SAT position from SIB19
to compute the initial timing advance value. This is good enough if the
satellite does not move too fast (e.g. GEO satellite).

Now we also consider ta_CommonDrift_r17, ta_CommonDriftVariant_r17 and
the SAT velocity together with the epoch time from SIB19. This improves
the accuracy of the initial TA computation, esp. for LEO satellite
scenarios.
2025-07-04 09:42:19 +02:00
francescomani 41da4a3b3a send reject if we reach the max number of UEs allowed 2025-07-03 08:27:38 +02:00
Thomas Schlichter 99f3628569 gNB: add function nr_update_sib19() allowing to update SIB19 information 2025-06-20 11:15:49 +00:00
Rúben Soares Silva f5072833b6 Add pack/unpack functionality for 2 new vendor extension TLVs.
Add the ability to pack/unpack 2 new TLVs for analog beamforming
total_num_beams_vendor_ext and analog_beam_list
Add the unpack related changes for the first 2 vendor extension TLVs introduced related to beamforming.

For the moment the packing is guarded by an Assert to ensure it is not used.

Add the necessary utility function changes to support these VE TLVs

Add the necessary changes to the corresponding unitary test for pack/unpack,
commented for the moment, since the packing is disabled with an Assert.
2025-06-10 12:10:59 +02:00
francescomani 675e1129b4 using the analog beamforming oai extension fapi fields instead of digital beamforming structure for analog beamforming 2025-06-10 12:10:55 +02:00
Robert Schmidt 4d755c9a1a Move nr_rrc_config.c to DU and rename nr_radio_config.c
A number of radio-related RRC parameters, e.g., CellGroupConfig,
"originate" at the DU and are sent to the CU for forwarding to the UE
only. Similarly, there are additional parameters, e.g., RLC-BearerConfig
(part of CellGroupConfig), that originate at the DU.

Hence, the DU decides about these parameters, depending on the MAC state
and capabilities. To clarify this, move the existing

  openair2/RRC/NR/nr_rrc_config.{c,h} => openair2/LAYER2/NR_MAC_gNB/nr_radio_config.{c,h}

So that developers know that while those are RRC parameters, they
originate at the DU.

In other words, the CU/RRC is not supposed to use any of these functions
in the RRC. Correspondingly, includes of this file have been cleaned up
(and when they are not necessary at the MAC as well).
2025-06-02 14:13:51 +02:00
francescomani aa516bf1b5 scheduling pdcch structure in SIB1 depends on the associated SSB, can't be precomputed
start symbol may depend on the associated SSB index
2025-05-06 16:00:58 +02:00
Robert Schmidt b0a0844b21 Merge remote-tracking branch 'origin/gnb-du-config-cell-status' into integration_2025_w18 (!3416)
Signal gNB-DU config update CellStatus from DU to CU

Add the cell status to gNB-DU configuration update message, including
test. Use the gNB-DU configuration update to signal the cell status in
the stack.

This IE was not included in a previous refactoring round, but is at
least necessary to be decoded when interoperating with the OSC O-DU.
2025-05-05 22:37:21 +02:00
francescomani a4357b74c5 use DCIX0 in commmon search space in any scenario before reconfiguration complete
this allows to remove a lot of complicated procedures relying on flags and timers
2025-05-04 09:34:36 +02:00
Robert Schmidt ae6ea60a7a Use gNB-DU config update/CellStatus in stack
Use the gNB-DU configuration update to signal the cell status in the
stack. At the DU, modify the code to always send this message --
previously, we only sent this message if a SIB1 update was necessary,
but now it's always, only including SIB1 updates if necessary.

At the CU, as we don't really have a use as of now, print the
information, but don't do anything with it.
2025-05-02 16:49:29 +02:00