SAN 用の Windows ソケット SPI 拡張機能
このセクションでは、SAN サービス プロバイダー DLL が提供する必要がある SAN 拡張関数について簡単に説明します。 これらの関数は、SAN で使用するために Windows ソケット SPI を拡張します。 拡張関数は Ws2san.h で定義され、「Windows ソケット ダイレクト リファレンス」セクションにすべて記載されています。
WSPStartupEx 関数を除き、このセクションに記載されている拡張関数は、Windows ソケット スイッチによって取得されます。 これらの各拡張関数へのエントリ ポイントを取得するために、Windows ソケット スイッチは SAN サービス プロバイダーの WSPIoctl 関数を呼び出し、SIO_GET_EXTENSION_FUNCTION_POINTER コマンド コードと、値でこれらの拡張関数のいずれかを識別する GUID を渡します。
SAN サービス プロバイダーは、WSPRdmaRead 関数と WSPMemoryRegistrationCacheCallback 関数を除き、次の拡張関数をすべて実装する必要があります。 SAN サービス プロバイダーが WSPRdmaRead または WSPMemoryRegistrationCacheCallback 拡張関数をサポートしていない場合、Windows ソケット スイッチが WSPRdmaRead または WSPMemoryRegistrationCacheCallback へのエントリ ポイントを要求したときに、SAN サービス プロバイダーの WSPIoctl 関数は WSAEOPNOTSUPP エラーを返す必要があります。
WSPStartupEx
SAN サービス プロバイダーの Windows ソケット スイッチの使用を開始します。
WSPRegisterMemory
ソケットがデータ転送操作のローカル ソースまたはローカル ターゲットとして使用するバッファー配列を登録します。 このようなソケットは、WSPRdmaWrite と WSPSend の呼び出しではソース バッファーとして、WSPRdmaRead と WSPRecv の呼び出しでは受信バッファーとしてこのバッファー配列を使用できます。
WSPDeregisterMemory
WSPRegisterMemory 関数の前回の呼び出しによって登録されたバッファー配列を解放します。
WSPRegisterRdmaMemory
リモート ピア接続との間でデータを転送するために、そのピア接続に公開される RDMA バッファー配列を登録します。 リモート ピアのソケットは、WSPRdmaWrite 呼び出しではターゲット バッファーとして、WSPRdmaRead 呼び出しではソース バッファーとしてこの RDMA バッファー配列を使用できます。
WSPDeregisterRdmaMemory
WSPRegisterRdmaMemory 関数の前回の呼び出しによって登録されたバッファー配列を解放します。
WSPMemoryRegistrationCacheCallback
アプリケーションのバッファーおよびバッファーと物理メモリ間のロックの所有権を解放し、SAN サービス プロバイダーのキャッシュからバッファーを削除し、SAN NIC からバッファー登録を削除します。
WSPRdmaRead
ソケットのリモート ピアがアクセスできるアドレス空間の RDMA バッファーから、ローカル ソケットがアクセスできるアドレス空間のバッファーにデータを転送します。
WSPRdmaWrite
ローカル ソケットがアクセスできるアドレス空間のソース バッファーから、ソケットのリモート ピアがアクセスできるアドレス空間のターゲット RDMA バッファーにデータを転送します。