Install UPG-VPP(DPDK/VPP UPF) on Host
March 28, 2026 · View on GitHub
This briefly describes the steps and configuration to build and install travelping/upg-vpp. It is intended to be prepared for use with Open5GS and free5GC.
Sample Configurations and Miscellaneous for Mobile Network
Table of Contents
- Simple Overview of UPG-VPP and Data Network Gateway
- Build UPG-VPP on VM-UP
- Setup UPG-VPP on VM-UP
- Run UPG-VPP on VM-UP
- Setup Data Network Gateway on VM-DN
- How to capture packets on DPDK ports
- Sample Configurations
- Changelog (summary)
Simple Overview of UPG-VPP and Data Network Gateway
This describes a simple configuration of UPG-VPP and Data Network Gateway, focusing on U-Plane. Note that this configuration is implemented with Proxmox VE VMs.
The following minimum configuration was set as a condition.
- One UPF and Data Network Gateway
The built simulation environment is as follows.

The DPDK/VPP UPF used is as follows.
- DPDK/VPP UPF - UPG-VPP v1.13.0 (2024.03.25) - https://github.com/travelping/upg-vpp
Each VMs are as follows.
| VM | SW & Role | IP address | OS | CPU (Min) | Mem (Min) | HDD (Min) |
|---|---|---|---|---|---|---|
| VM-UP | UPG-VPP U-Plane | 192.168.0.151/24 | Ubuntu 24.04 | 2 | 8GB | 20GB |
| VM-DN | Data Network Gateway | 192.168.0.152/24 | Ubuntu 24.04 | 1 | 1GB | 10GB |
The network interfaces of each VM are as follows.
Note. Do not enable(up) any devices that will be under the control of DPDK.
These devices will be enabled and set IP addresses in the init.conf file of UPG-VPP.
| VM | Device | Model | Linux Bridge | IP address | Interface | Under DPDK |
|---|---|---|---|---|---|---|
| VM-UP | -- | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | -- | |
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 | x | |
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 | x | |
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 | x | |
| VM-DN | ens18 | VirtIO | vmbr1 | 10.0.0.152/24 | (NAPT NW) | -- |
| ens19 | VirtIO | mgbr0 | 192.168.0.152/24 | (Mgmt NW) | -- | |
| ens20 | VirtIO | vmbr6 | 192.168.16.152/24 | N6 | -- |
Linux Bridges of Proxmox VE are as follows.
| Linux Bridge | Network CIDR | Interface |
|---|---|---|
| vmbr1 | 10.0.0.0/24 | NAPT NW |
| mgbr0 | 192.168.0.0/24 | Mgmt NW |
| vmbr3 | 192.168.13.0/24 | N3 |
| vmbr4 | 192.168.14.0/24 | N4 |
| vmbr6 | 192.168.16.0/24 | N6 |
Set network instance to internet.
| Network Instance |
|---|
| internet |
Build UPG-VPP on VM-UP
Confirmed Version List
This build instruction is based on vpp.spec of UPG-VPP, and vpp.spec and Dockerfile of FPP-VPP.
I simply confirmed the operation of the following versions.
| UPG-VPP | FPP-VPP | VPP |
|---|---|---|
tag:v1.13.0 | tag:v22.10.13 | branch:stable/2210commit:07e0c05e698cf5ffd1e2d2de0296d1907519dc3d |
tag:v1.12.0 | tag:v22.10.12 | branch:stable/2210commit:07e0c05e698cf5ffd1e2d2de0296d1907519dc3d |
tag:v1.11.0 | tag:v22.10.11 | branch:stable/2210commit:07e0c05e698cf5ffd1e2d2de0296d1907519dc3d |
Install required packages
# apt install build-essential
Get the patch to build on Ubuntu 24.04
# wget https://raw.githubusercontent.com/s5uishida/install_vpp_upf_dpdk/refs/heads/main/patches/build_vpp_ubuntu_24_04.patch
Build VPP v22.10 applied with patches of FPP-VPP v22.10.13
# cd ~
# git clone https://github.com/travelping/fpp-vpp.git
# cd fpp-vpp
# git checkout refs/tags/v22.10.13
# cd ~
# git clone https://github.com/FDio/vpp.git
# cd vpp
# git checkout stable/2210
# git reset --hard 07e0c05e698cf5ffd1e2d2de0296d1907519dc3d
# git am ../fpp-vpp/vpp-patches/*.patch
# patch -p1 < ~/build_vpp_ubuntu_24_04.patch
# make install-dep
# make install-ext-deps
# make build-release
If not building on Ubuntu 24.04, do not apply the patch below.
# patch -p1 < ~/build_vpp_ubuntu_24_04.patch
Then build binary packages as follows.
# make pkg-deb
...
# cd build-root
# ls -l *.deb
-rw-r--r-- 1 root root 240460 Mar 1 13:21 libvppinfra_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 144422 Mar 1 13:21 libvppinfra-dev_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 26432 Mar 1 13:21 python3-vpp-api_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 5726692 Mar 1 13:21 vpp_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 127439896 Mar 1 13:21 vpp-dbg_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 1292882 Mar 1 13:21 vpp-dev_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 5092268 Mar 1 13:21 vpp-plugin-core_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 366340 Mar 1 13:21 vpp-plugin-devtools_22.10.0-33~g3ff675ed2-dirty_amd64.deb
-rw-r--r-- 1 root root 4545978 Mar 1 13:21 vpp-plugin-dpdk_22.10.0-33~g3ff675ed2-dirty_amd64.deb
Build binaries for debugging
If you want to build in debug mode, make as follows.
...
# make build
Then build binary packages as follows.
# make pkg-deb-debug
Install the built VPP packages
When you want to install the VPP packages on another host, first install the following dependent packages.
# apt install libnl-route-3-200
Then install the VPP packages.
# cd build-root
# dpkg -i *.deb
This allows you to operate VPP service using systemctl.
Build UPG-VPP v1.13.0
# cd ~
# git clone https://github.com/travelping/upg-vpp.git
# cd upg-vpp
# git checkout refs/tags/v1.13.0
# make version
# mkdir build
# cd build
# cmake -DVPP_HOME=/root/vpp/build-root/install-vpp-native/vpp ..
# make
Then build binary packages as follows.
# make package
...
# ls -l *.deb
-rw-r--r-- 1 root root 2882952 Mar 1 13:25 upf-plugin_1.13.0_amd64.deb
-rw-r--r-- 1 root root 38748 Mar 1 13:25 upf-plugin-dev_1.13.0_amd64.deb
Install the built UPG-VPP packages
When you want to install the UPG-VPP packages on another host, first install the following dependent packages.
# apt install libhyperscan-dev
Then install the UPG-VPP packages.
# cd build
# dpkg -i *.deb
QFI support in PDU Session Container
UPG-VPP v1.13.0 does not support PDU Session Container.
Therefore, some gNodeBs may not accept GTP traffic from UPG-VPP that does not contain DL PDU SESSION INFORMATION in the PDU Session Container.
In that case, you may try the following patches.
-
Temporary patch for UPG-VPP v1.13.0 based on the OAI patch by referring to here. QFI is fixed to 1.
When pinging between UEs, the UL GTP-U packets from UPG-VPP to gNodeB containPDU Session Containerwith QFI, but the return DL GTP-U packets from UPG-VPP to gNodeB do not containPDU Session Containerwith QFI. -
Patch by @mitmitmitm. To get this patch as follows.
# wget https://github.com/travelping/upg-vpp/compare/master...mitmitmitm:upg-vpp:qfi.diff -O qfi.patchWhen pinging between UEs, the GTP-U packets for both UL/DL from UPG-VPP to gNodeB contain
PDU Session Containerwith QFI.
In addition, with either UPG-VPP, when pinging between the UE and an external node, the GTP-U packets for both UL/DL from UPG-VPP to gNodeB contain PDU Session Container with QFI.
Setup UPG-VPP on VM-UP
Install dpdk-devbind.py
# wget https://raw.githubusercontent.com/DPDK/dpdk/main/usertools/dpdk-devbind.py -O /usr/local/bin/dpdk-devbind.py
# chmod +x /usr/local/bin/dpdk-devbind.py
Case of using kernel module uio_pci_generic
Load kernel module uio_pci_generic
# modprobe uio_pci_generic
Check Interfaces
# lshw -c network -businfo
Bus info Device Class Description
====================================================
pci@0000:00:12.0 network Virtio network device
virtio@1 ens18 network Ethernet interface
pci@0000:00:13.0 network Virtio network device
virtio@2 ens19 network Ethernet interface
pci@0000:00:14.0 network Virtio network device
virtio@3 ens20 network Ethernet interface
pci@0000:00:15.0 network Virtio network device
virtio@4 ens21 network Ethernet interface
pci@0000:00:16.0 network Virtio network device
virtio@5 ens22 network Ethernet interface
Bind ens20/ens21/ens22 interfaces to DPDK compatible driver (e.g. uio_pci_generic here)
# dpdk-devbind.py -b uio_pci_generic 0000:00:14.0 --force
# dpdk-devbind.py -b uio_pci_generic 0000:00:15.0 --force
# dpdk-devbind.py -b uio_pci_generic 0000:00:16.0 --force
Verify DPDK binding
# lshw -c network -businfo
Bus info Device Class Description
====================================================
pci@0000:00:12.0 network Virtio network device
virtio@1 ens18 network Ethernet interface
pci@0000:00:13.0 network Virtio network device
virtio@2 ens19 network Ethernet interface
pci@0000:00:14.0 network Virtio network device
pci@0000:00:15.0 network Virtio network device
pci@0000:00:16.0 network Virtio network device
# dpdk-devbind.py -s
Network devices using DPDK-compatible driver
============================================
0000:00:14.0 'Virtio network device 1000' drv=uio_pci_generic unused=vfio-pci
0000:00:15.0 'Virtio network device 1000' drv=uio_pci_generic unused=vfio-pci
0000:00:16.0 'Virtio network device 1000' drv=uio_pci_generic unused=vfio-pci
Network devices using kernel driver
===================================
0000:00:12.0 'Virtio network device 1000' if=ens18 drv=virtio-pci unused=vfio-pci,uio_pci_generic *Active*
0000:00:13.0 'Virtio network device 1000' if=ens19 drv=virtio-pci unused=vfio-pci,uio_pci_generic *Active*
No 'Baseband' devices detected
==============================
No 'Crypto' devices detected
============================
No 'DMA' devices detected
=========================
No 'Eventdev' devices detected
==============================
No 'Mempool' devices detected
=============================
No 'Compress' devices detected
==============================
No 'Misc (rawdev)' devices detected
===================================
No 'Regex' devices detected
===========================
No 'ML' devices detected
========================
Case of using kernel module vfio-pci
When using the kernel built-in vfio-pci module, please down the ens20/ens21/ens22 interfaces in advance.
And, refer to this and set the kernel to IOMMU mode.
Alternatively, it can be used in No-IOMMU mode.
Then, these interfaces are under DPDK control by running vpp without explicit vfio-pci binding.
Network settings
Down the default interface ens18 of the VM-UP and disable the default GW of ens18.
# ip link set dev ens18 down
Create configuration files
Create /root/upg-vpp directory and put the configuration files there.
/root/upg-vpp/startup.conf
heapsize 2G
unix {
nodaemon
log /tmp/vpp.log
full-coredump
gid vpp
interactive
cli-listen /run/vpp/cli.sock
exec /root/upg-vpp/init.conf
}
logging {
default-log-level info
}
api-trace {
on
}
cpu {
main-core 0
corelist-workers 1
}
api-segment {
gid vpp
}
dpdk {
dev 0000:00:14.0 {name n3}
dev 0000:00:15.0 {name n4}
dev 0000:00:16.0 {name n6}
}
plugins {
path /usr/lib/x86_64-linux-gnu/vpp_plugins/:/usr/local/lib/vpp_plugins/
plugin default {disable}
plugin dpdk_plugin.so {enable}
plugin upf_plugin.so {enable}
}
For example, if you prepare four CPU cores and want to assign CPU core (#0) to main-core and three CPU cores (#1-3) to corelist-workers, configure the startup.conf file as follows.
cpu {
main-core 0
corelist-workers 1-3
}
As a result, each of the three CPU cores has a usage rate of 100% (300% in total). When displayed using the top command, it looks like the following.
top - 22:52:57 up 4 min, 4 users, load average: 2.73, 1.22, 0.47
Tasks: 151 total, 2 running, 149 sleeping, 0 stopped, 0 zombie
%Cpu(s): 75.2 us, 0.2 sy, 0.0 ni, 24.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7935.3 total, 6126.9 free, 1170.5 used, 638.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 6524.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1204 root 20 0 82.2g 981656 29860 R 302.0 12.1 5:48.50 vpp_main <--
102 root 20 0 0 0 0 I 0.3 0.0 0:00.11 kworker/2:1-events
...
/root/upg-vpp/init.conf
Set network instance to internet.
set interface ip table n6 0
set interface mtu 9000 n6
set interface ip address n6 192.168.16.151/24
set interface state n6 up
set interface ip table n4 0
set interface mtu 9000 n4
set interface ip address n4 192.168.14.151/24
set interface state n4 up
set interface ip table n3 0
set interface mtu 9000 n3
set interface ip address n3 192.168.13.151/24
set interface state n3 up
ip route add 0.0.0.0/0 table 0 via 192.168.16.152 n6
upf pfcp endpoint ip 192.168.14.151 vrf 0
upf node-id ip4 192.168.14.151
upf nwi name internet vrf 0
upf specification release 16
upf gtpu endpoint ip 192.168.13.151 nwi internet
By adding the following line as in init.conf above,
upf specification release 16
FTUP: Supported is set in UP Function Features of PFCP Association Setup Response from UPG-VPP.
Run UPG-VPP on VM-UP
First, create group vpp if it doesn't exist.
# addgroup vpp
Then run UPG-VPP.
# /usr/bin/vpp -c /root/upg-vpp/startup.conf
vat-plug/load [error ]: vat_plugin_register: dhcp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: lacp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: builtinurl plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: memif plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: lb plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: tls_openssl plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: mdata plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: oddbuf plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: nsh plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: vrrp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: ikev2 plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: af_xdp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: rdma plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: l2tp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: avf plugin not loaded...
vat-plug/load [error ]: pot_vat_plugin_register: pot plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: mactime plugin not loaded...
vat-plug/load [error ]: vat_plugin_register_gpe: lisp_gpe plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: stn plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: geneve plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: lldp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: arping plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: acl plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: ct6 plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: flowprobe plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: nsim plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: vmxnet3 plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: cdp plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: gtpu plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: http_static plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: adl plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: dns plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: pppoe plugin not loaded...
vat-plug/load [error ]: vat_plugin_register: tracedump plugin not loaded...
_______ _ _ _____ ___
__/ __/ _ \ (_)__ | | / / _ \/ _ \
_/ _// // / / / _ \ | |/ / ___/ ___/
/_/ /____(_)_/\___/ |___/_/ /_/
vpp#
Although the plugin load errors are output, this is not a problem as dpdk_plugin.so and upf_plugin.so can be loaded as shown below.
vpp# show plugins
Plugin path is: /usr/lib/x86_64-linux-gnu/vpp_plugins/:/usr/local/lib/vpp_plugins/
Plugin Version Description
1. upf_plugin.so v1.13.0 User Plane Gateway
2. dpdk_plugin.so 22.10.0-33~g3ff675ed2-dirty Data Plane Development Kit (DPDK)
vpp#
The status of each thread running by VPP is as follows.
vpp# show threads
ID Name Type LWP Sched Policy (Priority) lcore Core Socket State
0 vpp_main 1145 other (0) 0 0 0
1 vpp_wk_0 workers 1153 other (0) 1 1 0
vpp#
To check the log, run the following command. If necessary, change the log level in startup.conf.
vpp# show logging
Run UPG-VPP when installing the built packages
Changes when installing the built packages
The configuration files used when operating VPP service with systemctl are located in the following directory by default.
Then see here for the original files.
/etc/vpp/startup.conf
--- startup.conf.orig 2025-12-21 08:44:46.000000000 +0900
+++ startup.conf 2025-03-20 21:51:39.000000000 +0900
@@ -7,7 +7,7 @@
gid vpp
interactive
cli-listen /run/vpp/cli.sock
- exec /root/upg-vpp/init.conf
+ exec /etc/vpp/init.conf
}
api-trace {
/etc/vpp/init.conf
There is no change.
# systemctl restart vpp
# systemctl status vpp
● vpp.service - vector packet processing engine
Loaded: loaded (/usr/lib/systemd/system/vpp.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-03-29 07:40:04 JST; 5s ago
Process: 1120 ExecStartPre=/sbin/modprobe uio_pci_generic (code=exited, status=0/SUCCESS)
Main PID: 1121 (vpp_main)
Tasks: 3 (limit: 9434)
Memory: 1.4G (peak: 1.4G)
CPU: 5.735s
CGroup: /system.slice/vpp.service
└─1121 /usr/bin/vpp -c /etc/vpp/startup.conf
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: flowprobe plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: nsim plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: vmxnet3 plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: cdp plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: gtpu plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: http_static plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: adl plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: dns plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: pppoe plugin not loaded...
Mar 29 07:40:05 upg-vpp21 vpp[1121]: vat-plug/load [error ]: vat_plugin_register: tracedump plugin not loaded...
Verify interfaces at VPP
vpp# show hardware-interfaces
Name Idx Link Hardware
local0 0 down local0
Link speed: unknown
local
0: format_dpdk_device:444: rte_eth_dev_rss_hash_conf_get returned -95
n3 1 up n3
Link speed: unknown
RX Queues:
queue thread mode
0 vpp_wk_0 (1) polling
TX Queues:
TX Hash: [name: hash-eth-l34 priority: 50 description: Hash ethernet L34 headers]
queue shared thread(s)
0 yes 0-1
Ethernet address bc:24:11:bd:8f:f3
Red Hat Virtio
carrier up full duplex max-frame-size 9022
flags: admin-up maybe-multiseg tx-offload
Devargs:
rx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
tx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
pci: device 1af4:1000 subsystem 1af4:0001 address 0000:00:14.00 numa 0
max rx packet len: 9728
promiscuous: unicast off all-multicast on
vlan offload: strip off filter off qinq off
rx offload avail: vlan-strip udp-cksum tcp-cksum tcp-lro vlan-filter
scatter
rx offload active: scatter
tx offload avail: vlan-insert udp-cksum tcp-cksum tcp-tso multi-segs
tx offload active: udp-cksum tcp-cksum multi-segs
rss avail: none
rss active: none
tx burst function: (not available)
rx burst function: (not available)
0: format_dpdk_device:444: rte_eth_dev_rss_hash_conf_get returned -95
n4 2 up n4
Link speed: unknown
RX Queues:
queue thread mode
0 vpp_wk_0 (1) polling
TX Queues:
TX Hash: [name: hash-eth-l34 priority: 50 description: Hash ethernet L34 headers]
queue shared thread(s)
0 yes 0-1
Ethernet address bc:24:11:1b:80:61
Red Hat Virtio
carrier up full duplex max-frame-size 9022
flags: admin-up maybe-multiseg tx-offload
Devargs:
rx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
tx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
pci: device 1af4:1000 subsystem 1af4:0001 address 0000:00:15.00 numa 0
max rx packet len: 9728
promiscuous: unicast off all-multicast on
vlan offload: strip off filter off qinq off
rx offload avail: vlan-strip udp-cksum tcp-cksum tcp-lro vlan-filter
scatter
rx offload active: scatter
tx offload avail: vlan-insert udp-cksum tcp-cksum tcp-tso multi-segs
tx offload active: udp-cksum tcp-cksum multi-segs
rss avail: none
rss active: none
tx burst function: (not available)
rx burst function: (not available)
0: format_dpdk_device:444: rte_eth_dev_rss_hash_conf_get returned -95
n6 3 up n6
Link speed: unknown
RX Queues:
queue thread mode
0 vpp_wk_0 (1) polling
TX Queues:
TX Hash: [name: hash-eth-l34 priority: 50 description: Hash ethernet L34 headers]
queue shared thread(s)
0 yes 0-1
Ethernet address bc:24:11:a4:08:34
Red Hat Virtio
carrier up full duplex max-frame-size 9022
flags: admin-up maybe-multiseg tx-offload
Devargs:
rx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
tx: queues 1 (max 1), desc 256 (min 32 max 32768 align 1)
pci: device 1af4:1000 subsystem 1af4:0001 address 0000:00:16.00 numa 0
max rx packet len: 9728
promiscuous: unicast off all-multicast on
vlan offload: strip off filter off qinq off
rx offload avail: vlan-strip udp-cksum tcp-cksum tcp-lro vlan-filter
scatter
rx offload active: scatter
tx offload avail: vlan-insert udp-cksum tcp-cksum tcp-tso multi-segs
tx offload active: udp-cksum tcp-cksum multi-segs
rss avail: none
rss active: none
tx burst function: (not available)
rx burst function: (not available)
tx frames ok 1
tx bytes ok 42
rx frames ok 1
rx bytes ok 42
extended stats:
rx_good_packets 1
tx_good_packets 1
rx_good_bytes 42
tx_good_bytes 42
rx_q0_packets 1
rx_q0_bytes 42
tx_q0_packets 1
tx_q0_bytes 42
rx_q0_good_packets 1
rx_q0_good_bytes 42
rx_q0_undersize_packets 1
tx_q0_good_packets 1
tx_q0_good_bytes 42
tx_q0_broadcast_packets 1
tx_q0_undersize_packets 1
upf-nwi-internet 4 up upf-nwi-internet
Link speed: unknown
GTPU
vpp#
vpp# show interface address
local0 (dn):
n3 (up):
L3 192.168.13.151/24
n4 (up):
L3 192.168.14.151/24
n6 (up):
L3 192.168.16.151/24
upf-nwi-internet (up):
vpp#
vpp# show interface rx-placement
Thread 1 (vpp_wk_0):
node dpdk-input:
n3 queue 0 (polling)
n4 queue 0 (polling)
n6 queue 0 (polling)
vpp#
vpp# show udp punt
IPV4 UDP ports punt : 2152, 8805
IPV6 UDP ports punt : 2152
vpp#
Setup Data Network Gateway on VM-DN
First, uncomment the next line in the /etc/sysctl.conf file and reflect it in the OS.
net.ipv4.ip_forward=1
# sysctl -p
Next, configure NAPT and routing to N6 IP address of UPG-VPP.
# iptables -t nat -A POSTROUTING -s <DN> -j MASQUERADE
# ip route add <DN> via 192.168.16.151 dev ens20
Note. Set <DN> according to the core network.
ex) 10.45.0.0/16
How to capture packets on DPDK ports
There are two ways to do this.
- How to run
dpdk-dumpcap - How to run
tcpdumportsharkon another VM by configuring a bridge interface linked to a network interface under DPDK control
With the above steps, UPG-VPP has been constructed. You will be able to work UPG-VPP with Open5GS and free5GC. I would like to thank the excellent developers and all the contributors of UPG-VPP and DPDK.
Sample Configurations
For 5G
- Open5GS 5GC & UERANSIM UE / RAN Sample Configuration - UPG-VPP(DPDK/VPP UPF)
- free5GC 5GC & UERANSIM UE / RAN Sample Configuration - UPG-VPP(DPDK/VPP UPF)
For 4G
Changelog (summary)
- [2026.03.01] Changed the UPG-VPP OS from Ubuntu 22.04 to 24.04.
- [2025.12.20] Added a note about the QFI patch by @mitmitmitm.
- [2025.05.25] Deleted the description of the build procedure for oai-cn5g-upf-vpp, and changed to UPG-VPP only.
- [2024.10.14] Changed the VM environment from Virtualbox to Proxmox VE.
- [2024.06.04] Added confirmation of operation with gNodeB of srsRAN_Project.
- [2024.05.04] Changed the UPG-VPP OS from Ubuntu 20.04 to 22.04.
- [2024.03.30] Updated to
v1.13.0tag. - [2024.02.24] Added a procedure to build and install the packages.
- [2024.02.11] Updated to
v1.12.0tag. Added the information that may be useful when gNodeB does not accept GTP traffic from UPG-VPP. - [2023.12.12] There is no change from
v1.11.0-rc.2, and it has been tagged asv1.11.0. - [2023.12.03] Updated to
v1.11.0-rc.2tag. - [2023.12.02] Added case of using kernel built-in vfio-pci module.
- [2023.11.08] Added a building procedure for UPG-VPP v1.10.0 on Host.
- [2023.09.13] Added sample configurations.
- [2023.07.09] Changed to build all VPP plugins.
- [2023.07.05] When installing on host, changed to use the
stable/1.2branch oftravelping/upg-vppdescribed inoai-cn5g-upf-vpp/docker/Dockerfile.*. - [2023.06.18] Added
upf specification release 16line ininit.conf. Along with this, the corresponding description was deleted because the correspondence in the case of Open5GS became unnecessary. - [2023.06.15] Initial release.