Commit Graph
28530 Commits
Author SHA1 Message Date
Guido Casati f73579ea41 Limit scope of NAS functions (static) 2025-01-30 15:21:39 +01:00
Guido Casati ddad26effe Refactor includes in nr_nas_msg (.c/.h) 2025-01-30 15:21:39 +01:00
Guido Casati 27ed237300 Refactor NAS 5GS message type definitions
* move defines to openair3/NAS/NR_UE/nr_nas_msg.h as they are
  only used in nr_nas_msg.c
* made naming of all message types consistent, using the same
  prefix for all
2025-01-30 15:21:39 +01:00
Guido Casati fb85ba7da3 Remove NAS/COMMON/nr_common.c and move servingNetworkName to nr_nas_msg.c
* the only function used from nr_common.c is servingNetworkName which is
  used in nr_nas_msg.c, so it was moved to the latter file and its scope
  was reduced
2025-01-30 15:21:39 +01:00
Guido Casati 03a4d8efb8 Refactor NAS 5GS (5GMM & 5GSM) structs definitions and their use
Every NAS 5GS message can have 3 different headers: (1) security protected
(2) 5GMM plain (3) 5GS plain;

According to 3GPP TS 24.501:
> 4.2 Coordination between the protocols for 5GS mobility management and 5GS session management
> A 5GS session management (5GSM) message is piggybacked in specific 5GS mobility management (5GMM) transport
> messages. To this purpose, the 5GSM messages can be transmitted in an information element in the 5GMM transport
> messages.

A PDU Session Establishment accept is a 5GSM message and as such it is contained in a 5GMM
transport message. The code in capture_pdu_session_establishment_accept_msg is reflecting this.
The message is thus expected to have: (1) Security protected 5GMM header (2) Plain 5GMM message
(3) 5GSM Payload Container (4) Plain 5GSM message.

5.4.5 of 3GPP TS 24.501: also says:

> The type of the payload is identified by the Payload container type IE and includes one of the following: a) a single 5GSM message;

Thus, a 5GSM is not the only possible payload of a NAS transport message.

This commit is focusing on the refactoring of the structs definitions and adaptation of the CMakeLists.

Based on the above:

* Move NR_NAS_defs.h to 5GS subfolder in NR_UE
* Move NAS FGS structs and definitions to NR_NAS_defs.h
* Rename mm_msg_header_t to fgmm_msg_header_t
* Remove duplicated NAS struct definitions
  (1) kept fgs_nas_message_security_header_t over security_protected_nas_5gs_msg_t
  (2) Kept fgsm_msg_header_t over fgs_sm_nas_msg_header_t
* Remove unused definitions, structs, functions in the process
2025-01-30 15:21:39 +01:00
Guido Casati c0583be24e Migrated NAS 5GS (5GMM & 5GSM) to NR folders and refactor CMakeLists.txt files
This commit is introducing the following macro changes:

(1) Migrate NAS 5GS lib files to a new 5GS subfolder in NR_UE
    and organize NAS 5GS lib messages into 5GMM and 5GSM subfolders.
    A nested CMake structure was implemented and CMakeLists.txt were
    added whenever necessary. This is effectively separating 5GS
    libraries from LTE libraries.

(2) In order to simplify the separation of 5GS libs from LTE libs,
    remaining dependencies from NAS LTE (e.g. nas_ue_task.c, ue-idx-standalone)
    were removed in the process

(3) ExtendedProtocolDiscriminator.c/.h and SpareHalfOctet.c/.h were deleted
    and affected types were replaced with simple integer types

(4) Cleanup: unused definitions and libs (e.g. LIB_5GNAS_GNB)
    were removed

(5) Update doc/Doxyfile

(6) clang-formatted the migrated files in the process

(7) Update includes of headers in affected files
2025-01-30 15:17:30 +01:00
francescomani bf238491ec fix in frame and slot for ULSCH beam allocation 2025-01-30 14:52:58 +01:00
Bartosz Podrygajlo 2ea6ac26bd Use a global "void_instruction" in imscope record thread
This avoids the issue of compare_exchange_weak always failing. The issue
was that `store()` is not equal to `exchange()`. `exchange` uses memory
copy while `store()` copies the value representation of the argument, which
is not always the same thing.
2025-01-28 16:55:53 +01:00
Bartosz Podrygajlo 30de011fa3 Add build_oai option for imscope_record 2025-01-28 16:55:42 +01:00
Bartosz Podrygajlo c520a4e295 Refactor some scope macros
Use do {} while (0) for UEdumpScopeData/gNBdumpScopeData macro
2025-01-28 16:55:32 +01:00
Bartosz Podrygajlo 2198e31187 More updates to imscope IQ recorder
- Added event parameter for recording which is reflected in the filename
 - Added event in the UE for DLSCH NACK
 - Added program name to the filename for ease of identification
 - Reworked spinlock to use atomics
2025-01-28 16:55:25 +01:00
Bartosz Podrygajlo c01adc5e00 Fix pdschRxdataF_comp scope for UE.
Correctly calculate the amount of data to be copied. Copy at correct offset.
Imporve error message in case data is insufficient.
2025-01-28 16:55:17 +01:00
Bartosz Podrygajlo ab75a7ccfb Add IQ file recording and IQ file viewer to ImScope
This commit introduces the following changes to ImScope:
 - Added the ability to record IQ data using the same mechanism as ImScope.
 - Added a new executable target `imscope_iq_file_viewer` for viewing IQ files.
 - Introduced a command line argument `--imscope-record` that enables data recording mode.
 - Refactored a lot of the scope code

Usage:
 - To record IQ data, run a modem with `--imscope-record` flag.
   The recording happens whenever a modem calls dumpScopeData, which currently is
   done only in gNB on PUSCH DTX and PUSCH CRC NOK.
   There is a limit of ~1GB of files written by the thread in a signle run to avoid
   accidentally exhausting disk space.
   If a directory `imscope-dump` is available the data will be recorded there in .imscope
   files. Otherwise files are written to the directory the modem was run. This is done so that
   the directory can be mapped in a docker container.

 - To view recorded IQ files, use the new executable `imscope_iq_file_viewer`. This can be done by running:
      ```
      ./imscope_iq_file_viewer <path_to_iq_file>
      ```
   Replace `<path_to_iq_file>` with the path to the IQ file you want to view.
2025-01-28 16:54:54 +01:00
Bartosz Podrygajlo 4b9e70b2ba Fix 2 issues causing warning when compiling headers from g++ 2025-01-28 16:53:45 +01:00
Bartosz Podrygajlo e1814f5340 Ensure execution of processSlotTX in order in NR UE
Make sure that processSlotTX is executed in slot order.
2025-01-28 11:42:38 +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
Laurent THOMAS 284b7af49c more comprehensive modulation lut table generation 2025-01-28 09:50:29 +01:00
Laurent THOMAS f272d7d1cc set correct type on qpsk modulation table 2025-01-28 09:50:29 +01:00
Laurent THOMAS c73353bed3 comprehensive dmrs reception and better cpu efficiency 2025-01-28 09:50:29 +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
vijay chadachanandGuido Casati 9cf1ce7427 Add new TDD period and bitmap configuration structs definitions (nr_common.h)
Co-authored-by: Guido Casati <guido.casati@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
Guido Casati 97a575ffeb Reviewed NFAPI tdd_period definition in nfapi_nr_tdd_table_t
* added define for NFAPI_MAX_NUM_PERIODS
* enhanced comments
2025-01-28 09:42:45 +01:00
Robert Schmidt 64a472aef1 Merge branch 'integration_2025_w04' into 'develop'
Integration: `2025.w04`

Closes #876, #896, #875, #893, and #878

See merge request oai/openairinterface5g!3226

* !3198 remove a set of compile options that don't work anyway
* !3171 Refactor SCTP Association Response Handling and E1 connection loss at CU-UP
* !3023 usrp constant and slow derive timestamp
* !3215 Remove unused code
* !3192 fix nr phy-test mode in ntn
* !3214 fix(nrLDPC_coding_t2): Miscellaneous fixes related to T2
* !3020 use ML receiver for 64 QAM UL-MIMO
* Demote error logs to debug for "PUCCH not processed"
* !3217 minor improvements in T hacks
* !3199 Add a small FAPI Hex parser utility
* !3209 Remove most of m64 type usage
* !3211 Avoid huge calloc by alloc'ing TBs independently
* !3212 F1AP IDs: Allow AddMod, fix concurrency bug
* !3152 E1 Setup enc/dec library and unit test
* !2999 Repair nFAPI in 5G
* !3210 FHI72: FDD support
* !3220 Improve RA logs
2025-01-28 07:51:30 +00: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 c7a90ed237 Merge remote-tracking branch 'origin/fhi72-fdd-mode' into integration_2025_w04 (!3210)
FHI72: FDD support

- harmonize DL/UL PRB mapping in one get_xran_prb_map() function with support
  of mixed slot and duplex mode
- do not assume TDD by default
2025-01-27 15:47:18 +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 382820dce2 Rename 5G RFsim u0 25PRB title name: it's nFAPI now 2025-01-27 15:36:30 +01:00
Robert Schmidt 3ad9a43880 pnf_nr_p7_pack_and_send_p7_message(): don't use global buffer
This function packs P7 messages. At least RX_data.indication messages
might be much bigger than the global buffer that is used here. Allocate
the buffer on the stack, and make it bigger. Do not use the global
buffer, it's simply not necessary; increasing the global tx buffer size
might have negative effects elsewhere in the code.

That change might make the function reentrant. The mutex seems to only
guards the codec config. However, leave it to not introduce any
regressions as of now.
2025-01-27 15:36:30 +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 6be898806e transform RFsim band 66 u0 test to nFAPI 2025-01-27 10:59:40 +01:00
Robert Schmidt c553173677 Modify 4x4 60MHz COTS UE test to use nFAPI
Modify the existing 4x4 60MHz USRP+COTS UE test to use nFAPI. The
throughput tests remain the same.
2025-01-27 10:59:40 +01:00