Commit Graph
8078 Commits
Author SHA1 Message Date
Robert Schmidt b8b2a36a30 Merge remote-tracking branch 'origin/remove_decode_cellGroupConfig' into integration_2026_w03 (!3858)
remove function decode_cellGroupConfig

it's never used
2026-01-14 11:06:50 +01:00
Robert Schmidt bd6ce9bad9 Merge remote-tracking branch 'origin/fix-bug-release-no-amf' into integration_2026_w03 (!3857)
Fix bug "no AMF for UE"

It might happen that the RRC does not know the AMF UE NGAP ID, yet. Even
in that case, we should forward the release request to the NGAP module,
which can either forward a message to the AMF, or reply back to release
the UE. This avoids an error where the CU claims there was no AMF, when
there actually is.

One possible problematic behavior is if a UE disconnects before the gNB
receives an NGAP Initial Context Setup. In this case, the AMF UE NGAP ID
was not forwarded to the RRC (although it was known at NGAP), thus
blocking the release of the UE.

This is the main fix, the rest are minor fixes:

- store AMF UE NGAP ID as early as possible
- warn in MAC if UE unknown for UE context release command
- show TEIDs with correct endianness in GTP
- avoid NG Setup Failure+Setup log.
2026-01-14 11:06:15 +01:00
francescomani c00b5b8c1c remove function decode_cellGroupConfig since it is declared but never used anywhere 2026-01-14 10:14:20 +01:00
Robert Schmidt 93b3a5aedb Merge remote-tracking branch 'origin/srs_phy_simulator' into integration_2026_w03 (!3718)
Introduce SRS physical simulator and improvements

This MR consists of two parts:

- Introduces SRS physical simulator to test different configurations of
  SRS
- Improvements in the SRS channel estimation (Addressing the comments
  from old, unfinished MR !2875)
  - rewrite nr_srs_channel_estimation() to loop over rx antennas and
    antenna ports to be able to parallelize
  - Improvements in timing_advance_offset and timing_advance_offset_nsec
    computation
  - Introduce SRS multi-symbol channel estimation
    - The channel impulse response is estimated from the averaged
      channel frequency response over multiple symbols
    - The channel frequency estimates are left as they are to be able to
      estimate doppler in the future
  - Simplify SRS channel estimation to handle memory alignment in the
    case of different SRS configurations (eg: comboffset)

To use multiple symbols when running gNB, the following parameters needs
to be edited in the function get_srs_resource()

- srs_res->resourceMapping.startPosition with a range from {0,1,..,5}
  corresponds to the start symbol {13, 12, .. 8} with in a slot
- srs_res->resourceMapping.nrofSymbols indicates the number of symbols
  {n1, n2, and n4}

Make sure the that start symbol + number of symbols is < 14

The timing results for SRS in develop and srs_phy_simulator are as follows:

Command used: sudo ./nr_ulsim -n1000 -s50 -S50 -R273 -W2 -y2 -z2 -E 1 -P

develop

|__ RX SRS time                            124.94 us (1000 trials)		(124.94 total [ms])
    |__ Generate SRS sequence time           0.05 us (1000 trials)		(  0.05 total [ms])
    |__ Get SRS signal time                 19.41 us (1000 trials)		( 19.41 total [ms])
    |__ SRS channel estimation time         89.11 us (1000 trials)		( 89.11 total [ms])
    |__ SRS timing advance estimation time  13.10 us (1000 trials)		( 13.10 total [ms])
    |__ SRS report TLV build time            2.80 us (1000 trials)		(  2.80 total [ms])
        |__ SRS beam report build time       0.00 us (  0 trials)
        |__ SRS IQ matrix build time         2.73 us (1000 trials)

srs_phy_simulator

|__ RX SRS time                            211.93 us (1000 trials)		(211.93 total [ms])
    |__ Generate SRS sequence time           0.04 us (1000 trials)		(  0.04 total [ms])
    |__ Get SRS signal time                 19.55 us (1000 trials)		( 19.55 total [ms])
    |__ SRS channel estimation time        152.05 us (1000 trials)		(152.05 total [ms])
    |__ SRS timing advance estimation time  36.67 us (1000 trials)		( 36.67 total [ms])
    |__ SRS report TLV build time            2.96 us (1000 trials)		(  2.96 total [ms])
        |__ SRS beam report build time       0.00 us (  0 trials)
        |__ SRS IQ matrix build time         2.88 us (1000 trials)

Note that in srs_phy_simulator, to compute timing offset ns, an
oversampling factor of 2 is performed. Also, for peak detection, we
average the channel estimates for every port.
2026-01-13 13:39:32 +01:00
Robert Schmidt 89b3eb0132 NR MAC: warn on release for unknown UE 2026-01-13 13:28:46 +01:00
Robert Schmidt 815a5719cd Merge remote-tracking branch 'origin/define_c' into integration_2026_w03 (!3826)
Define speed of light

Common definition for speed of light constant, instead of multiple local
definitions
2026-01-13 11:23:49 +01:00
Robert Schmidt 3d05c084ba Merge remote-tracking branch 'origin/fix_reestablishment_after_handover' into integration_2026_w03 (!3812)
Fix reestablishment after handover
2026-01-13 10:01:00 +01:00
Rakesh Mundlamuri 7b698531a9 update phy_simulators testcases 2026-01-09 20:49:38 +05:30
francescomani d4e3c5d384 define speed of light in utils to avoid multiple local definitions 2026-01-09 02:16:49 +01:00
Jaroslava Fiedlerova cd19acd65a Merge remote-tracking branch 'origin/fix-sib1-tda-check' into integration_2026_w02 (!3840)
Fix missing return statements in SIB1 TDA validation

Provides fix to commit d7cc1c2c in MR !3641 (merged).
2026-01-06 09:45:58 +01:00
Jaroslava Fiedlerova 692b3cf99c Fix missing return statements in SIB1 TDA validation
Provides fix to commit d7cc1c2c1d (MR !3641).
Addresses an issue with low DL throughput in 100 MHz 2×2 test case observed
in CI.
2026-01-05 14:54:44 +01:00
Guido Casati 91a08b1ba7 Fix MAC frequency overwrite during handover causing integrity check failures
During N2 handover, the UE receives reconfigurationWithSync which correctly
sets the target cell frequency in mac->phy_config.config_req.carrier_config
via config_common_ue() call.

However, when SIB1 is decoded after reconfiguration,
nr_rrc_mac_config_req_sib1() calls config_common_ue_sa() which unconditionally
overwrites the frequency with the command-line parameter (downlink_frequency),
which corresponds to the source cell frequency.

This causes a critical issue during RRC re-establishment:
- The UE uses the wrong frequency (source cell) for key derivation (kgnb*)
- The gNB uses the correct frequency (target cell) for key derivation
- This mismatch results in different kgnb* keys on UE and gNB
- Integrity check fails: "Integrity of RRCReestablishment failed, going to IDLE"

Root cause:
config_common_ue_sa() is used for SIB1 processing (initial cell selection) and
uses ServingCellConfigCommonSIB which doesn't contain absoluteFrequencyPointA.
It must derive frequency from command-line parameters. However, after handover,
the frequency has already been correctly set by config_common_ue() (used for
reconfigurationWithSync) which uses ServingCellConfigCommon with absolute
frequency information.

Solution:
Modify config_common_ue_sa() to preserve the existing frequency if it's already
initialized (non-zero). Only set frequency from command-line parameters during
initial cell selection when dl_frequency is 0. This ensures:
- Initial cell selection: frequency derived from command-line parameter, just once
- After handover: frequency preserved from reconfigurationWithSync
- MAC maintains its own frequency state independently

The fix applies to both DL and UL frequencies to maintain consistency.
There is probably room for more refactoring to the resync flow, since
the functionalities in config_common_ue and config_common_ue_sa are
partially overlapping and upon reconfigurationWithSync some other
configurations might be applied twice.
2025-12-29 13:31:22 +01:00
Guido Casati eebf79a097 Add logs to inform about cell updates in MAC-PHY and RRCReestablishment failures
These logs are very helpful to identify cell configuration
changes in MAC/PHY, for monitoring purposes, and to rapidly
signal integrity failures during re-establishment.
2025-12-29 13:31:22 +01:00
francescomani 90d4d2726c cleanup of functions in nr_ue_power_procedures (no code change, just moving things around) 2025-12-26 09:11:09 +01:00
francescomani a623908518 declare static some static functions in dci procedure file 2025-12-26 09:11:09 +01:00
francescomani 98530b5b70 cleanup of functions in nr_ue_procedures (no code change, just moving things around) 2025-12-26 09:11:08 +01:00
francescomani 75367249c5 cleanup of functions in nr_ue_scheduler (no code change, just moving things around) 2025-12-26 09:07:46 +01:00
Robert Schmidt 26d0246059 Merge remote-tracking branch 'origin/apply_new_CellGroup_later' into integration_2025_w52 (!3804)
gNB: apply new NR_CellGroupConfig when RRCReconfiguration is acknowledged

Currently part of the NR_CellGroupConfig is already applied when the
RRCReconfiguration message is created. This is not correct and this MR
fixes this by applying it when the RRCReconfiguration message is
acknowledged.

With this fixed, we also move disabling the feedback (in case
disable_harq is used) from the RRCSetup message to the
RRCReconfiguration message.

Closes: #1002
2025-12-23 18:21:27 +01:00
Robert Schmidt 6a7ec3498a Merge remote-tracking branch 'origin/autumatic_sib1_tda' into integration_2025_w52 (!3641)
automatic selection of SIB1 TDA
2025-12-23 18:20:06 +01:00
Robert Schmidt 668ff6a4c3 Merge remote-tracking branch 'origin/fix_coreset_start' into integration_2025_w52 (!3819)
CORESET start multiple of 6 fix

According to the standard any CORESET (except CSET0) would always start
from the first common resource block index which is multiple of 6 in the
BWP. This was not taken into account in the code. The BWP switch CI test
is modified to test a BWP start not multiple of 6.

An exception is the case where rb-Offset-r16 parameter is set, but can't
be used at gNB for FAPI compatibility.

Closes: #1037
2025-12-23 09:22:10 +01:00
Robert Schmidt 8463ebf24b Merge remote-tracking branch 'origin/nr_ue_sib19_doppler' into integration_2025_w52 (!3663)
NR UE: calculate DL and UL Doppler based on SIB19 information in NTN mode, fixing LEO reestablishment
2025-12-23 09:21:42 +01:00
francescomani d7cc1c2c1d computing SIB1 TDA (for each SSB) only in the first iteration and stored for the rest of the run 2025-12-23 09:20:47 +01:00
francescomani 61d0559445 take into account effective CSET start RB to define frequencyDomainResources 2025-12-22 17:31:29 +01:00
francescomani 2a3a27a48f fix CORESET start PRB according to standard at OAI gNB 2025-12-22 17:31:26 +01:00
francescomani 74690ceb1d fix CORESET start PRB according to standard at OAI UE 2025-12-22 17:29:09 +01:00
francescomani 2454a2ea1e automatic selection of SIB1 TDA 2025-12-20 08:54:11 +01:00
Thomas Schlichter 1f8fe224a0 NR UE: correctly apply Doppler and TA for NTN target cell
Make sure to apply Doppler and TA not directly when receiving the target cell ntn_config,
but apply Doppler just before the initial sync, and the TA after the initial sync when
we have tha actuel cell frame and slot numbers.
2025-12-19 16:42:52 +01:00
Thomas Schlichter 3dcaacb63b NR UE FAPI: provide ntn_config as part of phy_config.config_req instead of a dedicated scheduled_response dl_config PDU
We need the ntn_config when reconfiguring the PHY layer for a new initial sync,
e.g. for calculating the DL Doppler frequency.

As a dedicated scheduled_response dl_config PDU it reaches the PHY layer too late,
as part of the phy_config.config_req it reaches the PHY layer in time with the
other configuration values.
2025-12-19 16:42:47 +01:00
Thomas Schlichter ae12190a9e NR UE: improve log output in MAC 2025-12-19 16:41:02 +01:00
Thomas Schlichter b59bcaf494 NR UE: provide velocity vector down to nr-ue.c, preparing for Doppler calculation 2025-12-19 16:38:59 +01:00
francescomani a2625163e6 drop rach_ConfigDedicated once reconfiguration with sync related RA is completed at UE 2025-12-19 11:25:27 +01:00
luis_pereira87 0a0dfae333 Restore previous 'local_bwp_id' on RRCReestablishment 2025-12-19 11:02:39 +01:00
Thomas SchlichterandLuis Pereira e74792586f fix BWP switching
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2025-12-19 11:02:37 +01:00
Thomas Schlichter 21722a9fa1 gNB: fix use after free of old UE->sc_info.csi_MeasConfig 2025-12-19 11:01:27 +01:00
Thomas Schlichter 25cd85fa68 gNB: apply new NR_CellGroupConfig when reconfiguration is complete 2025-12-19 10:59:51 +01:00
Thomas Schlichter 9e434d60a5 gNB: move downlinkHARQ_FeedbackDisabled_r17 from initial spCellConfig to spCellConfigDedicated
This is a preparation for configuring disabled HARQ feedback only for UEs supporting it.
2025-12-19 10:50:58 +01:00
Jaroslava Fiedlerova e2a305825c Merge remote-tracking branch 'origin/Reset_outdated_PUCCHs' into integration_2025_w51 (!3813)
Reset outdated PUCCHs to avoid Assertion caused by non-processed and
active PUCCHs

When there is real-time issues in L1 it may happen that the scheduler
misses/skips some slots, thus, L2 not processing and not freeing some
structures like PUCCH. This commit avoids the Assertion by resetting
any Active outdated PUCCH
2025-12-17 15:25:30 +01:00
Jaroslava Fiedlerova ff524c0380 Merge remote-tracking branch 'origin/fapi-beamid' into integration_2025_w51 (!3715)
Pass beam ID as per FAPI v222.10

This MR
1. Sets MSB of beam ID when passing beam ID to 7.2 radio
2. Modifies phytest scheduler to allocate SSBs on different beams
3. Introduce new MAC config parameter for beam mode to specify HiPHY or LoPHY
   beamforming
2025-12-17 10:11:22 +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 830d619d3e mac: allocate PDSCH on beams in phytest 2025-12-15 14:35:50 +00:00
Sakthivel Velumani c288f84651 mac: fix fapi beam id
Set MSB of fapi beam ID based on flag for beamforming done in hiPHY or
loPHY.
2025-12-15 14:35:50 +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
Sakthivel Velumani 35e5cb69d1 clean-up: fix code repetition 2025-12-15 14:35:50 +00:00
Bartosz Podrygajlo 26879d5616 Add two missing include guards 2025-12-15 15:27:23 +01:00
luis_pereira87 71e23b12c2 Reset outdated PUCCHs to avoid Assertion caused by non-processed and active PUCCHs
When there is real-time issues in L1 it may happen that the scheduler misses/skips some slots, thus, L2 not processing and not freeing some structures like PUCCH.
This commit avoids the Assertion by resetting any Active outdated PUCCH
2025-12-12 16:48:24 +00:00
Jaroslava Fiedlerova be08d655b1 Merge remote-tracking branch 'origin/fix_rach_occasions' into integration_2025_w50 (!3798)
Fix for computation of PRACH occasions and association period
2025-12-10 14:23:00 +01:00
francescomani 55c8a7bef0 rename max_association_period to association_period to better reflect the role of the field 2025-12-09 13:45:25 +01:00
francescomani f2a7fb5336 fix computation of RA occasions and association period in gNB 2025-12-09 13:45:21 +01:00
francescomani 63f3fb55ae Merge remote-tracking branch 'origin/ue_ho_improve' into integration_2025_w50 2025-12-09 11:06:52 +01:00