Commit Graph
11717 Commits
Author SHA1 Message Date
francescomani fc52fb8d24 compute_tbs_common formatting 2025-02-04 08:21:11 +01:00
francescomani d791d03e05 fix to have correct maxMIMO_layers in dlsim computing tbslbrm 2025-02-04 08:21:11 +01:00
Robert Schmidt 616c677536 Merge remote-tracking branch 'origin/avoid-powerlimit-flood' into integration_2025_w05 (!3208)
Downgrade gNB power limit LOG from "warning" to "debug"

Downgrade the UE power limited LOG from LOG_W to LOG_D. This is to avoid
flooding stdout when UE in low coverage enters power limited state for a
longer period of time. The same information can be inferred from the
periodic UE print which also contains PH value (negative PH values
indicate that the UE is power limited)

Also, correct some typos in PH calculation.

Closes #885
2025-02-03 08:33:23 +01:00
Robert Schmidt 1cb82bae20 Merge remote-tracking branch 'origin/Mult_TDD_Pattern' into integration_2025_w05 (!2799)
Changes to support multiple TDD patterns

- Updated the configuration changes for 2 Patterns
- Update the TDD table configuration for NFAPI
- Added the tdd bitmap for the period
- Adapted the bitmap for UL/DL for the multi TDD pattern
- Updated the RACH procedure for multi TDD pattern
- Updated DL and UL scheduler for multi TDD pattern
2025-02-03 08:32:02 +01:00
Robert Schmidt e0865421b9 Merge remote-tracking branch 'origin/nr-ue-nas-improvements' into integration_2025_w05 (!2984)
NAS 5GS refactor

The goal of this MR is to reorganize the NR NAS code into:

- enc/dec library functions (5GS, 5GMM, 5GSM, NR_NAS_defs.h,
  nr_fgs_nas_lib.c)
- handlers and callbacks (nr_nas_msg.c)

The following changes are introduced:

1. migrate 5GS enc/dec lib (5GMM and 5GSM) to a dedicated folder
2. add a nested CMakeLists structure
3. refactor NR NAS enc/dec functions
4. refactor NR NAS messages struct definitions
5. remove most of dependency from NAS LTE
6. further refactor of PDU Session Establishment Accept processing to
   separate enc/dec from handling
7. made naming of 5GS definitions consistent whenever necessary
8. cleanup unused code
9. remove redundant struct definitions

Also:

1. fix decoding of AMF Set ID in 5G-S-TMSI UE identity
2. replace Byte_t directly with uint8_t
2025-01-31 22:29:31 +01:00
vijay chadachanandGuido Casati 4fc74c17ab Refactoring of is_xlsch_in_slot usage in MAC
* Remove the ulsch_slot_bitmap and dlsch_slot_bitmap from nrmac
* Adopt the new is_dl_slot/is_ul_slot functions in the stack
  to replace is_xlsch_in_slot: these functions are getting
  the DL and UL slots as they are set in the TDD configuration
  stored in tdd_slot_bitmap (frame_structure_t)
* Keep is_xlsch_in_slot in openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c:
  this is necessary because the phy-test pre-processors are using the bitmaps
  dlsch_slot_bitmap and ulsch_slot_bitmap to check which DL/UL slots to use
  for transmission among those set in the TDD configuration

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-31 16:51:19 +01:00
Bartosz Podrygajlo d44279a9a3 Fix PHR PH value to power headroom conversion. 2025-01-31 16:05:13 +01:00
Bartosz Podrygajlo 1e667b379a Downgrade gNB power limit LOG from "warning" to "debug"
Downgrade the UE power limited LOG from LOG_W to LOG_D. This is to avoid flooding
stdout when UE in low coverage enters power limited state for a longer period of
time. The same information can be inferred from the periodic UE print which also
contains PH value (negative PH values indicate that the UE is power limited)
2025-01-31 15:59:45 +01:00
Robert Schmidt 85edbc8ec7 Merge remote-tracking branch 'origin/RRCReestablishment_integrity' into integration_2025_w05 (!3229)
Verify the integrity protection of the RRCReestablishment message
2025-01-31 08:07:26 +01:00
Robert Schmidt 44fe1175c2 Merge remote-tracking branch 'origin/NR_ULSCH_beam_allocation_bugfix' into integration_2025_w05 (!3231)
Bugfix in frame and slot setting for ULSCH beam allocation
2025-01-31 08:01:39 +01:00
francescomani 7c93de87a4 lower layers to verify the integrity protection of the RRCReestablishment message 2025-01-30 18:20:17 +01:00
Laurent THOMAS 5416be3736 move byte2m128i in a more logical place 2025-01-30 17:14:10 +01:00
francescomani bf238491ec fix in frame and slot for ULSCH beam allocation 2025-01-30 14:52:58 +01:00
Guido Casati 92460a80cd Use is_mixed_slot in stack 2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati 0b7bee96cb Add scheduling utility functions to check UL, DL, and mixed slot types in TDD config
* is_ul_slot: returns `true` for UL or mixed slots
* is_dl_slot: returns `true` for DL or mixed slots
* is_mixed_slot: returns `true` for mixed slots

These functions use the TDD slot bitmap for slot type checks

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati eccd3e840e Take into account multi TDD patterns in RRC configuration
* take into account pattern2 in nr_rrc_config_dl_tda
* use get_tdd_period_idx in nr_rrc_config_ul_tda
* use get_first_ul_slot_multi_tdd in set_SR_periodandoffset

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati 04f082a9a4 Adopt utility functions to get TDD configuration from frame_structure in MAC/RRC
* refactor set_ideal_period to use frame_structure from MAC
* use get_ul_slot_offset to assign slot offset to nth UE and adopt in
  updated config_csirs, configure_periodic_srs, set_csi_meas_periodicity

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati 1d8a590328 Refactor nr_UE_is_to_be_scheduled to use new get_first_ul_slot function
Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
Guido Casati 00f1d52f92 Rewrite get_first_ul_slot to use pattern configuration stored in frame_structure
* the function is returning the index of the first full UL slot in tdd_slot_bitmap
  or the first UL slot (including mixed) if the "mixed" flag is provided
2025-01-28 10:07:31 +01:00
Guido Casati bebbc857a0 Add get_ul_slot_offset function to calculate nth UL slot offset for UE in TDD period
* the get_ul_slot_offset function calculates the offset of the nth uplink (UL) slot for a given UE index within a TDD period
* this function uses the frame structure bitmap to determine the UL slot positions
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati ae1a5a968b Refactor gNB_scheduler_uci.c (get_pucch_index, etc..) to use frame_structure stored in MAC
Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati dbfcc1a7ef Refactor set_sched_pucch_list to use frame_structure in MAC
Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
Guido Casati 3dca350f3e Limit scope of set_sched_pucch_list (static) 2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati f4e4f2f7ba Refactor get_feasible_msg3_tda to use frame_structure in MAC
Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati 177732ca3a Refactor get_dl_tda and get_ul_tda to get TDD configuration stored in MAC
Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachan 066559227d get_SIB1_NR: init pattern2 in sib1 servingCellConfigCommon if allocated in scc 2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati f4d59dfd17 Get pattern2 configuration from configuration file and store in SCC
* allocate memory for pattern2 only if the IE is present (it is optional)
* fix scc (deallocate memory) when necessary

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati ad8930e2c4 Configure Frame Structure (including TDD) in MAC
* use config_frame_structure in config_common:
  - fill frame_structure in MAC and NFAPI Config Request
  - use get_tdd_period_idx to set periodicity index in Config Request
  - use config_tdd_patterns to fill tdd_period_config
  - use set_tdd_config_nr to complete NFAPI Config Request configuration

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:31 +01:00
vijay chadachanandGuido Casati 30f6da16f0 Refactor set_tdd_config_nr to use frame_structure_t and tdd_period_config_t
* assuming num_dl_slots and num_ul_slots are including also
  slots with dl/ul symbols respectively
* refactor set_tdd_config_nr
* moved function to MAC
* fill max_num_of_symbol_per_slot_list depending on slot type
* use new set_tdd_config_nr in stack
* minor refactor in config.c to improve readability (scs)

Co-authored-by: Guido Casati <guido.casati@firecell.io>
2025-01-28 10:07:30 +01:00
vijay chadachan 421a690b42 Add frame_structure_t to gNB_MAC_INST 2025-01-28 09:42:45 +01:00
Guido Casatiandvijay chadachan c3a6700037 Implement MAC/RRC setter/getter functions to support multiple TDD patterns
* set_tdd_bmap_period, config_tdd_patterns: to configure TDD period, including bitmap, in the frame structure
* get_tdd_periodicity: to retrieve the periodicity in milliseconds for the given TDD pattern
* get_tdd_period_idx: to get the TDD period index based on pattern periodicities
* get_ul_slots_per_period: get the number of UL slots (including mixed with UL symbols) in period
* get_full_ul_slots_per_period: get the number of full UL slots in period
* get_dl_slots_per_period: get the number of DL slots (including mixed with DL symbols) in period
* get_full_dl_slots_per_period: get the number of full DL slots in period

Co-authored-by: vijay chadachan <vijay.chadachan@firecell.io>
2025-01-28 09:42:45 +01:00
Guido Casati aa68e19ebd Add set_TimeDomainResourceAllocation and refactor nr_rrc_config_ul_tda
* allocate and configure NR_PUSCH_TimeDomainResourceAllocation in a separate function
* remove duplicated lines of code
* use in nr_rrc_config_ul_tda
* use calloc_or_fail
* clang-formatted
2025-01-28 09:42:45 +01:00
Jaroslava Fiedlerova 7bd248e15d Merge remote-tracking branch 'origin/preamble-index-logs' into integration_2025_w04 (!3220)
Improve RA logs

Modify existing LOG entries to include preamble index, timing advance and
estimated distance from the gNB. This makes mapping RA attempts to
physical/simulated UEs easier via sent/received preamble index or physical
distance from the gNB in scenarios with >1 UE.
2025-01-27 16:15:10 +01:00
Jaroslava Fiedlerova 699f2e5d81 Merge remote-tracking branch 'origin/nfapi-fixes' into integration_2025_w04 (!2999)
Repair nFAPI in 5G

Add 5G nFAPI in OAI/Make it it work.

Many commits in this branch are basically bug fixes of things that don't work
properly, such as

- check for correct conditions (e.g. instance numbers in the RAN context)
- remove artificial limitation (e.g. only one PUCCH per TDD period in the PNF)
- improve performance (reduce big mallocs, make some static buffers such as a
  global ring buffer for nFAPI messages in the PNF)
- fix bugs in nFAPI (e.g., increase maximum message size to ~64kB instead of
  1500 bytes, because the latter is way too small for many TX_data.requests in
  5G, and it will delay message arrival unduly)
- fix bugs in message enc/dec (e.g., handle FDD in config.request)
- adjust the L1 such that the condition "we run monolithic" is not necessery
  (e.g., some message numbers in nFAPI struct where reset in MAC, instead of
  L1, and this breaks when running the PNF)

There are instructions that explain how to set it up. Two CI tests have been
added, one with COTS UE and MIMO in DL+UL in TDD numerology 1 (30kHz), and a
second test with FDD mu=0 (15kHZ) in RFsimulator.

These were some old to-dos that have been addressed.

- test with COTS UE - 4x4 pipeline works good in DL, UL now also work
- test in RFsim
- make PNF status message
- make FDD in u0 work
2025-01-27 15:46:19 +01:00
Robert Schmidt 377ff8970e Merge remote-tracking branch 'origin/e1-setup-encdec-tests' into integration_2025_w04 (!3152)
E1 Setup enc/dec library and unit test

This MR is adding a library for E1 Setup enc/dec functions:

- E1 CU-UP Setup Request
- E1 CU-UP Setup Response
- E1 Setup Failure

and relevant unit tests
2025-01-27 11:43:46 +01:00
Robert Schmidt f6243e9078 Merge remote-tracking branch 'origin/f1-ue-data-no-assert' into integration_2025_w04 (!3212)
F1AP IDs: Add update, fix concurrency bug

I suspect a concurrency bug: For instance, during reestablishment, the
CU needs to update the DU UE ID under which the UE is identified in the
DU. Previously, the CU would remove, then add the DU UE ID info. At the
same time, the PDCP thread might look up the information. This can lead
to asserts. Modify the code to do the update under (one) lock.

Also, refactor some code.
2025-01-27 11:42:29 +01:00
Robert Schmidt 2cecffb02f Merge remote-tracking branch 'origin/fix-huge-malloc' into integration_2025_w04 (!3211)
Avoid huge calloc by alloc'ing TBs independently

Fix real-time problems on smaller machines due to big calloc(). See the
commit(s) for more details.
2025-01-27 11:40:53 +01:00
Robert Schmidt f7617f8c9b nFAPI time conversion: handle numerologies flexibly
At both the PNF and the VNF, introduce a separate numerology field, and
pass the numerology when converting time information using macros from
nfapi_interface.h. The actually numerology is still hardcoded to 1 (as it
was before), but the follow-up commits will put a suitable numerology.

In both cases, but the numerology next to the frame/slot information.
2025-01-27 10:59:19 +01:00
Robert Schmidt abe77333b1 L1-emul UE: Make independent of numerology
Similarly as the parent commit(s):
- remove hardcoding to specific numerology
- avoid conversion when we don't need it
2025-01-27 10:59:19 +01:00
Robert Schmidt 08ddce4750 Make independent of numerology: no time conversion macros
Similar as the parent comment, remove time macros. In this particular
case, we can just pass the exact frame/slot information, instead of
squeezing it in a single integer.
2025-01-27 10:59:19 +01:00
Robert Schmidt 32363ccaad Remove usage of emulate_l1 flag at gNB
The usage of this flag in the L1 is simply wrong: either, the NFAPI mode
runs L1, or not. Correspondingly, add an assert to check this invariant.

In the NR_IF_module, the correct check to do is for VNF (implying no L1,
or "emulation of L1" [which is not true]), in which case we use
queues.
2025-01-27 10:59:19 +01:00
Robert Schmidt 7949b622be RACH.indication: don't check time window
Since commit defc97ec16 ("Msg2 and Msg3 at gNB: check allocation before
committing to Msg2"), the scheduler calculate Msg2/Msg3 frame/slot
before allocation of Msg2, and not when receiving Msg1. It also respects
the RA response window correctly.

Correspondingly, we don't need to calculate here if the RACH.indication
is within the time window. The scheduler will do this.
2025-01-27 10:59:19 +01:00
Robert Schmidt 16ead1d001 nr_slot_select() and set_tdd_config_nr(): remove useless second frame
FAPI says these lists should be for MAX_TDD_PERIODICITY (which is maybe
a frame, or a TDD period? but likely not two frames). Reduce to one
frame.

Also, the nFAPI code assumes one entire frame, so use that (this commit
necessary to actually make the PNF work, otherwise, the
packing/unpacking of the FAPI message would need to do 2 frames).

Closes: #876
2025-01-27 10:59:19 +01:00
Robert Schmidt e3bad16ab8 Call indication regularly
Upon reception of FAPI UL messages (e.g., RACH.indication), those
messages are put into queues, to be delivered in a single call,
NR_UL_indication(). Call the scheduler to trigger processing in UL.

Note that ideally, these queues should not exist at all, and messages
should just be delivered asynchronously, as this would lead to less
copying of messages. Currently, we fulfill the scheduler interface
instead.

Important! Trigger UL after having run DL scheduler and sent the
messages, to ensure short delay between Slot.indication, and the
response to those messages.
2025-01-27 10:59:15 +01:00
Robert Schmidt 412446077f IF module slot_indication: send message in PNF
Use this function to implement distinct behavior for monolithic or PNF:

- monolithic: run the scheduler, as normal
- PNF: send a slot indication; the VNF will send an answer which the PNF
  will handle elsewhere.

Add function declarations to make nr_ulsim compile, as NR_IF_Module.c is
part of the MAC sources. As of now, this is necessary; I think the right
way would be to take NR_IF_Module.c out of the MAC, and make this a
"glue" library that sticks L1 and L2 together, in monolithic (in VNF, in
that case, we should not link in L1, and for the PNF not the L2,
creating separate executables... Rome was not built in one day).
2025-01-27 10:59:15 +01:00
Robert Schmidt 84c69e5064 Avoid huge calloc by alloc'ing TBs independently
Prior to this this commit, the structure NR_UE_info_t is 4881632 bytes.
On some machines, e.g., one of the CI systems, this can lead to realtime
problems when doing the initial calloc() of the data structure.

Commit e586efb29d ("Enable 32 HARQ
Processes in DL, UL") introduced the real-time problems by increasing
the number of HARQ processes.

The reason NR_UE_info_t is that big is that it contains buffers for DL
HARQ data that might need to be retransmitted (the L1 is stateless, it
cannot store this for the L2). To reduce the size, dynamically allocate
the DL HARQ buffers when they are needed. This also reduces the size of
NR_UE_info_t to 15840 bytes.

Encapsulate transportBlock in byte_array and accessory functions, and
allocate in big chunks of multiple of ~32kB.

Reported-By: Cedric Roux <cedric.roux@eurecom.fr>
Fixes: e586efb29d
Closes: #875
2025-01-27 07:47:38 +01:00
Robert Schmidt 8eca2e0591 Correctly link function
ran_func_kpm.c uses cp_ba_to_str(), but it is not defined in OAI. Define
it so we can link properly, instead of relying on FlexRIC (where it was
defined).
2025-01-27 07:45:39 +01:00
Robert Schmidt febeaa7181 F1AP IDs: Add update method to fix concurrency bug
Introduce function cu_update_f1_ue_data() which does remove+add under
one lock. This fixes a concurrency bug. For instance, during
reestablishment, the CU needs to update the DU UE ID under which the UE
is identified in the DU. Previously, the CU would remove, then add the
DU UE ID info.  At the same time, the PDCP thread might look up the
information. This can lead to asserts. Use the above addmod
functionality to do the remove-add under a mutex.

Modify test to verify this works as expected.
2025-01-24 16:09:10 +01:00
Robert Schmidt ffb3354d49 Verify cu/du_add_f1_ue_data() success in stack 2025-01-24 15:39:43 +01:00
Robert Schmidt f0ab268393 Revert "F1AP IDs: Allow AddMod, fix concurrency bug"
This reverts commit 6d5e29f5ae.
2025-01-24 15:23:06 +01:00