ハッシュフィルタリングを備えた、Linuxブリッジで構築された素晴らしいシェーパーがあります。要するに、br0
接続external
とinternal
物理インターフェース、VLANタグ付きパケットは「透過的に」ブリッジされます(つまり、VLANインターフェースはありません)。
現在、異なるカーネルは異なる方法でそれを行います。正確なカーネルバージョンの範囲が間違っている可能性がありますが、ご容赦ください。ありがとう。
2.6.26
したがって、debianでは、2.6.26以降(2.6.32まで、私は信じています)---これは動作します:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
ここで、「カーネル」は0x8100の「プロトコル」フィールドの2バイトに一致しますが、IPパケットの先頭を「ゼロ位置」としてカウントします(少し不明瞭な場合は英語でごめんなさい)。
2.6.32
繰り返しますが、debian(私はバニラカーネルを構築していません)では、2.6.32-5 ---これは動作します:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
ここで、「カーネル」はプロトコルについても同じに一致しますが、このプロトコルのヘッダーの先頭からのオフセットをカウントします---オフセットに4バイトを追加する必要があります(dstアドレスの16ではなく20)。大丈夫です、私にとってはもっと論理的に思えます。
3.2.11、最新の安定版
これは--- 802.1qタグがまったくないかのように動作します:
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
問題は、これまでのところ802.1qタグと一致させる方法が見つからなかったことです。
過去の802.1qタグのマッチング
次のようにこれを行うことができます:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
今、私は、802.1Qタグと一致することができないんだat 0
、at -2
、at -4
、at -6
またはそのような。ヒット数がゼロであるという主な問題---このフィルターはまったくチェックされていません。つまり、「間違ったプロトコル」です。
誰でも助けてください:-)
ありがとう!
protocol all
私に与えますRTNETLINK answers: Invalid argument
(ここでは3.3.4カーネルを)。これを新しいカーネルでテストします。ありがとうございました。