Commit Graph
28435 Commits
Author SHA1 Message Date
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
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
Robert Schmidt 03b63257f2 Add documentation for nFAPI 2025-01-27 10:59:40 +01:00
Robert Schmidt 48d52fdf42 Consolidate 2 gnb-vnf configs in 1 2025-01-27 10:59:40 +01:00
Robert Schmidt 970eb04a84 Remove hardcoding of numerology in VNF
Similar to the parent commit, make the numerology in the VNF
configurable. Unlike for the PNF change, the VNF frame/slot info is in a
per-PNF connection structure to which the "oai_integration" code has no
access. So we need to hack the nfapi_vnf_p7_add_pnf() function signature
to take the numerology, to be able to save this on a per-PNF basis.

The fact that we store this on a per-PNF basis is not strictly required,
as the VNF cannot handle multiple numerologies as of now, either.
However, we might want to extend this in the future, so it seems prudent
to store this on a per-PNF basis, so that we could start handling
multiple numerologies at the L2 without the need to change the L1 or
nFAPI code itself.

Also, the numerology is not needed except for some code that deals with
timing over nFAPI. As of now, we don't use this code (nFAPI gets a
trigger every slot, as per the VNF request, see an earlier commit in
this series), but also here, let's not make the future more complicated
by storing the numerology for each PNF now (this could always be reverted).

For 4G, put numerology 0 (15kHZ SCS), which is the SCS that LTE uses.
2025-01-27 10:59:40 +01:00
Robert Schmidt 58f2f9b3d7 Remove hardcoding of numerology in PNF
Fill in the dynamically received numerology, and make the numerology at
the PNF configurable, following the changes in the parent commit.

The change for the reading is somewhat of a hack, because nFAPI, as of
now, does not really foresee to store the numerology, so we fill the
numerology during the start request, when the numerlogy has been
received in the config request, but at that time, the structure for the
time information (frame/slot) does not exist yet.
2025-01-27 10:59:40 +01:00
Robert Schmidt 3a1cd7480e Adjust slot length based on numerology for proper timing 2025-01-27 10:59:19 +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 e051c9bb0c Simplify code: no time conversion macros necessary
The next commits will modify the time macros used in the 5G nFAPI code
to handle different numerologies. As a preparation, remove all the
usages of these macros where they really don't matter (e.g., don't
convert if we don't need to).
2025-01-27 10:59:19 +01:00
Robert Schmidt 5435585b13 Remove original nfapi patch file
This file is 8y old. It does not seem to serve any purpose. Remove it.
2025-01-27 10:59:19 +01:00
Robert Schmidt d028cab7ae add header guards 2025-01-27 10:59:19 +01:00
Robert Schmidt 871311d986 config.request: handle FDD 2025-01-27 10:59:19 +01:00
Robert Schmidt 29ce2e5e7f phy_nr_slot_indication(): Remove useless code: it does nothing 2025-01-27 10:59:19 +01:00
Robert Schmidt 0659148d85 Print sfn/slot directly 2025-01-27 10:59:19 +01:00
Robert Schmidt 956ffe4751 aerial_phy_nr_slot_indication(): Remove useless code: it does nothing 2025-01-27 10:59:19 +01:00
Robert Schmidt 1337245d94 PNF: provide some logging of stats 2025-01-27 10:59:19 +01:00
Robert Schmidt 6145f02b81 Function decls to make LTE compile 2025-01-27 10:59:19 +01:00
Robert Schmidt 06a76c3bbc PNF: Deliver DL_TTI.req/TX_data.req only pairwise to L1
the L1 needs both a PDU (in TX_data.req) as well instructions for
the actual transmission (in DL_TTI.req) to encode a PDSCH message. In
nFAPI, it can happen that a DL_TTI.request message has been received
(configuring the PDSCH transmission), without the TX_data.request having
reached the PNF. The L1 assumes to have the PDU.

To avoid problems, ensure that only the pair of DL_TTI.req/TX_data.req
is delivered. Otherwise, drop either message.
2025-01-27 10:59:19 +01:00
Robert Schmidt 77837c7428 Remove unnecessary and long hexdump 2025-01-27 10:59:19 +01:00
Robert Schmidt 63159d3f87 sockaddr_in no memset 2025-01-27 10:59:19 +01:00
Rúben Soares Silva 10c5178bfb Add configuration files for nFAPI split with RFSim and 100MHz 2025-01-27 10:59:19 +01:00
Robert Schmidt dee68e6319 nFAPI: increase maximum segment size to 65000
nFAPI has a mechanism to segment messages that are too big for transport
over a given medium (see e.g. SCF 225, section 2.3.2).

The maximum segment size of 10000 makes that for larger payloads, e.g.
TX_data.request, many small segments are to be sent. This can create or
increase delays on the transport. On the other hand, the currently only
available transport mechanism, UDP, allows to transport packets of up to
almost 65535 bytes. Correspondingly, increase the maximum segment size
so that less segments are to be created, and potentially, less delay is
to be incurred.  # Please enter the commit message for your changes.
Lines starting
2025-01-27 10:59:19 +01:00
Robert Schmidt b5276bdb6d nFAPI log: cleanly separate tv_sec/tv_nsec for readability 2025-01-27 10:59:19 +01:00
Robert Schmidt 099804078e pnf_p7_slot_ind(): Fix warning and simplify (no need for slot_ahead) 2025-01-27 10:59:19 +01:00
6e210e15f1 Handle DL_TTI.request more efficiently
Same as parent.

Co-authored-by: hsum <ming-hong.hsu@eurecom.fr>
Co-authored-by: chenyi <Yi-Quan.Chen@eurecom.fr>
Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2025-01-27 10:59:19 +01:00
cba2f92c8a Handle UL_TTI.request more efficiently
Same as parent.

Co-authored-by: hsum <ming-hong.hsu@eurecom.fr>
Co-authored-by: chenyi <Yi-Quan.Chen@eurecom.fr>
Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2025-01-27 10:59:19 +01:00
282ee77104 Handle ul_dci.request more efficiently
Same as parent commit.

Co-authored-by: hsum <ming-hong.hsu@eurecom.fr>
Co-authored-by: chenyi <Yi-Quan.Chen@eurecom.fr>
Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2025-01-27 10:59:19 +01:00
10beee4fd6 Handle tx_data.request efficiently
Avoid delays in tx_data.request handling by avoiding big malloc()s and
copy operations. Reimplement function to (1) peek the frame/slot
numbers, (2) decide on buffer, and (3) unpack directly into
pre-allocated memory.

Co-authored-by: hsum <ming-hong.hsu@eurecom.fr>
Co-authored-by: chenyi <Yi-Quan.Chen@eurecom.fr>
Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2025-01-27 10:59:19 +01:00
Rúben Soares Silva 8da4e92189 Provide check_nr_nfapi_p7_slot_type()
Some messages might arrive for the wrong slot; in those cases, the
message has to be dropped. The next commits will make use of this
functionality.
2025-01-27 10:59:19 +01:00
Rúben Soares Silva d6b8fe93ab Provide peek_nr_nfapi_p7_sfn_slot() for fast msg dec
The next commits refactor the rx handling of messages in the PNF. To
efficiently handle them, provide a "peek()" function that gives us the
frame/slot for which a message is destined. This allows to decide if a
message is on time and select a destination buffer, before unpacking it
completely, avoiding copies.
2025-01-27 10:59:19 +01:00
chenyi 17e36029fa Fix PMI condition: avoid division by zero 2025-01-27 10:59:19 +01:00
Robert Schmidt a1190f9fd0 nFAPI: give more time for messages to arrive, make it work
The time that a message between PNF/VNF to arrive depends mostly on the
transport. To allow for some delays, there is a slot_ahead time, during
which the VNF is allowed to schedule and send instructions to the PNF.

This can be multiple slots; the 1ms hitherto given might typically too
short. Increase to 10ms, to encompass a wider range of slot_ahead times.

Make the corresponding log message of when old (stale) message are
removed a bit clearer with respect to times.

This is the first commit in which nFAPI works. Follow-up commits improve
performance.
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 3fcfef9006 L1 DLSCH: don't preallocate memory, improve log
The L1 receives a pointer to the L1 payload to use for PDSCH generation.
This would overwrite an existing pre-allocated pointer. Remove this
preallocation. Instead, allocate it in the simulator (the only place
that actively uses this buffer allocation; in nr-softmodem, it's lost by
assigning a pointer). Allocate with an extra byte, because the payload
(in bits) might not be a multiple of 8 bits/1 byte, so the CRC is in the
last 3 bytes.

Also, improve the log with frame/slot information if the PDSCH payload
pointer is NULL.
2025-01-27 10:59:19 +01:00
hsumandRúben Soares Silva 195b23bdc4 Refactor is_nr_p7_request_in_window function for clarity and efficiency
The function now utilizes simpler variable names and logic to determine
if a given NR P7 request falls within the timing window.

The logic for determining if a request is within the timing window is as follows:
- The function calculates the absolute difference between the current
  and received SFN slots, taking into account the possibility of
  wraparound.
- If the absolute difference is greater than half of the maximum SFN
  slot value, it subtracts this difference from the maximum SFN slot
  value to get the actual difference.
- The function then checks if this difference is less than or equal to
  the specified timing window. If it is, the request is considered to be
  within the window.

Additionally, the commit updates the function signature to return a
boolean value for better readability and consistency.

Changes made:
- Simplified variable names for readability
- Improved logic for handling wraparound scenarios
- Updated function signature to return a boolean value

Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2025-01-27 10:59:19 +01:00
Robert Schmidt 267be0afc1 Remove huge memset that is pointless 2025-01-27 10:59:19 +01:00