How to setup an OAI-based O-RAN deployment with a basic monitoring xApp and an advanced xApp that manages GBR SLA
OpenAirInterface (OAI) is a 3GPP-compliant software implementation of the full 5G NR stack. In this tutorial, we show how OpenRAN Gym users can get started with deploying an OAI 5G NR SA network composed of a gNB and a few UEs on Colosseum. Additionally, this tutorial shows how to deploy a nRT-RIC and an xApp developed to manage Guaranteed Bit Rate (GBR) Service Level Agreements (SLAs) of the RAN UEs.
More details in this paper:
E. Moro, M. Polese, A. Capone, T. Melodia, "An Open RAN Framework for the Dynamic Control of 5G Service Level Agreements," in Proceedings of IEEE NFV-SDN, Dresden, Germany, November 2023. [pdf] [bibtex]
Please consider citing the paper above if you use the O-RAN-compliant OAI gNB, the xApp SDK and the custom E2SM definitions in your research.
The basic repository for this project can be found here. It contains submodules that point to the different projects that are relevant to this tutorial.
Please make a Colosseum reservation with the following images (credentials are root/pass for all):
oai-core-gbr for the core networkoai-ran-gbr for both the gNB and the UEs (at least 3 UEs are suggested)nrt-ric-gbr for the nRT-RIC and the xAppOnce the reservation is ready, start the core network in the oai-core SRN:
./start_core.shThen start the near-RT RIC in the oai-ric SRN:
start-ric.shand take note of the IP address of the SRN:
ifconfig col0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'You can check if all the ric components are running by using the command docker ps, whose result should be this:
e2term:ricindi
e2mgr:latest
e2rtmansim:latest
dbaas:latest
xapp:latestStart the gNB in the oai-ran-gbr SRN:
./run_gnb.sh -t donorIn the same SRN, start the e2term:
./run_e2sim.sh RIC_IP RIC_PORTwhere RIC_IP is the col0 IP address you have previously found, and RIC_PORT is the default 36422. The E2 Agent of the gNB is successfully connected with the RIC if the following line is shown:
[E2AP] Received SETUP-RESPONSE-SUCCESSBefore connecting the reserved UEs to the gNB, start the following Colosseum RF scenario:
colosseumcli rf start -c 10011Now connect all the UEs by running the following in the UE containers:
./run_ue.shWe now start the xApp. Back to the RIC container, attach a terminal to the xApp docker container:
docker exec -it xapp bashDifferent SLA management xApps are available, please refer to the paper above for all the details. We start the advanced xApp implementing an elastic SLA policy:
python3 elastic_sla.pyFinally, we can generate downlink UE traffic as follows. In every UE container, add the route to the core network host:
ip route add 192.168.70.128/26 via 12.1.1.1and take note of the UE GPRS Tunneling Protocol (GTP) endpoint IP:
ifconfig oaitun_ue1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'Run an iperf3 server in the UE SRN:
iperf3 -sand test the connection in downlink by running this in the oai-core SRN:
docker exec -it oai-spgwu iperf3 -c UE_IP where UE_IP is the UE GTP endpoint IP.