dpdk实现udp协议栈

ops/2024/9/23 12:19:54/

使用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.ppmy.cn/ops/88810.html

相关文章

TypeScript 及算法准备

TypeScript 基础 类型注解:为变量、函数参数和返回值指定类型。 typescript复制代码let count: number 10;function greet(name: string): string {return Hello, ${name}!; } 接口和类型别名:定义对象结构和复杂类型。 typescript复制代码interface U…

在PAI-DSW中连接Neo4J,并批量创建知识图谱

我在 阿里云DSW实例中安装并运行Neo4J 中提到过,由于PAI-DSW的专有网络配置不能确保百分之百成功,因而很难实现通过本地的浏览器登录在PAI-DSW中启动的Neo4J图数据库。 我当时想出的一个解决办法是使用./cypher-shell语句在命令行登录neo4j,…

苹果手机升级iOS18测试版本后使用体验不好?怎么降级?

近期苹果发布了诸多的iOS18版本给用户提前尝鲜测试,许多果粉们都迫不及待的选择了升级,但是有不少的果粉升级时没有考虑到设备适配性问题,导致升级之后手机变得有些卡顿,使用体验不好时,想要降级回到正式的版本&#x…

【目标和】python刷题记录

R3-dp篇. 目录 思路: 增加记忆化搜索: 优化空间复杂度: 思路: class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:#设正数之和为p,总元素之和为s,带符号总元素之和为t&…

最新小猫咪PHP加密系统源码V1.4_本地API接口_带后台

简介: 最新小猫咪PHP加密系统源码V1.4_完全本地化加密API接口_带后台 小猫咪PHP加密系统历时半年,它再一次迎来更新,更新加密算法(这应该是最后一次更新加密算法了,以后主要更新都在框架功能上面了)&…

如何确保PLC系统安全的可靠性,这几个注意事项你需要牢记

PLC(可编程逻辑控制器)是现代工业自动化系统中的关键组成部分。在设计 PLC 系统时,安全性是至关重要的考虑因素。本文将介绍 PLC 系统设计中的一些安全注意事项,包括电源设计、接地设计、关键数字量输入输出设计和报警设计。 一.…

新版Next.js 15中5个令人惊叹的特性

前端岗位内推来了 Next.js 15已经到来,一切比以往更好! 从全新的编译器到700倍更快的构建时间,创建具有卓越性能的全栈Web应用从未如此简单。 让我们探索v15的最新特性: 1. create-next-app升级:更清晰的UI&#xff0c…

C:初识指针—学习笔记

目录 前言: 1、内存和地址 1.1 理解内存和地址 1.2 理解编址 2、指针变量和地址 2.1 取地址操作符:& 2.2 指针变量 2.3 如何拆解指针类型 2.4 解引用操作符(*) 2.5 指针变量的大小 3、指针变量类型的意义 3.1 指针…