L25GC+ is a re-architected 5G Core (5GC) that reduces latency and improves user experience by minimizing control plane impact on the data plane and optimizing packet processing. Built on free5GC and OpenNetVM, L25GC+ uses X-IO to eliminate message serialization and HTTP overheads in 3GPP SBI, enabling fast, synchronous communication between NFs. L25GC+ integrates with free5GC NFs via compatible SBI APIs from X-IO, easing adoption with minimal code changes. In testbed evaluations, L25GC+ achieves 2× lower data plane latency during paging and handover compared to free5GC.
For more design details, please refer to:
- SIGCOMM 2022: L25GC: A Low Latency 5G Core Network based on High-Performance NFV Platforms
- CloudNet 2023: L25GC+: An Improved, 3GPP-compliant 5G Core for Low-latency Control Plane Operations
-
Tested OS: See Tested OS Distributions
-
NIC Requirement: You need at least two DPDK-compatible NICs to run L25GC+.
- Configure
N2,N3, andUPF-Uon the CN node. - Configure
UERANSIMon the UE/AN node. - Update IP routes and ARP settings in
scripts/set_nw_env.shfor both UE/AN and DN nodes. - Refer to our setup guide and instructional video for step-by-step instructions.
-
Run the setup script on target machine
./scripts/setup.sh <ue|cn|dn>
-
NIC interface on
CNnode must be bound to a compatible DPDK driver (e.g.,igb_uio).Note: In some environments, the interface must be brought down before binding.
sudo ifconfig <interface> down sudo ~/L25GC-plus/NFs/onvm-upf/subprojects/dpdk/usertools/dpdk-devbind.py -s sudo ~/L25GC-plus/NFs/onvm-upf/subprojects/dpdk/usertools/dpdk-devbind.py -b igb_uio <PCIe addr>
You can use our provided scripts to launch onvm_mgr and L25GC+ NFs. This script assumes the L25GC-plus folder is your working directory.
- Run ONVM Manager
./scripts/run/run_onvm_mgr.sh
- Run UPF-U (new terminal)
./scripts/run/run_upf_u.sh 1 ./NFs/onvm-upf/5gc/upf_u_complete/upf_u.txt
- Run UPF-C (new terminal)
./scripts/run/run_upf_c.sh 2 ./NFs/onvm-upf/5gc/upf_c_complete/config/upfcfg.yaml
- Run 5GC Network Functions (NFs) (new terminal)
source ~/.bashrc ./scripts/run/run_cp_nfs.sh
- Run Webconsole (new terminal)
The webconsole is used to pre-store UE info in MongoDB for authentication and configure QoS.
See this video or doc for usage instructions.cd webconsole/ ./bin/webconsole - Stop L25GC+
./scripts/run/stop_cn.sh
This script assumes the L25GC-plus/UERANSIM folder is your working directory.
- Run gNB
./build/nr-gnb -c config/free5gc-gnb.yaml
- Run UE (new terminal)
sudo ./build/nr-ue -c config/free5gc-ue.yaml
-
Ping Test (UE to DN)
# on UE/RAN node ping -I uesimtun0 192.168.1.4Replace
192.168.1.4with the IP of your DN node. -
iperf3 Throughput Test
# On DN Node: iperf3 -s -B 192.168.1.4# On UE/RAN Node: iperf3 -c 192.168.1.4 -B 10.60.0.1Replace
192.168.1.4with the IP of your DN node. Assume10.60.0.1is the IP ofUE(uesimtun0).
| OS Distribution | Status | Notes |
|---|---|---|
| Ubuntu 24.04 | All dependencies available via apt or pip |
|
| Ubuntu 22.04 | ✅ Works out of the box | All dependencies available via apt or pip |
| Ubuntu 20.04 | ✅ Works out of the box | All dependencies available via apt or pip |
| Ubuntu 18.04 | Likely requires upgrading GCC, Python, and installing recent Meson manually |
| Component | Version | Installation Notes |
|---|---|---|
| DPDK | 24.07.0 |
Built from source using Meson |
| Pktgen-DPDK | 24.07.0 |
Compatible with the same DPDK version |
| dpdk-kmods | commit@9b182be |
Required only for igb_uio (optional) |
| Meson | >=0.58.0 |
Recommended: 0.61.2+; use pip3 install meson |
| Ninja | >=1.10.0 |
Usually installed via apt |
The NFs/ directory contains X-IO and all the L25GC+ NFs.
| Module | Description | Language | Commit |
|---|---|---|---|
amf |
Access and Mobility Management Function — handles UE registration and mobility | Go | a186198 |
ausf |
Authentication Server Function — performs UE authentication procedures | Go | 0cb2ece |
chf |
Charging Function — manages charging-related interfaces (if implemented) | Go | 088bd10 |
nrf |
Network Repository Function — supports service registration/discovery | Go | e4c12be |
nssf |
Network Slice Selection Function — selects network slice per UE session | Go | a6b6472 |
onvm-upf |
User Plane Function — data plane packet handling implemented via ONVM | C | f4423e8 |
pcf |
Policy Control Function — enforces policy rules for QoS, access, charging | Go | 1de2b6c |
smf |
Session Management Function — handles PDU sessions and tunnel setup | Go | fbb1e3e |
udm |
Unified Data Management — manages user identity and subscription access | Go | 147cabe |
udr |
Unified Data Repository — stores structured user data | Go | fce77b3 |
xio |
Unified I/O interface between Golang NFs and ONVM stack | Go/C | 464d9d5 |
- QoS implementation is achieved using token bucket and trTCM to support GBR and MBR.
- You can view the content and QoS settings through the following link:
For questions, feedback, or collaboration inquiries:
Email: l25gc@googlegroups.com
Join our Google Group
L25GC+ is released under the Apache 2.0 License.
