简介
VPP平台是一个可扩展的框架,提供开箱即用的可供生产环境使用的交换机/路由器功能。 它是一种可在x86 cpu上运行的高性能数据包处理堆栈。VPP采用模块化设计, 该框架允许任何人“插入”新的功能节点而无需更改核心/内核代码。
一、VPP编译(开发版本)
系统:ubuntu18.04.1 TLS
vpp版本:19.01-rc0
建议使用具有root权限的用户,并将源补全,初始源可能不完整。
$ cd / $ git clone http://gerrit.fd.io/r/vpp $ cd vpp $ make install-dep $ make build
1 2 3 4 5 | $ cd / $ git clone http://gerrit.fd.io/r/vpp $ cd vpp $ make install-dep $ make build |
命令行下可以通过make,输入编译时的argument values,默认可用。
二、VPP的使用
VPP可以在container、vm等多种环境中使用,这里我们简单介绍vpp的包转发。
1.修改vpp的startup.conf
/etc/vpp/startup.conf(如果没有请自行加上)如下:
unix { nodaemon log /var/log/vpp/vpp.log interactive full-coredump } api-trace { on } dpdk { socket-mem 1024 }
1 2 3 4 5 6 7 8 9 10 11 12 | unix { nodaemon log /var/log/vpp/vpp.log interactive full-coredump } api-trace { on } dpdk { socket-mem 1024 } |
2.加载DPDK网卡驱动
加载vfio-pci或者uio_pci_generic等dpdk网卡驱动,将要进行绑定的网卡关闭。
3.启动VPP
# /vpp/build-root/install-vpp_debug-native/vpp/bin/vpp -c /etc/vpp/startup.conf DBGvpp# show int Name Idx State MTU(L3/IP4/IP6/MPLS) Counter Count GigabitEthernet2/0/0 1 down 9000/0/0/0 local0 0 down 0/0/0/0
1 2 3 4 5 | # /vpp/build-root/install-vpp_debug-native/vpp/bin/vpp -c /etc/vpp/startup.conf DBGvpp# show int Name Idx State MTU(L3/IP4/IP6/MPLS) Counter Count GigabitEthernet2/0/0 1 down 9000/0/0/0 local0 0 down 0/0/0/0 |
4.配置网卡
(X.X.X.X是该网卡down掉之前的 ip,192.168.1.2 是与X.X.X.X在一个子网的ip)
DBGvpp# set int ipaddress GigabitEthernet2/2/0 X.X.X.X/24 DBGvpp# set int state GigabitEthernet2/2/0 up DBGvpp# ip probe 192.168.1.2 GigabitEthernet2/2/0 DBGvpp# sh ip arp Time FIB IP4 Stat Ethernet Interface 2782.7392 0 192.168.1.2 00:50:56:b7:05:bb GigabitEthernet2/2/0 DBGvpp# sh ip fib Table0, fib_index 0, flow hash: src dst sport dport proto Destination Packets Bytes Adjacency 192.168.1.0/24 0 0 weight 1, index 5 arp GigabitEthernet2/2/0 192.168.1.1/24 192.168.1.1/32 0 0 weight 1, index 4 local 192.168.1.1/24 192.168.1.2/32 0 0 weight 1, index 3 GigabitEthernet2/2/0 IP4: 00:50:56:b7:05:bc -> 00:50:56:b7:05:bb ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DBGvpp# set int ipaddress GigabitEthernet2/2/0 X.X.X.X/24 DBGvpp# set int state GigabitEthernet2/2/0 up DBGvpp# ip probe 192.168.1.2 GigabitEthernet2/2/0
DBGvpp# sh ip arp Time FIB IP4 Stat Ethernet Interface 2782.7392 0 192.168.1.2 00:50:56:b7:05:bb GigabitEthernet2/2/0 DBGvpp# sh ip fib Table0, fib_index 0, flow hash: src dst sport dport proto Destination Packets Bytes Adjacency 192.168.1.0/24 0 0 weight 1, index 5 arp GigabitEthernet2/2/0 192.168.1.1/24 192.168.1.1/32 0 0 weight 1, index 4 local 192.168.1.1/24 192.168.1.2/32 0 0 weight 1, index 3 GigabitEthernet2/2/0 IP4: 00:50:56:b7:05:bc -> 00:50:56:b7:05:bb ... |
5.开启DPDK节点包追踪
DBGvpp# trace add dpdk-input 10
6.测试包转发
从192.168.1.2 pingX.X.X.X, ping 成功,表示配置成功
显示追踪信息:
DBGvpp# show trace -------------------Start of thread 0 vpp_main ------------------- Packet 1 01:10:14:046893: dpdk-input GigabitEthernet2/2/0 rx queue 0 buffer 0x631e: current data 0, length102, free-list 0, totlen-nifb 0, trace 0x0 PKT MBUF: port 0, nb_segs 1, pkt_len 102
1 2 3 4 5 6 7 8 | DBGvpp# show trace -------------------Start of thread 0 vpp_main ------------------- Packet 1
01:10:14:046893: dpdk-input GigabitEthernet2/2/0 rx queue 0 buffer 0x631e: current data 0, length102, free-list 0, totlen-nifb 0, trace 0x0 PKT MBUF: port 0, nb_segs 1, pkt_len 102 |
如果看到上面这样的包, vpp 成功转发。