netmap安装使用

文章目录

  • 1、安装编译netmap
  • 2、使用netmap
  • 3、运行编写自己的代码

1、安装编译netmap

github地址

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

1、进入目录

cd netmap-master/LINUX

2、安装编译环境

apt-get install build-essential

3、初始化配置环境

./configure

出现这个界面不是卡住了,需要长时间等待完成,这个过程可能比较长,运行到下面表示成功

在这里插入图片描述
在这里插入图片描述
4、编译和安装

make && make install

2、使用netmap

每次使用前都需要insmod netmap.ko ,然后我们查看ls /dev/netmap -l,出现下面的设备就说明开启成功了。

# 在netmap-master/LINUX执行
insmod netmap.ko 
ls /dev/netmap -l

取消加载

rmmod netmap

3、运行编写自己的代码

# 头文件 #include<net/netmap_user.h> 在 /netmap/sys/目录下
gcc -o nty_udp nty_udp.c -I /netmap/sys/
#include <stdio.h>
#include <sys/epoll.h>
#include <arpa/inet.h>
#define NETMAP_WITH_LIBS
#include <net/netmap_user.h>#define ETH_ADDR_LENGTH 6
#define PROTO_IP 0x0800
#define PROTO_ARP 0x0806
#define PROTO_UDP 17#pragma pack(1)
// 以太网帧头 14字节
struct ethhdr{unsigned char h_dst[ETH_ADDR_LENGTH];unsigned char h_stc[ETH_ADDR_LENGTH];unsigned short h_proto;
};// ip头 20字节
struct iphdr{// 位域 版本表示:使用的是ipv4还是ipv6// 首部长度表示:最大长度可以是 15*4=60unsigned char hdrlen:4,version:4;unsigned char tos;unsigned short tolen;unsigned short flag_offset;unsigned char ttl;unsigned char type;unsigned long check;unsigned int sip;unsigned int dip;
};struct updhdr{unsigned short sport;unsigned short dport;unsigned short length;unsigned short check;
};struct arphdr{unsigned short h_type;unsigned short h_proto;unsigned char h_addr;unsigned char h_protolen;unsigned char oper;unsigned char smac[ETH_ADDR_LENGTH];unsigned int sip;unsigned char dmac[ETH_ADDR_LENGTH];unsigned int dip;
};struct udppkt{struct ethhdr eh;struct iphdr ip;struct udphdr upd;// 数据长度不确定,所以使用柔性数组unsigned char data[0];
};struct arppkt{struct ethhdr eh;struct arphdr arp;
};// 在netmap目录下
// insmod netmap.ko
// ls /dev/netmap -lint main()
{// struct nm_pkthdr head;struct nm_desc *nmr = nm_open("netmap:eth0",NULL,0,NULL);if(nmr == NULL) return -1;// 通过poll检测是否有事件读事件来了struct pollfd pfd = {0};pfd.fd = nmr->fd;while(1){int ret = poll(&pfd,1,-1);if(ret < 0) continue;if(pfd.revents & POLLIN){// 从ringbuffer环形队列中取出一帧数据unsigned char *stream = nm_nextpkt(nmr,&h);// 解包 struct ethhdr *eh = (struct ethhdr*)stream;if(ntohs(eh->h_proto) == PROTO_IP){struct udppkt *udp = (struct udppkt*)stream;if(upd->ip.type == PROTO_UDP){int udplength = ntohs(udp->udp.length);udp->data[udplength-8] = '\0';printf("%s\n",udp->data);}}else if (ntohs(eh->h_proto) == PROTO_ARP){// 先判断struct arppkt *arp = (struct arppkt*)stream;struct arppkt arp_rt;if(arp->arp.dip == inet_addr("192.168.0.123")){}}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90284.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor

Unity Android studio打包报错修复 解决方式 java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor 解决方式 在 launcherTemplate 目录下找到 Android/lintOptions 选项 加上 checkReleaseBuilds false lintOptions { abortOnError false checkRelea…

[Go版]算法通关村第十五关黄金——继续研究超大规模数据场景的问题

目录 题目&#xff1a;对20GB文件进行排序解决思路&#xff1a;外部排序 两两合并 题目&#xff1a;超大文本中搜索两个单词的最短距离解决思路&#xff1a;双指针法复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1) 题目&#xff1a;从10亿数字…

接口优化通用方案

目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想&#xff1a;批量操作数据库 优化前&#xff1a; //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后&#xff1a; batchInsert(transDetailList); 异步、回…

yolo增加mobileone

代码地址&#xff1a;GitHub - apple/ml-mobileone: This repository contains the official implementation of the research paper, "An Improved One millisecond Mobile Backbone". 论文地址&#xff1a;https://arxiv.org/abs/2206.04040 MobileOne出自Apple&am…

动态数组 Vector(难度1)(V)

C数据结构与算法实现&#xff08;目录&#xff09; 前驱课程 C 精简教程 目录&#xff08;必读&#xff09; 堆数组 heap array 面相对象的堆数组 1 原始堆数组的缺点&#xff1a; 1&#xff09; 原始堆数组 其长度是固定不变的。 2&#xff09; 使用指针管理元素&#…

简易虚拟培训系统-UI控件的应用1

目录 前言 UI结构总体介绍 建立初步的系统UI结构 Image控件 前言 前面的文章介绍了关于Oculus设备与UI控件的关联&#xff0c;从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用&#xff08;仅介绍“基本作用”&#xff0c;详细的API教程可参考官方文档&#x…

从0到1学会Git(第一部分):Git的下载和初始化配置

1.Git是什么: 首先我们看一下百度百科的介绍:Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 …

前端调用电脑摄像头

项目中需要前端调用&#xff0c;所以做了如下操作 先看一下效果吧 主要是基于vue3&#xff0c;通过canvas把画面转成base64的形式&#xff0c;然后是把base64转成 file文件&#xff0c;最后调用了一下上传接口 以下是代码 进入页面先调用一下摄像头 navigator.mediaDevices.ge…

NTP时钟同步服务器

目录 一、什么是NTP&#xff1f; 二、计算机时间分类 三、NTP如何工作&#xff1f; 四、NTP时钟同步方式&#xff08;linux&#xff09; 五、时间同步实现软件&#xff08;既是客户端软件也是服务端软件&#xff09; 六、chrony时钟同步软件介绍 七、/etc/chrony.conf配置文件介…

构建 NodeJS 影院预订微服务并使用 docker 部署(04/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 我们前几章的快速回顾 第一篇文章介绍了微服务架构模式&#xff0c;并讨论了使用微服务的优缺点。第二篇…

RHCE——十二、Mysql服务

Mysql服务 一、什么是数据库1、数据&#xff1a;2、数据库&#xff1a; 二、mysql概述三、版本及下载四、yum仓库安装1、添加yum源2、安装3、后续配置 五、本地RPM包安装1、使用迅雷下载集合包2、上传数据3、安装 六、生产环境中使用通用二进制包安装1、作用2、软件包下载3、使…

结算日-洛谷

结算日 - 洛谷 解释&#xff1a; 1.用sum记录贝西走到某位置的累计的总钱&#xff0c;flag标记是否有欠债还不了的情况&#xff08;1为有&#xff09;&#xff0c;ans记录步数。 2.若sum<0&#xff0c;则欠债无法还&#xff0c;flag标记为1&#xff0c;并记录下此刻的位置…