Software-defined End-to-End 5G Network#

In this tutorial, we will show how the entire end-to-end 5G network can be simulated using software defined user equipment (UE). This allows for the evaluation of novel — non-standard compliant — algorithms and protocols. Such a setup enables you to test and prototype two-sided network functions such as AI/ML-based CSI feedback compression or even custom constellations for pilotless communications.

Ensure that you have already built the UE container oai-nr-ue (see OpenAirInterface Setup).

Note

For end-to-end RF experiments, this tutorial requires a second Jetson device with another USRP connected to it. Alternatively, you can use two USRPs connected to the same Jetson. However, end-to-end simulations can be done by using OAI’s rfsimulator mode. In this mode, the UE is connected to the gNB via a simulated RF interface.

Run the gNB#

Before connecting the UE, the gNB needs to be ready to connect.

# start the gNB with USRP connected
./scripts/start_system.sh b200

# or start the gNB in rfsimulator mode
./scripts/start_system.sh rfsim

Check that the gNB is running correctly

docker logs -f oai-gnb

During the initialization procedure, the gNB provides the required UE parameters

136387.122571 [PHY] A (nr_common_signal_proced:92) Command line parameters for OAI UE: -C 3319680000 -r 106 --numerology 1 --ssb 516

These parameters depend on the choice of the configuration file of the gNB.

Run the UE#

Set the above UE parameters as UE_EXTRA_OPTIONS in the .env file in the corresponding config directory. For the above example with 106 PRBs, the UE_EXTRA_OPTIONS should be

UE_EXTRA_OPTIONS=-r 106 --numerology 1 -C 3319680000

For RF based experiments, we recommend to use the 24 or 51 PRB configurations.

Also set the USRP_SERIAL_UE to the serial number of the USRP connected to the UE. For cable-based experiments, the two USRPs must be connected as shown in Fig. 17.

Instead of using a real sim-card the UE can be configured via the config/common/nrue.uicc.conf file. In case you modify the IMSI, ensure it is registered in the oai_db.sql. Otherwise, the UE will not be recognized by the 5G core network.

Note that the start_system.sh script will automatically start the UE when the gNB is running. Otherwise, you can start the UE with

# load environment variables
set -a
source config/b200/.env
set +a

# start the UE container
cd config/common/
docker compose up -d oai-nr-ue

# and shutdown the UE
docker compose stop oai-nr-ue

For RF experiments, this needs to be done on the second Jetson device.

Verify that the UE is running correctly

docker logs -f oai-nr-ue

You should now see the UE connected to the gNB.

Test performance#

Verify that an IP address was assigned

docker exec -ti oai-nr-ue ifconfig

This should show a network interface with IP 12.1.1.2.

Ping an external network

docker exec -ti oai-nr-ue ping -I oaitun_ue1 google.com

You can access the current UE stats via

docker exec -ti oai-nr-ue cat nrL1_UE_stats-0.log

Or run an end-to-end speed test via

docker exec -d oai-ext-dn iperf3 -s

# Running uplink test (UE to gNB)
docker exec -ti oai-nr-ue iperf3 -u -t 10 -i 1 -b 5M -B 12.1.1.2 -c 192.168.72.135

# Running downlink test (gNB to UE)
docker exec -ti oai-nr-ue iperf3 -u -t 10 -i 1 -b 5M -B 12.1.1.2 -c 192.168.72.135 -R

You can now also run multiple UEs by adding more instances of oai-nr-ue in the docker-compose.yaml file to simulate a multi-user scenario.

Testing in RF Simulator Mode#

The OpenAirInterface (OAI) RF simulator enables testing without access to physical radio hardware. This tutorial summarizes the basic usage for the RF simulator. For further details, see the following resources:

Basic Configuration#

When launching the gNB container, include these parameters in the USE_ADDITIONAL_OPTIONS parameter of the docker-compose.yaml file:

--rfsimulator.options chanmod
--telnetsrv

On the UE side, activate the RF-Simulator with these parameters:

--rfsimulator.options chanmod
--rfsimulator.serveraddr 192.168.71.140 # <gNB_IP_ADDRESS>

You can find an example configuration file in the config/rfsim folder.

Dynamic Re-configuration#

The RF simulator supports runtime configuration through Telnet. See Telnet Usage Guide for details.

To control the downlink channel (on the UE):

# Connect to UE
telnet 192.168.71.150 9090

# View current settings
channelmod show current

# View available profiles
channelmod show predef

# Set noise power
channelmod modify 0 noise_power_dB -10

To control the uplink channel (on the gNB), connect to gNB and configure uplink:

# Connect to gNB
telnet 192.168.71.140 9090

# Set noise power
channelmod modify 1 noise_power_dB -10

Note

Changes take effect immediately. No restart is required.