Как создать Ethernet II
заголовок кадра в Linux? Заголовок кадра 802.3 может быть создан с использованием eth_header()
, давая skbuffer
и MAC и длину источника и назначения. Можно ли использовать ту же функцию для формата кадра Ethernet II
, где мы используем поле типа вместо длины?Создание заголовка кадра Ethernet II?
1
A
ответ
2
(текущем) исходников ядра определяют метод в вопросе следующим образом:
int eth_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type,
const void *daddr, const void *saddr, unsigned len);
Таким образом, мы сделать есть 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.
0
Cf. net/ipv6/netfilter/ip6t_REJECT.c
и net/ethernet/eth.c
:.
nskb = skb_alloc(...);
...
struct ethhdr *eh = skb_push(nskb, sizeof(struct ethhdr));
eh->h_proto = htons(ETH_P_IPV6);
Вы можете изменить количество байтов, выделенных и/или толкания в зависимости от того, что вы хотите добавить в пакет.
Смежные вопросы
- 1. Как определить длину кадра Ethernet II?
- 2. Ethernet II и данные, соответствующие стандарту 802.11 Data frame?
- 3. Передача кадра Ethernet через raw-сокет
- 4. Печатать MAC-адрес из заголовка Ethernet
- 5. Должна ли длина заголовка Ethernet 14?
- 6. Использование sk_buff для добавления заголовка фрейма Ethernet
- 7. Изменение заголовка кадра в wxPython
- 8. Создание кадра P на основе кадра I
- 9. Создание «отложенного» кадра данных
- 10. Создание Ldap Plug ii Grails 2.3
- 11. Создание заголовка
- 12. Как использовать libpcap для получения кадра Ethernet с помощью poll()
- 13. Извлечь полезную нагрузку UDP-пакета из кадра Ethernet
- 14. Производительность MySQL - 100Mb ethernet vs 1Gb ethernet
- 15. Как удалить активную строку заголовка кадра?
- 16. Создание матрицы из кадра данных
- 17. Создание кадра данных в Rcpp
- 18. Панда создание кадра данных несоответствий
- 19. GPS - устройство FrontEnd II
- 20. Использование Perl Net :: Frame :: Простой модуль для перезаписи заголовка ethernet
- 21. Создание заголовка IPv6
- 22. Создание собственного заголовка DICOM
- 23. Создание заголовка для drawerlayout?
- 24. Создание вертикального заголовка горизонтального
- 25. Создание заголовка файла XML
- 26. Создание заголовка непрозрачности
- 27. Создание окна без заголовка
- 28. Поле «P/Q tag» перед полем «Длина/Тип» в заголовке кадра Ethernet?
- 29. Windows 7 ICS от ethernet, до ethernet
- 30. Создание DBase II DBF-файла в C# 3.5
Спасибо за ответ. Скажем, например, у меня есть поле типа 8100 (vlan tagging), поэтому, когда я вызываю эту функцию, я должен передать ETH_P_802_2 для ввода типа и 8100 в поле len. Правильно ли это? – user1023527
@ user1023527: Actullay это может работать (при использовании источников в источниках), но я бы рекомендовал передать 'ETH_P_8021Q' (из'/usr/src/linux/include/linux/if_ether.h') через 'type' и ничего не пропускать (' 0') через 'len'. – alk
@ user1023527: * «Маркировка VLAN *» - это 802.1Q ('ETH_P_8021Q') и' ETH_P_8021Q', в свою очередь, '# define'ed будет' 8100'. – alk