关于netmap的环境安装以及简单示例

本文详细介绍了如何在Ubuntu系统中更改网卡名称、安装并配置Netmap,以及使用Netmap进行网络数据包捕获的基本流程。文章还提供了一个简单的C语言示例程序,用于演示如何利用Netmap接收网络数据包。

 

1 首先在ubuntu里面,需要把网卡的名字改成eth  类似这样的。

vim  /etc/default/grub
找到GRUB_CMDLINE_LINUX=""
改为GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
grub-mkconfig -o /boot/grub/grub.cfg

 

2 安装netmap

https://gitee.com/mirrors/netmap.git

./configure

make && make install


insmod netmap.ko    ##很重要。需要插入,相当于加载驱动的意思,每次重启都要加载一次

3 把操作系统的加载网瞳配置信息


vim /etc/network/interfaces

# 把ens33替换成eth0

改后:

 

如果用ifconfig 查不到网卡地址了,则重新设置一下


ifconfig eth0 192.168.1.107

 

 

test.c

#include <stdio.h>
#include <poll.h>

#define NETMAP_WITH_LIBS

#include <net/netmap_user.h>

unsigned long pps = 0;

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); // buf 就是收到的报文喽
        pps++;  // 统计收包个数
        ring->head = ring->cur = nm_ring_next(ring, i);  // 下一个槽位
    }
}

//gcc -o test test.c -I/home/ntm/netmap/sys/  注意这里是安装netmap的目录,请自行根据环境设置
int main(void)
{
    struct nm_desc *d;
    struct pollfd fds;
    struct netmap_ring *ring;
    int i;

    d = nm_open("netmap:eth0", NULL, 0, 0); // 注意格式,netmap:ehtX

    // d 的返回值我这里就不判断了

    fds.fd     = d->fd;
    fds.events = POLLIN;

    while (1) {
        if (poll(&fds, 1, 1) < 0) {
            perror("poll()");
            exit(1);
        }

        // 遍历所有的接收队列
        for (i = d->first_rx_ring; i <= d->last_rx_ring; i++) {
            ring = NETMAP_RXRING(d->nifp, i);
            receive_packets(ring);  // 处理 ring
        }
    }
}

 

gcc -o test test.c -I/home/ntm/netmap/sys/  注意这里是安装netmap的目录,请自行根据环境设置

编译通过。后面有空再讲讲netmap,以及单独自己实现的自己的tcp协议。。持续关注。。

有时网卡找不到,可以执行

ifconfig eth0 192.168.1.107

重新设置。。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值