Gianfar Linux 内核驱动最大 Receive/Transmit 大小

Gianfar Linux Kernel Driver Maximum Receive/Transmit Size

我一直在努力理解 gianfar linux 以太网驱动程序的代码,但很难理解碎片化的页面。我了解最大传输大小为 9600 字节,但这是否包括片段?

如果它们被分成多个片段,是否可以发送和接收更大的传输(例如 14000 字节)?

提前致谢

9600 是一个 jumbo frame maximum size. The maximum MTU ("jumbo MTU") 大小是 9600 - 14 = 9586 字节。另外,如果我没记错的话,MTU 从来不包含 4 字节的 FCS。

因此,9586 必须是可以放在电线上的最大以太网 "payload" 大小。这是关于 单个 以太网帧的限制。因此,如果您有更大的 数据 ("transmission"),您可以 "slice" 它并从中生成多个以太网帧(准确地说, 多个独立 skb-s), 每个都适合 MTU 大小。因此,在这种情况下,您将有 多个 个独立的以太网帧要移交给网络 driver。这些帧之间的互连只能在 IP 报头级别检测到,即,如果您查看第一帧的 IP 报头,您将能够看到 "more fragments" 标志,表明下一帧包含一个 IP 数据包,它是原始(大) 数据的下一个片段。但是从 driver 的角度来看,这些框架应该保持独立。

但是,如果您指的是“skb 片段”而不是 "IP fragments",则将 14000 字节的帧放入单个 skb 的多个片段 ("data fragments")可能对 MTU 没有帮助(例如,您已经在接口上配置了巨型 MTU)。因为这些片段只是较小的连续内存块,包含 相同 以太网帧的不同部分。而 driver 只是 makes 多个 描述符指向这些内存块。硬件将挑选它们发送 帧。如果 HW 发现整个帧长度大于最大 MTU,它 可能 拒绝传输。这种情况下的确切行为是单独讨论的主题。