В чем разница между `ether_header` и` ethhdr`? - PullRequest
0 голосов
/ 02 июня 2018

Я сейчас пытаюсь проанализировать пакеты из необработанного буфера.Я считаю, что для заголовка ethernet существуют две структуры: ether_header и ethhdr.Я в некотором замешательстве, какая разница и отношения для них?Могу ли я использовать их взаимозаменяемо?

Я сделал быстрый поиск:

В этом посте предполагается, что существуют две идентичные реализации для заголовка IP.Это относится к Ethernet (и, возможно, к TCP, UDP и т. Д.)?

Этот патч показывает усилия по переходу с одной реализации на другую.Я не уверен, что за этим стоит стимул: может быть, одна реализация как-то «лучше»?

Спасибо!

1 Ответ

0 голосов
/ 02 июня 2018

В Linux структура ethhdr определена в uapi / linux / if_ether.h Это размещение в заголовочном файле ядра uapi (API пользовательского пространства) делает его устойчивым определением по умолчанию, равным.

Структура ether_header была определена во многих местах на протяжении многих лет.Количество определений и ссылок на эти определения со временем уменьшалось по мере перехода кода на использование ethhdr (как вы заметили в патче, с которым вы ссылались).

Простой способ увидеть эту прогрессию - посмотреть на результаты перекрестных ссылок исходного кода ядра с течением времени.В следующем списке показано количество ether_header определений / ссылок для нескольких версий ядра с течением времени:

Для сравнения приведем результаты при поиске ethhdr:

...