Linux kernel Gianfar Linux内核驱动程序最大接收/传输大小

Linux kernel Gianfar Linux内核驱动程序最大接收/传输大小,linux-kernel,embedded-linux,ethernet,Linux Kernel,Embedded Linux,Ethernet,我一直在试图理解GianfarLinux以太网驱动程序的代码,但在理解fragemented页面时遇到了困难。我知道最大传输大小为9600字节,但这是否包括片段 如果发送和接收的传输被分割到多个碎片中,是否可能发送和接收到较大的传输(例如14000字节) 提前感谢您9600是一个。“巨型MTU”大小为9600-14=9586字节。此外,如果我没记错的话,MTU从不包含4字节的FCS 因此,9586必须是可以连接到线路上的最大以太网“有效负载”大小。这是对单个以太网帧的限制。因此,如果您有一个更大

我一直在试图理解GianfarLinux以太网驱动程序的代码,但在理解fragemented页面时遇到了困难。我知道最大传输大小为9600字节,但这是否包括片段

如果发送和接收的传输被分割到多个碎片中,是否可能发送和接收到较大的传输(例如14000字节)

提前感谢您

9600
是一个。“巨型MTU”大小为
9600-14=9586
字节。此外,如果我没记错的话,MTU从不包含4字节的FCS

因此,
9586
必须是可以连接到线路上的最大以太网“有效负载”大小。这是对单个以太网帧的限制。因此,如果您有一个更大的数据块(“传输”),您可能能够“切片”它并从中产生多个以太网帧(准确地说,多个独立的
skb
-s),每个帧都适合MTU大小。因此,在这种情况下,您将有多个独立的以太网帧移交给网络驱动程序。这些帧之间的互连仅在IP报头级别上可检测到,即,如果您查看第一帧的IP报头,您将能够看到“更多片段”标志,指示下一帧包含一个IP包,该IP包是原始(大)数据块的下一个片段。但从驾驶员的角度来看,这些帧应该保持独立

但是,如果您指的是“
skb
fragments”,而不是“IP fragments”,那么将14000字节的帧放入单个
skb
的多个片段(“数据片段”)可能对MTU没有帮助(例如,您已经在接口上配置了巨型MTU)。因为这些片段只是包含同一以太网帧的不同部分的较小的连续内存块。驱动程序只是指向这些内存块的多个描述符。硬件将拾取它们以发送单个帧。如果硬件发现总帧长度大于最大MTU,它可能会拒绝传输。在这种情况下,具体的行为是一个单独的话题。

9600
是一个单独的话题。“巨型MTU”大小为
9600-14=9586
字节。此外,如果我没记错的话,MTU从不包含4字节的FCS

因此,
9586
必须是可以连接到线路上的最大以太网“有效负载”大小。这是对单个以太网帧的限制。因此,如果您有一个更大的数据块(“传输”),您可能能够“切片”它并从中产生多个以太网帧(准确地说,多个独立的
skb
-s),每个帧都适合MTU大小。因此,在这种情况下,您将有多个独立的以太网帧移交给网络驱动程序。这些帧之间的互连仅在IP报头级别上可检测到,即,如果您查看第一帧的IP报头,您将能够看到“更多片段”标志,指示下一帧包含一个IP包,该IP包是原始(大)数据块的下一个片段。但从驾驶员的角度来看,这些帧应该保持独立


但是,如果您指的是“
skb
fragments”,而不是“IP fragments”,那么将14000字节的帧放入单个
skb
的多个片段(“数据片段”)可能对MTU没有帮助(例如,您已经在接口上配置了巨型MTU)。因为这些片段只是包含同一以太网帧的不同部分的较小的连续内存块。驱动程序只是指向这些内存块的多个描述符。硬件将拾取它们以发送单个帧。如果硬件发现总帧长度大于最大MTU,它可能会拒绝传输。在这种情况下,具体的行为是另一个话题。

最大传输大小是指MTU吗?这不是通常限制在1500字节吗?有点像。MTU是9600,但是一些驱动程序允许您发送片段消息。因此,即使MTU为9600,也可以发送3 x 4k消息。skb将由3页组成。最大传输大小是指MTU吗?这不是通常限制在1500字节吗?有点像。MTU是9600,但是一些驱动程序允许您发送片段消息。因此,即使MTU为9600,也可以发送3 x 4k消息。其中skb将由3页组成。