mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
Add an O-RU centered fronthaul library that includes components from the fronthaul directory. Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org> and assisted-by Gemini
Fronthaul Library
Fronthaul stack for 7.2x split using DPDK. Currently supports O-RU only; O-DU support is not implemented.
Architecture overview
Software component diagram
graph TD
O-RU
subgraph integration ["Fronthaul API"]
oru_fh["oru_fh"]
end
subgraph internals ["O-RU fronthaul internals"]
oru_io["oru_io"]
oru_pkt["oru_packet_processor"]
end
subgraph fronthaul_core ["Fronthaul Core (core/)"]
direction LR
fh_rx["fh_recv (RX)"]
fh_tx["fh_send (TX)"]
fh_timer["fh_timer (Clock)"]
fh_rx --> fh_tx
fh_tx --> fh_timer
end
subgraph protocol ["Protocol Layer (xran_pkt/)"]
xran_api["xran_pkt_api"]
end
dpdk[("DPDK / NIC")]
O-RU --> oru_fh
oru_fh --> oru_pkt
oru_fh --> oru_io
oru_io --> oru_pkt
oru_io --> fh_rx
oru_io --> fh_tx
oru_pkt --> xran_api
fh_rx --> xran_api
fh_tx --> xran_api
fh_rx --> dpdk
fh_tx --> dpdk
fh_timer --> dpdk
Threading
The library uses a simplified threading model designed for low-latency synchronization:
- Single Worker Thread: A single worker thread (pinned to
rx_core) handles both packet reception and timing. Thefh_timeris driven by atick()function called within the RX poll loop. This ensures that timing events are processed with minimal context-switching overhead. - Immediate Transmission: Packet transmission happens immediately when the application calls the send function.
Sequence Diagram
sequenceDiagram
participant HW as Hardware / NIC
participant FW as Fronthaul Worker (lcore)
participant PP as Packet Processor
participant DL as DL App Threads (Multi)
participant UL as UL App Threads (Multi)
Note over FW: Continuous Loop (fh_recv_run)
FW->>HW: Poll for Packets
HW-->>FW: eCPRI Packets (C/U-Plane)
FW->>PP: handle_packet()
alt [All IQ Samples Received]
PP-->>DL: Enqueue Job (Multi-Consumer Ring)
end
FW->>FW: fh_timer_tick()
FW->>PP: handle_symbol_tick()
alt [Window Expired (Handling Missing Packets)]
PP-->>DL: Enqueue Job (Multi-Consumer Ring)
end
Note over DL: Parallel consumption of DL IQ data
DL->>PP: read_dl_iq()
PP-->>DL: IQ Data (Blocking MC Dequeue)
Note over UL: Parallel production of UL packets
UL->>PP: write_ul_iq()
PP->>HW: send_mbuf() (Direct Parallel TX)
Note over HW,FW: rte_spinlock ensures thread-safe TX burst
Core API (oru_fh.h)
oru_fh_init: Initializes DPDK EAL, configures ports, and sets up memory pools based on PRB requirements.oru_fh_start: Launches the worker thread and starts the fronthaul processing loop.oru_fh_stop: Gracefully stops the worker thread and releases resources.oru_fh_tx_read_symbol: Intended for reading UPlane data for a specific slot/symbol in a synchronized manner.oru_fh_rx_send_pusch/prach: Sends IQ via UPlane to DU
Configuration
See oru_fh_config_t for details
Tools
Packet Dissector - xran_pcap_dump
A tool used to verify that packets are correctly formed. It reads PCAP files and dissects them using the xran_pkt
library to ensure compatibility with O-RU/O-DU implementations.