open5gcube

open5Gcube: A Modular Framework for Mobile Network Laboratories.

https://github.com/open5gcube/open5gcube

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.9%) to scientific vocabulary

Keywords

5g open-source
Last synced: 6 months ago · JSON representation ·

Repository

open5Gcube: A Modular Framework for Mobile Network Laboratories.

Basic Info
  • Host: GitHub
  • Owner: open5Gcube
  • License: apache-2.0
  • Language: Vue
  • Default Branch: main
  • Homepage: https://open5Gcube.de
  • Size: 1.17 MB
Statistics
  • Stars: 2
  • Watchers: 1
  • Forks: 3
  • Open Issues: 2
  • Releases: 0
Topics
5g open-source
Created 10 months ago · Last pushed 9 months ago
Metadata Files
Readme License Citation

README.md

open5Gcube is a Modular Framework for Mobile Network Laboratories. It builds and manages open-source mobile network stacks, including 2G, 4G, and 5G systems. It is designed for research, testing, and educational purposes, providing users with a customizable and extensible environment for deploying radio access networks (RAN), core networks (CN), and supporting components.


I. Overview II. Getting Started III. Configuration IV. Usage V. Documentation VI. License


📍 Overview

open5Gcube facilitates reproducible experiments across a variety of mobile network configurations by using:

  • Docker containers and Docker Compose for isolated service deployments.
  • Pre-built network Stacks representing different technology combinations (e.g., OAI-RAN + Open5GS core).
  • Remote container orchestration across multiple physical hosts using SSH and Docker-outside-of-Docker (DooD).
  • A WebUI for visual control and monitoring of the Stack deployments.
  • Support for physical SDR hardware (USRP X310/B210), as well as emulated setups.

Features

  • Full-stack mobile network simulation (2G/4G/5G, NSA/SA)
  • Integration with:
    • Open5GS, OpenAirInterface, UERANSIM, srsRAN, osmocom, and more
  • Easy-to-use WebUI
    • View and control container health and logs
    • Start/stop Stacks
  • VoLTE configuration based on Open5GS + Kamailio IMS
  • SIM card provisioning tools via pySim

🚀 Getting Started

Prerequisites

BIOS

For performance tuning, it is recommended to disable hyper-threading, CPU frequency control, C-States, P-States and any other power management settings.

Operating System

Ubuntu 22.04 is recommended as base host distribution.

Installation

Required Packages

console sudo apt install linux-tools-common net-tools make git-lfs ca-certificates curl gnupg openssh-server python3-virtualenv

Clone the Repository

console git clone https://github.com/open5Gcube/open5Gcube/ cd open5Gcube

Docker Engine

See official Docker documentation for details. Specific fixed versions of the Docker packages are installed with the script modules/base/docker/o5gc/install-docker.sh. Execute it with console make system-install-docker

Install open5Gcube systemd Startup Service

console make systemd-install-unit

Build all Docker Images

To build all docker images for all sub-projects on the Controller host as well as the ran projects on the configured ran hosts, run console make build-cacher-start docker-build-all and get yourself a big cup of coffee as this will take a few hours.

Start the open5Gcube WebUI

console make webui-start

⚙️ Configuration

The configuration of the installation and the global settings across the Stacks is done via different environment files in the etc directory.

System Specific Settings

The system installation specific configuration can be adjusted in the file etc/local.env:

  1. Set the CLOCK_SRCeither to external or internal, depending on whether an external clock supply is connected to the USRP or not.
  2. If components of the network (especially the RANs like the gNB) are distributed across different hosts, set the Docker network driver for the corenet to macvlan. If all services are running on the same host, a bridge can be used instead. shell # CORENET_DRIVER should be # - 'macvlan' if components (such as the gNB) are distributed across # different hosts # - 'bridge' if *all* components are running on this host # run 'make systemd-startup-unit' after changing one of the following # settings CORENET_DRIVER=bridge # If macvlan is used, set the parent interface here CORENET_MACVLAN_IFACE=eno1
  3. Set the USRP_IFACE to the interface name of the 10G adapter connected to the USRP X310 on the RAN hosts. Leave it unchanged if USRPs B210 via USB are used.
  4. Configure the hostname of the enb and gnb ran hosts: shell # eNB / gNB RAN hostnames ENB_HOSTNAME=localhost GNB_HOSTNAME=localhost

settings.env

Sets especially the 4G / 5G mobile network settings like the PLMN, TAC, APN and the used frequencies. These configurations are utilised by all Stacks if not configured explicitly to different values in the Stack directory.

```shell

Mobile Network

MCC=001 MNC=01 TAC=1 APN=internet

Network Slice Selection Assistance Information

NSSAISST=1 NSSAISD=ffffff

5G Band

NR_BAND=78

5G Channel Number (ARFCN)

NR_ARFCN=641280 ... ```

uedb.env

This file contains the database for all SIM Cards, including the IMSI, Key and the OPc. On startup of the Core Networks short-living initialization containers and helper scripts uses this settings to program the corresponding databases of the particular Core Network.

```shell

IMSI Key OPc

UE1="901700000052100 F18E5DB0A8B5B8A0304E9113D121DFE3 E83C9CF73E3B9E82E48005A696E86AD8" UE2="901700000052101 85DAEB272D98D18BEC760FF7AD7A32A5 A7EAD4B9841B099AB2AE75F1F218D85D" UE_3="208920000052102 B89266F426DDAADB91830124E69A1D20 4C18A87423F6CD4CD6734B82FC90BD7B" ... ```

Stack specific settings

Each Stack can override all of the above settings by providing a separate settings.env file in its directory. This is useful if a Stack requires fix certain configurations to function correctly, for example if slicing is not supported.

🖵 Usage

Command Line

A Makefile is the central entry point for all commands on the console, so they start all with make followed by the target which should be executed. make help will list the most important targets. Most consoles supports Tab-completion which helps exploring the available commands as well.

Build Docker Images

The build process is managed by the Makefile, which takes care of handling the dependencies. To build all images, the following command is executed: console make docker-build-all For building individual images, the Makefile provides the following command format: console make docker-build-<image-name> For example: console make docker-build-oai-amf To delete all images, the following command is used: console make docker-purge-all-images

Running Stacks

For each Stack defined in the modules, there is a make run-<stackname> command. So for example, to run the 5G-SA Stack composed of OAI-RAN and Open5GS, run console make run-oairan-open5gs-5g This starts all containers of the Stack and attaches to their console output. To stop the Stack just press Ctrl + c.

In general, for Mobile-Network Stacks the naming follows the convention <ran-project>-<core-project>-<technology>.

The startup-scripts of the RAN containers automatically take over the execution of the containers on the remote RAN hosts, if so configured in etc/local.env.

As an alternative, it is possible to start each component separately. This is especially useful if the RAN should run on the same host. Run console make run-oairan-open5gs-5g-core to start just the core of the Stack, and console make run-oairan-open5gs-5g-gnb to start the gnB.

To get a better overview of the running containers on the Controller host, ctop provides a concise and condensed overview of real-time metrics. It can be started with

console make ctop

WebUI

When booting the Controller host, the open5Gcube WebUI is started automatically, listening on the standard HTTP port. The WebUI provides a user-friendly interface to * Get an overview of the currently running containers, including * the log output, * the health status * and detailed container information * Start and stop Stacks, optionally with adjusted settings * Read and write SIM Cards * Get links to web services by the Stack

📄 Documentation

Comprehensive documentation can be found in the Doc directory as well as in the WebUI.

📜 License

This project is licensed under the terms of the Apache-2.0 license. For more details, refer to the LICENSE file.

Owner

  • Name: open5Gcube
  • Login: open5Gcube
  • Kind: organization
  • Location: Germany

Citation (CITATION.cff)

cff-version: 1.2.0
message: 'To cite package "open5Gcube" in publications use:'
title: "open5Gcube: A Modular Framework for Mobile Network Laboratories."
authors:
  - given-names: Thorsten
    family-names: Horstmann
repository-code: 'https://github.com/open5Gcube/open5Gcube'
url: 'https://open5gcube.de'
preferred-citation:
  type: proceedings
  authors:
  - family-names: "Horstmann"
    given-names: "Thorsten"
    orcid: "https://orcid.org/0009-0000-2880-9838"
  journal: "Mobilkommunikation; 29. ITG-Fachtagung"
  title: "A Modular and Usable Framework for Mobile Network Laboratories."
  month: 5
  year: 2025
keywords:
  - 5G
  - open-source

GitHub Events

Total
  • Issues event: 4
  • Watch event: 1
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 10
  • Public event: 1
  • Fork event: 3
Last Year
  • Issues event: 4
  • Watch event: 1
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 10
  • Public event: 1
  • Fork event: 3

Dependencies

modules/base/docker/o5gc/webui/Dockerfile docker
  • base latest build
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/free5gc/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/mysql/Dockerfile docker
  • mysql 5.7-debian build
modules/o5gc/docker/open5gs/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/packetrusher/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/simcard/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/srsran/4g/Dockerfile docker
  • develop latest build
  • o5gc/o5gc-base jammy build
  • proxy latest build
modules/o5gc/docker/srsran/project/Dockerfile docker
  • develop latest build
  • o5gc/o5gc-base jammy build
  • proxy latest build
modules/o5gc/docker/ueransim/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/volte/dns/Dockerfile docker
  • o5gc/o5gc-base focal build
modules/o5gc/docker/volte/fhoss/Dockerfile docker
  • o5gc/o5gc-base focal build
modules/o5gc/docker/volte/kamailio/Dockerfile docker
  • o5gc/o5gc-base focal build
modules/o5gc/docker/volte/pyhss/Dockerfile docker
  • o5gc/o5gc-base jammy build
modules/o5gc/docker/volte/rtpengine/Dockerfile docker
  • o5gc/o5gc-base focal build
modules/base/docker/o5gc/webui/frontend/package-lock.json npm
  • 420 dependencies
modules/base/docker/o5gc/webui/frontend/package.json npm
  • @quasar/app-vite ^1.3.0 development
  • @quasar/quasar-app-extension-qmarkdown 2.0.0-beta.10 development
  • @types/node ^12.20.21 development
  • @typescript-eslint/eslint-plugin ^5.10.0 development
  • @typescript-eslint/parser ^5.10.0 development
  • autoprefixer ^10.4.2 development
  • babel-cli ^6.26.0 development
  • babel-core ^6.26.3 development
  • eslint ^8.10.0 development
  • eslint-config-prettier ^8.1.0 development
  • eslint-plugin-only-error ^1.0.2 development
  • eslint-plugin-vue ^9.0.0 development
  • prettier ^2.5.1 development
  • typescript ^4.5.4 development
  • @quasar/cli ^2.3.0
  • @quasar/extras ^1.16.4
  • ansicolor ^1.1.100
  • async-mutex ^0.4.0
  • axios ^1.4.0
  • dotenv ^16.4.5
  • lodash ^4.17.21
  • patch-package ^8.0.0
  • pinia ^2.0.11
  • pinia-plugin-persist ^1.0.0
  • quasar ^2.6.0
  • vue ^3.0.0
  • vue-router ^4.0.0
modules/base/docker/o5gc/webui/backend/requirements.txt pypi
  • docker *
  • flask *
  • flask-cors *
  • gunicorn *
  • jsonschema *
  • pytest *
  • python-dotenv *
  • pytz *
scripts/requirements.txt pypi
  • codespell *
  • nrarfcn *
  • smpplib *
tests/requirements.txt pypi
  • robotframework >=5,<6 test
  • robotframework-robocop * test