Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > извлечение vlan id


Автор: box 14.12.2013, 23:41
всем привет!
как получить vlan id из ip header 
Код

ip = (struct ip*)(data + sizeof(struct ether_header) + 4);

Автор: feodorv 15.12.2013, 20:09
Вы этот http://xgu.ru/wiki/VLAN_ID имеете в виду? Так он в ethernet-заголовке. В IP-заголовке такого поля не предусмотрено.

А "+ 4" в приведенном коде - это из-за тега 802.1Q?

Автор: box 15.12.2013, 20:31
в ethernet заголовке по поводу влан тага только это :
Код

#define ETHERTYPE_VLAN          0x8100  /* IEEE 802.1Q VLAN tagging (XXX conflicts) */

+4 это пришлось сделать strip vlan tag что бы корректно обработать пакет 
так как все таки получить влан ид ?
нашел описание структуры :
Код

struct vlan_ether_header {
char dst[6];     // This is six bytes for the destination MAC address.
char src[6];     // This is six bytes for the source MAC address.
short type;
short tci_vid;
short encapsulated_type;
} __attribute__ ((__packed__));

а как применить ее не понимаю 

Автор: box 15.12.2013, 21:01
вопрос решен :
Код

vlan = (struct vlan_ether_header*)(data);
int vlan_id = ((ntohs(vlan->tci_vid)) & 0x0fff);

спасибо за подсказку )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)