Ubuntu16.04编译netmap-终极解决方案

1 前言

最近想着自己实现用户态网络协议栈,需要依赖netmap获取底层网卡数据,一般这种三方库编译都是很easy的,我也是抱着这个思想结果遇到很多坑,这里记录一下希望可以给后面的人提供一些参考。

2 环境准备

首先更新一下源:

sudo apt-get update

安装依赖库,netmap需要依赖内核的头文件,这里需要提前安装一下

apt-get install -y linux-headers-$(uname -r)

3 netmap下载

git clone https://github.com/luigirizzo/netmap.git

4 编译

根据网上网上看到最多的是一键三连:

./configure && make && make install

然后就各种报错了,这里做了删减,保留主要信息如下:大概的意思就是需要下载这些库,然后保存到
/home/learn/netmap-master/LINUX/ext-drivers目录下。因为需要梯子的缘故都下载失败了,只能苦逼手动下载了一遍。后面才知道其实只需要下载你需要支持的网卡驱动就行…比如比较常用的eth对应的就是e1000e-3.4.0.2.tar.gz的包。

***     --kernel-sources=/path/to/sources

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/mlnx-en-5.3-1.0.0.1-ubuntu18.04-x86_64.tgz || wget http://content.mellanox.com/ofed/MLNX_EN-5.3-1.0.0.1/mlnx-en-5.3-1.0.0.1-ubuntu18.04-x86_64.tgz -P /home/learn/netmap-master/LINUX/ext-drivers

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/i40e-2.4.6.tar.gz || wget https://sourceforge.net/projects/e1000/files/i40e%20stable/2.4.6/i40e-2.4.6.tar.gz -P /home/learn/netmap-master/LINUX/ext-drivers/

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/ixgbevf-4.3.2.tar.gz || wget https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/4.3.2/ixgbevf-4.3.2.tar.gz -P /home/learn/netmap-master/LINUX/ext-drivers/

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/ixgbe-5.3.8.tar.gz || wget https://sourceforge.net/projects/e1000/files/ixgbe%20stable/5.3.8/ixgbe-5.3.8.tar.gz -P /home/learn/netmap-master/LINUX/ext-drivers/

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/igb-5.3.5.20.tar.gz || wget https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.20/igb-5.3.5.20.tar.gz -P /home/learn/netmap-master/LINUX/ext-drivers/

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/e1000e-3.4.0.2.tar.gz || wget https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.4.0.2/e1000e-3.4.0.2.tar.gz -P /home/learn/netmap-master/LINUX/ext-drivers/

***   test -e /home/learn/netmap-master/LINUX/ext-drivers/virtio_net.c || wget https://raw.githubusercontent.com/torvalds/linux/v4.9/drivers/net/virtio_net.c -P /home/learn/netmap-master/LINUX/ext-drivers/

下载后的目录:
在这里插入图片描述
再次一键三连基本就很ok:

./configure --kernel-sources=/usr/src/linux-headers-4.4.0-142-generic
make -j 4 && make install

这里有个注意点就是configure在适配内核的时候,执行会卡很久,不用怀疑失败了,我就是这里被坑了,自己咔掉,然后各种找资料,各种无解,可以先去玩耍一下:
在这里插入图片描述

5 网卡名称修改

如果你查看自己的网卡名称不是eth0,又可以学知识了。

ifconfig
ens33 Link encap:Ethernet HWaddr 00:0c:29:16:55:fc
inet addr:192.168.88.160 Bcast:192.168.88.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:55fc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:232399 errors:40 dropped:125 overruns:0 frame:0
TX packets:124764 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:258555713 (258.5 MB) TX bytes:17560092 (17.5 MB)
Interrupt:19 Base address:0x2000

具体操作步骤如下:
1 修改网卡名称:

vi /etc/default/grub
#修改这句,有其他内容直接追加就行
GRUB_CMDLINE_LINUX=“net.ifnames=0 biosdevname=0”
#生效
grub-mkconfig -o /boot/grub/grub.cfg

2 修改网络配置

vi /etc/network/interfaces
#将ens33替换成eth0即可
auto eth0
iface eth0 inet static
address 192.168.88.160
netmask 255.255.255.0
gateway 192.168.88.254
dns-nameservers 8.8.8.8
#生效,失败的直接重启
/etc/init.d/networking restart
在这里插入图片描述

6 测试

#加载ko
insmod netmap.ko
#查看
lsmod | grep netmap
在这里插入图片描述
#测试
pkt-gen -i ens18 -f tx -l 60
在这里插入图片描述
注意:不要在ssh测试,因为netmap接管数据后,ssh会失效,直接在虚拟机上测试
#恢复
rmmod netmap.ko

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值