W_TCP_OFFLOAD_FORWARD_HANDLER コールバック関数 (ndischimney.h)

[TCP のチムニー オフロード機能は非推奨であり、使用しないでください。]

NDIS は 、ミニポートTcpOffloadForward 関数を呼び出して、未確認の受信 TCP セグメントをオフロード ターゲットに転送します。

構文

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

NDIS_STATUS WTcpOffloadForwardHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

パラメーター

[in] MiniportAdapterContext

オフロード ターゲットがアダプターのこのインスタンスに関する状態情報を保持するオフロード ターゲット割り当てコンテキスト領域へのハンドル。 ミニポート ドライバーは、呼び出されたときに NDIS にこのハンドルを提供しました NdisMSetMiniportAttributes MiniportInitializeEx 関数。

[in] MiniportOffloadContext

PVOID 値を含むメモリの場所へのポインター。 この PVOID 値は、TCP セグメントが転送される TCP 接続の状態オブジェクトを含むミニポート オフロード コンテキストを参照します。 オフロード ターゲットは、TCP 接続状態オブジェクトをオフロードしたときに、この PVOID 値を指定しました。

[in] NetBufferList

NET_BUFFER_LIST構造体へのポインター。 この構造体は、スタンドアロン構造、またはNET_BUFFER_LIST構造のリンクされたリスト内の最初の構造体である場合があります。 リスト内の各NET_BUFFER_LIST構造体には、1 つの NET_BUFFER 構造体が記述されています。 各NET_BUFFER構造体は、メモリ記述子リスト (MDL) のチェーンにマップされます。 NET_BUFFER構造体に関連付けられている MDL には、オフロード ターゲットに転送される TCP セグメントが 1 つだけ含まれています。 最初の MDL の最初のバイトは、TCP ヘッダーの最初のバイトです。 NET_BUFFER_LISTおよび関連する構造体は、物理メモリに常駐するようにロックされます。 ただし、システム メモリにはマップされません。

戻り値

NDIS_STATUS_PENDINGは、許容される唯一の戻り値です。 オフロード ターゲットは、常に を呼び出して非同期的に転送要求を完了します。 NdisTcpOffloadForwardComplete 関数。

注釈

ホスト スタックは、受信した TCP セグメントを 1 つ以上転送しますが、次の状況では確認されません。

  • ホスト スタックは、オフロード ターゲットにオフロードされている TCP 接続でセグメントを受信しました。 接続が完全にオフロードされていないため、オフロード ターゲットでは、その時点で TCP セグメントを処理できませんでした。
  • ホスト スタックは、TCP 接続がオフロードされるネットワーク インターフェイス以外のネットワーク インターフェイスでセグメントを受信したマルチホーム システム内にあります。
  • オフロード ターゲットは、IP オプションが設定された受信パケット、または再組み立てが必要なフラグメントである受信パケットを示していました。 IP オプションを処理したり、パケットを正常に再構成したりすると、ホスト スタックは TCP セグメントをオフロード ターゲットに転送します。
ホスト スタックは、次の場合に TCP 接続の TCP セグメントの転送を試みることはありません。
  • その接続はオフロードされています。 ホスト スタックは、接続のオフロードが完了するまで常に待機してから、その接続のパケットを転送します。 ホスト スタックは、接続のオフロードが完了した後、できるだけ早く TCP セグメントを転送します。 ただし、このようなセグメントを転送するための時間制限はありません。
  • その接続のオフロードが終了しています。 この場合、ホスト スタックは、オフロードの終了が完了するまでデータをバッファーに格納し、セグメントを処理します。
ホスト スタックは、IP データグラムではなく TCP セグメントをオフロード ターゲットに転送します。 したがって、ホスト スタックが各セグメントに提供する唯一のヘッダーは、存在する TCP オプションを含む TCP ヘッダーです。 これは、オフロード ターゲットが受信したセグメントを処理するために必要なすべてのヘッダー情報です。

TCP セグメントを転送する場合、ホスト スタックは、NET_BUFFER構造体ごとに 1 つの TCP セグメントを転送します。 ホスト スタックは、リンクリスト内の各NET_BUFFER_LIST構造に、1 つのNET_BUFFER構造体、つまり 1 つの転送された TCP セグメントのみを関連付けます。

ホスト スタックは、NDIS が MiniportTcpOffloadForward 関数に渡すNET_BUFFER_LISTおよび関連付けられた構造体を割り当てます。 オフロード ターゲットは、これらのリソースを に渡すまで、これらのリソースを所有します。 NdisTcpOffloadForwardComplete 関数。 これらのリソースを所有している間、オフロード ターゲットは自由にキューに入れて処理できます。

要件

要件
対象プラットフォーム Windows
ヘッダー ndischimney.h (Ndischimney.h を含む)
IRQL 任意のレベル

こちらもご覧ください

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete