Git Product home page Git Product logo

upf's Introduction

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

upf's People

Contributors

dependabot[bot] avatar louisroyer avatar pre-commit-ci[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

upf's Issues

Performance Consideration

Hi,

Just want to ask if it is possible to consider using VPP instead, using VPP has the added benefit of srv6 MUP (https://docs.fd.io/vpp/23.06/developer/plugins/srv6/mobile_plugin_doc.html?highlight=srv6) plus user plane acceleration as part of it's dataplane features. The only missing piece will be the control-plane that will be translating the PFCP to srv6 configuration in VPP.

Also do you think the tun interface is performant? Some throughput tests for Open5gs UPF tun interface could not do more than 1Gbps

Modify config to be more compatible with Free5GC

instead of

tun-interface: upf
pfcp-address: "10.0.213.6"
gtpu-entities:
  - "10.0.201.5"
  - "10.0.215.4"
 dnn_list:
  - dnn: "sliceB"
    cidr: "10.0.111.0/24"

modify to have something like:

pfcp:
  addr: "10.0.213.6" # ip addr for listening
  nodeID: "10.0.213.6" # external ip or fqdn that can be reached
  retransTimeout: 500ms # must support `s` (seconds) but should allow more precise time
  maxRetrans: 3
gtpu:
  forwarder: "wmnsk/go-gtp"
  tunInterfaceName: upf # Name of the tun interface that will be created (optional)
  ifList:
    - addr: "10.0.201.5"
      type: N3
    - addr: "10.0.215.4"
      type: N9
dnnList:
  - dnn: "sliceB"
    cidr: "10.0.111.0/24"

Blocking issues for addr, retransTimeout, and maxRetrans:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.