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. 19.

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.