O-RAN Components ================ We originally intended to setup everything via Ansible playbooks, but in the end we ended up giving up on porting O-RAN to ARM. It was just too much work for two people actively working on the code. We ended up using the SRS + Open5GS core setup by Supreeth Herle (https://github.com/herlesupreeth/docker_open5gs) and O-RAN setup by SRSRAN (https://github.com/srsran/oran-sc-ric). We made slight modifications to integrate them. The modified versions are available in https://github.com/Gabrielcarvfer/docker_open5gs and https://github.com/Gabrielcarvfer/oran-sc-ric. This setup was tested with the following system configurations (minimum, recommended): .. sourcecode:: txt SO: Linux, WSL (Windows 11) Distro: Ubuntu 22.04, Ubuntu 24.04 Host RAM: (16, 64) GB Host processor cores: (8, 18) Host free disk space: (30, 50) GB To get things working, first clone the two repos: .. sourcecode:: console ~/$ git clone https://github.com/Gabrielcarvfer/docker_open5gs ~/$ git clone https://github.com/Gabrielcarvfer/oran-sc-ric Then build docker images for the core network: .. sourcecode:: console ~/docker_open5gs/base/$ docker build --no-cache --force-rm -t docker_open5gs . ~/docker_open5gs/base/$ cd ../srslte ~/docker_open5gs/srslte/$ docker build --no-cache --force-rm -t docker_srslte . ~/docker_open5gs/srslte/$ cd ../srsran ~/docker_open5gs/srsran/$ docker build --no-cache --force-rm -t docker_srsran . ~/docker_open5gs/srsran/$ cd ../ ~/docker_open5gs/$ docker compose -f sa-deploy.yaml build Note: To run ORAN, you need access to the protected SCTP port, which REQUIRES ROOTful docker... Before starting the network, modify the ``DOCKER_HOST_IP`` address in ``~/docker_open5gs/.env``. You should put your local network IP (this is especially true if using a docker-on-WSL-on-Windows setup). The UE register is done via a web interface, so you must be able to reach this service from your browser. You can get the available IPs with command ``hostname -I``. In the original manual, they suggest disabling the firewall, enabling IPv4 forwarding and setting CPU governor to performance mode (typically energy saving for laptops). .. sourcecode:: console sudo ufw disable sudo sysctl -w net.ipv4.ip_forward=1 sudo cpupower frequency-set -g performance After altering the host IP, start the core network and then the near-RT RIC, run the following commands. Use ps to inspect if containers are running, or began restarting (indicating an error). .. sourcecode:: console ~/docker_open5gs/$ sudo docker compose -f ./sa-deploy.yaml up -d ~/docker_open5gs/$ sudo docker compose ps ~/docker_open5gs/$ pushd ../oran-sc-ric ~/oran-sc-ric/$ sudo docker compose up -d ~/oran-sc-ric/$ sudo docker compose ps ~/oran-sc-ric/$ popd ~/docker_open5gs/$ At this point, you should verify if the core network and the near-RT RIC are functioning properly. To check the core network, and take the opportunity to register the IMSI of the user (SIM card), according to the values in the .env file previously altered, go to http://:9999, enter user ``admin``, password ``1423``. Then fill the data for the subscriber and its phone. .. sourcecode:: txt UE1_IMEI=356938035643803 UE1_IMEISV=4370816125816151 UE1_IMSI=001011234567895 UE1_KI=8baf473f2f8fd09487cccbd7097c6862 UE1_OP=11111111111111111111111111111111 UE1_AMF=8000 After this, check if the RIC is ready for gNB connections with: .. sourcecode:: console ~/docker_open5gs/$ docker compose logs | grep "RMR is ready now" After checking this, start the gNB .. sourcecode:: console ~/docker_open5gs/$ sudo docker-compose -f ./srsgnb_zmq.yaml up -d Check if it was properly associated to the AMF in the core, and to the E2MGR in the RIC: .. sourcecode:: console ~/oran-sc-ric/docker compose logs | grep "gnbd_" If it is working fine, you should have found the gNB E2Node ID. You are going to use now, to instruct the xApp in which E2Node to hook up for messages. RUN THIS IN A SEPARATE TERMINAL. .. sourcecode:: console ~/oran-sc-ric/docker compose exec python_xapp_runner ./kpm_implemented_xapp.py --e2_node_id=gnbd_999_099_000XXX_0 If the xApp registers successfully, then we can FINALLY proceed to the UE. .. sourcecode:: console ~/docker_open5gs/$ sudo docker-compose -f ./srsue_5g_zmq.yaml up -d After starting the UE, access the docker container and create some traffic via the 5G interface. Do that as quickly as possible, to prevent the connection from going to sleep/paging mode. .. sourcecode:: console ~/docker_open5gs/$ sudo docker compose exec -it srsue_5g_zmq bash root@ir2390i23:/# ping -I tun_srsue google.com root@ir2390i23:/# apt update && apt install -y curl root@ir2390i23:/# curl --interface tun_srsue --output bigbuckbunny.mp4.zip https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4.zip At this point, you should be able to observe the KPMs in the xApp terminal.