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
。