编辑:据我所知,如果不实际查看以太网标头,就无法直接使用 sk_buff 结构检查零填充,这很简单。
也就是说,通过一些简单的指针运算和字节减法,您可以使用 IP 数据中的长度字段来计算填充。
这是 sk_buff 的一个很好的参考:http:
//vger.kernel.org/~davem/skb_data.html
这是数据包结构的一个很好的参考,显示了“数据”内底部图片中的“长度”字段。
http://nerdcrunch.com/wp-content/uploads/2011/05/Ethernet-Frame-Explained.png
我认为这是必须完成的方式,但它不需要像您之前维护的那样进行解析。标头/数据结构字段的设置使得它们可以通过指针/数组直接引用/剥离而无需解析,然后通过从原始数据包长度中减去标头+数据长度,您可以获得填充,所有这些都无需检查数据。
希望有帮助。
此外,为了获得最佳实践,您可能应该同时使用两个 802.3 版本的驱动程序帐户。您可以通过检查 Ethertype/length 字段来做到这一点。如果该值大于 1536 (0x0600),那么您就知道它是以太网 II 类型的数据包,并且该字段包含一个以太网类型,它告诉您以太网数据包封装的内容。如果您在 Wikipedia 中查找“Ethertype”,则有一些流行的。
例如,IP = 0x0800。如果该字段指定了 Ethertype,则必须求助于查找内部的数据长度字段才能找到填充。如果没有,很多基于以太网的 LAN 仍然没有,那么您可以直接使用指定为长度的字段来完成您的工作。