eth 유형을 기반으로 트래픽을 필터링하고 지정된 트래픽을 삭제하는 qdisc를 만들려고 합니다. 하지만 현재 필터가 작동하지 않고 트래픽을 캡처하지 않습니다.
'# tc 필터는 dev eth2 prio 100 프로토콜을 추가합니다. 모든 상위 1: u32는 12 flowid 1:2에서 u16(eth 유형)(마스크)과 일치합니다.'
그래서 내 질문은 eth 유형을 기반으로 트래픽을 얻도록 필터를 어떻게 변경합니까?
답변1
참조(0)는 네트워크 부분(계층 3)에 대한 것입니다. 따라서 EtherType을 얻으려면 네트워크 계층 직전에유효 탑재량, -2(u16이 고려되는 경우 또는 u32 및 충분한 마스킹이 있는 -4). 따라서 EtherType 0x9000을 일치시키려면(루프백이라고 함):
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
.