Commit Graph
12030 Commits
Author SHA1 Message Date
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 14269b7933 Merge remote-tracking branch 'origin/f1-du-config-update-fixes' into integration_2025_w17 (!3401)
F1AP: Allocate gNB_DU_ID before storing ID

Update the test so it would catch that bug. Check in eq_() that both
gNB_DU_IDs would be present, or not, using xor.

Found while interop testing with OSC DU.
2025-04-25 08:40:17 +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
Robert Schmidt 413b84b179 Allocate gNB_DU_ID before storing ID
Update the test so it would catch that bug. Check in eq_() that both
gNB_DU_IDs would be present, or not, using xor.
2025-04-24 18:42:06 +02:00
francescomani 657a464e6f increase size of max measurement definitions in OAI UE as per 38.331 2025-04-24 18:40:49 +02:00
francescomani 76040b97aa move rrc_config_dl_ptrs_params to common header since it is also used by dlsim 2025-04-24 18:40:49 +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 85ee4647b5 remove NR/nr_rrc_defs.h dependency from asn1_msg.h 2025-04-24 18:40:49 +02:00
francescomani b05d1ff599 remove gNB structure dependency from get_MeasConfig in asn1_msg.c 2025-04-24 18:40:49 +02:00
francescomani bda64a05d9 remove gNB structure dependency from do_RRCReestablishment in asn1_msg.c 2025-04-24 18:40:49 +02:00
francescomani 368e74930c remove gNB structure dependency from do_RRCReconfiguration in asn1_msg.c 2025-04-24 18:40:49 +02:00
francescomani 735a631499 remove gNB structure dependency from do_RRCSetup in asn1_msg.c 2025-04-24 18:40:49 +02:00
francescomani 7a4c5ab6aa remove LTE/rrc_defs.h dependency in rrc_UE.c 2025-04-24 18:40:49 +02:00
francescomani 9e0d3c50bc move NR_RRC_BUF_SIZE to common 2025-04-24 18:40:49 +02:00
francescomani 492fae4292 remove rrc_defs.h dependency in L2_interface 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 83dc33d3bf Avoid memory leaks: ext1 directly overwritten by p2 2025-04-24 17:22:43 +02:00
Robert Schmidt d785187f28 Make deep copy for TDD_UL_DL_ConfigCommon instead of stealing pointer 2025-04-24 17:22:42 +02:00
Robert Schmidt d41e7a95df Fix direct memory leak 2025-04-24 17:22:42 +02:00
Robert Schmidt a57e4cd655 Fix direct memory leak 2025-04-24 17:22:42 +02:00
Robert Schmidt de35a0a59c Fix memory leak: fix_tdd_pattern() allocates pattern1.ext 2025-04-24 17:22:42 +02:00
Robert Schmidt 8ee0b8efdf Introduce mac_top_destroy_gNB(): free MAC memory 2025-04-24 17:22:42 +02:00
Robert Schmidt 6afc0dee50 Correctly free 2-step RA/MsgA structures in fix_scc() 2025-04-24 17:22:42 +02:00
Robert Schmidt b18fff6ae2 Correctly deep-copy memory structures on SIB1 creation 2025-04-24 17:22:42 +02:00
Robert Schmidt c26a12e6b7 Correctly free ASN.1 memory for unused dedicated BWPs
prepare_scd() sets up memory for possible dedicated BWPs to be set up.
If they are not used, they are freed in fix_scd(). [1]

There are two problems:

1. in prepare_scd(), multiple structures are allocated once (for
   multiple elements), but inserted once. When trying to free those, the
   logic of ASN.1 is to free list elements individually, but then we try
   to call free() on each element of the list that has been allocated in
   one go. Fix this by doing multiple allocations to be in line with
   ASN.1 logic.

2. in fix_scd(), free recursively all data structures, not only the
   sequence element itself.

[1] this is horrible. We should only allocate memory if we actually need
it, but let's fix the more urgent problem of memory leaks first. Fixing
the logic problem would be more involved.
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 9f3a374758 remove NR UE rrc_defs dependency in rrc_messages_types 2025-04-23 08:16:30 +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
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 a48e64f6f8 Adopt snprintf across the code in openair2/GNB_APP/gnb_config.c
Replaced `sprintf` with `snprintf` in gnb_config.c to enhance memory safety
by preventing potential buffer overflows. `sprintf` can cause buffer overflows
by not checking the destination buffer size. In contrast, `snprintf` allows
specifying a maximum buffer size, ensuring no overflow occurs by limiting
the number of characters written, including the null terminator.
2025-04-15 15:28:36 +02:00