W_TCP_OFFLOAD_SEND_HANDLER コールバック関数 (ndischimney.h)
[TCP のチムニー オフロード機能は非推奨であり、使用しないでください。]
NDIS は、オフロードされた TCP 接続でデータを送信する 関数 ミニポートTcpOffloadSend を呼び出します。
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
[in] MiniportAdapterContext
オフロード ターゲットがアダプターのこのインスタンスに関する状態情報を保持するオフロード ターゲット割り当てコンテキスト領域へのハンドル。 オフロード ターゲットは、呼び出されたときに NDIS にこのハンドルを提供しました NdisMSetMiniportAttributes からミニポートInitializeEx 関数を します。
[in] MiniportOffloadContext
PVOID 値を含むメモリ位置へのポインター。 この PVOID 値は、データを送信する TCP 接続の状態オブジェクトを含むミニポート オフロード コンテキストを参照します。 オフロード ターゲットは、TCP 接続状態オブジェクトをオフロードするときに、この PVOID 値を指定しました。
[in] NetBufferList
NET_BUFFER_LIST 構造体へのポインター。 この構造体は、スタンドアロン構造でも、NET_BUFFER_LIST構造のリンクされたリスト内の最初の構造体でもかまいません。 リスト内の各NET_BUFFER_LIST構造体は、NET_BUFFER 構造体の一覧を記述します。 リスト内の各NET_BUFFER構造体は、メモリ記述子リスト (MDL) のチェーンにマップされます。 MDL には、送信するデータが含まれています。 NET_BUFFER_LISTおよび関連する構造体は、物理メモリに常駐し続けることができるようにロックされます。 ただし、システム メモリにはマップされません。
NDIS_STATUS_PENDINGは、許可される唯一の戻り値です。 オフロード ターゲットは、常に呼び出しによって非同期的に送信要求を完了します。NdisTcpOffloadSendComplete をします。
オフロード ターゲットは、先入れ先出し (FIFO) 順にデータを送信する必要があります。 NetBufferList で NDIS が渡す NET_BUFFER_LIST 構造体のリンクされたリストの順序は、オフロード ターゲットがネットワーク データを送信する必要がある順序を表します。 さらに、オフロード ターゲットは、複数の呼び出しから受信したデータを、データがポストされた順序で ミニポートTcpOffloadSend に送信する必要があります。
オフロード ターゲットは、その ミニポートTcpOffloadSend 関数に対して行われたすべての送信要求を受け入れる必要があります。 オフロード ターゲットが送信要求をすぐに完了できない場合、オフロード ターゲットは要求を完了するまでキューに入れる必要があります。 オフロード ターゲットは、NET_BUFFER_LIST構造体の ミニポート予約 メンバーを使用して、要求をキューに送信する必要があります。 送信要求が保留中の間、オフロード ターゲットは、NET_BUFFER_LIST構造体と、NET_BUFFER_LIST構造体に関連付けられているすべてのリソースの所有権を保持します。
ホスト スタックは、接続ごとに送信要求をシリアル化します。 その接続に対する別の送信要求が進行中の間、スタックは接続に対して送信要求を発行しません。 これにより、オフロード ターゲットは常に正しい順序で送信要求を受け取ります。
ただし、オフロード ターゲットが同じ接続で ミニポートTcpOffloadSend 関数への 1 つ以上の以前の呼び出しを完了する前に、ホスト スタックは接続で ミニポートTcpOffloadSend 関数を呼び出すことができることに注意してください。 また、ホスト スタックは、1 つの接続でオフロード ターゲットの ミニポートTcpOffloadSend 関数を呼び出すことができますが、別の接続で ミニポートTcpOffloadSend 関数への 1 つ以上の呼び出しが進行中であることに注意してください。
ミニポートTcpOffloadSend 関数は、同じキューにアクセスするオフロード ターゲットの他の ミニポートXxx 関数とネットワーク データの内部キューへのアクセスを同期する必要があります。 オフロード ターゲットでは、スピン ロックを使用してキューへのアクセスを同期できます。
オフロード ターゲットは、各NET_BUFFER_LIST境界に PSH ビットを設定する必要があります (ただし、必須ではありません)。 これを行うには、各NET_BUFFER_LIST構造体に関連付けられたデータ (つまり、NET_BUFFER_LIST構造体に関連付けられたNET_BUFFER構造体によって記述されるデータ) から作成された最後のセグメントで PSH ビットを設定することをお勧めします。 または、オフロード ターゲットは、送信キューが空になる前に、送信キューの最後の残りのセグメントに PSH ビットを設定できます。
ホスト スタックは、オフロード ターゲットに緊急データの送信を要求しません。
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndischimney.h (Ndischimney.h を含む) |
IRQL | 任意のレベル |
NdisMSetMiniportAttributes の
NdisTcpOffloadSendComplete の