Commit Graph
892 Commits
Author SHA1 Message Date
Robert Schmidt 871311d986 config.request: handle FDD 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 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
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
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
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
Robert Schmidt 6cdea81e4a Reduce PNF nFAPI logs 2025-01-27 10:59:19 +01:00
Robert Schmidt 50aec62b40 pnf_p7_slot_ind(): don't trigger UL_tti_req twice
This is already triggered in the same function.
2025-01-27 10:59:19 +01:00
Robert Schmidt 63c1b3df03 pnf_p7_slot_ind(): avoid memleak 2025-01-27 10:59:19 +01:00
Robert Schmidt 73478ca27e pnf_p7_slot_ind(): Handle messages in FAPI 222.10.0x order 2025-01-27 10:59:19 +01:00
Robert Schmidt 70474ad130 PNF: don't send dummy data
If nothing is to be sent, nothing is to be done.
2025-01-27 10:59:19 +01:00
Robert Schmidt c7e145a471 pnf_p7_slot_ind(): needs to use TX thread time
This function applied an sf_ahead, bigger than the actual slot
indication message sending (so a message could NEVER arrive on time!).
Reduce to zero, because this is when it should arrive for us.
2025-01-27 10:59:19 +01:00
Robert Schmidt 28b60edaa2 Use posix_memalign() for pnf_p7_t creation
Some L1 functions might get a pointer to P7 structures, and use SIMD in
which case the memory access needs to be aligned.
2025-01-27 10:59:15 +01:00
Robert Schmidt 531726633a Call directly into scheduler from VNF, start immediately
The previous designs seems to do:

    loop {
      poll_ind_queue()
      if (msg)
        scheduler;

      pselect() on messages;
      handle_message {
        if slot_ind
          put_ind_queue()
      }
    }

So basically, we artificially put a queue for slot indications in the
middle, but still handle it in the same thread(!). This for some reason
results in a big slow down if the PNF runs faster.

Now, we just do pselect(), waiting for messages. We handle the slot
indication immediately (the schedule should take some microseconds),
then return to pselect().
2025-01-27 10:59:15 +01:00
Robert Schmidt 604cfe8709 Request timing every slot
This is to align with monolithic/FAPI, where we get slot indications in
each slot. In the nFAPI, this is replaced by timing information, such
that the VNF ticks automatically, and gets indications from the PNF on
early/late messages. The timing information handling is not implemented
in the present nFAPI implementation. Instead, we adopt the FAPI behavior
and send timing information in every slot, abusing it to be a slot
indication.
2025-01-27 10:43:57 +01:00
Robert Schmidt 1dd71b51e1 Properly implement PNF/VNF list find
maybe take this out
2025-01-22 18:29:55 +01:00
Robert Schmidt f4862fe23b Avoid buffer overflow: initialize for multiple PRACH FD occasions
Maybe cosmetic
2025-01-22 18:29:55 +01:00
Robert Schmidt 337faca6f5 log changes
Remove useless message bytes printing

Print message if callback missing

less newlines in log

logs
2025-01-22 15:04:46 +01:00
Robert Schmidt 39d9d32eda Merge remote-tracking branch 'origin/local-UL_INFO' into integration_2025_w02 (!3076)
Move UL_INFO structure allocation local to a rx slot processing

UL_INFO is allocated a gNB, so require mutex and obscur information
passing function to function.  Instead, make a local UL_INFO per slot,
removing the mutex and making the code easier to understand.
2025-01-13 07:46:05 +01:00
Laurent THOMASandRobert Schmidt b4bc7c96ba Move UL_INFO structure allocation local to a rx slot processing
Use UL_INFO on the stack, to simplify the code.  move in the same struct
the associated rach, pdu, crc, srs arrays that where pointed from
directly in gNB structure Keep in nfapi the existing logic that make
malloc for theses rach, pdu, crc, srs array lists

Pass only relevant fields, where appropriate.

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-01-10 18:05:58 +01:00
Robert Schmidt e2a3cde4b7 Further cleanup: define oai_exit for 4G
The parent commit cleans up and groups oai_exit in one place,
nr-softmodem-common.h. Therefore, this 5G file is included in the 4G
defs_common.h (at least it's mostly 4G), which is not nice. Instead,
define oai_exit also in 4G softmodem-common.h, and include this in
defs_common.h. Remove the cyclic inclusion of defs_common.h in
softmodem-common.h, and resolve all subsequent errors around unknown
types and extern definition mismatches.
2025-01-09 15:28:25 +01:00
Roberto Rosca be618b069e Added message-based communication between L2 and L1 regarding NTN configuration parameters 2024-12-11 13:01:50 +02:00
Jaroslava Fiedlerova fb1fe17293 Merge remote-tracking branch 'origin/aerial_24-2' into integration_2024_w49 (!3146)
Updates to match more fapi-compliant tx_data.request

The packing of PDUs as required in aerial for the Tx_data.Request wasn't
complaint with FAPI. That was fixed in Aerial 24-2. This change makes L2
pack the payloads in the way that Aerial now requires.
2024-12-06 11:52:45 +01:00
Rúben Soares Silva f733120986 Move the packing logic for TAG = 2, to reuse existing functions.
This change makes it so the fapi_nr_p7_message_pack is used to pack TX_DATA.request for Aerial, reducing the amount of repeated code.
Add the capability to pack TLVs with TAG=2 (offset from first address)

Packs the TLV.length differently according to whether or not Aerial is in use ( for Aerial TLV.length is 16-bit, for OAI is 32-bit )
2024-12-05 16:38:32 +00:00
Laurent THOMAS 279d49415f remove un-necessary global variables 2024-12-04 12:26:36 +01:00
Rúben Soares Silva f828e95155 Harmonize SFN and Slot typing with SCF standard 2024-11-29 09:15:08 +01:00
Rúben Soares Silva ebf07dfc62 Add handler to pack vendor ext SLOT.response 2024-11-29 09:15:08 +01:00
Rúben Soares Silva 28e3102858 Address memory leaks found in P7 messages handling
Add nr_fapi_p7 library to NFAPI_USER_LIB for access to utility functions

Change message handlers to use the utility functions to  copy and properly free the messages

Change the SRS handler to call the handler for the measurements instead of trying to copy to RC.gNB[0], which does not exist

Change nfapi_nr_p7_message_unpack to not allocate unneeded memory
2024-11-29 09:15:04 +01:00
Rúben Soares Silva e8fe6cefaa Avoid packing/unpacking parameters not used by Aerial 2024-11-29 09:15:04 +01:00
Rúben Soares Silva bcbf7ab975 Move functions for packing/unpacking RACH.indication
Changed parameter in unpack function to be inline with other unpack functions.
Changed nfapi_p7_allocate call to calloc to avoid dependency to NFAPI_LIB.

Added unitary test for RACH.indication( test pack/unpack, free, copy and compare )
Added constant NFAPI_NR_RACH_IND_MAX_PDU to follow constants related to other P7 messages limiting the maximum number of PDUs to use.

Removed now unneeded dependency to NFAPI_LIB and NFAPI_USER_LIB
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 08ee4cfcc5 Add utility functions for RACH.indication.
Extra utility function to calculate allocated memory added.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 3fc784cda5 Move functions for packing/unpacking SRS.indication
Changed parameter in unpack_nr_srs_indication to void * to be inline with other unpack procedures.
Added memory allocation for pdu_list inside unpack function.

Add unitary test for SRS.indication( test pack/unpack, free, copy and compare )
Added rands16 to provide random int16_t values, needed for SRS.indication unitary test
Added constant NFAPI_NR_SRS_IND_MAX_PDU to follow constants related to other P7 messages limiting the maximum number of PDUs to use.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 7be347f04d Add utility functions related to SRS.indication.
This adds the equality, free and copy functions for SRS.indication message as described in the Table 3–129 of SCF222.10.04, it does not add the functions for the report type structures, as these are always sent/received inside the uint32_t array.
The utility functions for these will be added at a later commit, and subsequently tested in the upcoming unitary test for SRS.indication.
Extra utility function to calculate allocated memory added.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 91a75fe453 Fix pack/unpack of SRS Report TLV value.
Since report_tlv->length is in bytes, and the value is an array of uint32_t, the number of uint32_t to be pushed/pulled is (length + 3) /4.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 36f65160fd Fix pack/unpack of SRS beamforming report.
Fixes the pack/unpack functions to allow multiple reported symbols, instead of just one.
Applied clang-format to both functions.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva c905655b4e Cleanup normalized_channel_iq_matrix.
Apply clang-format to pack/unpack procedures.
Add comments to improve readability of iqSize usage.
Fix unpacking return value to not return 0 on success.
2024-11-29 09:15:04 +01:00
Rúben Soares Silva 1160be3ffe Add pack/unpack for missing SRS Report.
Adds the packing/unpacking procedures for Channel SVD Representation ( Table 3-133 ).
2024-11-29 09:15:04 +01:00
Rúben Soares Silva e10693939d Add missing SRS Report type struct.
Adds the structure for Channel SVD Representation ( Table 3-133 ), a missing report type for the SRS.indication message.
2024-11-29 09:15:03 +01:00
Rúben Soares Silva 6a34439c86 Fix SRS beamforming_report reported symbol list.
Renames nfapi_nr_srs_reported_symbol_t prgs into *reported_symbol_list for two reasons:
  So that the name is more representative of what the parameter represents.
  For it to actually be a list, and not assume only 1 reported symbol is used.

Allocate reported_symbol_list in unpack_nr_srs_beamforming_report.

Updated all references to prior prgs to point to the first position of reported_symbol_list, still only effectively using the first reported_symbol.

Rename fill_srs_reported_symbol_list into fill_srs_reported_symbol and update input parameter name, since it only fills the information related to one reported symbol
2024-11-29 09:15:03 +01:00