ORAN 7.2 RU Guide¶
The srsRAN Project supports both split 7.2 and split 8 fronthaul interfaces to Radio Units (RUs).
Split 7.2 is an open specification published by the O-RAN Alliance aiming to ensure interoperability between different DU and RU solutions. This tutorial outlines the use of the srsRAN Project gNB (including both CU and DU) with an O-RAN RU using split 7.2 interface. For this example, we use the RAN550 RU from Benetel. A Falcon-RX/812/G switch is used to provide timing synchronization to both the DU and RU.
The split 7.2 interface is supported in srsRAN through the Open Fronthaul (OFH) Library. Developed by the SRS team, OFH is an open-source, portable library with minimal 3rd-party dependencies. It has been designed to minimize the integration and configuration burden associated with using srsRAN with 3rd-party O-RUs.
This tutorial uses the following hardware:
and the following software:
The CU/DU is provided by the srsRAN Project gNB. The Open Fronthaul (OFH) Library provides the necessary interface between the DU and the RU. The DU is connected to the Falcon switch via SFP+ fiber cable.
The Benetel RAN550 RU is used as the RU in this setup. This is a Split 7.2x indoor O-RU. The RU is connected to the Falcon-RX via SFP+ fiber cable through the main fronthaul interface.
For this example we use the Open5GS 5G Core.
Open5GS is a C-language open-source implementation for 5G Core and EPC. The following links will provide you with the information needed to download and setup Open5GS so that it is ready to use with srsRAN:
The Falcon-RX/812/G switch is a 5G xHaul timing-aware O-RAN switch & PTP grandmaster. This is used to provide timing synchronization to both the DU and RU.
Clocking & Synchronization¶
The split 7.2 interface requires tight timing synchronization between the DU and RU. O-RAN WG 4 has defined various synchronization methods for use with Open Fronthaul. These are outlined in O-RAN.WG4.CUS.0-R003-v11.00 Section 11.
In this setup we use LLS-C3. The LLS-C3 configuration enables the distribution of network timing between central sites and remote sites from PRTC/T-GM to RU. In simpler terms, it allows the synchronization of one or more PRTC/T-GM devices (serving as SYNCE+PTP masters) in the fronthaul network to transmit network timing signals to DU and RU components as seen in the figure above. In our setup the Falcon switch is acting as the PTP grandmaster (which is synchronized via GPS), providing timing to the RU and the DU. These are connected to the SFP+ 10G ports on the switch via Ethernet.
The OFH library supports all of the defined clock model and synchronization topologies defined by O-RAN WG4. The use of LLS-C3 is specific to this hardware setup.
The DU machine should have jumbo frames enabled in the NIC and the PTP process should be checked to make sure it is synchronized correctly.
To set the jumbo frames in the NIC use the following command for a temporary configuration:
ifconfig <eth0> mtu 9600 up
eth0 is the ethernet port for the SFP+ fiber cable that connects the DU to the Falcon-RX.
To start the PTP process in the DU, use the command below. The configuration file can be downloaded
./ptp4l -2 -i enp1s0f0 -f ./configs/default.cfg -m
You should then see the following output:
ptp4l[4321.966]: rms 6 max 14 freq -25784 +/- 9 delay 172 +/- 1 ptp4l[4323.091]: rms 5 max 10 freq -25778 +/- 8 delay 170 +/- 1 ptp4l[4324.216]: rms 6 max 11 freq -25781 +/- 9 delay 169 +/- 1 ptp4l[4325.341]: rms 5 max 10 freq -25783 +/- 8 delay 170 +/- 1
In the above output, the
rms value can be used to determine if the PTP sync is correct, for this we look for a value < 10.
./phc2sys -s enp1s0f0 -w -m -R 8 -f ./configs/default.cfg
You should then see the following output:
phc2sys[4348.303]: CLOCK_REALTIME phc offset -25 s2 freq +8026 delay 1467 phc2sys[4348.428]: CLOCK_REALTIME phc offset -11 s2 freq +8033 delay 1466 phc2sys[4348.553]: CLOCK_REALTIME phc offset -25 s2 freq +8016 delay 1396 phc2sys[4348.678]: CLOCK_REALTIME phc offset -5 s2 freq +8028 delay 1397
The first value here is used to determine if the PTP sync is correct, for this we look for a value < 100.
In both of the above commands
enp1s0f0 is the network interface on our DU that gets the PTP sync.
A sample configuration file for the DU can be downloaded from here.
The following excerpt shows how the DU is configured to communicate with the RU:
ru_ofh: ru_bandwidth_MHz: 100 # RU instantaneous bandwidth. t1a_max_cp_dl: 500 # Maximum T1a on Control-Plane for Downlink in microseconds. t1a_min_cp_dl: 250 # Minimum T1a on Control-Plane for Downlink in microseconds. t1a_max_cp_ul: 465 # Maximum T1a on Control-Plane for Uplink in microseconds. t1a_min_cp_ul: 250 # Minimum T1a on Control-Plane for Uplink in microseconds. t1a_max_up: 250 # Maximum T1a on User-Plane in microseconds. t1a_min_up: 80 # Minimum T1a on User-Plane in microseconds. is_prach_cp_enabled: false # Configures if Control-Plane messages should be used to receive PRACH messages. is_dl_broadcast_enabled: true # Set to true for a workaround over a firmware bug in the RAN550 when operating in SISO mode. compr_method_ul: bfp # Uplink compression method. compr_bitwidth_ul: 9 # Uplink IQ samples bitwidth after compression. compr_method_dl: bfp # Downlink compression method. compr_bitwidth_dl: 9 # Downlink IQ samples bitwidth after compression. iq_scaling: 0.27 # IQ samples scaling factor applied before compression, should be a positive value smaller than 1. cells: - network_interface: enp1s0f0 # Ethernet interface name used to communicate with the RU. ru_mac_addr: 70:b3:d5:e1:5b:06 # RU MAC address. du_mac_addr: 80:61:5f:0d:df:aa # DU MAC address. vlan_tag: 5 # VLAN tag value. prach_port_id: 4 # PRACH eAxC port value. dl_port_id: [0,1] # Downlink eAxC port values. ul_port_id: 0 # Uplink eAxC port values.
To expand on this, the following parameters are set in the
network_interface: Network interface used to send the OFH packets.
ru_mac_addr: MAC address of the RAN550.
du_mac_addr: MAC address of the interface used by the gNB (it should be connected directly to the RU or using a smart switch).
vlan_tag: V-LAN identifier, should be set to the value configured in the switch settings
The switch must be connected to an external clock source to ensure the PTP grandmaster is synchronized correctly. Once connected it is important to check that the GPS has been locked correctly and an accurate clock source is being provided. In this example a GPS reference is used.
To do this, navigate to the FalconRX configuration GUI and go to Configuration > Timing > SyncCenter and select
GPS as the
Sync Source Type. Once this is done, wait for the GPS to lock and synchronize correctly. The SyncCenter will display green once it has successfully locked to the GPS signal. This is shown in the above image.
Once the PTP grandmaster is successfully synchronized it must be configured correctly for use with the DU and RU.
First, go to Configuration > Timing > PTP and add a new PTP Clock. Select
Device Type: Master Only and
Profile: G8275.1. This is shown in the above image. After adding the
PTP clock, click on the Clock Instance that you want to edit.
Once you have selected the
Clock Instance you want to edit, set the
VLAN ID to
1588 and activate all ports that you want to serve with PTP. From now on the PTP is sent with VLAN ID 1588.
You should now save your configuration.
Next, the VLANs must be configured correctly so as to allow the DU and RU to receive the PTP sync from the grandmaster.
Go to Configuration > VLANs > Configuration to correctly configure the VLAN settings. First, set
Allowed Access VLANs: as
1,2. Next, configure the ports you want to use as
Trunk ports, set the
Port VLAN as
Egress Tagging as
Untag Port VLAN. In the
Allowed VLANs field you can set a range or specify specific VLANs. For example, here we are specifying
1,2,1588. You must include
1588 otherwise the DU and RU will not correctly
receive the PTP sync.
Refer to the Benetel User Guide documentation to apply the following configuration changes. Ensure the RU is running before trying to make any configuration changes.
MAC Address : The MAC address of the DU must be configured in the RU for Control-Plane and User-Plane traffic. In our configuration we use the same MAC address for both planes.
VLAN tag : In our setup the same VLAN ID is used for all network traffic, as only one MAC address is used.
Compression : Currently only static compression headers are supported for this setup. We use BFP9 compression for all uplink and downlink channels. Refer to the Benetel User Guide for details on how to configure compression in the RU.
Transmission Power : Depending on your setup, you may need to alter the transmission power of the RU. For example, in a lab setting with the UE in close proximity to the RU, the default power settings may result in UE saturation.
TDD pattern : The TDD pattern should be changed to 6-3 format (DDDDDDSUU).
For this setup Open5GS is used as the core, it is running in a docker.
The Open5GS 5G Core Quickstart Guide provides a comprehensive overview of how to configure Open5GS to run as a 5G Core.
To configure the core correctly the following steps need to be taken:
Configure the core to connect to the gNB, ensuring the correct AMF address for both.
Configure the PLMN and TAC values so that they are the same as those present in the gNB configuration.
Register the ISIM credentials of the UE to the list of subscribers through the Open5GS WebUI.
Initializing the Network¶
To bring up the RU simply boot it and ensure it is running correctly before attempting to connect the DU.
Check for RU synchronization and that the PTP process is running correctly.
Before running the CU/DU, make sure you have used the commands outlined in the configuration section above to confirm the PTP sync between the DU and the Falcon switch.
We can now run the CU/DU. First, navigate to srsRAN_Project/build/apps/gnb, and then run the gNB with the following command:
sudo ./gnb -c du_R550_rf.yml
If the DU connects to the RU successfully, you will see the following output:
--== srsRAN gNB (commit ) ==-- Connecting to AMF on 10.53.1.2:38412 Initializing Open Fronthaul Interface with ul_comp=[BFP,9], dl_comp=[BFP,9], prach_cp_enabled=false, downlink_broadcast=true. Operating a 20MHz cell over a RU with instantaneous bandwidth of 100MHz. Warning: Configured PRACH occasion collides with PUCCH RBs ([0..1) intersects [0..3)). Some interference between PUCCH and PRACH is expected. Warning: Configured PRACH occasion collides with PUCCH RBs ([0..1) intersects [0..3)). Some interference between PUCCH and PRACH is expected. Cell pci=1, bw=20 MHz, dl_arfcn=634548 (n78), dl_freq=3518.22 MHz, dl_ssb_arfcn=634464, ul_freq=3518.22 MHz ==== gNodeB started === Type <t> to view trace
Connecting to the Network¶
The following sections will outline two different approaches for connecting to the network. The first will show how to connect to the network using the AmariUE UE emulator from Amarisoft, the second will show how to connect using a 5G COTS UE.
For full details on configuring and connecting AmariUE to the srsRAN Project gNB see this tutorial.
Connecting to the Network¶
You can download the specific configuration used for this tutorial
Launch the UE with root permissions to create the TUN device using the following command:
The above command should start the UE emulator and attach it to the network. If UE connects successfully to the network, the following (or similar) should be displayed at the end of the console output:
Cell 0: SIB found UE PDN TUN iface requested: ue_id: ue1, pdn_id: 0, ifname: ue1-pdn0, ipv4_addr: 10.45.1.2, ipv4_dns: 184.108.40.206, ipv6_local_addr: , ipv6_dns: Created iface ue1-pdn0 with 10.45.1.2
For full details on configuring and connecting a COTS UE to the srsRAN Project gNB see this tutorial.
For this setup a OnePlus 9 5G UE was used to connect to the network. The set-up and configuration of the device is the same as in the above tutorial.
Once connected to the network you can use iPerf to generate traffic. The following console trace was taken from the gNB during bi-directional testing:
-------------DL----------------|------------------UL-------------------- pci rnti cqi mcs brate ok nok (%) | pusch mcs brate ok nok (%) bsr 1 4601 15 28 38M 1200 0 0% | 17.8 26 15M 493 107 17% 300k 1 4601 15 28 38M 1186 14 1% | 17.7 26 14M 488 112 18% 300k 1 4601 15 28 38M 1196 4 0% | 17.8 26 15M 506 94 15% 300k 1 4601 15 28 38M 1200 0 0% | 17.8 26 15M 501 99 16% 300k 1 4601 15 28 38M 1200 0 0% | 17.9 26 15M 498 102 17% 300k 1 4601 15 28 38M 1200 0 0% | 17.9 26 15M 497 103 17% 300k 1 4601 15 28 38M 1198 2 0% | 17.8 26 15M 497 103 17% 300k 1 4601 15 28 38M 1194 6 0% | 17.8 26 15M 495 105 17% 300k 1 4601 15 28 38M 1195 5 0% | 17.8 26 15M 510 89 14% 300k 1 4601 15 28 38M 1200 0 0% | 17.8 26 15M 503 98 16% 300k 1 4601 15 28 38M 1200 0 0% | 17.8 26 15M 495 105 17% 300k