次の方法で共有


NDIS_SWITCH_UPDATE_NET_BUFFER_LIST_DESTINATIONSコールバック関数 (ndis.h)

Hyper-V 拡張可能スイッチ拡張機能は、UpdateNetBufferListDestinations 関数を呼び出して、拡張機能が複数の拡張可能スイッチ宛先ポートを含むパケットに加えた変更をコミットします。 この関数は、これらの変更をパケットの NET_BUFFER_LIST 構造体の帯域外 (OOB) 拡張可能スイッチ転送コンテキストに保存します。

構文

NDIS_SWITCH_UPDATE_NET_BUFFER_LIST_DESTINATIONS NdisSwitchUpdateNetBufferListDestinations;

NDIS_STATUS NdisSwitchUpdateNetBufferListDestinations(
  [in]      NDIS_SWITCH_CONTEXT NdisSwitchContext,
  [in, out] PNET_BUFFER_LIST NetBufferList,
  [in]      UINT32 NumberOfNewDestinations,
  [in]      PNDIS_SWITCH_FORWARDING_DESTINATION_ARRAY Destinations
)
{...}

パラメーター

[in] NdisSwitchContext

Hyper-V 拡張可能スイッチ拡張機能がアタッチされている拡張可能スイッチ モジュールのハンドルを含むNDIS_SWITCH_CONTEXT値。 拡張機能が NdisFGetOptionalSwitchHandlers 呼び出すと、このハンドルは、NdisSwitchContext パラメーターを介して返されます。

[in, out] NetBufferList

1 つのパケットの NET_BUFFER_LIST 構造体へのポインター。

この構造体には、拡張可能スイッチ転送コンテキストが含まれている必要があります。 拡張機能がパケットを作成または複製した場合は、AllocateNetBufferListForwardingContext 関数を呼び出して、この構造体を以前に割り当てた必要があります。
 

[in] NumberOfNewDestinations

パケットに追加された新しい宛先ポートの数を指定する UINT32 値。

[in] Destinations

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体へのポインター。 この構造体は、パケットの拡張可能スイッチの宛先ポートを指定します。

拡張機能は、GetNetBufferListDestinations 関数の以前の呼び出しを通じてこの構造体を受け取りました。
 

戻り値

呼び出しが成功した場合、関数はNDIS_STATUS_SUCCESSを返します。 それ以外の場合は、Ndis.h で定義されているNDIS_STATUS_Xxx エラー コードが返されます。

備考

拡張可能スイッチ拡張機能は、GetNetBufferListDestinations 関数を呼び出して、パケットの拡張可能スイッチの宛先ポートの配列を取得します。 関数が正常に返された場合、配列は、NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体へのポインターを含む Destinations パラメーターを介して取得されます。 この配列内の各要素は、パケットの宛先ポートを指定する NDIS_SWITCH_PORT_DESTINATION 構造体として書式設定されます。

拡張機能が NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体を取得した後、拡張機能は次の操作を実行できます。

  • 配列に NDIS_SWITCH_PORT_DESTINATION 要素を追加します。

    詳細については、「パケットへの拡張可能スイッチ宛先ポート データの追加」を参照してください。

  • 指定したポートにパケットが転送されないように、配列の既存の NDIS_SWITCH_PORT_DESTINATION 要素を変更します。

    詳細については、「拡張可能スイッチ宛先ポートへのパケット配信 を除外するを参照してください。

拡張機能が NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体の宛先ポートを追加または変更する場合、拡張機能は、UpdateNetBufferListDestinations 関数を呼び出して、それらの変更をパケットの NET_BUFFER_LIST 構造体にコミットする必要があります。
注意 転送拡張機能のみが、UpdateNetBufferListDestinations を呼び出して、複数の宛先ポートを持つパケットに対して追加または変更された宛先ポートをコミットできることに注意してください。 この種類の拡張機能の詳細については、「転送拡張機能の」を参照してください。
 
UpdateNetBufferListDestinations の呼び出しがNDIS_STATUS_SUCCESSを返す場合、拡張可能スイッチ インターフェイスは、パケットの送受信操作が完了するまで、宛先ポートで参照されている拡張可能スイッチ ポートとネットワーク アダプター接続が削除されないことを保証します。

また、宛先ポートの変更がコミットされた後は、宛先ポートを削除できず、宛先ポートの NDIS_SWITCH_PORT_DESTINATION 構造の IsExcluded メンバーのみを変更できます。 詳細については、「拡張可能スイッチ宛先ポートへのパケット配信 を除外するを参照してください。

注意 パフォーマンス上の理由から、拡張機能は、UpdateNetBufferListDestinations 関数を呼び出して、宛先ポートが 1 つだけのパケットに変更をコミットしないようにする必要があります。 代わりに、拡張機能は AddNetBufferListDestination 呼び出して、パケットの宛先ポートへの変更をコミットします。
 
拡張可能スイッチ転送コンテキストの詳細については、「Hyper-V 拡張可能スイッチ転送コンテキストの」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.30 以降でサポートされています。
ターゲット プラットフォーム デスクトップ
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

関連項目

AllocateNetBufferListForwardingContext

GetNetBufferListDestinations

NDIS_SWITCH_PORT_DESTINATION

NET_BUFFER

NET_BUFFER_LIST

NdisFGetOptionalSwitchHandlers

NdisFOidRequest

OID_SWITCH_NIC_DELETE