netmap 使用小例子

最近哥老倌在初步研究netmap这个工具。心得不多,先展示一个小程序吧,看一看见里面调用逻辑的顺序,经供参考使用。

#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);  // 下一个槽位
    }
}

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
        }
    }
}

编译g++ -o netmap netmap.cpp -I/安装路径/sys/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值