1.配置流程

  环境:centos 7.2.1511,内核版本3.10.0-327.el7.x86_64

  [1]下载内核源码,https://buildlogs.cdn.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/kernel-devel-3.10.0-327.el7.x86_64.rpm

    1)cp kernel-devel-3.10.0-327.el7.x86_64.rpm /usr/local/src

    2)cd /usr/local/src/

    3)rpm -ivh kernel-devel-3.10.0-327.el7.x86_64.rpm    //此时内核源码就安装到了/usr/src/kernels/3.10.0-327.el7.x86_64

  [2]下载netmap源码:https://github.com/luigirizzo/netmap

    1)cp netmap-master /usr/local/src

    2)cd /usr/local/src/netmap-master/LINUX

    3)./configure --drivers=igb --kernel-sources=/usr/src/kernels/3.10.0-327.el7.x86_64    //表示只编译igb驱动

    4)make

    5)make install      //此时在当前目录会生成netmap.ko和igb/igb.ko

  [3]加载驱动(在当前LINUX目录下执行)

    1)rmmod igb      //卸载当前的igb驱动

    2)insmod netmap.ko  //加载netmap.ko驱动

    3)insmod igb/igb.ko   //加载netmap的igb驱动,这个igb驱动和之前的igb驱动是不一样的,另外如果当前管理口网卡用的就是igb驱动,执行第一步后会连不上设备,所以可以把这三步写到脚本里面执行。

2.测试代码

  下面的代码从网卡eth1收包:

#include <stdio.h>
#include <poll.h> #define NETMAP_WITH_LIBS
#include <net/netmap_user.h> unsigned long pps = ; static void receive_packets(struct netmap_ring *ring)
{
int i;
char *buf; while (!nm_ring_empty(ring)) {
i = ring->cur;
buf = NETMAP_BUF(ring, ring->slot[i].buf_idx);
pps++; ring->head = ring->cur = nm_ring_next(ring, i);
}
} int main(void)
{
struct nm_desc *d;
struct pollfd fds;
struct netmap_ring *ring;
int i; d = nm_open("netmap:eth1", NULL, , ); fds.fd = d->fd;
fds.events = POLLIN; while () {
if (poll(&fds, , ) < ) {
perror("poll()");
exit();
} for (i = d->first_rx_ring; i <= d->last_rx_ring; i++) {
ring = NETMAP_RXRING(d->nifp, i);
receive_packets(ring);
}
} return ;
}

3.说明

  [1]安装netmap的igb驱动后,所有当前使用igb的网卡都支持使用netmap处理报文。

  [2]如果不调用nm_open()函数,所有网卡还是正常进内核处理。对一个网卡调用了nm_open()函数之后,这个网卡的所有包就不会进内核处理,所以此时需要在程序中处理这些报文。

  

netmap配置的更多相关文章

  1. 009.CentOS 6.7安装运行netmap

    一.netmap简介: 1.netmap是一个高性能收发原始数据包的框架,由Luigi Rizzo等人开发完成,其包含了内核模块以及用户态库函数.其目标是,不修改现有操作系统软件以及不需要特殊硬件支持 ...

  2. [DPI][suricata] suricata 配置使用

    前文: [DPI] suricata-4.0.3 安装部署 至此, 我们已经拥有了suricata可以运行的环境了. 接下来,我们来研究一下它的功能, 首先,分析一下配置文件: /suricata/e ...

  3. Linux内核配置选项

    http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...

  4. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  5. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  6. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  7. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  8. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  9. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

随机推荐

  1. pagerank算法在数学模型中的运用(有向无环图中节点排序)

    一.模型介绍 pagerank算法主要是根据网页中被链接数用来给网页进行重要性排名. 1.1模型解释 模型核心: a. 如果多个网页指向某个网页A,则网页A的排名较高. b. 如果排名高A的网页指向某 ...

  2. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  3. 前端---js02

    主要内容 1.数组 2.字符串 3.Date日期对象 4.内置对象 5.定时器 6.DOM 7.伪数组 内置对象: 1 数组(列表) Array (1) 数组的创建 <script>//字 ...

  4. svo_udp通信02——一组数据发送

    注意事项: 1.client 和server 定义的发送和接收数据(结构)要相同.如: client.c: struct position_packet {float pos_x[5];float p ...

  5. 安装了低版本Jdk后eclipse无法打开的终极解决方法

    环境jdk1.7.0_17,eclipse oxygen(2017年6月发布) 因为之前安装的是jdk1.8.0_144,所以eclipse的相关配置都修改成了jdk1.8的版本,然而,近期因为某些原 ...

  6. 复习下CSS-零碎要点

    一,CSS选择器 1.  h1 > strong {color:red;}表示的是只有h1下子元素才是红色,“孙子”就不行. 2.  h1 + p {margin-top:50px;}   选择 ...

  7. 将连接数据库的JDBC提成BaseDao

    package com.shangke; import java.io.FileReader;import java.io.IOException;import java.io.InputStream ...

  8. https://www.cnblogs.com/yudanqu/p/9467803.html

    https://www.cnblogs.com/yudanqu/p/9467803.html

  9. python的xml模块用法

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

  10. 使用dotenv 管理nodejs 应用的环境变量&&docker-compose 运行

      说明dotenv 是一个很方便的符合12 factor 的环境变量管理工具,使用很方便,实际上里面的代码也不是很多 测试使用docker 进行环境部署,为了方便分发使用pkg 进行打包,使用alp ...