VPP 是一個開源的軟件項目,由 Cisco 發起,用于高性能網絡數據包處理。它提供了一個模塊化的、可擴展的網絡數據平面框架,支持各種網絡功能虛擬化(NFV)和軟件定義網絡(SDN)應用。VPP 使用向量化和并行處理技術,能夠在普通的通用處理器上實現高吞吐量和低延遲的數據包處理。
1. 編譯
分支切換成stable/2302,否則由于libc的原因,無法在centos7上編譯。
git checkout stable/2302
打上相關patch
1.1. llvm編譯過程
extra庫中的xdp需要使用到llvm編譯器,其編譯過程如下:
llvm編譯過程 
yum install -y epel-release
yum groupinstall -y "Development tools"
yum install -y elfutils-libelf-devel cmake3 git bison flex ncurses-devel
yum install -y devtoolset-8
  
git clone ccc://github.com/llvm/llvm-project.git
  
source /opt/rh/devtoolset-8/enable
  
  
cd llvm-project
mkdir build
cd build
  
cmake3 -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release
make -j
make install
1.2.  MLX驅動
如果需要mlx驅動的話,需要編譯mlx相關的驅動
1.3. Vpp編譯
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH
make install-dep
make install-ext-deps DPDK_MLX5_PMD=y DPDK_MLX4_PMD=n DPDK_MLX_IBV_LINK=dlopen
make build vpp_uses_dpdk_mlx5_pmd=yes DPDK_MLX_IBV_LINK=dlopen
#RPM包
make pkg-rpm vpp_uses_dpdk_mlx5_pmd=yes DPDK_MLX_IBV_LINK=dlopen -j4
make install-ext-deps會去下載以下外部依賴源碼包。
如(meson、xdp-tools、rdma-core、quickly、dpdk)
1.4. 問題列表
問題1: 會有個getrandom的依賴問題,與libc相關
解決: spec中加 . /opt/rh/devtoolset-9/enable
問題2:類型不對, error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
解決: 將i32替換成u32
問題3:recvmmsg重復定義
+#ifndef _GNU_SOURCE
問題4: rpm打包時會遇到dwarf5與rpmbuild的dwarf4不匹配問題,是因為vpp編譯使用的是clang工具,clang工具默認是使用dwarf5,而gcc默認的是dwarf4.
spec中加
+export CFLAGS="-g -gdwarf-4"
+export CXXFLAGS="-g -gdwarf-4"
+export LDFLAGS="-Wl,--build-id"
2. 安裝
rpm -ivh vpp-selinux-policy.rpm
rpm -ivh vpp-lib-xxx.rpm
rpm -ivh vpp-xx.rpm
rpm -ivh vpp-plugins-xxx.rpm
3. 配置啟動
相應的插件對應的相應的配置。
vppctl命令:FD.io VPP: Interface
vim /etc/vpp/startup.conf
#!/bin/bash
#bind nic
modprobe uio_pci_generic
dpdk-devbind.py -b uio_pci_generic 0000:03:00.0
#set memory
#/etc/sysctl.d/80-vpp.conf
#modify startup.conf
#run
vpp -c $PWD/startup_vm.conf