Files
openairinterface5g/radio/fhi_72
andrewse 95c8fa468a fhi_72: Track delay processing via atomic variable
Add xran_queue_length atomic variable to count the number of messages in
oran_sync_fifo (as notifiedFIFO_t does not do this). Use this to
tolerate some double messages (e.g. excessive processing delay), but
start to skip if messages accumulate.

Prior to this change, "Detected double sync message" was printed each
time there was more than one message, which reflected the previous
behavior when using polling, but the gNB might catch up if it is only
once. The new logic ensure that we don't skip individual slots but do so
once messages start to accumulate.
2026-02-05 13:19:12 +01:00
..
2025-10-30 17:22:40 +01:00
2025-03-31 12:16:18 +02:00
2025-11-28 09:01:20 +01:00
2025-11-28 09:01:20 +01:00
2024-01-23 13:50:49 +01:00

This document describes the driver for the xran driver, implementing O-RAN FHI 7.2 interface. This is for developers; for user documentation, consider the O-RAN 7.2 tutorial instead.

The main source files and their purpose are as follows:

  • oaioran.c: definition of xran-specific callback functions.
  • oran-config.c: reading of 7.2-specific configuration and preparing xran configration.
  • oran-init.c: initialization of xran.
  • oran_isolate.c: main entry point and definition of function pointers for OAI callbacks.

The entry point for the driver library is transport_init() in oran_isolate.c. This function is concerned with setting necessary function pointers for OAI integration, and prepares xran configuration through get_xran_config(). This function reads 7.2 specific configuration and deduces some of the parameters (e.g., frequency) from OAI-provided radio configuration in openair0_config_t.

Actual xran initialization happens in oai_oran_initialize() in oran-init.c. It calls various helper function in the same file to set up DPDK memory buffer (pools). Notably, these callbacks are installed:

  • oai_xran_fh_rx_callback() through xran_5g_fronthault_config(): callback for PUSCH data; used to provide timing data.
  • oai_xran_fh_rx_prach_callback() through xran_5g_prach_req(): callback for PRACH data; not currently used and implemented in PUSCH data callback.
  • oai_physide_dl_tti_call_back() through xran_reg_physide_cb(): only used to unblock timing in oai_xran_fh_rx_callback() upon first xran call.

More detailed information about the xran callbacks can be taken from the xran documentation.

During normal operation, OAI calls into the driver through functions oran_fh_if4p5_south_in() for PUSCH/PRACH and oran_fh_if4p5_south_out() for PDSCH.

For PDSCH, oran_fh_if4p5_south_out() calls xran_fh_tx_send_slot() that optionally compresses IQ data, then writes it into IQ buffers of xran.

For PUSCH/PRACH, oran_fh_if4p5_south_in() calls xran_fh_rx_read_slot() that blocks and waits for the next slot. This is done through either a message queue, or through polling, which in both cases depends on xran calling the callback oai_xran_fh_rx_callback() as installed during xran initialization. Once unblocked, it reads first PRACH data, then PUSCH data, before returning to OAI.