(Текущие) исходные коды ядра определяют этот метод следующим образом:
int eth_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type,
const void *daddr, const void *saddr, unsigned len);
Таким образом, у нас do есть поле type
.Пока все хорошо.
Давайте посмотрим на реализацию метода, учитывается ли и как значение type
.Метод начинается следующим образом:
{
struct ethhdr *eth = ...
if (type != ETH_P_802_3 && type != ETH_P_802_2)
eth->h_proto = htons(type);
else
eth->h_proto = htons(len);
...
Как мы видим, для всех типов, кроме 802.2 / 3, значение type
(переданное функции) используется для инициализации заголовка кадра , что нам и нужно для заголовков кадра Ethernet II.
Заключение и ответ на вопрос: Да , можно использовать eth_header()
для создания заголовка кадра Ethernet II.