Skip to content

kevin8023c/L25GC-plus

 
 

Repository files navigation

L25GC+: A Low-latency, 3GPP-compliant 5G Core Network

About

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:

Build and Installation

Experiment Setup

  1. Configure N2, N3, and UPF-U on the CN node.
  2. Configure UERANSIM on the UE/AN node.
  3. Update IP routes and ARP settings in scripts/set_nw_env.sh for both UE/AN and DN nodes.
  4. Refer to our setup guide and instructional video for step-by-step instructions.

Installation

  1. Run the setup script on target machine

    ./scripts/setup.sh <ue|cn|dn>
  2. NIC interface on CN node 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>

Running L25GC+

You can use our provided scripts to launch onvm_mgr and L25GC+ NFs. This script assumes the L25GC-plus folder is your working directory.

  1. Run ONVM Manager
    ./scripts/run/run_onvm_mgr.sh
  2. Run UPF-U (new terminal)
    ./scripts/run/run_upf_u.sh 1 ./NFs/onvm-upf/5gc/upf_u_complete/upf_u.txt
  3. Run UPF-C (new terminal)
    ./scripts/run/run_upf_c.sh 2 ./NFs/onvm-upf/5gc/upf_c_complete/config/upfcfg.yaml
  4. Run 5GC Network Functions (NFs) (new terminal)
    source ~/.bashrc
    ./scripts/run/run_cp_nfs.sh
  5. Run Webconsole (new terminal)

    The webconsole is used to pre-store UE info in MongoDB for authentication and configure QoS.

    cd webconsole/ 
    ./bin/webconsole
    See this video or doc for usage instructions.
  6. Stop L25GC+
    ./scripts/run/stop_cn.sh

Running UERANSIM

This script assumes the L25GC-plus/UERANSIM folder is your working directory.

  1. Run gNB
    ./build/nr-gnb -c config/free5gc-gnb.yaml
  2. Run UE (new terminal)
    sudo ./build/nr-ue -c config/free5gc-ue.yaml

Unit test

  1. Ping Test (UE to DN)

    # on UE/RAN node
    ping -I uesimtun0 192.168.1.4

    Replace 192.168.1.4 with the IP of your DN node.

  2. 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.1

    Replace 192.168.1.4 with the IP of your DN node. Assume 10.60.0.1 is the IP of UE (uesimtun0).

Tested OS Distributions

OS Distribution Status Notes
Ubuntu 24.04 ⚠️ Untested 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 ⚠️ Untested Likely requires upgrading GCC, Python, and installing recent Meson manually

Dependency Versions

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

Submodules in L25GC-plus/NFs/

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

New feature


Contact

For questions, feedback, or collaboration inquiries:

Email: l25gc@googlegroups.com
Join our Google Group


License

L25GC+ is released under the Apache 2.0 License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

No contributors

Languages

  • Shell 95.3%
  • Makefile 4.7%