[VMware]ネットワークアダプタとGEインタフェースの番号について

VMware仮想マシンのネットワークアダプタを増減させたとき、仮想マシン構成におけるネットワークアダプタの番号と、SEIL/x86 AyameのGEインタフェースの番号とが、番号順に対応しないことがあります(「ネットワークアダプタ1,2,3...」と「ge0,1,2...」が番号順に対応しない)。ここでは、両者を番号順に対応させる方法を紹介します。

注:
  • 本トピックで紹介する設定変更手順は、当社独自の動作確認結果に基づきます。VMware ESXi の仕様および操作方法に関しては公式のドキュメント等をご覧ください。
  • 本トピックの動作確認には VMware ESXi 6.7 を使用しました。VMware ESXi のバージョンや仕様変更によって挙動が同一でない可能性があります。

設定変更操作について

ここでは、構成ファイル(vmxファイル)を直接編集することによる設定変更を紹介します。
  • vmx ファイルを仮想環境からダウンロードし、該当項目を編集した後にアップロードし直すと、意図通りに反映されやすいようです。
  • vSphere Webクライアント経由の設定変更は意図通りに反映されないケースがあるようです。(仮想マシンの「設定の編集」から「仮想マシンオプション」タブの「詳細」→「設定パラメータ」による設定変更)
  • 基本的なハードウェア構成から設定変更した場合に意図通りに反映されることを確認済みです。変更元の構成によっては意図通りに反映されないケースがあるようです。
  • SEIL/x86 Ayameにネットワークアダプタの数や番号を再認識させるためには仮想マシンを再起動する必要があります。

構成の記述例

ネットワークアダプタとしてvmxnet3のみを使用するものとします。

vmxファイル中の、"ethernet*.pciSlotNumber" 行を下記のように編集してください。

なお、使用するネットワークアダプタの数によってネットワークアダプタの番号とpciSlotNumberの割り当てが異なる点に注意してください。

1~4個の場合
ethernet0.pciSlotNumber  =  "160"
ethernet1.pciSlotNumber  =  "192"
ethernet2.pciSlotNumber  =  "224"
ethernet3.pciSlotNumber  =  "256"
5個の場合
ethernet0.pciSlotNumber  =  "160"
ethernet1.pciSlotNumber  = "1184"
ethernet2.pciSlotNumber  =  "192"
ethernet3.pciSlotNumber  =  "224"
ethernet4.pciSlotNumber  =  "256"
6個の場合
ethernet0.pciSlotNumber  =  "160"
ethernet1.pciSlotNumber  = "1184"
ethernet2.pciSlotNumber  =  "192"
ethernet3.pciSlotNumber  = "1216"
ethernet4.pciSlotNumber  =  "224"
ethernet5.pciSlotNumber  =  "256"
10個の場合
ethernet0.pciSlotNumber = "160"
ethernet1.pciSlotNumber = "1184"
ethernet2.pciSlotNumber = "2208"
ethernet3.pciSlotNumber = "192"
ethernet4.pciSlotNumber = "1216"
ethernet5.pciSlotNumber = "2240"
ethernet6.pciSlotNumber = "224"
ethernet7.pciSlotNumber = "1248"
ethernet8.pciSlotNumber = "256"
ethernet9.pciSlotNumber = "1280"

解説

仮想マシンの構成とOS(SEIL/x86 Ayame)とでデバイスの番号が異なるのは、PCIデバイスの探索方法が異なることに由来します。また、仮想マシンはネットワークアダプタの構成数によって内部的なトポロジーが変化することによります(単純に追加されない)。このため、OS側のデバイス探索方法を前提として仮想マシン側のpciSlotNumberを割り当て、また、ネットワークアダプタの構成数によって割当を変える必要が生じます。

上記の記述例は、PCIブリッジの設定が次の内容であることを前提としています。

pciBridge0.pciSlotNumber = "17"
pciBridge4.pciSlotNumber = "21"
pciBridge5.pciSlotNumber = "22"
pciBridge6.pciSlotNumber = "23"
pciBridge7.pciSlotNumber = "24"

※ この構成は、ハードウェア構成によって異なる可能性があります。

VMwareのpciSlotNumberの法則は、次のサイトで説明されています。
この法則に照らし合わせると、前提としたPCIブリッジの構成において記述例「6個の場合」のようにpciSlotNumberを設定すると、次のようなトポロジーになると考えられます。

※ PCIeであるため実際はブリッジではなくスイッチとして扱われます。

また、「10個の場合」は次のようなトポロジーになると考えられます。

SEIL/x86 Ayame(NetBSD-8)のPCI device probe は深さを優先して探索するため、上図のトポロジーとなるように構成することで、ネットワークアダプタの番号とGEインタフェースの番号を昇順で対応させることができます。