VPP Labs

环境安装

  • Debian 10
1
sudo apt install gcc g++ vim cmake curl wget ifconfig bridge-utils -y
  • repo添加
1
curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash
  • 安装VPP
1
2
3
4
sudo apt-get update
sudo apt-get install vpp vpp-plugin-core vpp-plugin-dpdk -y
# 可选择的安装
# sudo apt-get install vpp vpp-plugin-core vpp-plugin-dpdk vpp-dbg vpp-dev vpp-ext-deps vpp-api-python vpp-api-java -y

正式实验

host-vpp连接实验

实验链接:https://s3-docs.fd.io/vpp/22.06/gettingstarted/progressivevpp/interface.html

Figure: Create Interface Topology

根据如上的拓扑图,创建veth

1
2
3
sudo ip link add name vpp1out type veth peer name vpp1host
sudo ip link set dev vpp1out up
sudo ip link set dev vpp1host up

添加IP地址

1
2
sudo ip addr add 10.10.1.1/24 dev vpp1host
ip addr show vpp1host

创建vpp接口

1
2
ps -eaf | grep vpp
sudo /usr/bin/vpp -c vpp1.conf

vpp1.conf内容如下

1
2
3
unix {cli-listen /run/vpp/cli-vpp1.sock}
api-segment { prefix vpp1 }
plugins { plugin dpdk_plugin.so { disable } }

进入vpp1的shell界面

1
2
3
4
5
6
7
8
9
10
sudo vppctl -s /run/vpp/cli-vpp1.sock
# 创建接口
create host-interface name vpp1out
show hardware
set int state host-vpp1out up
show int
# 添加IP
set int ip address host-vpp1out 10.10.1.2/24
show int addr

到此就完成了上述的创建链接的实验。

trace 实验

实验链接:https://s3-docs.fd.io/vpp/22.06/gettingstarted/progressivevpp/traces.html

本实验沿用创建链接实验的环境,基本的trace命令:

1
2
3
4
5
6
7
# 查看跟踪的buffer[max COUNT]
show trace
# 清除跟踪的buffer并且释放内存
clear trace
# 添加跟踪
trace add af-packet-input 10
# 可以跟踪的内容查看上述的链接

host2vpp

在vpp1的shell内选择上述跟踪的内容,在host上执行:

1
ping -c 1 10.10.1.2

然后回到vpp1的shell内查看跟踪情况:

1
2
show trace
clear trace

vpp2host

在vpp1的shell内执行:

1
2
ping 10.10.1.1
show trace

ARP Table

在vpp1的shell内:

1
show ip neighbors

Routing Table

在vpp1的shell内:

1
show ip fib

连接两个VPP实例实验

实验链接:https://s3-docs.fd.io/vpp/22.06/gettingstarted/progressivevpp/twovppinstances.html

Connect two FD.io VPP topology

vpp2.sock 创建

本实验同样沿用vpp1的配置,我们类比创建vpp2链接,配置文件如下

1
2
3
unix {cli-listen /run/vpp/cli-vpp2.sock}
api-segment { prefix vpp2 }
plugins { plugin dpdk_plugin.so { disable } }

在host上执行:

1
sudo vpp -c vpp2.conf

进入vpp2的shell:

1
2
3
4
5
#host执行
sudo vppctl -s /run/vpp/cli-vpp2.sock
#vpp shell执行
show version
quit

memif接口创建

在vpp1端创建memif接口:

1
2
3
4
5
6
# host执行
sudo vppctl -s /run/vpp/cli-vpp1.sock
# vpp shell执行
create interface memif id 0 master
set int state memif0/0 up
set int ip address memif0/0 10.10.2.1/24

在vpp2端创建memif端口:

1
2
3
4
5
6
7
# host执行
sudo vppctl -s /run/vpp/cli-vpp2.sock
# vpp shell执行
create interface memif id 0 slave
set int state memif0/0 up
set int ip address memif0/0 10.10.2.2/24

在vpp1端ping

1
2
# vpp1 shell执行
ping 10.10.2.2

在vpp2端ping

1
2
# vpp2 shell执行
ping 10.10.2.1

路由实验

实验链接:https://s3-docs.fd.io/vpp/22.06/gettingstarted/progressivevpp/routing.html

Connect two FD.io VPP topology

实验沿用之前的环境,设置host上的路由

1
2
sudo ip route add 10.10.2.0/24 via 10.10.1.2
ip route

在vpp2上设置返回:

1
ip route add 10.10.1.0/24  via 10.10.2.1

在host上ping vpp2

1
ping 10.10.2.2

VPP Labs
https://www.bencorn.com/2022/03/22/VPP-Labs/
作者
Bencorn
发布于
2022年3月22日
许可协议