dpdk实现udp协议栈

news2024/11/15 15:51:02

使用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中

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线考试系统产品分析与技术实现的深度融合

在当今数字化教育浪潮中,在线考试系统作为教育信息化的重要组成部分,正以前所未有的速度改变着传统教育模式。它不仅打破了地域和时间的限制,提高了考试效率与公平性,还通过数据分析为教育决策提供了科学依据。本文旨在探讨在线考…

集装箱排柜系统介绍

1.功能介绍 用户导入产品基本信息表,每个货号代表一种货物,它放一个立方体中,此立方体称为托。 之后,用户导入订单表,其中的货号是顾客订购的货物。 用户选好目的港、集装箱类型等信息,集装箱排柜系统开始计…

解锁AI潜能,引领智能新时代——《深度强化学习》

在人工智能的浪潮中,深度强化学习如同一股不可忽视的强流,正以前所未有的速度推动着科技的边界,引领我们进入一个充满无限可能的新时代。这本《深度强化学习》不仅是一部技术宝典,更是一场关于智能探索与梦想实现的深度对话&#…

太阳能光伏气象站:绿色能源与气象科技

在追求可持续发展的道路上,太阳能光伏气象站以其独特的创新设计,成为了绿色能源与气象科技融合的典范。这款设备不仅利用太阳能作为清洁能源供电,还集成了先进的气象监测技术,为光伏发电提供了精准的环境数据支持。 太阳能光伏气象…

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 官方网址:https://maxkb.cn/ GitHub:https://github.com/1Panel-dev/MaxKB…

pycharm如何查看git历史版本变更信息

通过名字查看不同版本 查看版本不同地方

Django REST Framework(十五)路由Routes

如何在Django REST framework中利用SimpleRouter和DefaultRouter来高效生成视图集的路由信息,并详细解释如何使用action装饰器为视图集中的自定义方法生成路由 1.路由的定义规则 路由称为URL(Uniform Resource Locator,统一资源定位符),也可以称为URLconf,是对可以从互联…

【xss-labs-master】靶场通关详解!-----持续更新

XSS基础概念: 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其…

在线考试系统产品源码功能架构与技术解析

首先,它极大地提升了考试的便捷性和效率,使得教育机构、企业乃至个人能够随时随地组织考试,打破了传统考试在时间和空间上的限制。其次,通过自动化的评分和数据分析功能,在线考试系统能够迅速反馈考试结果,…

vim列编辑模式

在编辑文本时,经常会有这样的需求,对特定列进行进行批量编辑。比如批量注释一段代码,或者删除待定字符(如一列空格)。幸运的是VIM支持列编辑模式。 假设文本内容: Maximum length of a custom vocabulary…

【Vulnhub系列】Vulnhub Connect-The-Dots 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub Connect-The-Dots靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or…

剪画小程序:巴黎奥运会,从画面到声音!

在巴黎奥运会的赛场上,每一个瞬间都伴随着独特的声音。那是观众的欢呼,是运动员冲刺的呐喊,是国歌奏响的激昂旋律。 如今,通过剪画音频提取,我们能够将这些珍贵的声音从精彩的画面中分离出来,单独珍藏。 想…

2024.8.2 作业

1.互斥锁 #include <myhead.h>// 1、创建一个互斥锁 pthread_mutex_t mutex;int num 520; // 票的个数// 定义线程体1 void *task1(void *arg) {while (1){// 3、获取锁资源pthread_mutex_lock(&mutex);if (num > 0){usleep(1000);num--;printf("张三买了一…

GCKontrol-GCAir工具链在飞机功能系统设计中的应用

前言 当前&#xff0c;数字化转型正引领着飞行器研发方式向智能化、协同化、定制化、自主化等方向发展&#xff0c;为飞行器研发带来了新的机遇和挑战。其中&#xff0c;系统仿真作为数字化转型的重要工具&#xff0c;在飞行器研发过程中发挥着关键作用。国际上&#xff0c;各…

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;Java在2021年发布了最新的长期支持版本&#xff1a;JDK 17。这个版本引入了许多新的语法特性&#xff0c;提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性&#xff0c;帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…

如何保证冰河AL0 400G 100W 的稳定运行?

要保证冰河 AL0 400G 100w 的稳定运行&#xff0c;可以考虑以下几点&#xff1a; 1. 适宜的工作环境&#xff1a;确保设备放置在通风良好、温度适宜的环境中。良好的散热条件有助于防止设备过热&#xff0c;因为过热可能会导致性能下降或故障。该设备采用纯铝合金外壳&#xf…

AI项目落地实战:SpringBoot3+SpringAI+Uniapp

前言 AI不仅仅是风口&#xff0c;也是今后的时代潮流。本人花心血开发了一套AI实战项目&#xff0c;可商用。支持h5&#xff0c;小程序&#xff0c;app三端。可拿来二开&#xff0c;也可直接上架。不用担心版权问题&#xff0c;但是如果是倒卖源码&#xff0c;本人会追究其责任…

【Linux网络】传输层协议:UDP 与 TCP

本篇博客整理了 TCP/IP 分层模型中传输层的 UDP 协议和 TCP 协议&#xff0c;旨在让读者更加深入理解网络协议栈的设计和网络编程。 目录 一、传输层 1&#xff09;端口号 Port .1- 五元组标识一个通信 .2- 端口号的作用 .3- 范围划分 2&#xff09;指令 netstat、iostat…

python的jieba库中文分词词频统计和合并

可能在设置问题模板的时候需要分析已有问句&#xff0c;然后统计词频&#xff0c;根据词频设计问题模板

B站宋红康JAVA基础视频教程个人笔记chapter02

文章目录 1.什么是标识符&#xff1f; 凡是自己取得名字都叫做标识符(类名&#xff0c;变量名&#xff0c;函数名等等) 2.标识符命名规范 包名&#xff1a;多单词组成所有字母都小写 --com.example.xxx 类名&#xff1a;多单词组成&#xff0c;所有单词的首字母大写 --MyClass …