dpdk中文-mbuf的基本操作-程序员宅基地

技术标签: mbuf  dpdk中文  dpdk  

mbuf是报文中的描素的结构体,是整个转发过程中最核心的数据结构之一。主要针对于mbuf的常用API与基本原理做一个简单的介绍:
首先我们看一下rte_mbuf的数据结构的定义:先主要说明几个跟数据有关的变量
struct rte_mbuf {
。。。。
void *buf_addr; /**< Virtual address of segment buffer. */
。。。。
uint16_t data_off;
。。。。
uint32_t pkt_len; /**< Total pkt len: sum of all segments. */
uint16_t data_len; /**< Amount of data in segment buffer. */
uint16_t buf_len
。。。
}
既然叫mbuf,其实就是一种buf管理的结构体:

如上图所示:
mbuf整个用来存数据的buf就是上图所示的内容。
一般数据都会有分3个区域;
1。headroom
2。data
3。tailroom
其实这个中间还包含一个含义,整个buf的大小。 也就是数据结构中的buf_len的大小一般是4096
其中headroom一般含义是:
保留区域headroom:一般用来存放用户自己针对于mbuf的一些描素信息,一般保留给用户使用,可以通过修改mbuf头文件,来实现headroom的大小;data_off的默认值就是mbuf的headroom的大小;默认就是128。如果要定义超过这个范围的私有字段,请自行修改 RTE_PKTMBUF_HEADROOM

数据字段:data。data区域一般指的是地址区间在data_off+buf_addr 到data_off+data_len+buf_add即,data_len就是这段数据的长短,这个data_len一般都是通过mbuf的几个基本操作,或者通过赋值来实现的。
tailroom:一般指的是,data_len还未包含的东西。默认其实data_len是0。所以说默认来说tailroom应该是占了很大的空间的;
其实mbuf的控制,就是不断的控制这个几个区域的大小,永远记住,我们的报文数据永远是存放在data中的;主要控制的就是data_off 与data_len
至于pkt_len在普通情况下,就是核data_len是一个大小,在大报文的时候,就是两个mbuf通过链表组合起来的~
mbuf几个基本操作以及注意点:

rte_pktmbuf_prepend
移动data_off指针,注意:需要查看返回值,如果已经偏移到headroom的时候,会返回NULL; (报文向前扩容),例如报文从应用层往下,一层一层的封装就用这个。
rte_pktmbuf_append
改变data_len的长度 ,返回改变前的尾地址。 (向后扩容)
例如先有首部再填数据字段,就可以用这个
rte_pktmbuf_adj
(首部向后缩小空间) 改变data_off的值 从二层到三层转发,去二层头就可以用这个
rte_pktmbuf_trim
(尾部向前缩小空间) 移动data_len减少buf_len;(预分配的内容太大,数据没那么大可以用这个)
总结:
这4个API就是我们常见的调整数据部分大小,其实用法和API的名字和内核的skbuf类似。

rte_pktmbuf_mtod
rte_pktmbuf_mtod_offset
这两个API就是就是返回buf_addr+data_off +useroff 然后再强制类型转换一下而已~~
只是mtod这个API默认是useroff ==0而已。就是把数据data部分的首指针返回。
注意:
这个API其实是不安全的,往这个地址里面copy内容的时候,注意数据的长度~。。
有用的连接:
http://www.cnblogs.com/ziding/p/4214499.html
http://blog.csdn.net/todd911/article/details/24182551
其实mbuf不仅仅可以用来装报文~~只要是数据缓存都可以~~~~



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bestboyxie/article/details/52984397

智能推荐

LCD 取字模工具,支持 Linux 系统_linux下取字模工具-程序员宅基地

文章浏览阅读356次,点赞9次,收藏10次。下载链接: https://pan.baidu.com/s/199OIceeQRLljHqc3OkT1hw?pwd=retv 提取码: retv。此工具名为 WordPixels,类似一个造字程序,字符点阵可随意编辑,轻松获取任意形状字符(图形)。_linux下取字模工具

ROS 运行报错 raise ResourceNotFound(name, ros_paths=self._ros_paths) , ResourceNotFound: *****-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏6次。一、运行报错自己遇到的问题是raise ResourceNotFound(name, ros_paths=self._ros_paths), ResourceNotFound: rgbd_launchTraceback (most recent call last): File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 308, in main p.start() File "/o_raise resourcenotfound(name, ros_paths=self._ros_paths)

大地坐标BLH转平面坐标xyh(高斯投影坐标正算) Java版-程序员宅基地

文章浏览阅读1.7k次。技术背景  做过位置数据处理的小伙伴基本上都会遇到坐标转换,而基于高斯投影原理的大地坐标转平面坐标就是其中一种坐标转换,坐标转换的目的就是方便后面数据的处理工作,大地坐标转高斯平面坐标常用的有两种,即3°带和6°带,具体采用哪种根据实际情况而定。计算原理  6°带带号n与相应的中央子午线L0经度的关系为:  3°带带号n’与相应的中央子午线L0’经度的关系为:..._blh转xyh

基于PHP美食食谱的外文翻译,中国传统菜谱的英文翻译锦集-程序员宅基地

文章浏览阅读167次。中国传统菜谱的英文翻译锦集第1部分、素菜类Vegetarian1.豪油冬菇Oyster Sauce Mushroom2.什笙上素Bamboo Vegetable3.红烧豆腐Fried Tofu4.炒素丁Vegetable Roll5.罗汉腐皮卷Vegetable Egg Roll6.素咕噜肉Vegetarian Sweet and Sour7.蒸山水豆腐Steam Tofu8.鲜菇扒菜胆Mushr..._基于php的家常菜谱教程网站的设计与实现 英文翻译

(jarvisOJ)(pwn)level6_x86_javious level6x86-程序员宅基地

文章浏览阅读418次。Unlink!Unlink!Unlink!level6_x86作为一道堆溢出入门题,还是值得用来练练手,学习一下堆的基础的知识的。参考文献:ctf-wiki:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/unlink-zh/大佬博客:https://blog.csdn.net/weixin_41617275/article..._javious level6x86

随便推点

linux 中 tar \ zip 解压错误后撤回_linux撤销解压命令-程序员宅基地

文章浏览阅读233次。【代码】linux 中 tar \ zip 解压错误后撤回。_linux撤销解压命令

如何在水经微图APP中扫码添加图源?-程序员宅基地

文章浏览阅读236次。微图APP目前暂无数据同步功能,也没有帐号登录功能,但标绘导出功能是完全免费开放的,如果你觉得用起来还不错,欢迎分享给你的朋友。微图APP下载安装完成之后,会默认显示吉林一号卫星影像,你可以通过点击左下角的地图主菜单切换地图数据源。在“图源管理”界面中,点击右上角按钮,可以扫码添加微图Web版生成的图源二维码,在“编辑图源”界面中,你可以对地图名称和地图URL等相关参数进行编辑。在地图主菜单中,点击“地图”小图标,可以进入“图源管理”界面。这里,再为你分享在微图APP中通过扫二维码添加图源的方法。

Linux脏牛提权漏洞复现(CVE-2016-5195)_cve-2016-5195复现-程序员宅基地

文章浏览阅读605次。脏牛漏洞是一个严重的漏洞,可以允许攻击者获得管理员权限。为了保护系统的安全,请及时更新内核并采取其他安全措施。_cve-2016-5195复现

解决url中的& amp;带来的问题, laravel页面_接口返回url amp;-程序员宅基地

文章浏览阅读1.8w次。首先, 你是否也在laravel中写了类似这样的js呢:$.get("{{route('admin.user.index', array_merge($data, ['__sort__Exp'=&gt;'desc']))}}");//ordocument.URL="{{route('admin.user.index', array_merge($data, ['__sort__Exp..._接口返回url amp;

财政(预算)管理一体化涉农资金项目管理系统规划方案书_财政支农资金管理系统-程序员宅基地

文章浏览阅读861次,点赞21次,收藏14次。涉农资金项目管理系统把农业部门的相关涉农业务系统、财政部门的相关涉农系统以及涉农资金的集中支付等信息,通过录入或导入的方式采集到系统并有机的集成到一起,形成一个完整的数据信息平台,建立涉农项目库和政策文档资料库,为农业处提供业务办理和统计分析,大大提高农业处的工作效率。涉农资金项目管理系统把项目信息、涉农资金信息、项目审批信息、预算指标信息、项目实施信息、资金拨付信息集成到一起,形成一个完整的数据信息平台,通过建立涉农项目库和政策文档资料库,便于用户进行业务处理和统计分析,大大提高业务管理工作效率。_财政支农资金管理系统

【Unity】基于GUI的简易场景切换器_unity切换display-程序员宅基地

文章浏览阅读1k次。在编辑器或者发行版游戏中,如果我们想切换一个场景,需要设置触发器或者手动设置按钮来调用SceneManagement中的函数。而这个脚本挂载到场景时按下按键就可以在屏幕上方或者下方展示所有Build Setting中的场景,按下按键就可以加载对应场景。将脚本挂载到任意物体上,也可以制作成预制体。在编辑器中运行游戏,按下键盘上~键(即上方数字1左边的按键)就可以调出所有场景,再按一下关闭,点击场景按钮切换到指定场景。Button Width:调整按钮宽度,若开启自适应按钮宽度,该项不造成影响,默认100。_unity切换display

推荐文章

热门文章

相关标签