O-RAN CU-DU Split

Note

The latest version of srsRAN Project is required to implement the CU-DU split with srsRAN Project.

Overview

This tutorial outlines the steps required to configure and run the srsCU and srsDU applications, to create an E2E O-RAN compliant network with a CU-DU split. In this tutorial a USRP is used as the RF-frontend, resulting in this being a Split 8 configuration. To implement a Split 7.2x configuration, use this guide in conjunction with the RU Guide.

../../../../_images/cu_du_split.png

Hardware and Software Overview

For this application note, the following hardware and software are used:

srsRAN Project

If you have not already done so, install the latest version of srsRAN Project and all of its dependencies. This is outlined in the Installation Guide.

B210

This example uses a USRP B210, it must be connected to the PC via USB 3.0. The use of an external clock is not compulsory, but for setups where the connection is unstable or the UE struggles to connect it is recommended.

Open5GS

For this example, Open5GS is running bare metal on the host machine.

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 set-up Open5GS so that it is ready to use with srsRAN:

COTS UE

A 5G SA capable COTS UE is used for this tutorial, specifically the Xiaomi 12 5G. A detailed list of COTS UEs that have been tested with srsRAN Project can be found here.

For more information on connecting a COTS UEs to srsRAN Project, see the full tutorial.


Configuration

For the CU-DU split two configuration files are needed, one for srsCU and one for srsDU. These configuration files are explained in detail here.

Core

As previously stated, Open5GS is running bare metal for this example. No configuration changes are needed, simply register the credentials of the UE being used if you haven’t done so already. The Quickstart Guide linked above outlines how to configure the core.

srsCU

To configure srsCU, the amf, f1ap and f1u fields must be configured correctly in both the cu_cp and cu_up. The following configuration file shows the minimum requirements to configure srsCU:

cu_cp:
  amf:
    addr: 127.0.1.100                     # The address or hostname of the AMF.
    bind_addr: 127.0.1.1                  # A local IP that the gNB binds to for traffic from the AMF.
    supported_tracking_areas:             # Configure the TA associated with the CU-CP
      - tac: 7
        plmn_list:
          - plmn: "00101"
            tai_slice_support_list:
              - sst: 1
  f1ap:
    bind_addr: 127.0.10.1                 # Configure the F1AP bind address, this will enable the CU-cp to connect to the DU

cu_up:
  f1u:
    socket:                               # Define UDP/IP socket(s) for F1-U interface.
      -                                     # Socket 1
        bind_addr: 127.0.10.1                  # Sets the address that the F1-U socket will bind to.

The amf parameters are specific to the local configuration of the core. If you are running Open5GS via the docker scripts provided with srsRAN Project, your configuration will be different. The same is true if you have made any other local changes to how Open5GS has been configured.

srsDU

To configure srsDU, the f1ap and f1u parameters must be configured, as well as the ru_sdr and cell_cfg parameters. As with srsCU, the following are the minimum requirements to configure srsDU:

f1ap:
  cu_cp_addr: 127.0.10.1                    # The address of CU-CP
  bind_addr: 127.0.1.2             

f1u:
  socket:
    -
      bind_addr: 127.0.1.2

ru_sdr:
  device_driver: uhd
  device_args: type=b200,num_recv_frames=64,num_send_frames=64
  srate: 23.04
  otw_format: sc12
  tx_gain: 80
  rx_gain: 40

cell_cfg:
  dl_arfcn: 650000
  band: 78
  channel_bandwidth_MHz: 20
  common_scs: 30
  plmn: "00101"
  tac: 7
  pci: 1

In this example, the DU is configured to work with a USRP B210, and to create a 20 MHz cell. The specifics of the RU being used and the desired cell can be changed as needed. The f1ap configuration must remain constant with the associated configuration in the CU.


Running the Network

The following running order must be followed to correctly initialize the network:

  1. Open5GS

  2. srsCU

  3. srsDU

Core

If the Open5GS documentation has been followed correctly, then the core should already be running as a service in the background. If not, then start the core according to the steps in the Open5GS docs.

srsCU

First, navigate to the srsCU application folder. This can be done with the following command:

cd ~/srsRAN_Project/build/apps/cu

To run srsCU the following command can be used (assuming the srsCU configuration file is also located in the same folder):

sudo ./srscu -c cu.yml

If srsCU is running correctly, you should see the following in the console:

--== srsRAN CU (commit 2be82d8ea3) ==--

N2: Connection to AMF on 127.0.1.100:38412 completed
F1-C: Listening for new connections on 127.0.10.1:38472...
==== CU started ===
Type <h> to view help

srsDU

srsDU is run in the same way as srsCU.

First, navigate to the correct folder:

cd ~/srsRAN_Project/build/apps/du

srsDU can be run with the following command (assuming the srsDU configuration file is also located in the same folder):

sudo ./srsdu -c du.yml

If srsDU is running correctly, you will see the following in the console:

--== srsRAN DU (commit 2be82d8ea3) ==--

Lower PHY in quad executor mode.
Available radio types: uhd.
[INFO] [UHD] linux; GNU C++ version 11.4.0; Boost_107400; DPDK_23.11; UHD_4.8.0.0-64-g0dede88c
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Making USRP object with args 'type=b200,num_recv_frames=64,num_send_frames=64'
[INFO] [B200] Detected Device: B200mini
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Initialize CODEC control...
[INFO] [B200] Initialize Radio control...
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Setting master clock rate selection to 'automatic'.
[INFO] [B200] Asking for clock rate 16.000000 MHz...
[INFO] [B200] Actually got clock rate 16.000000 MHz.
[INFO] [MULTI_USRP] Setting master clock rate selection to 'manual'.
[INFO] [B200] Asking for clock rate 23.040000 MHz...
[INFO] [B200] Actually got clock rate 23.040000 MHz.
Cell pci=1, bw=20 MHz, 1T1R, dl_arfcn=650000 (n78), dl_freq=3750 MHz, dl_ssb_arfcn=649632, ul_freq=3750 MHz

F1-C: Connection to CU-CP on 127.0.10.1:38472 completed
==== DU started ===
Type <h> to view help

Connecting to the Network

Connecting the COTS UE to the network follows the same steps outlined in this tutorial. For debugging tips related to this, see both the tutorial the GitHub Discussions.

Console Outputs

The srsCU console will not display any further automatic outputs once the UE is connected; however, the usual trace and outputs associated with the “vanilla” gNB output can we seen in the srsDU console.

Typing t on the srsDU console will result in something similar to the following output once the UE has connected:

         |--------------------DL---------------------|-------------------------UL------------------------------
pci rnti | cqi  ri  mcs  brate   ok  nok  (%)  dl_bs | pusch  rsrp  mcs  brate   ok  nok  (%)    bsr     ta  phr
  1 4601 |  15 1.0   21   9.2k   11    1   8%      0 |  24.2   ovl   26    33k    8    0   0%      0   -81n    0
  1 4601 |  15 1.0   27   429k   84    0   0%      0 |  31.6 -11.5   28   221k   25    0   0%      0      0    7
  1 4601 |  15 1.0   27   686k  119    0   0%      0 |  32.7 -12.4   28   236k   44    0   0%      0   -56n   17
  1 4601 |  15 1.0   27   664k  110    0   0%      0 |  32.1 -12.8   28   353k   46    0   0%     10   -32n   16
  1 4601 |  15 1.0   27   517k   64    0   0%      0 |  33.6 -12.3   28   124k   29    0   0%    198   -40n   17
  1 4601 |  15 1.0   27    60k   36    0   0%      0 |  33.0 -11.8   28   127k   21    0   0%      0   -24n   17