BitVisorのVLANタグの取り扱いについてです。
BitVisorのVLANタグ対応部分
BitVisorのほとんどの部分はVLANタグなど気にしておらず、単なるパススルーがほとんどです。例えばTCP/IPスタックでVLANタグを使うとか、そんなことは、あ、それは設定だけでできるかも? VPNは無理だと思います。
Broadcom GbEドライバー
少し前まで、VLANタグ付きパケットを受信すると黙って即捨てるという素敵な実装になっていましたが、10月頃に受信できるよう実装が入りました。
対応方法ですが、送信に関しては、そもそも特に何もしなくてもできていました。VLANタグに関するハードウェアの機能は使用していません。受信に関しては、ハードウェアが自動的に分離してくれているのを、ソフトウェアで挿入し直します。さすがにフレーム全体のメモリーコピーはあんまりなので、受信バッファーを4バイト後ろにずらしておき、タグを挿入する時には先頭の12バイトを4バイト手前にコピーする方法をとっています。受信に関してはハードウェアの機能を使用しない選択肢がありません。
本当は、タグを分離したままVMM内を引き回せるようにできているといいのですが、その前に非連続メモリーのバッファーやチェックサムなどのオフロードに対応したほうが良さそうです。
Intel GbEドライバー
Virtio-netエミュレーション使用時には、何もしなくても送受信できているようです。VLANタグに関するハードウェアの機能は使用していません。
Para-passthroughモードでは未確認です。
Virtio-netデバイスのエミュレーション
Virtioの仕様を見るとVLANフィルター機能に対応できるようになっていますが、BitVisorではその機能は提供していません。
オペレーティングシステムからパススルーでの使い方
Linuxでは非常に簡単です。GNU/Linuxでは、iproute2に含まれるipというコマンドを用いて、VLANの設定ができます。Virtio-netエミュレーションでは、Broadcom・Intel GbEのどちらでも問題なく通信できました。
Windowsではオペレーティングシステム標準の機能はなさそうです。ネットワークインターフェイスのデバイスドライバーが対応していれば設定できる、みたいな感じのようです。残念ながらvirtio-netのドライバーだとうまくいかない様子でした。
macOSではオペレーティングシステム標準の機能がありますが、デバイスドライバーの何らかの機能をあてにしているのか、virtio-net-osxドライバーだと使えないようでした。