首先按照官方文档编译:
DPDK官方文档:http://dpdk.org/doc/guides/index.html
"A simple forwarding test with pcap PMD which works with any NIC (with performance penalties)"
Extract sources.
tar xf dpdk.tar.gz
cd dpdk
Enable pcap (libpcap headers are required).
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
Build libraries and test application (Linux headers may be needed with default config).
make
Reserve huge pages memory.
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Run poll-mode driver test (with a cable between ports).
build/app/testpmd -c7 -n3 --vdev=eth_pcap0,iface=eth0 --vdev=eth_pcap1,iface=eth1 ---i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048
testpmd> show port stats all
##################### NIC statistics for port 0 #################
RX-packets: 0 RX-errors: 0 RX-bytes: 0
TX-packets: 0 TX-errors: 0 TX-bytes: 0
#############################################################
##################### NIC statistics for port 1 #################
RX-packets: 0 RX-errors: 0 RX-bytes: 0
TX-packets: 0 TX-errors: 0 TX-bytes: 0
#############################################################
testpmd> start tx_first
testpmd> stop
---------------------- Forward statistics for port 0 ----------------------
RX-packets: 2377688 RX-dropped: 0 RX-total: 2377688
TX-packets: 2007009 TX-dropped: 0 TX-total: 2007009
----------------------------------------------------------------------------
---------------------- Forward statistics for port 1 ----------------------
RX-packets: 2006977 RX-dropped: 0 RX-total: 2006977
TX-packets: 2377720 TX-dropped: 0 TX-total: 2377720
----------------------------------------------------------------------------
+++++++++++++ Accumulated forward statistics for all ports++++++++++++
RX-packets: 4384665 RX-dropped: 0 RX-total: 4384665
TX-packets: 4384729 TX-dropped: 0 TX-total: 4384729
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
编译过程中需要安装libpcap库,安装步骤如下:
在linux系统下,安装只需要三步:1. ./configure;2. make;3. make install。
在按照这三部安装的过程中遇到了两个问题,是安装过程中出现的错误。这些错误是因为没有对应的工具。我把错误和解决办法罗列如下,和大家一起分享:
第一步,配置过程中出现这样的一个错误:./configure:error:Your operating system's lex is insufficient to compile libpcap.意思就是你的操作系统的词法分析器(lex)不足以编译libpcap。有关这个lex的详细资料大家可以百度一下。然后我查阅了资料,解决办法是需要安装一个flex,sudo apt-get install flex回车。安装这个后就可以通过了,生成Makefile文件以及其他配置文件。
第二步,make编译过程中也遇到了一个错误:make:yacc: 命令未找到。yacc(Yet Another Compiler Compiler)是unix/linux上用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器使用C语言写成的语法解析器(Parser),需要与词法分析器lex一起使用,再把两部分产生出来的C程序一并编译。解决这个问题的办法是:安装bison,关于bison的详细资料,这儿不啰嗦了。sudo apt-get install bison。还要注意一个问题,在编译的时候可能有一些文件有权限要求,所以最好使用sudo make命令。
第三步,make install 安装。这一步倒没出现问题。不过也最好使用sudo make install 吧。
接下来就是使用这个libpcap库了。
在安装成功后,接下来在使用该库编译或者执行编译之后的可执行文件时,或许还会遇到如下的问题:
1.编译时:比如,
gcc packet.o -lpcap -lpthread /* -lpcap是用于调用libpcap库的,所以不要忘了添加上。*/
/usr/local/lib/libpcap.so: undefined reference to `pcap_parse’
collect2: ld returned 1 exit status
对于这样的错误信息,首先确认一下是否安装了libpcap-dev,如果没有可以先安装一下:sudo apt-get install libpcap-dev;我尝试了一下安装这个以后问题并没有解决,但是我不确定下面的方法是不是和这一步有关系,我是先尝试这个方案,最后不行。
然后下面的解决的办法确实让人很难想到:重新安装libpcap库。进入解压后的库目录里,首先make clean,然后再从新安装一遍:1. ./configure;2. make;3. make install;问题就解决了。这个解决方法很难让我们想到,具体是什么原因,还待研究。
2.执行时:比如,
编译通过后生成可执行文件:a.out,然后再终端里执行:sudo ./a.out,出现如下错误信息:
error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory
解决办法是:将/usr/lib/libpcap.so库文件改一下名字,改成libpcap.so.1就可以了。当然也可以为libpcap.so.1建一个软连接:ln -s /usr/lib/libpcap.so /usr/lib/libpcap.so.1;这样问题就解决了。