VLAN ドライバーはどのようにして VLAN 情報をハードウェア イーサネット ドライバーに渡すのか

VLAN ドライバーはどのようにして VLAN 情報をハードウェア イーサネット ドライバーに渡すのか

プログラムによってターゲットに VLAN を実装しようとしています。

しかし、まずは VLAN 設定をよりよく理解するために、VLAN を手動で設定したいと考えました。そこで、vconfig/ifconfig コマンドの組み合わせを使用して開発システム (ubuntu) で VLAN を手動で設定しましたが、意図したターゲットで同じコマンドの組み合わせを使用しても機能しません。

どちらのシステムも同じ 8021q ドライバーを使用しているため、下位レベルのイーサネット ドライバーに VLAN 情報を通知する方法は同じであるはずです (そう思います)。VLAN ドライバーのソースを見ると、VLAN 情報を収集し、その情報を sk_buff 構造体に追加して、最終的にイーサネット ドライバーに渡すようですが、VLAN マジックがどこで発生するのか (イーサネット ドライバーか 8021q ドライバーか) は明らかではありません。

ターゲット システムのイーサネット ドライバーのソースを確認したところ、VLAN を設定するための ioctl メソッドがサポートされていることがわかりました。ただし、これは Linux がイーサネット ドライバーで VLAN を設定する従来の方法ではないようです。

VLAN ドライバー (8021q.ko) はどのようなメカニズムでイーサネット ハードウェアに VLAN について通知するのでしょうか?

ハードウェアで VLAN を設定するには、イーサネット ドライバーへの特別な API 呼び出しが必要ですか、それとも VLAN ドライバーがパケットに VLAN タグを追加する必要がありますか?

VLAN 実装に関する情報も役立ちます。

関連情報