DPDK中文-DPDK的reorder
来源:互联网 发布:无经验淘宝客服简历 编辑:程序博客网 时间:2024/06/10 16:32
dpdk reorder库是dpdk设计用来保证报文不乱序的;可能就是传说中的包保顺序
代码在lib/librte_reorder目录下
放进recorder bufer的报文会根据报文的sequence number来重新排序
常用在报文发送前的缓存;就是用来存放rte_mbuf的
示例代码在
examples\packet_ordering
主要API
1。创建reorder
struct rte_reorder_buffer * rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)
参数1:名字,dpdk的数据结构都有名字方便查找;
参数2:cpu id ;默认0。如果是多CPU(这里多CPU指物理上的多CPU)
参数3:buffer的大小;
创建的时候自动回调用init;
如果查找之前已经创建好的,直接使用
struct rte_reorder_buffer *rte_reorder_find_existing(const char *name);
注意这个时候如果要初始化需要显示的调用:
void rte_reorder_reset(struct rte_reorder_buffer *buf)
2、插入数据
int rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf);
API清晰明了 0则是成功了;
3、一次性取出一些(类似于dequeue_burst)
unsigned int rte_reorder_drain(struct rte_reorder_buffer *b, struct rte_mbuf **mbufs,unsigned max_mbufs);
使用代码示例 代码在examples\packet_ordering 中
代码含义~~就是从reorder buf里面取出,mbuf的数组,然后发送;
struct rte_mbuf *rombufs[MAX_PKTS_BURST] = {NULL};dret = rte_reorder_drain(args->buffer, rombufs, MAX_PKTS_BURST);for (i = 0; i < dret; i++) {struct rte_eth_dev_tx_buffer *outbuf;uint8_t outp1;outp1 = rombufs[i]->port;/* skip ports that are not enabled */if ((portmask & (1 << outp1)) == 0) {rte_pktmbuf_free(rombufs[i]);continue;}outbuf = tx_buffer[outp1];sent = rte_eth_tx_buffer(outp1, 0, outbuf, rombufs[i]);if (sent)
如果觉得好,请下面顶
2 0
- DPDK中文-DPDK的reorder
- DPDK中文-DPDK的ring
- DPDK中文-DPDK工具
- dpdk中文-dpdk简单介绍
- dpdk中文-DPDK学习路线图
- dpdk中文-dpdk快速开始
- dpdk中文-dpdk虚拟机出错
- DPDK中文-DPDK调试信息
- DPDK中文-DPDK工具(procinfo)
- DPDK中文-DPDK工具(pdump)
- DPDK中文-DPDK工具(pmdinfo)
- DPDK
- DPDK
- DPDK
- DPDK
- DPDK
- DPDK
- dpdk中文-mtcp如何使用自己的DPDK
- 将Excel表格数据转成Protobuf V3【Unity】
- java中double变量保留小数问题
- Android浅析SurfaceView
- FibonacciSequence
- adb 连接不上
- DPDK中文-DPDK的reorder
- 使用PostMan模拟请求
- 函数指针 & 函数对象
- JAVA求圆的面积
- 温故而知新——java抽象类和接口
- [VB.net][WinForm]Panel控件移动\鼠标拖动
- Height Half Values
- Vue2.0 事件发射与接收
- 一道简单的趣味编程