注:本文是参照了一些其他文章,原文地址点击这里
dpdk-pdump
DPDK 16.07开始引入了pdump的库来进行网口的抓包。终于可以解决我们一直以来比较纠结的一个debug方式。
我们现在配合openvswitch来看一下dpdk-pdump如何进行抓包。
配置编译
DPDK是需要编译OVS之前就已经编译好的,如果编译rpm的话,我们的库需要编译成动态库,注意:这个时候坑就来了。
配置文件修改如下:
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_LIBRTE_PDUMP=y
顺便说一下如果编译成动态库的话,所有的驱动也都是动态库,这个时候编译的pdump没有链接驱动的动态库的话,抓包也会失败,这里需要将pdump的Makefile添加rte_pmd_pcap动态库的链接。
抓包简单原理
测试方法
启动ovs
systemctl start openvswitch
给ovs添加dpdk端口
ovs-vsctl add-br br0
ovs-vsctl set Bridge br0 datapath_type=netdev
ovs-vsctl add-port br0 dpdk0
ovs-vsctl set Interface dpdk0 type=dpdk
启动抓包命令
dpdk-pdump -- --pdump port=0,queue=*,rx-dev=/tmp/pkts.pcap --server-socket-path=/var/run/openvswitch
查看抓包
$ tcpdump -r pkts.pcap
reading from file /tmp/pkts.pcap, link-type EN10MB (Ethernet)
13:14:42.4270163 IP 2.2.2.2.0 > 1.1.1.1.0: Flags [none], seq 0:6, win 0, length 6
13:14:44.126555 IP 2.2.2.2.0 > 1.1.1.1.0: Flags [none], seq 0:6, win 0, length 6