Commit Graph
7585 Commits
Author SHA1 Message Date
Robert SchmidtandFrancesco Mani 7b9442f58d DU-level changes to handle F1 UE Context Setup in NSA/phy-test/do-ra
Co-authored-by: Francesco Mani <email@francescomani.it>
2025-05-04 09:34:41 +02:00
Robert Schmidt 953a5ed33e Trigger release request on RA timeout only once
Checking for < 0 makes the contention resolution timer trigger on each
iteration once it is < 0. Instead, use == 0, which will trigger only
once.
2025-05-04 09:34:41 +02:00
francescomani 3ec14152a1 fix for ULSCH number of layers in case of DCI00 2025-05-04 09:34:41 +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
francescomani c494c631d1 target search space as input of function to configure UE BWP 2025-05-01 11:04:22 +02:00
francescomani 356a27aad1 handle ul harq inside rx sdu function 2025-05-01 10:48:29 +02:00
francescomani bf37994f78 separate function for RA ULSCH SDU 2025-05-01 10:48:24 +02:00
francescomani 8f62baefa6 Use list of UEs during RA instead of array of RA processes
- rewrite add_UE_to_list() and rewrite remove_UE_from_list() to simplify
  list handling
- return pointer from get_new_nr_ue_inst(); it's completely freed by
  delete_nr_ue_data()
- have add_new_UE_RA() add UE context to access list; remove with
  nr_release_ra_UE()
- have add_connected_nr_ue() only add UE to connected list; to move from
  access to connected use transition_ra_connected_nr_ue(); remove with
  mac_remove_nr_ue() as previously
- free memory on problems during RA
- add some documentation
- in NSA/HO: check for pre-configured RA process
- there are asserts in all functions to clarify when a UE has RA
2025-05-01 10:48:11 +02:00
francescomani a7c199cabf new name for UE list 2025-05-01 10:04:41 +02:00
francescomani a337354588 Add function to compute slot for RA-RNTI 2025-05-01 10:03:24 +02:00
francescomani b88efd74b8 fix in determining the num of cdm groups with no data for ULSCH 2025-05-01 10:03:19 +02:00
Robert Schmidt af7ce8e9b1 Merge remote-tracking branch 'origin/fix_for_tx_wait_for_dlsch' into integration_2025_w17 (!3405)
Fix for NR UE DLSCH decoding barrier in case of no feedback

In !3291 NTN CI RFsim test fails with the UE being stuck. After some
investigation, this seems to be caused by the scenario where there is no
feedback for DLSCH. In that case there is no need to wait for DLSCH
being completed before generating feedback (there is no feedback).
2025-04-28 17:46:11 +02:00
Robert Schmidt d46fb4fc68 Merge remote-tracking branch 'origin/fix-asn1-free' into integration_2025_w17 (!3351)
Fix ASN1 struct double free

When paging, RA and other SI have same PDCCH search space, we should
free the struct once and reset the other pointers to NULL.
2025-04-28 17:45:46 +02:00
Robert Schmidt 7eba632b79 Merge remote-tracking branch 'origin/metanoia-improve-conn' into integration_2025_w17 (!3382)
Improve radio for Metanoia RU (and likely others)

We introduced a regression that lowered the achievable DL throughput
with at least the Metanoia RU (i.e., in the configuration and the UE
that we use). git bisect showed up one commit, which does not seem
necessary. We just revert this commit, as it improves the throughput and
does not seem to have a negative impact on performance.

Further, increase RLC buffers a bit. Limit 7.2 pipeline number of layers
to 2.
2025-04-28 12:22:40 +02:00
francescomani 799c19b229 no need to wait for dlsch decoding being completed before ack/nack if feedback is disabled 2025-04-28 07:54:03 +02:00
Sakthivel Velumani 18c9a3720d Fix asn1c double free
The UE stores PDCCH search spaces from the network in NR_BWP_PDCCH_t
struct within NR_UE_MAC_INST_t. After storing, the pointers otherSI_SS,
ra_SS and paging_SS are updated to point to the stored SS. Multiple
pointers could point to the same stored SS struct depending on
configuration. Then when the UE wants to release the SS, the pointers
are used to free the stored SS using ASN_STRUCT_RESET(). If multiple
pointers point to the same SS, calling ASN_STRUCT_RESET() on all
pointers would lead to double free. So one needs to check for dangling
pointer before freeing.

Instead of using pointers and assigning them during configuration, we
use SS id for otherSI_SS, ra_SS and paging_SS to retrieve the pointers
whenever needed. When the UE wants to release the SS, we make them -1
indicating an invalid SS id.
2025-04-25 15:40:07 -04:00
Robert Schmidt 7639cea5e5 Merge remote-tracking branch 'origin/issue_947' into integration_2025_w17 (!3380)
Issue 947 and compilation improvements

This MR started with a small commit (03c7f151) to close #947. Little did
I know that I would be taken in a long journey through OAI compilation
hell.
2025-04-25 14:53:46 +02:00
Robert Schmidt 566790c8ec Merge remote-tracking branch 'origin/sib_misconfiguration_assertion' into integration_2025_w17 (!3399)
SIBs in DL slot check

This MR add assertions to prevent scheduling SIBs in slots that are not DL
2025-04-25 08:39:53 +02:00
Robert Schmidt 67887e1040 Merge remote-tracking branch 'origin/fix_3372' into integration_2025_w17 (!3397)
Fix for MIB/SIB gNB delay mechanism

Fix for !3372 to start scheduling/print gNB stats when the PRACH noise
estimation is ready
2025-04-25 08:38:19 +02:00
francescomani b7185b3b6a remove NR/nr_rrc_proto.h dependency from nr_rlc_oai_api.h 2025-04-24 18:40:49 +02:00
francescomani 9df009cf66 remove rrc_gNB_radio_bearers.h dependency in nr_pdcp_entity.h 2025-04-24 18:40:49 +02:00
francescomaniandRobert Schmidt 60a57c69b3 Remove dependency from RRC gNB structure in NR RLC API
Pass a "type" of RLC operational mode, from which split-type/gNB/UE
decision is derived.

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-04-24 18:40:07 +02:00
Robert Schmidt f9224e1fc8 File-based stats: abort writing if we can't write
There might be a number of reasons, such as read-only write system,
erros, etc. Still gracefully continue instead of aborting the operation.
2025-04-24 17:22:43 +02:00
Robert Schmidt 8ee0b8efdf Introduce mac_top_destroy_gNB(): free MAC memory 2025-04-24 17:22:42 +02:00
francescomani 2e9f5a7789 asserting if the otherSIB slot is not downlink 2025-04-24 09:30:28 +02:00
francescomani f63ac3f1e4 asserting if the SIB1 slot is not downlink 2025-04-24 09:30:24 +02:00
francescomani 0301b239a2 print stats only after scheduler started 2025-04-23 16:42:03 +02:00
francescomani 3afa5760b8 fix num_scheduled_prach_rx with num occasion per slot 2025-04-23 14:49:57 +02:00
francescomani 3ba7c6bb11 remove unused nr_mac_rrc_sl_mib_ind 2025-04-23 08:16:30 +02:00
Robert Schmidt d623cbed7d Merge remote-tracking branch 'origin/issue_949' into integration_2025_w16 (!3393)
rejecting DRB if not configured in PDCP-Config

Closes issue #949
2025-04-22 09:38:42 +02:00
Robert Schmidt 884e60da69 Merge remote-tracking branch 'origin/remove-prach-delay' into integration_2025_w16 (!3372)
Add Delay Mechanism for Initial MIB/SIB Transmission in gNB Scheduler

- Delay MIB/SIB in gNB until PRACH noise converges
- Remove the first PRACH random access attempt delay in NR UE
2025-04-22 09:37:31 +02:00
Jaroslava Fiedlerova 3d5177e5f7 Merge remote-tracking branch 'origin/bugfix_pucch2_prb_size' into integration_2025_w16 (!3121)
Bugfix for number of PRBs in PUCCH format 2

[TS 38.213 - Section 9.2.1 PUCCH Resource Sets] If the format indicates
PUCCH-format2 or PUCCH-format3, the PUCCH format configured for a PUCCH resource
is PUCCH format 2 or PUCCH format 3, respectively, where the PUCCH resource also
includes a number of PRBs provided by nrofPRBs, a number of symbols for a PUCCH
transmission provided by nrofSymbols, and a first symbol for the PUCCH
transmission provided by startingSymbolIndex.

[TS 38.213 - Section 9.2.3 UE procedure for reporting HARQ-ACK] If a UE transmits
a PUCCH with O_ACK HARQ-ACK information bits and O_CRC bits using PUCCH format 2
or PUCCH format 3 in a PUCCH resource that includes M_PUCCH_RB PRBs, the UE
determines a number of PRBs M_PUCCH_RB_min for the PUCCH transmission to be the
minimum number of PRBs (...)

[TS 38.213 - Section 9.2.5.1 UE procedure for multiplexing HARQ-ACK or CSI and
SR in a PUCCH] If a UE transmits a PUCCH with O_ACK HARQ-ACK information bits,
O_SR = ⌈log2(K+1)⌉ SR bits, and O_CRC CRC bits using PUCCH format 2 or PUCCH
format 3 in a PUCCH resource that includes M_PUCCH_RB PRBs, the UE determines
a number of PRBs M_PUCCH_RB_min for the PUCCH transmission to be the minimum
number of PRBs (...)

[TS 38.213 - Section 9.2.5.2 UE procedure for multiplexing HARQ-ACK/SR/CSI in
a PUCCH] If a UE has HARQ-ACK, SR and wideband or sub-band CSI reports to
transmit and the UE determines a PUCCH resource with PUCCH format 2, or the UE
has HARQ-ACK, SR and wideband CSI reports to transmit and the UE determines a
PUCCH resource with PUCCH format 3 or PUCCH format 4, where (...) the UE
transmits the HARQ-ACK, SR, and CSI reports bits by selecting the minimum number
PUCCH M_PUCCH_RB_min of the M_PUCCH_RB PRBs satisfying (...)

[TS 38.213 - Section 9.2.5.2 UE procedure for multiplexing HARQ-ACK/SR/CSI in a
PUCCH] If a UE has one or more CSI reports and zero or more HARQ-ACK/SR
information bits to transmit in a PUCCH where the HARQ-ACK, if any, is in
response to a PDSCH reception without a corresponding PDCCH; if any of the CSI
reports are overlapping (...); else, the UE transmits the
O_ACK + O_SR + O_CSI + O_CRC bits in a PUCCH resource provided by
pucch-CSI-ResourceList and determined as described in clause 9.2.5

Therefore, the number of PRBs to be used by PUCCH-format2 is M_PUCCH_RB_min,
except if we have zero HARQ-ACK bits, or if we have any HARQ-ACK, is in response
to a PDSCH reception without a corresponding PDCCH. In this case, we must use
the resources indicated in the pucch-CSI-ResourceList and determined as described
in clause 9.2.5.

In OAI, we have:
asn1cSeqAdd(&csirep->reportConfigType.choice.periodic->pucch_CSI_ResourceList.list, pucchcsires);

Where the resource added to the list corresponds to:

pucchres2->pucch_ResourceId = *pucchressetid;
pucchres2->startingPRB = 0;
pucchres2->intraSlotFrequencyHopping = NULL;
pucchres2->secondHopPRB = NULL;
pucchres2->format.present = NR_PUCCH_Resource__format_PR_format2;
pucchres2->format.choice.format2 = calloc(1,sizeof(*pucchres2->format.choice.format2));
pucchres2->format.choice.format2->nrofPRBs = 8;
pucchres2->format.choice.format2->nrofSymbols = 1;
pucchres2->format.choice.format2->startingSymbolIndex = 13;

Currently, in develop branch, we get these prb_size for PUCCH-format2:

[NR_RRC]   NGAP_PDUSESSION_SETUP_RESP: sending the message
[NGAP]   pdusession_setup_resp_p: pdusession ID 1, gnb_addr 172.31.0.1, SIZE 4, TEID 1579669408
[NR_MAC]   (596.3) pucch_pdu->prb_size = 4
[NR_MAC]   (596.4) pucch_pdu->prb_size = 3
[NR_MAC]   (600.3) pucch_pdu->prb_size = 4
[NR_MAC]   (600.4) pucch_pdu->prb_size = 3
[NR_MAC]   (604.3) pucch_pdu->prb_size = 4
[NR_MAC]   (604.4) pucch_pdu->prb_size = 3
[NR_MAC]   (608.3) pucch_pdu->prb_size = 4

While in QXDM we have Num RB = 8, whenever we have zero HARQ-ACK bits:

UCI Request BMask =             ACK_NACK_RPT | CSI_RPT
               Start symbol = 13
               Num Symbols = 1
               Starting RB = 0
               REL16 DMRS EN = 0
               Dual Pol Status = 0
               Num RB = 2
               Freq Hopping Flag =          HOP_MOD_NEITHER
               Second Hop RB = NA
               Num HARQ ACK Bits = 1
               Num SR Bits = 0
               Num UCI P1 Bits = 8

UCI Request BMask =             ACK_NACK_RPT | CSI_RPT
               Start symbol = 13
               Num Symbols = 1
               Starting RB = 0
               REL16 DMRS EN = 0
               Dual Pol Status = 0
               Num RB = 3
               Freq Hopping Flag =          HOP_MOD_NEITHER
               Second Hop RB = NA
               Num HARQ ACK Bits = 3
               Num SR Bits = 0
               Num UCI P1 Bits = 13

UCI Request BMask =                            CSI_RPT
               Start symbol = 13
               Num Symbols = 1
               Starting RB = 0
               REL16 DMRS EN = 0
               Dual Pol Status = 0
               Num RB = 8
               Freq Hopping Flag =          HOP_MOD_NEITHER
               Second Hop RB = NA
               Num HARQ ACK Bits = 0
               Num SR Bits = 0
               Num UCI P1 Bits = 10

UCI Request BMask =                   CSI_RPT | SR_RPT
               Start symbol = 13
               Num Symbols = 1
               Starting RB = 0
               REL16 DMRS EN = 0
               Dual Pol Status = 0
               Num RB = 8
               Freq Hopping Flag =          HOP_MOD_NEITHER
               Second Hop RB = NA
               Num HARQ ACK Bits = 0
               Num SR Bits = 1
               Num UCI P1 Bits = 11

Therefore, this MR fixes the prb_size, so that the number of PUCCH-format2 PRBs matches correctly.
2025-04-18 14:24:07 +02:00
Bartosz Podrygajlo a3ef5293fb Add Delay Mechanism for Initial MIB/SIB Transmission in gNB Scheduler
This commit introduces a delay mechanism for the first MIB/SIB transmission
in the gNB scheduler to allow PRACH noise estimate to converge stabilize
before first PRACH preamble reception.

Key changes:
- Added the `num_scheduled_prach_rx` variable to gNB_MAC_INST to keep track
  of total number scheduled of PRACH receptions. Using uint64_t type to avoid
  overflow.
- Updated the `gNB_dlsch_ulsch_scheduler` function to conditionally schedule
  MIB/SIB transmissions if `num_scheduled_prach_rx` is at least 100.
  The value comes from OAIs implementation of PRACH noise estimate.
2025-04-18 10:26:36 +02:00
francescomani ba2a0c4d1e rejecting DRB addition if DRB field not present at setup in PDCP-Config 2025-04-18 09:44:41 +02:00
Cedric Roux 7cbedb1575 time management module
This commit introduces a time management module.

See doc/time_management.md for details.
2025-04-18 09:02:54 +02:00
Jaroslava Fiedlerova 6e67c1ac20 Merge remote-tracking branch 'origin/NR_SSB_SINR' into integration_2025_w16 (!3326)
Enable SSB-SINR based CSI reporting

3GPP 38.331 release 16 specifies that If the field reportQuantity-r16 is present,
UE shall ignore reportQuantity (without suffix). reportQuantity-r16 configures
SSB based SINR as the reporting quantity.

set do_SINR = 1; in gNB params part of the config file to enable SSB based SINR
reporting.
2025-04-17 23:01:08 +02:00
Jaroslava Fiedlerova 315ed8e564 Merge remote-tracking branch 'origin/nr-gnb-config-refactor' into integration_2025_w16 (!3293)
Cleanup and refactor initial gNB configuration

This is follow-up on !3048 (merged). Major changes in this MR:
- Add config functions to reduce redundant code repeated in multiple places in the file
- Add macros to reduce redundant code in gNB configuration
- Refactor RCconfig_NR_NG
- Cleanup obsolete and commented out code
- Refactor includes in executables/nr-gnb.c
- Introduce platform type plmn_id_t for consistency across the stack: F1AP, NGAP can now use the same struct type
- And other minor formatting
2025-04-17 19:56:58 +02:00
Bartosz PodrygajloandRobert Schmidt 1ab8a58a2f Refactor TUN Interface Management and Move to SDAP Layer
This commit refactors the TUN interface management by moving its creation
and configuration from the PDCP layer to the SDAP layer for UE.

Key changes include:

- Introduced `tun_generate_ue_ifname` and `tun_destroy` functions for better
  TUN interface lifecycle management.
- Added support for creating and destroying UE-specific TUN interfaces in SDAP.
- Refactored `nr_pdcp_module_init` to remove TUN-related logic and moved it
  to SDAP.
- Updated NAS and SDAP layers to handle PDU session-specific TUN interface
  creation and configuration.
- Enhanced SDAP entity management to include TUN socket handling and thread
  lifecycle.
- Updated NAS message handling to initialize default PDU session TUN
  interfaces in NOS1 mode.
- Use a single SDAP thread function for gNB and UE
- Allow noS1 mode also in SA on gNB

These changes improve modularity by isolating TUN interface management within
the SDAP layer, aligning with the 3GPP architecture, and simplifying the PDCP
layer.

Co-Authored-By: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-04-16 15:03:18 +02:00
Robert Schmidt e30fe59489 increase RLC buffers for reduced losses 2025-04-15 16:19:14 +02:00
Raghavendra Dinavahi 1666dced3e gNB changes- Extract SSB-SINR from received CSI report 2025-04-15 16:02:34 +02:00
Raghavendra Dinavahi 516a618816 UE changes- Generate SSB based SINR CSI report 2025-04-15 16:02:34 +02:00
Raghavendra Dinavahi 6e371b9e48 UE changes in PHY- Enable SSB based SINR measurement 2025-04-15 16:02:34 +02:00
Raghavendra Dinavahi 61778f3d55 gNB changes- Compute bitlen in case of SSB-SINR
compute SINR bitlen according to 38.212 table 6.3.1.1.2-6A
2025-04-15 16:02:34 +02:00
Raghavendra Dinavahi 2c164336bc gNB changes in RRC- Enable SSB-SINR based CSI reporting
3GPP 38.331 release 16 specifies that If the field reportQuantity-r16 is present, UE shall ignore reportQuantity (without suffix).
reportQuantity-r16 configures SSB based SINR as the reporting quantity.

set do_SINR = 1; in gNB params part of the config file to enable SSB based SINR reporting instead of the default RSRP based.
2025-04-15 16:02:34 +02:00
rmagueta 9e787a0ba2 Bugfix for number of PRBs in PUCCH format 2 2025-04-15 14:49:19 +01:00
Guido Casati ac3f9f3e32 Introduce platform type plmn_id_t for consistency across the stack
* F1AP, NGAP can now use the same struct type
* this improves maintainability
2025-04-15 15:28:34 +02:00
Robert Schmidt 98d4dff509 Merge remote-tracking branch 'origin/NR_gNB_SIB2' into integration_2025_w15 (!3184)
NR SIB2

- Transmission of SIB2
- Fixes for transmission and reception of SIB19

Closes #901
2025-04-14 17:01:28 +02:00
francescomani 7c4eabdb6e fix for DLSCH DMRS reference point (regression at the OAI UE introduced when testing with OAI gNB for a missing implementation in OAI gNB) 2025-04-14 11:28:00 +02:00
francescomani 3b22c4a566 Revert tentative fix for double sib1 decoding because it doesn't behave as expected. Instead a new pending_sib variable is used for the same goal.
This reverts commit 35e9d1e0c2.
2025-04-14 10:15:50 +02:00
francescomani 08da0bd2cc improvements at UE to receive multiple instances of otherSIB
for example SIB2 and SIB19 which are scheduled in separate messages
2025-04-14 10:15:50 +02:00