ORANSlice is an end-to-end open-source 5G network slicing framework for O-RAN. It (i) extends the 5G protocol stacks of OAI to support RAN slicing; (ii) implements an E2SM-CCC-based SM and xApp for RAN slicing control; (iii) conducts extensive testing and validation on Arena and X5G testbeds to ensure the robustness and effectiveness of the implementation.
The framework of ORANSlice is shown in the diagram below:
If you use this software, please reference the following paper:
H. Cheng, S. D’Oro, R. Gangula, S. Velumani, D. Villa, L. Bonati, M. Polese, G. Arrobo, C. Maciocco, T. Melodia, "ORANSlice: An Open-Source 5G Network Slicing Platform for O-RAN," in Proceedings of The 30th Annual International Conference on Mobile Computing and Networking (ACM MobiCom ’24), Washington, D.C., USA, November 18–22, 2024, bibtex pdf
This work was supported by the U.S. National Science Foundation under Grant CNS-2117814.
As shown in the above diagram, there are three parts in an end-to-end 5G network slicing framework: core network, radio access network, and near-real-time RIC. The ORANSlice repo consists of the code of OAI RAN and OAI CN. The repo of near-real-time RIC is in other repos. In this tutorial, we will show how to deploy the three parts in Ubuntu 22.04.
git clone https://github.com/wineslab/ORANSlice.git
We provide OAI and Open5GS core network slicing deployment in docker.
Go to folder oai_cn
and follow the readme to deploy OAI core legacy version (v1.5.1) or latest version (develop branch).
The code of depolying Open5GS core network in docker is given in Github Repo.
The implementation of RAN Slicing is based on the OAI 5G protocal stack.
sudo apt-get update
sudo apt install protobuf-compiler
sudo apt install libprotoc-dev
git clone https://github.com/protobuf-c/protobuf-c && cd protobuf-c/ && ./autogen.sh && ./configure && make && sudo make install && sudo ldconfig
Go to folder oai_ran
and follow the steps to build:
cd cmake_targets
./build_oai -I
./build_oai -w USRP --ninja --gNB
The customized RAN slicing and E2 Agent code are integrated into OAI 2024.w28 release.
Please refer to the tutorial in ARC-OTA and Aerial CUDA-Accelerated RAN.
Our customized OAI nrUE with multiple-PDU support is given in
https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/NR_UE_multi_pdu
Follow the official guide to build and run OAI nrUE.
Follow the guide to configure multiple PDU session at nrUE.
If you do not need multiple-pdu support at nrUE, you can build and run nrUE at oai_ran
You can use COTS 5G UE modules from Sierra Wireless or Quectel to establish network slicing connection.
The O-RAN Software Community (OSC) Near-RT RIC Release E can be installed following this guide. Note that for this tutorial, the OSC Near-RT RIC runs on an OpenShift cluster, whereas a plain Kubernetes deployment might require specific networking configurations.
The e2sim is a component that can run on the same server as the gNB and has the duty to encapsulate/decapsulate the custom Service Model (SM) buffers to be sent to or received from the gNB. It communicates with the gNB via UDP sockets. The e2sim codebase can be found at this GitHub Repo.
Our xAPP consists of two parts: a C/C++ based xAPP Base Station (BS) Connector and a python-based xAPP logic unit. The code can be found at the Github Repo.
The xApp BS connector component connects the pythonic xApp with the OSC Near-RT RIC. On one side, it receives the custom SM buffers to be encapsulated in E2AP (E2 Application Protocol) messages and sent to the RIC. On the other side, it retrieves the custom SM buffers from E2AP to be sent to the xApp.
The xApp logic unit contains some Python examples that can subscribe to selected RAN parameters, receive periodic indication messages, and send control requests to update these parameters.
We give a step-by-step example to show how ORANSlice works based on full softwarized 5G Open RAN components.
cd ~/ORANSlice/oai_cn/oai-cn5g-legacy/
./restart_cn.sh
RFSim mode:
cd ~/ORANSlice/oai_ran/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/ORANSlice.gnb.sa.band78.fr1.106PRB.usrpx310.conf --sa --rfsim
Over-the-Air Transmission with USRP X310:
cd ~/ORANSlice/oai_ran/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/ORANSlice.gnb.sa.band78.fr1.106PRB.usrpx310.conf --sa --usrp-tx-thread-config 1
RFSim mode:
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/nrUE_slice1.conf --rfsim --rfsimulator.serveraddr 127.0.0.1
OTA Transmission with USRP B210:
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/nrUE_slice1.conf --ue-fo-compensation -E
OTA Transmission with USRP X310:
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/nrUE_slice1.conf --ue-fo-compensation --usrp-args "addr=192.168.40.2"
Modify the IMSI/NSSAI/DNN item of nrUE_slice1.conf to setup another OAI nrUE. For example, nrUE_slice2.conf.
cd o-ran-e2sim
./run_e2sim.sh <e2term-address> <e2term-port>
cd xapp_bs_connector
./run_xapp.sh
Wait for the connector to finish its initialization, which is indicated by, for example,
Opened control socket server on port 7000
cd base-xapp
python slicing_ctrl_influxdb_xapp_kpm.py
The kpm-xapp.py script can be easily modified to save these metrics in an external dB, such as InfluxDB, and then display them on a dashboard, such as Grafana.
You can test the RAN Slicing functionality without xApp and near-RT RIC by applying the patch:
cd oai_ran
git apply ../doc/rrmPolicyJson.patch
After applying the patch, a file rrmPolicy.json
is added to the root folder or ORANSlice
and the MAC layer will read rrmPolicy.json
periodically to update the internal slicing policy.
Accordingly, you need to set
SliceConf = "/home/wineslab/ORANSlice/rrmPolicy.json";
in MACRLCs
of ORANSlice.gnb.sa.band78.fr1.106PRB.usrpx310.conf
to the correct path of rrmPolicy.json
.
Tune the value of min_ratio
and max_ratio
and see the throughput change of each slice.