victor_sudakov: (Default)
[personal profile] victor_sudakov
За значение CoS отвечают три старших бита из четырех байт 802.1q тэга. Как правильно матчить значение CoS в tcpdump?

Можно матчить байт по смещению 0x000e, например "tcpdump -v -s0 'ether[0x000e] == 0xA0'" будет ловить кадры с CoS=5. Соответственно

CoS=0 'ether[0x000e] == 0x00'
CoS=1 'ether[0x000e] == 0x20'
CoS=2 'ether[0x000e] == 0x40'
CoS=3 'ether[0x000e] == 0x60'
CoS=4 'ether[0x000e] == 0x80'
CoS=5 'ether[0x000e] == 0xa0'
CoS=6 'ether[0x000e] == 0xc0'
CoS=7 'ether[0x000e] == 0xe0'


Но эти выражения работают только при условии CFN=0 и номер vlan <= 255. С другой стороны, размер участка для сравнения в pcap-filter(7) может быть только кратным 1 байту (точнее 1, 2 или 4 байта).

Может с помощью битовых операторов можно сделать сравнение только по 3 старшим битам байта? Не могу сообразить как.

UPD спасибо [livejournal.com profile] filonov за подсказку:


Три старших бита можно либо выделить сдвигом
ether[0x000e] >> 5
либо обнулить остальные биты
ether[0x000e] & 0xe0

Со сдвигом проще потом работать с результатом. ибо старшие биты сдвигаются в младшие, и результат получается от 0 до 7.


Т.е. CoS=5 ловим выражением 'ether[0x000e] >> 5 == 0x05' либо 'ether[0x000e] & 0xe0 == 0xa0'

Profile

victor_sudakov: (Default)
Виктор Судаков

November 2025

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 20th, 2026 05:18 pm
Powered by Dreamwidth Studios