我目前正在尝试解析来自原始缓冲区的数据包。我发现以太网标头似乎有两种结构:ether_header
和ethhdr
。我有点困惑他们之间的区别和关系是什么?我能用它们互换吗?
我做了一个快速搜索:
This post建议IP头存在两个相同的实现。这是以太网(也许是TCP,UDP等)的情况吗?
This patch显示了将一种实施方式从一种实施方式转变为另一种方式的努力。我不确定这背后的动机:也许一个实施是某种方式"更好"?
谢谢!
答案 0 :(得分:1)
在Linux中,ethhdr
结构在uapi/linux/if_ether.h中定义它在内核中的位置uapi(用户空间API)头文件将其固化为默认的稳定定义。
多年来,许多地方都定义了ether_header
结构。随着代码迁移到使用ethhdr
(正如您在链接到的补丁中观察到的那样),定义的数量和对这些定义的引用一直在下降。
通过查看内核源交叉引用器输出随着时间的推移,可以轻松查看此进展。以下列表描述了一些内核版本随时间的ether_header
定义/引用的数量:
为了进行比较,以下是查找ethhdr
时的结果: