- 23 Apr, 2026 3 commits
-
-
Teodora Vladić authored
* Initialize leak detector * Fill IO config field holding the number of mbufs to be allocated * Allocate and fill `activeMUs` in the FH config * Start timing source, worker thread and activate CCs upon starting the FH * Fill `mu_number[0]` in FH config * Invert trx_oran end and stop * Set `neAxcUl` * Delete duplicated oran_eth_state_t struct definition * gxran_handle is an array which length is equal to the number of RUs * Fill BBDev VF token in fh_init Co-authored-by:
Romain Beurdouche <romain.beurdouche@eurecom.fr> Signed-off-by:
Teodora Vladić <teodora.vladic@openairinterface.org>
-
Teodora Vladić authored
Adapt the oran_fhlib_5g code to compile with xran K release. Like previously E and F, uses preprocessor directives to separate codes for different xran releases. Notes: 1. Release K of the FHI library supports many numerologies on one instance. As of now the integration supports only one numerology. 2. Several arrays in the xran interface are indexed by the numerology. It was ambiguous whether they were indexed by the actual numerology number or by the index of the relevant numerology within the numerology array. They are actually indexed by the numerology number so that when one is using only numerlogy 1 for example, he should only use perMu[1], fftSize[1], ... Signed-off-by:Teodora Vladić <teodora.vladic@openairinterface.org>
-
Teodora Vladić authored
* create the xran forked repo as a cmake external project - easier to maintain and track the changes we applied to the original repo * add xran_DOWNLOAD option - clones and builds latest supported K release * update the FHI README for K release Signed-off-by:Teodora Vladić <teodora.vladic@openairinterface.org>
-
- 21 Apr, 2026 2 commits
-
-
Romain Beurdouche authored
Update the Cmake find script for xran to detect K release (11.1.1). Signed-off-by:Teodora Vladić <teodora.vladic@openairinterface.org>
-
Robert Schmidt authored
Fixes the commit ID: 03096dd4Signed-off-by:
Teodora Vladić <teodora.vladic@openairinterface.org>
-
- 17 Apr, 2026 1 commit
-
-
Jaroslava Fiedlerova authored
Integration `2026.w16` * !4040 fix: issue 911 - replace timer oneshot to periodic. * !4041 Compilation without T: move to physims * !4046 fix(record_db doc): correct the path for T_messages.txt and mention use of ninja/make * !3994 Update CN5G images to release v2.2.0 and update traffic generator image * !4024 Fix fill_srs_channel_matrix * !3983 Add SIB 3,4 support, configurable SIB2 and refactor CU/DU SIB management * !4030 Miscellaneous code improvements * !4039 Verify consistency of CSI report in L2 instead of RRC * !3991 L1 RX: use queues instead of arrays and linear search for PUCCH, PUSCH, SRS, PRACH * !4011 CI: remove cppcheck, cleanup in build and license checks * !4051 Fix EMA cold-start for noise and SNR/RSSI measurements Closes #1063 See merge request oai/openairinterface5g!4048
-
- 16 Apr, 2026 34 commits
-
-
Jaroslava Fiedlerova authored
Fix EMA cold-start for noise and SNR/RSSI measurements Initialize n0_subband_power and power control avg_snr/avg_rssi directly from the first measurement instead of starting from zero. Starting from zero causes the EMA to converge slowly, leading to underestimated noise power at gNB startup. This results in inflated SNR estimates, which triggers UE uplink power ramp-up, antenna saturation, and a positive feedback loop of increasing noise.
-
Jaroslava Fiedlerova authored
CI: remove cppcheck, cleanup in build and license checks Remove cppcheck. For those who want to use it, it's now in tools/cppcheck/, and likely easier to use locally. Clean up some code for CI build and license check. Remove global variable.
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
We don't enforce cppcheck through the CI, although it's there since years. It runs on Ubuntu 18/20, so it's old. For folks, it's likely not discoverable on how to run it locally. Let's make a fresh start. This removes cppcheck from all CI-related code. Instead, it adds it under tools/cppcheck/, including documentation on how to run it locally, bare-matel or in docker. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
-
rmagueta authored
Initialize n0_subband_power and power control avg_snr/avg_rssi directly from the first measurement instead of starting from zero
-
Robert Schmidt authored
L1 RX: use queues instead of arrays and linear search for PUCCH, PUSCH, SRS, PRACH This MR is an attempt to reduce the time L1 RX searches in array for the next job to process, and instead use a queue. This queue is a FIFO, because the various jobs (FAPI messages) to process come in order, and need to be processed in order. The MR (hopefully, to be measured) reduces the amount of time spent searching for the next UE (because the next job is always at the beginning of the queue), and should scale better for many UEs. It does the following: - introduce two helper libraries for (1) Frame.Slot calculation (sfn_t), already introduced in !3521 (merged) commit 3102068e, and (2) a ring buffer with fixed size - use sfn_t and ring buffer (gNB->pucch_queue) to remove the linear array for PUCCH (gNB->pucch) - use sfn_t and ring buffer (gNB->pusch_queue) for some PUSCH lookups. Because we need to still store PUSCH contexts, gNB->pusch is still there - use sfn_t and ring buffer (gNB->srs_queue) to remove the linear array for SRS (gNB->srs) - use sfn_t and ring buffers (gNB->prach_ru_queue and gNB->prach_l1rx_queue) to remove the linear array for PRACH (gNB->prach_list) - some minor cleanups, e.g., additional loops over the PUSCH array, using const, using pointers instead of indices, etc
-
Robert Schmidt authored
Verify consistency of CSI report in L2 instead of RRC Closes #1063
-
Robert Schmidt authored
Miscellaneous code improvements - A fix in a yaml config file as reported by @Abdo-Gaber - proper positioning of static functions in a couple of gNB scheduler files - some effort to split NR from LTE code in compilation - harmonization of macros for unused variables
-
Robert Schmidt authored
Add SIB 3,4 support, configurable SIB2 and refactor CU/DU SIB management This MR makes neighbour and inter-frequency configuration drive how SIB2/SIB3/SIB4 are built and sent from CU to DUs. It standardizes SIB payloads as byte_array_t with typed SIB IDs across RRC, F1AP and MAC, reducing ad‑hoc buffer handling. Neighbour parsing, validation and lookup are tightened. Changes - Minor refactor to gNB neighbour parsing and storage (shared PLMN extraction, safer allocation, etc). - Represent SIB containers uniformly as byte_array_t plus nr_sib_type_t, and adapt F1AP, MAC and RRC users to the new container API. - Make SIB2 cell-reselection information fully config-driven with explicit bounds checking and SIB2 ASN.1 building from that config. - Generate SIB3 intra-frequency neighbours from the per-cell neighbour list and propagate them from CU to DU over F1, with MAC decoding/attaching them to SystemInformation. - Generate SIB4 inter-frequency neighbours from a new frequency_list plus neighbour SIB3/SIB4 offsets, and propagate them from CU to DU over F1, with MAC decoding/attaching them. - Add basic ASN.1 round-trip tests for SIB2/SIB3/SIB4 and SIB4 range checks, and update RRC docs to describe the neighbour/inter-frequency configuration model. Testing: 1. in gNB conf file: cu_sibs = (2, 3, 4); 2. Update neighbour config file with SIB3/SIB4 conf: (see documentation) 3. run gNB and UE as usual --- Logs & configs: see MR on Gitlab -
Robert Schmidt authored
Use two queues for PRACH processing: - prach_ru_queue: pass jobs from TX thread (scheduler) to RU thread. For split 8, the RU thread itself handles PRACH processing; for split 7.2, it is the library that is responsible for handling PRACH messages (see oran_fh_if4p5_south_in()) - prach_l1rx_queue: after jobs have been handled in RU thread, use this queue to pass jobs to the RX thread. There, preamble detection is performed, and RACH.indication FAPI messages are filled if a preamble has been detected. Together, these queues replace a linear search in a global array that has been modified by three threads at the same time. The design ensures that access now is thread-safe, and with less overhead. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Guido Casati authored
Expand RRC usage and handover documentation to describe the two-level neighbour configuration layout, lookup-key semantics, and config-time SIB4 grouping behaviour. Expand the example config to include a `frequency_list` block and per-neighbour SIB3/SIB4 offset fields. Add SIB2 config example. Update handover-tutorial.md to describe the same nested model and note that F1 and N2 handover share the same serving-cell keyed mapping. Add documentation about SIB3/SIB4 and MeasGaps implementation in OAI with stress on the shared neighbour configuration data model. Update FEATURE_SET.
-
Robert Schmidt authored
Clarify the code, the bitpacking might even potentially be slower. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Use the spsc queue to pass jobs from TX thread (scheduler) to RX thread (handling those jobs), reducing the amount spent searching for SRS jobs, clarifying the design, and making it thread-safe. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
The structure in which was snr will be a "SRS job" in a follow-up commit, so the snr parameter cannot be stored in there (and it is also not necessary to do so, as it can be local to the function handling nr_srs_rx_procedures()). Correctly read SRS SNR through FAPI message in nr_ulsim. Switch to SRS BEAMMANAGEMENT as only this message returns the actual SNR (unlike CODEBOOK). Add asserts to check what is returned is valid data in the sense of the test. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Remove useless logging defines. Move srs_estimated_channel_time to where it is used. Prepare for the next commit by moving UL_INFO to earlier inside phy_procedures_gNB_uespec_RX(). Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
- calculation in float: should be enough precision (it'll go into 16bit ints later...) - avoid round: the lower 15bits will be shifted away, the rounding will have no effect - group some multiplications to avoid re-computation of the same results. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
This means that as of this commit, the signal has to be permanently regenerated. In fact, with the SRS queue to be introduced in a follow-up commit, we don't have an easy way to cache the sequence generation, as there is no "index" to which we could refer to (hence, caching would be tricky). Instead, the next commits further refactor this to reduce the time for SRS sequence generation as well as the memory footprint. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Use the spsc queue to pass jobs from TX thread (scheduler) to RX thread (handling those jobs), reducing the amount spent searching for PUSCH jobs, clarifying the design, and making it thread-safe. Since the PUSCH contexts have to be stored somewhere, there is still a single iteration over all contexts. Removing that is left for future work. Thus, this commit (together with previous commits) reduces the number of iterations over all PUSCH entries, only iterating over the actually requested PUSCH jobs. On the other hand, because only the RX thread iterates over PUSCH contexts, it should be thread-safe. Remove flag "handled", which is always 0. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Pass pointers directly instead of ULSCH_id. Put const where possible and applicable. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Set the FAPI message in nr_ulschsim correctly in line with what nr_ulsch_procedures() expected. Add an AssertFatal() to verify that the assumed length of DMRS in the simulator and what is actually set in the FAPI message matches. Finally, the internal nr_get_G() code (looping over all PUSCH) does not double the DMRS because Nl == 3 || Nl == 4, so harmonize in the simulator. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
It is pointless to iterate ulsch_to_decode to find the number of jobs if we can simply pass it to the function. Use an additional {} block to limit the amount of indentation. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Amidst all these unnecessary pointers, the pointer on pusch_vars->ptrs_symbols is necessary to reset the PTRS number of symbols. For clarity, remove this pointer and use pusch_vars->ptrs_symbols directly. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Pass pointer to data. This necessitates to move delay from NR_gNB_ULSCH_t (ULSCH data, including transport channels etc) to NR_gNB_PUSCH (lower-PHY PUSCH data): 1. This allows to pass a single pointer to nr_pusch_channel_estimation() 2. To me, delay estimation seems to be a lower-PHY calculation, so it fits better anyway. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Use the spsc queue to pass jobs from TX thread (scheduler) to RX thread (handling those jobs), reducing the amount spent searching for PUCCH jobs in an array, clarifying the design, and making it thread-safe. Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Because it is SPSC, atomic variables are enough to synchronize the two threads. Concretely put() is modified to ensure that read_idx is "acquired" so that the read index has been written, including memory, by the other thread. "Release" ensures that the write operation (including the memory to the buffer) is written before it is visible to the other thread in get() (which in turn "acquires" it). For more information, see also [1]. The rest of the library has been simplified to work only with put() and get(), reducing total code and the surface for possible bugs. This (and the previous) version has been tested with the threadSanitizer: TSAN_OPTIONS=halt_on_error=1 ./common/utils/ds/tests/test_spsc_q_perf On my machine, using Google Benchmark, I measure a considerable 5x speed improvement: $ /tmp/benchmark/tools/compare.py benchmarks pthread.json atomic.json Comparing pthread.json to atomic.json Benchmark Time CPU Time Old Time New CPU Old CPU New -------------------------------------------------------------------------------------------------------------- BM_spsc_q/10 -0.8201 -0.0740 266779912 47989020 52387 48512 BM_spsc_q/16 -0.8301 -0.0520 249656592 42428540 51462 48784 BM_spsc_q/32 -0.8003 -0.0841 230248798 45972155 53841 49311 BM_spsc_q/64 -0.7995 -0.0506 210429791 42199674 50690 48124 BM_spsc_q/128 -0.7930 -0.1101 205212273 42483155 52745 46936 BM_spsc_q/160 -0.7880 -0.1663 216644738 45938247 53400 44518 OVERALL_GEOMEAN -0.8057 -0.0904 0 0 0 0 [1] https://en.cppreference.com/w/c/atomic/memory_order.html Assisted-By: Claude:claude-sonnet-4-6 Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Jaroslava Fiedlerova authored
Fix fill_srs_channel_matrix Fix incorrect SRS subcarrier mapping in fill_srs_channel_matrix The previous implementation of fill_srs_channel_matrix assumed an incorrect SRS subcarrier mapping, leading to wrong indexing of the estimated channel in frequency domain.
-