微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据包大小以太网 hdr+IP hdr+TCP hdr+payload和 Rx Descriptor 缓冲区元素之间的关系是什么

如何解决数据包大小以太网 hdr+IP hdr+TCP hdr+payload和 Rx Descriptor 缓冲区元素之间的关系是什么

我正在阅读驱动程序代码,看起来每个 Rx 描述符缓冲区都是这样定义的

       struct page *Rx_databuff [256] //256 Rx Descriptors in Overall Buffer for DMA

上述代码如何与数据包大小相关联。上面的数组是否一次只能处理 256 个数据包,这个值不应该是动态的,这意味着使用 Ethtool 或一些工具增加这个大小,以便 DMA 缓冲区中可以一次累积超过 256 个数据包,也可以在内核中增加到接受那个数量的数据包。或者数组中的单个 Rx_databuf 指针元素可以接受多个数据包。真的会发生什么?感谢帮助

Driver 也定义了 Rx Descrptor 的结构,就像这样用于驱动程序

     struct RxDesc {
        __le32 opts1;
        __le32 opts2;
        __le64 addr;
   };

addr 是从 page 指针类型的 Rx_databuff 到单个页面的 DMA 映射地址

其中使用了整体 Coherent DMA 映射,并且在驱动程序中也使用了单页流映射以用于相同的 RxDesc。 RxDesc 的 addr 映射到内核页面(单个页面明智的流映射 api)和之前的 Coherent 映射像这样

    mystruct_obj->RxDesc_pointer = dma_alloc_coherent(&pdev->dev,RX_RING_BYTES,&tp->RxPhyAddr,GFP_KERNEL);

Rx_RING_BYTES = NUM​​_RX_DESC * sizeof(struct RxDesc))

NUM_RX_DESC = 256U

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?