docs(architecture): use inline code formatting with backticks

- To improve readability
This commit is contained in:
Shubhika Garg
2026-01-22 10:54:43 +01:00
committed by Shubhika Garg
parent 34d3b5d386
commit ed2acc135c
2 changed files with 27 additions and 29 deletions
+25 -27
View File
@@ -10,12 +10,12 @@ To read more about the transport mechanisms available, and how to run the split,
# VNF/PNF Split
The gNB is split into VNF(L2+) and PNF(L1)
The gNB is split into VNF (L2+) and PNF (L1)
These component are configured via the functions:
- configure_nr_nfapi_vnf()
- configure_nr_nfapi_pnf()
- `configure_nr_nfapi_vnf()`
- `configure_nr_nfapi_pnf()`
These functions initialize the configuration appropriate for the transport mechanism selected ( setting the
pack/unpack function pointers, as well as the appropriate send functions )
@@ -25,7 +25,7 @@ After this, a thread is created for the P5 receive loop, which initializes the t
This created thread may be only for P5 messages, or P5 and P7, depending on the transport type
- When using socket-based communication (which uses nFAPI encoding), the receiving loop for P7 messages is separate from
P5, it starts upon the PNF_START exchange
P5, it starts upon the `PNF_START` exchange
- In the other transport mechanisms (WLS and nvIPC, which use FAPI encoding), the receiving loop is the same for P5 and
P7 messages, the P7 configuration is done immediately after the P5 configuration.
@@ -40,8 +40,8 @@ them
Upon the reception of a message (whether in its entirety or segmented in the case of nFAPI), the messages are sent to
the appropriate handler:
- pnf_nr_handle_p5_message
- vnf_nr_handle_p4_p5_message
- `pnf_nr_handle_p5_message`
- `vnf_nr_handle_p4_p5_message`
In each of these functions, there's a switch calling the appropriate handler according to the message ID, for example:
@@ -59,13 +59,13 @@ These loops are autonomous in their thread waiting incoming message.
In this case, when the P5 interface receives appropriate message, it starts the p7 interface by launching a thread
- On the PNF, this is done in the START.request handler ( nr_start_request(...) )
- On the VNF, this is done in ( configure_nr_p7_vnf(...) )
- On the PNF, this is done in the START.request handler ( `nr_start_request(...)` )
- On the VNF, this is done in ( `configure_nr_p7_vnf(...)` )
Much in the same way as when processing P5 messages, the following functions are called to unpack and process them:
- pnf_nr_handle_p7_message
- vnf_nr_handle_p7_message
- `pnf_nr_handle_p7_message`
- `vnf_nr_handle_p7_message`
```
case NFAPI_NR_PHY_MSG_TYPE_SLOT_INDICATION:
@@ -76,11 +76,11 @@ case NFAPI_NR_PHY_MSG_TYPE_SLOT_INDICATION:
## P7 UL transmission by PNF
RF samples are received, and decoding is done by the PNF using control data transmitted by the VNF to the PNF through
downlink p7 messages (UL_TTI.request and UL_DCI.request).
downlink p7 messages (`UL_TTI.request` and `UL_DCI.request`).
After decoding, results are accumulated into the gNB->UL_INFO structure at the PNF.
After decoding, results are accumulated into the `gNB->UL_INFO` structure at the PNF.
The data in the UL_INFO struct is transmitted through the configured send function pointer (send_p7_msg), which packs
The data in the UL_INFO struct is transmitted through the configured send function pointer (`send_p7_msg`), which packs
the message into a buffer according to the encoding and sends it to the VNF
```
@@ -122,7 +122,7 @@ int nfapi_pnf_p7_nr_rach_ind(nfapi_pnf_p7_config_t* config, nfapi_nr_rach_indica
Through the P7 reception loop, the VNF receives a buffer containing the messages, which it handles by the following
process:
- Unpack the header by use of the hdr_unpack_func function pointer
- Unpack the header by use of the `hdr_unpack_func` function pointer
- According to the Message ID in the header, send the buffer to the appropriate handler by use of a switch statement:
```
@@ -132,7 +132,7 @@ process:
```
- In the handler function, unpack the entire message, by using the unpack_func function pointer.
- In the handler function, unpack the entire message, by using the `unpack_func` function pointer.
- If the unpack procedure is successful, call the previously configure callback for that message type:
```
@@ -154,20 +154,18 @@ process:
```
vnf_nr_dispatch_p7_message() is the function that contains the switch on various message headers so that the appropriate
`vnf_nr_dispatch_p7_message()` is the function that contains the switch on various message headers so that the appropriate
unpack function is called.
## P7 DL Transmission by VNF
DL messages are scheduled at the VNF, through gNB_dlsch_ulsch_scheduler(). gNB_dlsch_ulsch_scheduler() is called when
handling a SLOT.indication message in phy_nr_slot_indication().
DL messages are scheduled at the VNF, through `gNB_dlsch_ulsch_scheduler()`. `gNB_dlsch_ulsch_scheduler()` is called when
handling a SLOT.indication message in `phy_nr_slot_indication()`.
The function phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *slot_ind) calls the functions oai_nfapi_[DL P7 msg]_
req(), calling in turn call the send_p7_msg function pointer, which contain the logic to pack the message into a buffer
and send it to the PNF.
Finally, NR_UL_indication is called to process the other P7 messages received from the PNF that were put in theire
The function `phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *slot_ind)` calls the functions `oai_nfapi_[DL P7 msg]_req()`, calling in turn call the send_p7_msg function pointer, which contain the logic to pack the message into a buffer and send it to the PNF.
Finally, `NR_UL_indication` is called to process the other P7 messages received from the PNF that were put in their
respective queues.
For example, the TX_DATA.request message is sent in the following manner:
For example, the `TX_DATA.request` message is sent in the following manner:
```
if (g_sched_resp.TX_req.Number_of_PDUs > 0)
@@ -222,13 +220,13 @@ graph TD
## P7 DL Reception at PNF
Through the infinite loop [while(pnf_p7->terminate == 0)] running in pnf_nr_p7_message_pump(), the PNF receives and
Through the infinite loop `[while(pnf_p7->terminate == 0)]` running in `pnf_nr_p7_message_pump()`, the PNF receives and
unpacks the downlink P7 message received on its socket. Based on the unpacked message, the appropriate message
structures are filled in the PNF, and these are used further down the pipeline for processing.
Through the P7 reception loop, the PNF receives a buffer containing a P7 message from the VNF, which it processes the
following way:
- Unpack the header by use of the hdr_unpack_func function pointer
- Unpack the header by use of the `hdr_unpack_func` function pointer
- According to the Message ID in the header, send the buffer to the appropriate handler by use of a switch statement:
```
@@ -258,8 +256,8 @@ following way:
```
- The messages are later processed in the NR_slot_indication function, which is called in the tx_func function (
L1_tx_thread )
- The messages are later processed in the `NR_slot_indication` function, which is called in the `tx_func` function
`(L1_tx_thread )`
## PNF functional flowchart
+2 -2
View File
@@ -96,8 +96,8 @@ time_management = {
```
### RF simulator CU/DU "IQ samples time"
Let's suppose the CU runs on a machine with IP address 1.2.3.4 and the DU
runs on a machine with IP address 10.11.12.13.
Let's suppose the CU runs on a machine with IP address `1.2.3.4` and the DU
runs on a machine with IP address `10.11.12.13`.
The DU has the time source and so is the server. The CU acts as a client.