Commit Graph
360 Commits
Author SHA1 Message Date
Jaroslava Fiedlerova 6a725d6e4e Merge remote-tracking branch 'origin/oran_beamforming_static_weights' into integration_2026_w13 (!3681)
Configure DigitalBeamTable in OAI and pass down to Aerial L1

With this MR it will be possible to define a Beamtable in OAI and pass it down
to a L1 (Aerial or OAI) which then will either use them locally to apply
static beamforming (Split 8 with USRP) or pass them down to the RU using 7.2
split with Section Extension 1.
2026-03-26 13:45:23 +01:00
Gabriele Gemmi b4a3440128 Pack and send DBT to Aerial 2026-03-25 14:17:55 +00:00
Robert Schmidt 4c9b7ec679 increase priority of Aerial thread 2026-03-10 13:28:30 +01:00
Robert Schmidt 357496a88a Merge remote-tracking branch 'origin/Change_nvIPC_send_functions' into integration_2026_w06 (!3882)
Change Aerial to pack directly in nvIPC message buffer

This MR changes the Aerial pack/send procedures to pack the messages
directly into the nvIPC message buffers.

This saves the use of some memcopy calls, as well as clean up the code.

The P7 message packing/send is now only handled in the file
`fapi_nv_p7.c`

Add 3 functions in fapi_nvIPC.c to allow message allocation, release and
send from fapi_vnf_p7.c

Add 2 functions to access the memory pool sizes allocated from nvIPC, as
we can't use sizeof to report the buffer size to the packing functions

Remove now unused aerial_send_P5_msg , aerial_send_P7_msg and
aerial_send_P7_msg_with_data functions

Now Aerial only has one function to handle sending P5 and another to
send P7 messages

Remove fapi_phy_api_msg from fapi_nvIPC.h as it is duplicated in
nr_fapi.h
2026-02-04 12:12:47 +01:00
Rúben Soares Silva b7867a4053 Change data_len type in aerial_pack_tx_data_request to match with nv_ipc_msg_t.data_len type 2026-02-03 10:20:45 +00:00
Rúben Soares Silva 54076927ba Remove duplicated FAPI header struct from fapi_nvIPC.h 2026-02-03 10:20:45 +00:00
Rúben Soares Silva aeba59a9ad Change Aerial to pack directly in nvIPC message buffer.
Get mempool sizes from nvIPC for usage in the packing procedures.

Remove now unused functions.
2026-02-03 10:20:45 +00:00
Robert Schmidt a0ff4828cf Merge remote-tracking branch 'origin/prevent-p7-msg-after-stop-indication' into integration_2026_w05 (!3880)
Prevent the PNF from sending P7 messages after sending a STOP.indication

Upon stopping the PNF, when sending the STOP.indication to the VNF, set
pnf_p7->terminate to 1.

Add a check on the PNF P7 send functions to not send a message after
pnf_p7->terminate is set.

This prevents the PNF from sending SLOT.indications after stopping,
which sometimes was causing the VNF to process a SLOT.indication after
it had received the indication to STOP.

Also, this MR adds a sanity check on the VNF P7 message handler to
ignore any P7 messages it receives after having it's own terminate flag
set to 1

This MR closes issue #1045
2026-01-29 17:22:15 +01:00
Rúben Soares Silva f76e530f90 Prevent the PNF from sending P7 messages after sending a STOP.indication
Upon stopping the PNF, when sending the STOP.indication to the VNF, set pnf_p7->terminate to 1.

Add a check on the PNF P7 send functions to not send a message after pnf_p7->terminate is set
2026-01-28 16:08:03 +00:00
Laurent THOMAS 5b0d34c3ad semi-manual remove of not used #define commands. I let the unused defintions that come from standard bodies 2026-01-27 13:23:10 +01:00
Rúben Soares Silva d28ae49eee Fix FAPI WLS slot.indication slot ahead
Current FAPI slot_ahead value for WLS is too low for UL, as we see these
errors:

    [NR_MAC] Unexpected ULSCH HARQ PID 14 (have 3) for RNTI 0xa68e
    [NR_MAC] UE a68e expected HARQ pid 3 feedback at  586. 7, but is at  587.17 instead (HARQ feedback is in the past)

Similarly to nFAPI, scale it by mu (for mu=1 => slot_ahead=2) to give
additional time, which removes these warnings at the VNF.
2025-12-03 12:33:47 +01:00
Jaroslava Fiedlerova 0226510c4a Merge remote-tracking branch 'origin/fapi-stop-exchange' into integration_2025_w48 (!3561)
Implementation of STOP exchange

This implements the STOP.request/indication for all 3 transport mechanisms, the
VNF will send the STOP.request to the PNF, indicating it will disconnect, and
await a STOP.indication from the PNF

The WLS VNF is reworked to be able to start before the PNF, by calling call
rte_eal_init and rte_dev_probe to determine if dpdk has been initialized
properly, before calling rte_eal_init in the intended process when it is
appropriate to do so
2025-11-27 15:01:39 +01:00
Robert Schmidt aa3f01b677 Delete dead code 2025-11-14 18:17:30 +01:00
Robert Schmidt c8fba9964f Remove dead code 2025-11-14 18:17:30 +01:00
Robert Schmidt 5ac381dd59 Remove dead code 2025-11-14 18:17:29 +01:00
Robert Schmidt eefb9da69a Reimplement nFAPI message exchange after msgDataTx removal
Reimplement nFAPI message exchange between L1 and L2 following the
changes in parent commit removing msgDataTx.

Avoid direct calls and use NR_IF_module fptrs to avoid linking problems.
allowing to remove some function definitions that are not needed.
2025-11-14 18:16:02 +01:00
Robert Schmidt 8d2a5c6fd6 First slot indication makes no sense: tx thread should trigger 2025-11-14 12:25:05 +01:00
Rúben Soares Silva e08d904af0 Implementation of STOP exchange
This implements the STOP.request/indication for all 3 transport mechanisms, the VNF will send the STOP.request to the PNF, indicating it will disconnect, and await a STOP.indication from the PNF

The WLS VNF is reworked to be able to start before the PNF, by calling call rte_eal_init and rte_dev_probe to determine if dpdk has been initialized properly, before calling rte_eal_init in the intended process when it is appropriate to do so
2025-10-23 14:08:37 +01:00
Rúben Soares Silva 3247c2933f Rework WLS VNF to be able to start before the PNF
The WLS VNF is reworked to be able to start before the PNF, by calling call rte_eal_init and rte_dev_probe to determine if dpdk has been initialized properly, before calling rte_eal_init in the intended process when it is appropriate to do so
2025-10-23 14:08:37 +01:00
Rúben Soares Silva 244819c627 Allocate VNF_info directly in config instead of global variable
This allows access to the VNF configuration in the various transport mechanisms straight from config, without this, the transport specific thread would cause a segmentation fault when trying to access the pack/unpack function pointers.
Add 2 functions to access the P5 and P7 VNF structures, to avoid having to always cast user_data and p7_vnfs
2025-10-23 08:45:24 +01:00
Robert Schmidt 2ff949a16f Correct dependencies onto logging module
These libraries depend on the logging module, so add the right
dependency log_headers. Indirectly, this will fulfill the condition of
T. I consider the prior usage of generate_T or {T_LIB} incorrect,
because basically none of these libraries actually, actively use T, but
rather only the logging module, which pulls in T.  The dependency of
log_headers will also take care of generating and including T headers,
which is a dependency of the logging module.

For conf2uedata and related, fulfill the dependency
through conf2uedata_lib (on which the rest depends).
2025-09-29 09:04:02 +02:00
Laurent THOMAS 278d2cbca1 fix several not tested malloc or calloc return value 2025-09-09 18:04:26 +02:00
Laurent THOMAS 13f5c258ca remove unused global 2025-08-20 09:36:48 +02:00
Rúben Soares Silva d74c620956 Set PNF slot_ahead to 1 when using WLS as the transport mechanism 2025-07-15 13:00:03 +01:00
Rúben Soares Silva 1026b8121f Add VNF callback for ERROR.indication
Created a function nr_error_ind_cb for the VNF that takes a received ERROR.indication and shows some details regarding the reported error from the PNF, since up until now it was not handled and treated as an unknown message.
Proper error handling procedure not created, only shows that the error occurred.
2025-07-11 10:01:26 +01:00
Rúben Soares Silva b8a176e38f Use existing VNF functions for P7 messages
Remove duplicated functions in fapi_vnf_p7.c, leaving only functions for messages that require usage of the secondaty data_buf for unpacking

Move vnf_info struct declaration to nfapi_vnf.h to be available in fapi_nvIPC.c
2025-07-11 10:01:26 +01:00
Rúben Soares Silva 0c21807df9 Change Aerial VNF to use existing functions to process P5 messages
Remove fapi_vnf_p5.c and .h files as they're now unused

Move scheduler functions to fapi_nvIPC.c
2025-07-11 10:01:26 +01:00
Rúben Soares Silva a340d08bd2 Initial refactoring for P5 messages in Aerial VNF 2025-07-11 10:01:26 +01:00
Rúben Soares Silva 6d05d279b0 Implementation of VNF using WLS as message transport
Add check to vnf_nr_handle_param_response for when phy_info is not found

The WLS VNF is in charge of Enqueueing the used blocks after usage for transport, this is done by keeping track of all blocks used, and calling WLS_Enqueue for all of them upon receiving a SLOT.indication
2025-07-11 10:01:26 +01:00
Rúben Soares Silva 3d34917626 Implementation of PNF using WLS as message transport
The common library exposes functions for the PNF to return the received blocks to the VNF for it to call WLS_Enqueue on them.
This is done in order to ensure the Blocks are returned after processing, also preventing the Dequeueing of blocks that are still being used, i.e. the internal value is not -1
All saved blocks are to be enqueued at the reception of a SLOT.indication by the VNF

Additionally, the definition of NFAPI_MAX_PACKED_MESSAGE_SIZE was moved to nfapi_interface.h and removed from the other headers, this is done to allow to set the maximum message size when using WLS by only changing the value in one place

Fixup fapi_nr_message_header_unpack call in nfapi_hex_parser
2025-07-11 10:01:26 +01:00
Rúben Soares Silva 9b71f1d324 Separate VNF socket send functions into separate socket library 2025-07-08 16:42:34 +01:00
Rúben Soares Silva bfaec58ca5 Separate PNF socket send functions into separate socket library 2025-06-27 09:56:46 +01:00
Rúben Soares Silva ca940e62f9 Add default PNF timing_info value for when the TLV is not sent
Intended to allow FAPI PNF to work without this nFAPI TLV being sent
2025-06-26 16:57:08 +01:00
Rúben Soares Silva 471b563ac7 Add send function pointers to PNF 2025-06-26 16:57:08 +01:00
Rúben Soares Silva 52a0ceac04 Add send function pointers to VNF 2025-06-26 16:57:08 +01:00
Rúben Soares Silva 2089655a97 Change VNF to use functions pointers to pack/unpack messages.
Adds 3 new function pointers to the P5 and P7 VNF structures, allowing to configure which function to use to pack/unpack the messages, as well as unpack the message header, being then used seamlessly regardless of using the FAPI or nFAPI functions.
2025-06-26 16:57:08 +01:00
Rúben Soares Silva 00b5eba192 Change PNF to use functions pointers to pack/unpack messages.
Adds 3 new function pointers to the P5 and P7 PNF structures, allowing to configure which function to use to pack/unpack the messages, as well as unpack the message header, being then used seamlessly regardless of using the FAPI or nFAPI functions.

Changes the header unpack and message unpack functions to return true on success and false on failure, instead of an int
2025-06-26 16:57:08 +01:00
Jaroslava Fiedlerova 90bdcaafb5 Merge remote-tracking branch 'origin/Aerial_srs_unpack_fix' into integration_2025_w13 (!3295)
Fix SRS report TLV unpack

Changes the SRS unpacking to not expect padding to be present in the buffer when
working with Aerial, with which the report TLVs are not padded to the nearest
32-bit boundary. This issue was found when using a UE with 1 SRS port, which
causes the TLV to not have a length divisible by 4. Also adds a function to pull
X amount of bytes into a uint32_t, which is used to process the last 4 byte
block of the TLV, only pulling the bytes which are not padding. Completed the
SRS.indication dumping procedure to print out the report TLV. Changed the
SRS.indication unitary test to fill the last 4 byte block of the report TLV
appropriately according to the length ( which ensures the padding bytes are set
to 0 )
2025-03-31 20:06:08 +02:00
Rúben Soares Silva d9e3725a21 Unpack SRS report TLV not expecting padding to be present
Add a function pullx32 to pull x amount of bytes into uint32_t
Change the unpacking to pull only the needed bytes, and skip over the padding, when not Aerial
Change SRS.indication dumping function to also print the report TLV contents
Change SRS.indication unitary test to fill the last 4 byte block of the report TLV according to the length, with padding
2025-03-31 10:15:08 +01:00
francescomani 38fe30baab improvements for NFAPI compilation for the UE 2025-03-26 11:30:53 +01:00
francescomani d8911ff19d use slot type for slots in NR 2025-03-04 18:04:12 +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 d028cab7ae add header guards 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
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