GTP-U User Plane Function (UPF) based on VPP。
本文主要讲解基于vpp的开源项目upg-vpp的编译安装运行。
1、 upg-vpp 开源地址:
在百度上搜索upf vpp会搜索到开源的项目,但是在readme介绍中,当前版本已经迁移到新的项目上并命名为upg-vpp。新的库不再包含vpp的代码:
代码语言:javascript复制旧github地址:https://github.com/travelping/vpp/
新github地址:https://github.com/travelping/upg-vpp
2、下载
代码语言:javascript复制git clone https://github.com/travelping/upg-vpp.git
3、编译及安装
进入upg-vpp目录执行make vpp 或make update-vpp,会下载vpp的源码。为了保证下载速度,vpp.spec文件中的把vpp路径修改成gitee.com网站的路径。
代码语言:javascript复制#修改vpp.spec文件中VPP_REPO git路径:
VPP_COMMIT=53ec96777c32d610c7bc2d387d2c098749d49a18
#VPP_REPO=https://github.com/fdio/vpp.git
VPP_REPO=https://gitee.com/xxx/vpp.git
VPP_BRANCH=master
#执行make upte-vpp
make update-vpp
执行命令make update-vpp会执行hack/update-vpp.sh脚本 下载vpp源码并打patch。
代码语言:javascript复制20:44:49]root:upg-vpp$ cat hack/update-vpp.sh
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
if [[ ${BASH:-} ]]; then
# not compatible with alpine's sh
set -o errtrace
cd "$(dirname "${BASH_SOURCE}")/.."
fi
. vpp.spec
rm -rf vpp
git clone -b "${VPP_BRANCH}" -n "${VPP_REPO}"
(
cd vpp
git checkout -b downstream "${VPP_COMMIT}"
git am ../vpp-patches/*
cd src/plugins
ln -s ../../../upf .
)
可以看到再vpp/src/plugins 目录下做了一个软连接。 具体如下:
代码语言:javascript复制[20:46:57]root:vpp$ ls src/plugins/ -l | grep upf
lrwxrwxrwx 1 root root 12 Oct 15 19:46 upf -> ../../../upf
后面正常编译vpp就可以了。
代码语言:javascript复制make install-dep
make build
make pkg-deb-debug
#打包完成后进入build-root 目录下安装:
dpkg -i *.deb
4、运行vpp,查询upf库是否启动:
我们可以看到upf插件已经加载完成。
代码语言:javascript复制[20:51:06]root:usertools$ vppctl show plugins | grep upf
11. upf_plugin.so 20.09-rc0~284-gbf453f080
总结:
编译还是比较顺利的。upf库会依赖hyperscan,是在打patch的时候修改vpp Makefile文件。