NDIS_TCP_OFFLOAD_EVENT_INDICATE コールバック関数 (ndischimney.h)
[TCP のチムニー オフロード機能は非推奨であり、使用しないでください。]
オフロード ターゲットは、NdisTcpOffloadEventHandler 関数を呼び出して、オフロードされた TCP 接続に関連するイベントを示します。
構文
NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;
void NdisTcpOffloadEventIndicate(
[in] IN NDIS_HANDLE NdisOffloadHandle,
[in] IN ULONG EventType,
[in] IN ULONG EventSpecificInformation
)
{...}
パラメーター
[in] NdisOffloadHandle
指示が行われているオフロードされた TCP 接続を識別するハンドル。 接続がオフロードされると、このハンドルは、次の NdisOffloadHandle メンバーで提供されました。 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 接続状態に関連付けられた構造体。
[in] EventType
イベントは、次の TCP_OFFLOAD_EVENT_TYPE 値のいずれかとして示されます。
TcpIndicateDisconnect
リモート ホストが接続で FIN セグメントを送信して正常な切断を開始したことを示します。
TcpIndicateRetrieve
オフロード ターゲットが、TCP 接続のオフロードを終了するようにホスト スタックに要求していることを示します。
TcpIndicateAbort
リモート ホストが接続で許容可能な RST セグメントを送信して中止切断を開始したことを示します。
TcpIndicateSendBacklogChange
優先する送信バックログ サイズの変更を示します。
[in] EventSpecificInformation
次のように示されるイベントに関する追加情報を指定します。
TcpIndicateDisconnect
意味がありません。
TcpIndicateRetrieve
アップロード要求の理由を TCP_UPLOAD_REASON 値として示します。 詳細については、「解説」セクションを参照してください。
TcpIndicateAbort
意味がありません。
TcpIndicateSendBacklogChange
ホスト スタックがオフロード ターゲットで未処理にする必要がある送信データ バイトの最適な数を指定します。
戻り値
何一つ
備考
グレースフル 切断を示す
オフロード ターゲットは、次の場合にのみグレースフル 切断を示す必要があります。- リモート ホストから FIN セグメントを受信しました。
- FIN セグメントの受信前に接続で受信されたすべてのデータは、クライアント アプリケーションによって使用されています (つまり、接続で示される受信データはありません)。
正常な切断では、接続の受信半分のみがシャットダウンされることに注意してください。 接続の送信の半分はシャットダウンされません。
中止切断を示す
オフロード ターゲットが TCP 接続で許容可能な RST セグメントを受信する場合は、次の手順を実行する必要があります。- 接続の内部状態で、接続を中止としてマークします。
-
TcpIndicateAbort の EventType を使用して、NdisTcpOffloadEventHandler 関数呼び出します。注 ミニポートが tcpIndicateAbort イベント 示す場合、ホスト TCP/IP スタックは接続のオフロードを終了します。 オフロード ターゲットは、RST セグメントが到着するとすぐに、TcpIndicateAbort イベントを示すために自由です。
- NDIS_STATUS_REQUEST_ABORTEDを使用して、接続で未処理のすべての送信要求と切断要求を完了します。 オフロード ターゲットは、リンク リスト内の各 NET_BUFFER_LIST 構造体の 状態 メンバーにこの状態値を書き込みます。 NdisTcpOffloadSendComplete 関数またはNdisTcpOffloadDisconnectComplete 関数を します。
TCP 接続の終了を要求する
オフロード ターゲットは、終了要求の理由を、NdisTcpOffloadEventHandler 関数に渡す EventSpecificInformation パラメーターの TCP_UPLOAD_REASON 値として指定します。 応答として、ホスト スタックはオフロード ターゲットの ミニポートTerminateOffload 関数を呼び出します。オフロード ターゲットは、NdisTcpOffloadEventHandler への呼び出しごとに 1 つの TCP 接続の終了要求できます。 オフロード ターゲットは、近隣状態オブジェクトまたはパス状態オブジェクトの終了を要求できません。 近隣オブジェクトまたはパス状態オブジェクトの終了を開始できるのは、ホスト スタックだけです。
次の表では、オフロード ターゲットが TCP 接続のオフロードの終了を要求する可能性があるイベントまたは状況について説明します。
右端の列は、各 TCP_UPLOAD_REASONについて、ホスト スタックが常に接続をアップロードするか (必須)、または接続をアップロードしない可能性があるか (省略可能) を示します。 必須の場合、オフロード ターゲットはオフロード接続の処理を続行しません。 オプションの場合、オフロード ターゲットは、ホスト スタックがその接続のオフロードを終了しない場合、オフロード接続の処理を続行できる必要があります。
イベント/状況 | TCP_UPLOAD_REASON | ホスト スタックの TCP 接続の終了 |
---|---|---|
接続の追跡に使用されるハードウェアの状態が破損しています。 | HardwareFailure | 必須 |
オフロード ターゲットは、無効な状態オブジェクトに依存する TCP 接続でデータを送信しようとしました。 | InvalidState | 必須 |
オフロード ターゲットは、TCP ヘッダーに URG ビットが設定されたセグメントを受け取ります。 オフロード ターゲットは緊急データを確認する ACK を送信しないことに注意してください。 | ReceivedUrgentData の | 必須 |
TCP 接続でタイムアウトが発生しました。 | TimeoutExpiration | 必須 |
オフロード ターゲットは、未指定の理由でアップロードを要求しています。 | UploadRequested の | 必須 |
オフロード ターゲットは、TCP 接続でドロップされている送信セグメントが多すぎることを検出しました。 | HighDropRate を する | 随意 |
オフロード ターゲットは、TCP 接続で受信されているフラグメントが多すぎることを検出しました。 | HighFragmentation の | 随意 |
オフロード ターゲットが TCP 接続で受信した順序が異なっているセグメントが多すぎます。 | HighOutofOrderPackets を する | 随意 |
TCP 接続のアクティビティ (送受信) が低すぎます。 | LowActivity | 随意 |
TCP 接続用の事前にポストされた受信バッファーはありません。 | NoBufferProposting の | 随意 |
TCP 接続用にポストされた受信バッファーが小さすぎます。 | SmallIO | 随意 |
オフロード ターゲットは、その接続が次のいずれかの状態の場合に、ハーフクローズ TCP 接続の終了を開始してはなりません。
- FIN_WAIT1- ローカル ホスト スタックは TCP 接続を閉じていますが、接続がリモート エンドポイントからデータを受信している可能性があります。
- FIN_WAIT2 -- ローカル ホストは TCP 接続を閉じ、送信した FIN セグメントの ACK を受信しましたが、オフロードされた接続はリモート ホストからデータを受信している可能性があります。
- CLOSE_WAIT -- ローカル ホストが引き続きデータを送信している可能性があります。
送信バックログ サイズの変更を示す
送信バックログのサイズは、接続、インターフェイス帯域幅、およびその他のパラメーターのラウンドトリップ時間 (RTT) の関数にすることができます。 オフロード ターゲットが送信バックログ サイズの計算に使用する特定の変数とアルゴリズムは、実装固有です。 たとえば、オフロード ターゲットでは、帯域幅遅延製品の最小値と、アドバタイズされた受信ウィンドウをアルゴリズムとして使用できます。 ただし、送信バックログのサイズは、接続で送信するために現在ポストされているデータ バイトの数によって変わらないことに注意してください。オフロード ターゲットは、SendBacklogSize の値が頻繁に変更されるか、量が少なすぎる場合に、SendBacklogSize イベントを示さないことを確認するために調整メカニズムを実装する必要があります。 これにより、イベントの兆候の嵐が発生するのを防ぐことができます。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | ndischimney.h (Ndischimney.h を含む) |
IRQL | DISPATCH_LEVEL |
関連項目
TCP Chimney-Specific イベントの を示す
NdisMOffloadEventIndicate の
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete をするNdisTcpOffloadSendComplete の