私はイーサネットスイッチ(KSZ9897)をサポートするためにLinuxでDSAを使用しています。スイッチはうまく機能しますが、Linux(カーネル4.19)を介したブリッジVLANフィルタリングの設定に問題があります。
ブリッジを作成し、次のようにメンバーポートを追加します。
ip link add name br0 type bridge
ip link set dev lanB master br0
ip link set dev lanA master br0
この時点で、Linuxは「lanB」インターフェースに接続されたPCをpingするためのbr0インターフェースを作成しました。
ここで、VLANを使用してlanAとlanBを分離したいと思います。 VLANフィルタリングを有効にしてPVIDを設定します。
ip link set dev br0 type bridge vlan_filtering 1
bridge vlan add dev lanB vid 2 pvid untagged master
bridge vlan add dev lanA vid 3 pvid untagged master
VLAN設定を使用すると、ブリッジVLANの状態をダンプできます。
bridge vlan show
port vlan ids
lanB 2 PVID Egress Untagged
lanA 3 PVID Egress Untagged
br0 1 PVID Egress Untagged
この時点で問題が発生します。これで、CPUとLANBの間でpingを実行できるように、br0インターフェイスを2 PVIDに設定する必要があります。しかし、エラーが発生します。
bridge vlan add dev br0 vid 2 pvid
RTNETLINK answers: Operation not supported
CPUポートのpvidを変更できない場合は、これを行う方法がわかりません。私の究極の目標は、ip link add link br0 name br0.2 type vlan id 2
lanBと通信するためのVLANインターフェイスを追加することです。ただし、br0スイッチポートがVLAN 2の一部として構成されていない場合、この操作は失敗します。
私が間違っているのか、それとも何かを見逃しているのでしょうか?
答え1
ブリッジVLANを変更するコマンドには若干異なる構文が必要であることがわかりました。 'self'はデバイスに接続する必要があります。
bridge vlan add dev br0 self vid 2 pvid
これにより、コマンドは期待どおりに機能します。