(1)CPU读取发送侧描述符tx_ring队列,检查DD标志是否为1,为1则说明发送完毕

(2)针对发送完毕的描述符需要释放该描述符里对应的缓冲区

(3)CPU将准备发送的缓冲区mbuf的虚拟地址填充到描述符sw_ring

(4)CPU通过将准备发送的缓冲区mbuf的虚拟地址转换得到该mbuf里data数据部分的物理地址填充到发送测描述符tx_ring队列 中,并将DD标志清0

(5)DMA控制器读取base寄存器,获取发送侧描述符,根据发送测描述符获取tx_ring队列地址,读取head指针里的元素,判断DD标志释放为0则从描述符中获取数据缓存区地址,通过PCIE总线将数据拷贝到网卡硬件Tx_FIFO缓存中往外发送数据

(6)DMA控制器回写该描述符中队列里DD的标志置1,通知CPU该缓存中数据已成功发送

(7)至此,应用发送数据包完毕

注意:这里有两个非常关键的队列tx_ring、sw_ring,tx_ring描述符里存放的是mbuf里data区的起始物理地址供DMA控制器读取报文(硬件DMA直接操作物理地址,不需要cpu参与);sw_ring描述符里存放的是mbuf的起始虚拟地址供应用写入数据包

  • 代码实现

DPDK发包处理流程相关推荐

  1. dpdk报文收发流程--理解dma控制器、UIO驱动、描述符空间、mbuf空间、KNI

    1. dpdk报文收发流程 1.1 报文接收流程 传统方式接收报文时,当网卡接收到报文后会产生硬件中断,进而报文会通过协议栈,最后到达应用层,这个过程需要内核协议栈的处理. 和传统报文接收不同,当应用 ...

  2. Linux Kernel TCP/IP Stack — 协议栈发包处理流程

    目录 文章目录 目录 协议栈发包处理流程 参考文档 协议栈发包处理流程 以 UDP 数据报为例: 应用层:可以通过 System Call 接口层或文件操作来调用内核函数,BSD socket 层的 ...

  3. DPDK 交叉编译基本流程

    以 arm64为例.下面的内容大部份摘自 DPDK官方文档: http://doc.dpdk.org/guides/linux_gsg/cross_build_dpdk_for_arm64.html ...

  4. DPDK 报文收发流程(二十五)

    一.报文的接收流程 传统方式接收报文时,当网卡接收到报文后会产生硬件中断,进而报文会通过协议栈,最后到达应用层,这个过程需要内核协议栈的处理. 和传统报文接收不同,当应用层想要接收来自网卡的报文时, ...

  5. DPDK网卡驱动流程总结

    本文基于DPDK-16.07.2.Linux 4.4.2分析总结 1 简介 1.1 什么是UIO技术 UIO(Userspace I/O)是运行在用户空间的I/O技术,Linux系统中一般的驱动设备都 ...

  6. DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)

    目录 文章目录 目录 总览 rte_eth_dev/rte_eth_dev_data 数据结构 rte_eth_dev_count 函数 rte_eth_dev_configure 函数 ixgbe_ ...

  7. dpdk eal初始化流程梳理

    for dpdk-18.11 这里把dpdk的eal初始化流程简单汇总,尽量把每个函数功能介绍详细,持续更新中 rte_eal_init │ ├──rte_cpu_is_supported:检查cpu ...

  8. DPDK 网卡收包流程

    Table of Contents 1.Linux网络收发包流程 1.1 网卡与liuux驱动交互 1.2  linux驱动与内核协议栈交互 题外1: 中断处理逻辑 题外2:中断的弊端 2.linux ...

  9. linux 内核vxlan收发包流程

    1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层 ...

最新文章

  1. 用 rpm-ostree 数据库检查更新信息和更新日志的方法
  2. 用记事本解决js中文乱码问题
  3. winForm调用HTTP短信接口
  4. 推荐一款免费的数据库管理工具,比 Navicat 还要好用,功能还很强大
  5. PPT 下载 | 龙创悦动游臣隽:数据在游戏行业的落地应用实践
  6. docker容器中安装vim 、telnet、ifconfig, ping命令
  7. mysql选择索引逻辑_Mysql索引选择逻辑
  8. 关于21年电赛,这些一定要熟悉!
  9. aws lambda_四处奔走:初学者遇到AWS Lambda
  10. Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】
  11. 统计分析与R软件-chapter2-5
  12. Web应用与HTTP协议
  13. Gym 101206L Daylight Saving Time 根据年月日计算星期
  14. hadoop上传文件报错
  15. 2021年电工(初级)考试试卷及电工(初级)考试平台
  16. DTU服务器接收软件
  17. 当代计算机网络技术带来的影响,浅析当代网络技术
  18. 装了linux的u盘格式化,u盘格式化容量变小了u盘安装linuxcentos
  19. 通过iis启动服务,会产生C:/inetpub/logs/logsFile产生大量的日志,定期清理
  20. JavaScript的深浅拷贝

热门文章

  1. Redis安装启动和配置文件
  2. 服务器2016系统怎么关防火墙,服务器怎么关闭防火墙
  3. spring boot 打包后乱码问题
  4. java汉字转换拼音
  5. 一个月捞偏门可挣20万?来看看!
  6. Redis实现秒杀库存加减
  7. Matlab 增加配色方案
  8. 6种让机器人实现避障的方法
  9. C++ gstreamer函数使用总结
  10. 易语言取java路径模块,511遇见易语言API模块进程创建CreateProcess