仮想ポート経由のパケット フロー
既定の NIC スイッチは、単一ルート I/O 仮想化 (SR-IOV) インターフェイスをサポートするネットワーク アダプターのコンポーネントです。 スイッチは、常に既定の仮想ポート (VPort) を PCI Express (PCIe) 物理機能 (PF) にアタッチします。 スイッチは、1 つ以上の既定以外の VPort を PF にアタッチできます。 詳細については、「仮想ポートの作成」を参照してください。
PF にアタッチされている VPort で送受信されるパケットには、次の点が適用されます。
既定の VPort で送受信されるパケットは、DEFAULT_VPORT_ID の VPort 識別子の値で指定されます。
既定以外の VPort で送受信されるパケットは、OID_NIC_SWITCH_CREATE_VPORT の OID メソッド要求を通じて VPort が作成されたときに返された VPort 識別子で指定されます。 ドライバーは、この OID 要求を処理するときに、OID 要求に関連付けられている VPortId メンバー (NDIS_NIC_SWITCH_VPORT_PARAMETERS 構造体) から VPort 識別子を取得します。
注: VPort が削除されると、ミニポート ドライバーが無効な VPortId 値を含む NBL を受け取る可能性があります。 この場合、ミニポートは無効な VPort ID を無視し、代わりに DEFAULT_VPORT_ID を使用する必要があります。 VPortId は NBL の OOB データの NetBufferListFilteringInfo 部分にあり、NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID マクロを使用して取得されます。
PF ミニポート ドライバーは、VPort から受信したパケットを示すために NdisMIndicateReceiveNetBufferLists を呼び出します。 PF ミニポート ドライバーが NdisMIndicateReceiveNetBufferLists を呼び出す前に、パケットの NET_BUFFER_LIST 構造体の帯域外 (OOB) データにVPort 識別子を設定する必要があります。 ドライバーは、NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID マクロを使用してこれを行います。
仮想化スタックは NdisSendNetBufferLists を呼び出して、VPort にパケットを送信します。 仮想化スタックは、NdisSendNetBufferLists を呼び出す前に、パケットの NET_BUFFER_LIST 構造体の OOB データの VPort 識別子を設定します。
ミニポート ドライバーは、NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID マクロを使用して VPort 識別子を取得します。
ミニポート ドライバーは、指定された VPort のハードウェア送信キューに送信パケットを入れます。
注: PCIe 仮想関数 (VF) のミニポート ドライバーは、パケットの NET_BUFFER_LIST 構造体の OOB データの VPort 識別子を設定または照会しません。 VF ミニポート ドライバーは、パケットを送信するときに、VF にアタッチされている 1 つの既定以外の VPort のハードウェア送信キューにパケットを入れます。