travelping / upg-vpp

User Plane Gateway (UPG) based on VPP
Apache License 2.0
146 stars 51 forks source link
3g 4g 5g epc eutran geran gprs gtp gtpu lte mno mobi mvno proto telecom upf

User Plane Gateway (UPG) based on VPP

CI

UPG implements a GTP-U user plane based on 3GPP TS 23.214 and 3GPP TS 29.244 Release 15. It is implemented as an out-of-tree plugin for FD.io VPP.

The possible uses for UPG are:

Current State

UPG is used in production in conjunction with erGW as GGSN/PGW in multiple installation in several telecom operators (Tier 1 and smaller).

For the list of known issues, see KNOWN_ISSUES document.

Working features

No yet working

Limitations

Development setup

Design rationale for the development environment is this:

Relevant parts of the source tree layout:

There's a simple dockerized environment wrapped in 'make' commands.

The "build image" which is used for the devenv is tagged with a hash of Dockerfile.build as well as VPP's external dependencies.

The following make commands are supported:

Commands for building images and running tests default to debug builds. To do release build instead, pass BUILD_TYPE=release to make:

make e2e BUILD_TYPE=release

If docker is used, one should set the following environment variable to enable wrapping the internally run commands in a docker container:

export UPG_BUILDENV=docker

It is also possible to use a k8s cluster to run the build container in a pod:

export UPG_BUILDENV=k8s
# optional: specify the node to run the build pod
export UPG_BUILDENV_NODE=somenode

In this case, the buildenv is run as statefulset inside the cluster. It can be removed using

hack/buildenv.sh clean

CI and releases

The CI for UPG-VPP is based on GitHub Actions. Currently, the CI only runs for pushes to branches in the repository itself. The jobs include:

The images built per-commit expire within 7 days.

When a tag is pushed, the release workflow is also run for it, re-tagging the images built as part of normal build process (preserving the old tags too). In case if the tag doesn't have test substring in it, it is also published as a release. The release notes list the PRs with the following tags:

The releases for tags that contain pre substring are marked as pre-releases.

1: Historically, the project was named simply "UPF". There may be more UPF->UPG renames later

VS Code

It is possible to attach to running buildenv container with VS Code to get full intellisense.

To do that run make code.

Note: this command leaves the buildenv running in the background.

After attaching for the first time, some vscode plugins may not be enabled. To fix that open: F1 -> "Dev Containers: Open Named Container Configuration File" And specify what plugins you'd like loaded at start.

Here are some nice plugins to work with this repo:

{
    "workspaceFolder": "/src",
    "extensions": [
        "eamodio.gitlens",
        "EditorConfig.EditorConfig",
        "golang.go",
        "ms-azuretools.vscode-docker",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools",
        "ms-vscode.cpptools-extension-pack",
        "ms-vscode.cpptools-themes",
        "ms-vscode.makefile-tools",
        "llvm-vs-code-extensions.vscode-clangd",
        "xaver.clang-format",
        "twxs.cmake",
    ],
}