`ether_header` 和 `ethhdr` 有什么区别?

3
我目前正在尝试从原始缓冲区解析数据包。我发现以太网头有两种结构:ether_headerethhdr。我有点困惑它们的区别和关系是什么?我是否可以交替使用它们?
我进行了快速搜索: 此帖子建议IP头存在两个相同的实现。以太网(以及TCP,UDP等)是否也是如此? 此补丁显示了从一种实现更改为另一种实现的努力。我不确定背后的动机:也许一个实现方式在某种程度上更好?
谢谢!
1个回答

5
在Linux中,ethhdr结构体定义在uapi/linux/if_ether.h文件中。在内核uapi(用户空间API)头文件中固定了它的位置,因此它是默认稳定性较好的定义。 ether_header结构体在多年的发展过程中已经在许多地方进行了定义。随着代码逐渐迁移到使用ethhdr(正如您在链接的修补程序中所观察到的那样),定义的数量和对这些定义的引用已经逐渐减少。可以通过查看内核源代码交叉引用器的输出来轻松地了解这种演变过程。以下列表描述了几个内核版本随时间推移的ether_header定义/引用数量:

相比之下,查找ethhdr的结果如下:


1
非常感谢!!!那个详细的解释确实帮了很多忙!!(顺便说一下,关于ethhdr的总数似乎有一个小错误 - 它是193而不是93。) - undefined
1
好眼力。已修正。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接