omec-project / upf

4G/5G Mobile Core User Plane
169 stars 104 forks source link
4g 5g bess cnf dataplane docker dpdk kubernetes pfcp prometheus spgw upf userplane

UPF

Go Report Card

Build Status

This project implements a 4G/5G User Plane Function (UPF) compliant with 3GPP TS23.501. It follows the 3GPP Control and User Plane Separation (CUPS) architecture, making use of the PFCP protocol for the communication between SMF (5G) / SPGW-C (4G) and UPF.

This UPF implementation is actively used as part of the Aether platform in conjunction with the SD-Core mobile core control plane.

Table Of Contents

Overview

The UPF implementation consists of two layers:

The PFCP Agent implements datapath plugins that translate PFCP messages to datapath-specific configurations. We currently support two datapath implementations:

The combination of PFCP Agent and UP4 is usually referred to as P4-UPF. While BESS-UPF denotes the combination of PFCP Agent and the BESS datapath.

PFCP Agent internally abstracts different datapaths using a common API, while the different plug-ins can use specific southbound protocols to communicate with the different datapath instances. Support for new datapaths can be provided by implementing new plugins.

UPF overview

This repository provides code to build two Docker images: pfcpiface (the PFCP Agent) and bess (the BESS-based datapath).

To build all Docker images run:

make docker-build

To build a selected image use DOCKER_TARGETS:

DOCKER_TARGETS=pfcpiface make docker-build

The latest Docker images are also published in the OMEC project's DockerHub registry: upf-epc-bess, upf-epc-pfcpiface.

BESS-UPF Components

upf

Zoom-in

bess-programming

Feature List

PFCP Agent

BESS-UPF

P4-UPF

P4-UPF implements a core set of features capable of supporting requirements for a broad range of enterprise use cases.

See the ONF's blog post for an overview of P4-UPF. Additionally, refer to the SD-Fabric documentation for the detailed feature set.

Getting started

Installation

Please see installation document here for details on how to set up the PFCP Agent with BESS-UPF.

To install the PFCP Agent with UP4 please follow the SD-Fabric documentation.

Configuration

Please see the configuration guide here to learn more about the different configurations.

Testing

The UPF project currently implements three types of tests:

Unit tests for the PFCP Agent's code. To run unit tests use:

make test

E2E integration tests that verify the inter-working between the PFCP Agent and a datapath.

We provide two modes of E2E integration tests: native and docker.

The native mode invokes Go objects directly from the go test framework, thus it makes the test cases easier to debug. To run E2E integration tests for BESS-UPF in the native mode use:

make test-bess-integration-native

The docker mode uses fully containerized environment and runs all components (the PFCP Agent and a datapath mock) as Docker containers. It ensures the correct behavior of the package produced by the UPF project. To run E2E integration tests for UP4 in the docker mode use:

make test-up4-integration-docker

NOTE: The docker mode for BESS-UPF and the native mode for UP4 are not implemented yet.

PTF tests for BESS-UPF verify the BESS-based implementation of the UPF datapath (data plane). Details to run PTF tests for BESS-UPF can be found here.

Contributing

The UPF project welcomes new contributors. Feel free to propose a new feature, integrate a new UPF datapath or fix bugs!

Before contributing, please follow these guidelines:

Support

To report any other kind of problem, feel free to open a GitHub Issue or reach out to the project maintainers on the ONF Community Slack (aether-dev).

License

The project is licensed under the Apache License, version 2.0.