Использование формирования трафика tc для фильтрации по ethtype

Кажется, я решил проблему, используя совпадение и подстроку:

'match($0, /REGEX/) {sub(/REGEX/, substr($0, RSTART, RLENGTH) ); print}'
1
08.10.2020, 00:57
1 ответ

Ссылка (на 0 )относится к сетевой части (уровня 3 ). Таким образом, чтобы получить EtherType, он находится прямо перед сетевым уровнем полезной нагрузки , в -2 (, если рассматривается u16, или в -4 с u32 и соответствующей маской ). Таким образом, для соответствия EtherType 0x9000 (называется Loopback):

tc filter add dev eth2 prio 100 protocol all parent 1: u32 match u16 0x9000 0xffff at -2 flowid 1:2

, что эквивалентно (и фактически переведено в):

tc filter add dev eth2 prio 100 protocol all parent 1: u32 match u32 0x00009000 0x0000ffff at -4 flowid 1:2

Но на самом деле это перебор. Параметр protocolздесь уже является фильтром EtherType, так что этого достаточно:

tc filter add dev eth2 prio 100 protocol 0x9000 parent 1: matchall flowid 1:2

Если вы хотите удалить его напрямую без какой-либо другой обработки, замените flowid 1:2на action drop.

0
18.03.2021, 22:59

Теги

Похожие вопросы