当前位置: 首页 > 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中

http://www.lryc.cn/news/413176.html

相关文章:

  • Shell编程——基础语法(2)和 Shell流程控制
  • Python基础教程(二)字符串和函数
  • 智算新风向丨趋动科技获中国信通院泰尔实验室首张智算资源池化能力泰尔测评证书
  • 计算机基础(Windows 10+Office 2016)教程 —— 第4章 计算机网络与Internet(上)
  • MES系统在数字化转型中的核心作用与影响
  • 装修施工注意事项
  • 【Docker学习记录】
  • 互联网政务应用安全管理规定
  • HarmonyOS开发商城首页实现
  • QtQuick Text-文本样式
  • 人工智能未来展望
  • Pymol开源版安装 新版 3.0 / 3.1 Windows安装Pymol开源版
  • 记录一次环境的安装
  • 浏览器用户文件夹详解 - WebData(八)
  • ijkplayer 自定义协议播放加密内容 Android
  • 【kill】Centos/Linux 如何杀死那该死的进程?
  • Cadence23学习笔记(十七)
  • WinFrom调用webapi接口方法及其应用实例
  • 智能巡检企业级域名 SSL 证书
  • 海思35XX系列(三)sensor(传感器)
  • dfs(续做)
  • OpenStack;异构算力网络架构;算力服务与交易技术;服务编排与调度技术
  • PLC-Recorder对于数据采集时间戳偏差的修正功能
  • 自定义监控
  • 关于使用php的mpdf插件遇到的一些问题
  • 电脑截图,颜色变淡的问题解决
  • uniApp跳转外链
  • 科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”
  • SpringSecurity+Mysql数据库实现用户安全登录认证
  • 虚拟网卡添加ip