当前位置: 首页 > news >正文

dpdk实现udp协议栈

使用DPDK实现UDP用户态协议栈,实现流程中包括:

三类线程

1、收发包线程

2、用户态协议栈线程

3、udp服务端线程

两类缓冲区:

1、协议栈收包缓冲区和协议栈发包缓冲区

2、udp收包缓冲区和udp发包缓冲区

协议栈缓冲区中存储的数据是struct rte_mbuf *指针

udp缓冲区中存储的数据是struct offload*指针

struct offload {
    uint32_t sip;
    uint32_t dip;
    
    uint16_t sport;
    uint16_t dport;
    
    int protocol;

    unsigned char *data;
    uint16_t length;
};

线程1:收发包线程

线程2:用户态协议栈线程

udp服务端线程会有多个,这里会根据报文的目的ip和目的端口,判断写入到哪个udp收包缓冲区

线程3:udp服务端线程


需要重写,socket,bind,recvfrom和sendto函数

1、socket函数

创建如下类型变量,并加入到链表中:

struct localhost {
    int fd;

    uint32_t localip;    //网络字节序
    uint8_t localmac[RTE_ETHER_ADDR_LEN];
    uint16_t localport;    //网络字节序
    uint8_t protocol;

    struct rte_ring *sndbuffer;
    struct rte_ring *rcvbuffer;

    struct localhost *prev;
    struct localhost *next;

    pthread_cond_t cond;
    pthread_mutex_t mutex;
};

2、bind

将ip和端口赋值到struct localhos变量中,并分配sndbuffer和rcvbuffer缓冲区,初始化条件变量和互斥锁

3、recvfrom

从rcvbuffer缓冲区中读取数据,如果rcvbuffer没数据,则通过条件变量进行等待。(udp协议栈往rcvbuffer写入数据时,需要发送条件变量唤醒信号)

4、sendto

将需要发送的数据写入sendbuffer中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 各地级市能源消费总量、夜间灯光值数据(2000-2022年)
  • 【雅思考试】-- Day4 - 单词
  • 人生苦短,我用 Python,AI 模型助力高效数据提取
  • C# 中读取byte[]转化成数字
  • 【网络】网络编程套接字(二)
  • 基于C#调用文心一言大模型制作桌面软件(可改装接口)
  • HarmonyOS鸿蒙开发学习:鸿蒙基础-基础环境-ArkTS-组件-样式
  • C++ exe程序内存占用分析之Linux篇
  • Java 设计模式之策略模式 (Strategy Pattern) 详解
  • 【C语言篇】猜数字游戏(赋源码)
  • js如何判断一个数在某一个等差区间之内
  • Mojo AI编程语言(十七)跨平台开发:应用广泛适配
  • 香橙派下搭建目标检测的开发环境
  • 数字万用表怎么做仪器校准?不准怎么调?
  • PyTorch安装
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS魔法堂:Absolute Positioning就这个样
  • Cumulo 的 ClojureScript 模块已经成型
  • Docker入门(二) - Dockerfile
  • es6(二):字符串的扩展
  • If…else
  • Java多态
  • linux安装openssl、swoole等扩展的具体步骤
  • PAT A1120
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpiderData 2019年2月16日 DApp数据排行榜
  • webpack入门学习手记(二)
  • 对象管理器(defineProperty)学习笔记
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 小程序button引导用户授权
  • 在Mac OS X上安装 Ruby运行环境
  • C# - 为值类型重定义相等性
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # 数据结构
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (4)事件处理——(7)简单事件(Simple events)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (七)glDrawArry绘制
  • (四)c52学习之旅-流水LED灯
  • (四)stm32之通信协议
  • (万字长文)Spring的核心知识尽揽其中
  • (一)基于IDEA的JAVA基础10
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)从 Java 代码到 Java 堆
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .env.development、.env.production、.env.staging
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET Core引入性能分析引导优化