netmap是作为Linux的一个内核模块存在的,安装netmap需要我们拿到netmap的源代码(不需要获取所有的linux代码,只需要linux头文件就可以了)并结合Linux内核源代码进行编译。
安装Kernel头文件
Note: 只有centos系统才需要这一步,ubuntu系统直接看下一步即可。
安装的头文件需要和内核的版本完全一致才可以。通过uname -a
命令查看内核版本:
通过 google 搜索 3.10.0-1160.99.1.el7.x86_64 ,搜索该内核版本。然后点击下载即可,如图所示:
下载成功之后是个 rpm 文件,将其移动到想要安装 netmap 的服务器,使用 rpm -ivh 3.10.0-1160.99.1.el7.x86_64.rpm
安装即可。安装完成之后可以在 /usr/src/kernels/
目录下看到
安装 netmap
- 下载 netmap 源码
git clone https://github.com/luigirizzo/netmap.git
cd LINUX
./configure --show-drivers
指令查看netmap支持的网络驱动
ethtool -i <interface_name>
指令查看网卡驱动
- 配置
netmap ./configure --drivers=virtio_net.c --kernel-sources=/usr/src/kernels/3.10.0-327.el7.x86_64 --kernel-dir=/usr/src/kernels/3.10.0-327.el7.x86_4/
(virtio_net.c是netmap需要使用的网卡驱动程序,如果是 ubuntu 不用指定kernel-sources
和kernel-dir
) make -j8 && make install
insmod netmap.ko
将编译出来的 netmap 内核模块加载到内核中。内核模块是一种可以动态地插入到运行中的内核中的代码,它们允许在无需重新启动系统的情况下扩展或修改内核功能。
Note: lsmod 指令可以查看内核已经加载的模块。insmod 指令加载的内核模块在每次内核重启之后都需要重新加载。
- 运行
./build-apps/pkt-gen/pkt-gen -i eth0 -f rx
进行收包测试,如果是 ssh 连接到服务器的别擅自尝试,会导致断线,因为此时内核协议栈变成了旁路。