Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/travelping/upg-vpp
User Plane Gateway (UPG) based on VPP
https://github.com/travelping/upg-vpp
3g 4g 5g epc eutran geran gprs gtp gtpu lte mno mobi mvno proto telecom upf
Last synced: 24 days ago
JSON representation
User Plane Gateway (UPG) based on VPP
- Host: GitHub
- URL: https://github.com/travelping/upg-vpp
- Owner: travelping
- License: apache-2.0
- Created: 2020-10-01T15:02:19.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-08T22:59:24.000Z (5 months ago)
- Last Synced: 2024-08-04T00:04:17.786Z (4 months ago)
- Topics: 3g, 4g, 5g, epc, eutran, geran, gprs, gtp, gtpu, lte, mno, mobi, mvno, proto, telecom, upf
- Language: C
- Homepage:
- Size: 1.93 MB
- Stars: 144
- Watchers: 28
- Forks: 51
- Open Issues: 50
-
Metadata Files:
- Readme: README.md
- Changelog: changelog-config.json
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- awesome-5g - upg-vpp - User Plane Gateway (UPG) based on VPP. (NFs)
README
User Plane Gateway (UPG) based on VPP
=====================================
[![CI](https://github.com/travelping/upg-vpp/actions/workflows/main.yaml/badge.svg?branch=master)](https://github.com/travelping/upg-vpp/actions/workflows/main.yaml)UPG implements a GTP-U user plane based on [3GPP TS 23.214][TS23214]
and [3GPP TS 29.244][TS29244] Release 15. It is implemented as an
out-of-tree plugin for [FD.io VPP][VPP].The possible uses for UPG are:
* User Plane Function (UPF) in 5G networks
* Packet Data Network Gateway User plane (PGW-U)
* Traffic Detection Function User plane (TDF-U)Current State
-------------UPG is used in production in conjunction with [erGW][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](KNOWN_ISSUES.md).
Working features
----------------* PFCP protocol
* en/decoding of most IEs
* heartbeat
* node related messages
* session related messages
* Uplink and Downlink Packet Detection Rules (PDR) and
Forward Action Rules (FAR) -- (some parts)
* IPv4 -- inner and outer
* IPv6 -- inner and outer
* Usage Reporting Rules (URR)
* PFCP Session Reports
* Linked Usage ReportsNo yet working
--------------* Buffer Action Rules (BAR)
* QoS Enforcement Rule (QER)Limitations
-----------* FAR action with destination LI are not implemented
* Ethernet bearer supportDevelopment setup
-----------------Design rationale for the development environment is this:
* provide an easily reproducible development and build environment
usable both on CI and locally
* provide quick commands for common tasks
* simplify bisecting against upstream VPP
* discourage downstream VPP changes, as we should make effort to
upstream themRelevant parts of the source tree layout:
* `hack/` contains helper scripts most of which are wrapped in `make`
commands
* `Makefile` provides user interface for the environment
* `upf/` contains the source code of the plugin[1](#footnote-1)
* `upf/test/` contains the integration tests[1](#footnote-1)
* `vpp.spec` contains the info on VPP-base repo, branch and commit to useThere'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:
* `make image` builds UPG Docker image
* `make test` build VPP and run UPG integration tests. The compilation
results are retained under `vpp/`
* `make retest` run UPG integration tests without building VPP. These
can be run under `make test` to re-run the tests quickly if there
were no UPG / VPP code changes
* `make ensure-build-image` checks if the build image exists or can be
pulled and builds it otherwise
* `make update-build-image-tag` updates the build image tag in
the Dockerfiles according to the hash calculated
from `Dockerfile.build` and VPP external dependencies
* `make install-hooks` installs git hooks in the repo which prevent
the user from making commits that contain `ZZZZZ:` substring. This
is handy for debug print like `clib_warning("ZZZZZ: i %d", i);`
* `make update-vpp` re-clones VPP into `vpp/` directory
* `make buildenv` runs an interactive shell inside the build
environment with UPG and VPP sources mounted into the container
* `make e2e` build UPG and run E2E tests for it. For more information,
see [E2E test documentation](test/e2e/README.md)
* `make checkstyle` performs style checks on the source codeCommands for building images and running tests default to debug builds.
To do release build instead, pass `BUILD_TYPE=release` to `make`:```sh
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:```sh
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
```sh
hack/buildenv.sh clean
```CI and releases
---------------The CI for UPG-VPP is based on [GitHub Actions][GHACTIONS]. Currently,
the CI only runs for pushes to branches in the repository itself.
The jobs include:
- `prepare`: make sure build image is available for the commit
- `build` (debug + release): build the docker images and binaries / packages
- `checkstyle`: check for style errors in the code
- `test`: unit and e2e tests for release and debug builds
- `conclude`: intermediate job used for sync by the release workflow
- `slack`: internal notification jobThe 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:
- `feature`, `enhancement`: features
- `fix`: fixes
- `test`: testsThe releases for tags that contain `pre` substring are marked as
pre-releases.[VPP]: https://fd.io
[erGW]: https://github.com/travelping/ergw
[TS23214]: http://www.3gpp.org/ftp/Specs/html-info/23214.htm
[TS29244]: http://www.3gpp.org/ftp/Specs/html-info/29244.htm
[VPPBUILD]: https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code#Building
[GHACTIONS]: https://github.com/features/actions1: 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",
],
}
```