IPsec Offload Version 2 によるネットワーク データの受信

[IPsec タスク オフロード機能は廃止予定であり、使用しないでください]

NIC は、トランスポートからオフロードされたセキュリティ アソシエーション (SA) で指定された受信パケットに対して、IPsec オフロード バージョン 2 (IPsecOV2) 処理を実行します。

ミニポート ドライバーは、基になるドライバーに受信したデータを示す前に、IPsecOV2 帯域外 (OOB) 情報を設定します。 OOB 情報へのアクセスの詳細については、「IPsec オフロード バージョン 2 の NET_BUFFER_LIST 情報へのアクセス」を参照してください。

ミニポート ドライバーは、NIC 内の IPsec データの処理中にエラーが発生した場合でも、受信したすべてのパケットを上位のドライバーに示す必要があります。 ドライバーは、ネットワーク トラフィックを監視およびトラブルシューティングするドライバー スタックを有効にするには、エラーのあるパケットを示す必要があります。

ミニポート ドライバーは、受信したデータ パケットをドライバー スタックに示す前に、以下の処理を実行します。

  • IPsec オフロード タスクを処理するようにハードウェアが構成されていることを確認します。 それ以外の場合、ミニポート ドライバーは、追加の IPsec オフロード処理なしで受信指示を行います。

  • セキュリティ パラメーター インデックス (SPI) を調べて、一致するオフロード SA が存在するかどうかを判断します。 ミニポート ドライバーは、パケットの宛先アドレスがオフロードされた SA で指定されたものと同じであることを確認します。 一致する SA がない場合、NIC は IPsecOV2 OOB 情報を設定せずに受信データを示します。

  • ミニポート ドライバーがトランスポートに報告した機能に基づいてパケットを処理できることを確認します。または、それ以上 IPsec 処理を行わずに受信指示を作成します。 たとえば、パケットに、NIC がそのようなパケットの IPsec オフロード処理をサポートせず、ミニポート ドライバーが IPsec 処理を行う IP オプションが存在する可能性があります。

  • NDIS_IP SEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 構造の CryptoDone フラグを設定し、NIC が受信パケット内の少なくとも 1 つの IPsec ペイロードに対して IPsec チェックを実行したことを示します。

  • NDIS_IP SEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 構造の NextCryptoDone フラグを設定し、受信パケットのトンネル部分とトランスポート部分の両方で NIC が IPsec チェックを実行したことを示します。 ミニポート ドライバーは、トンネルペイロードおよびトランスポート ペイロードの両方がパケットに存在する場合のみ、このフラグを設定します。それ以外の場合、このフラグは 0 にする必要があります。

  • NDIS_IP SEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 構造の適切な CryptoStatus 値を設定し、IPsec チェックの結果を示します。

NIC が受信パケットでオフロード処理を実行しなかった場合、ミニポート ドライバーは CryptoDone フラグと NextCryptoDone フラグの両方をクリアします。 ミニポート ドライバーは、パケットが AH で保護されているか ESP で保護されているかどうかに関係なく、NIC が復号化しないすべての受信パケットのこれらのフラグをクリアします。

ミニポート ドライバーは、受信した NET_BUFFER_LISTNDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 構造で SaDeleteReq を設定できます。 その後 TCP/IP トランスポートは、OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA を一度発行して、パケットが受信されたインバウンド SA を削除し、さらにもう一度、削除されたインバウンド SA に対応するアウトバウンド SA を削除します。 SA の追加と削除の詳細については、「IPsec オフロード バージョン 2 でのセキュリティ アソシエーションの管理」を参照してください。

ミニポート ドライバーが TCP/IP トランスポートに NET_BUFFER_LIST 構造を示した後、TCP/IP トランスポートは、NIC がパケットで実行した IPsec チェックの結果を調べ、パケットのシーケンス番号をチェックし、チェックサム またはシーケンス テストに失敗したパケットを処理する方法を決定します。