Skip to content

nextmn/upf

Repository files navigation

NextMN-UPF

NextMN-UPF is an experimental 5G UPF implementation. This UPF is implemented in User Space, meaning it does not depend on Linux GTP module.

Warning

This UPF is still at the early stages of development and contains bugs and will crash in unexpected manners. Please do not use it for anything other than experimentation. Expect breaking changes until v1.0.0

The following features are implemented:

  • IPv4/IPv6 both in inner and outer PDUs (note: IPv6 is not implemented in Linux GTP module)
  • PFCP Association Setup Procedure
  • PFCP Session Establishment Procedure
  • PFCP Session Modification Procedure
  • PDRs/FARs, SDF Filters
  • Interoperability with Free5GC (you can replace Free5GC's UPF container with NextMN-UPF container) (tested only with IPv4)
  • Interoperability with UERANSIM (since 2022-06-24's version in UERANSIM master branch)
  • Periodic display of the currently applied PFCP rules

Missing features:

  • PFCP Session Deletion Procedure
  • PDRs/FARs deletion
  • BARs, MARs, URRs, QERs are not handled yet
  • Gracefull shutdown procedure
  • Any other advanced PFCP use

Other missing things because we are at early stages of development:

  • Unit/Integration Tests (Not implemented) + CI/CD
  • Testing full IPv6 deployment with UERANSIM+Free5GC integration
  • Documentation (WIP)
  • Performances (Not the current goal as long as it is decent)
  • Storing Sessions/Rules in a database to be more efficient (currently everything is stored in RAM), and the Session/Rules research is not optimal

Getting started

Build dependencies

  • golang
  • make (optional)

Runtime dependencies

  • iproute2
  • iptables

Build and install

Simply run make build and make install.

Docker

If you plan using NextMN-UPF with Docker:

  • The container required the NET_ADMIN capability;
  • The container required the forwarding to be enabled (not enabled by the UPF itself);
  • The tun interface (/dev/net/tun) must be available in the container.

This can be done in docker-compose.yaml by defining the following for the service:

cap_add:
    - NET_ADMIN
devices:
    - "/dev/net/tun"
sysctls:
    - net.ipv4.ip_forward=1

Author

Louis Royer

License

MIT