次の方法で共有


SAN のソケット オプションと制御コードの処理

Windows ソケット スイッチは、TCP/IP プロバイダーと組み合わせて、アプリケーションによって開始されるほとんどの WSPGetSockOptWSPSetSockOpt、および WSPIoctl 呼び出しを処理します。 通常、これらの要求は、アプリケーションのソケットに関連付けられているオプションと操作パラメーターを設定および取得します。 スイッチは、次のセクションで説明する場合を除き、通常、これらの呼び出しを SAN サービス プロバイダーに転送しません。

SAN ソケット オプションの取得

Windows ソケット スイッチは、SAN サービス プロバイダーの WSPGetSockOpt 関数を呼び出し、次のいずれかのソケット オプションを渡して、そのオプションの現在の値を取得します (SAN サービス プロバイダーがそのオプションをサポートしている場合)。

SO_DEBUG
SAN サービス プロバイダーは、このオプションをサポートする必要はありません。 アプリケーションで SO_DEBUG オプションが設定されている場合は、出力デバッグ情報を提供することが推奨されますが、必須ではありません。

SO_MAX_MSG_SIZE
SAN サービス プロバイダーは、基になる SAN トランスポートがメッセージ指向であり、トランスポートが SAN サービス プロバイダーの WSPSend 関数の呼び出しで送信できるデータの量を制限する場合、このオプションをサポートする必要があります。 その後、スイッチは、このオプションの値に対して SAN サービス プロバイダーが返すサイズを超える送信要求を SAN サービス プロバイダーに渡しません。

SO_MAX_RDMA_SIZE
SAN サービス プロバイダーは、基になる SAN トランスポートが、SAN サービス プロバイダーの WSPRdmaRead または WSPRdmaWrite 関数の呼び出しでスイッチが転送できるデータの量を制限する場合に、このオプションをサポートする必要があります。 その後、スイッチは、このオプションの値に対して SAN サービス プロバイダーが返すサイズを超えるRDMA 転送要求を SAN サービス プロバイダーに渡しません。

SO_RDMA_THRESHOLD_SIZE
SAN サービス プロバイダーは、SAN サービス プロバイダーの WSPRdmaRead または WSPRdmaWrite 関数の呼び出しでスイッチが転送できる最小量のデータに対する優先設定を示すために、このオプションをサポートしています。 ただし、スイッチは、実際のしきい値を、SAN サービス プロバイダーによって返される値とは異なる値に設定できます。 その後、スイッチは WSPRdmaRead または WSPRdmaWrite 関数を呼び出して、このしきい値のサイズを超えるデータ ブロック (RDMA 転送) を転送し、WSPSend または WSPRecv 関数を呼び出して、このしきい値のサイズ以下のデータ ブロック (メッセージ指向転送) を転送します。

SO_GROUP_ID、SO_GROUP_PRIORITY
SAN サービス プロバイダーは、サービス品質 (QoS) をサポートする場合、これらのオプションをサポートする必要があります。 それ以外の場合、スイッチはこれらのオプションを TCP/IP プロバイダーに転送します。これは既定値を維持します。 SAN サービス プロバイダーは、WSAPROTOCOL_INFO構造体の dwServiceFlags メンバーで XP1_QOS_SUPPORTED ビットを設定することによって QoS をサポートすることを示します。

SAN ソケット オプションの設定

Windows ソケット スイッチは、SAN サービス プロバイダーの WSPSetSockOpt 関数を呼び出し、次のいずれかのソケット オプションを渡して、そのオプションの現在の値を取得します (SAN サービス プロバイダーがそのオプションをサポートしている場合)。

SO_DEBUG
このソケット オプションの説明については、上記の一覧を参照してください。

SO_GROUP_PRIORITY
このソケット オプションの説明については、上記の一覧を参照してください。

SAN ソケット情報へのアクセス

Windows ソケット スイッチは、SAN サービス プロバイダーの WSPIoctl 関数を呼び出し、SAN サービス プロバイダーがその制御コードをサポートしている場合、その SAN サービス プロバイダーの情報を設定または取得するために次のいずれかの制御コードを渡します:

SIO_GET_EXTENSION_FUNCTION_POINTER
SAN サービス プロバイダーがサポートする必要がある拡張関数へのポインターを取得します。 拡張関数の詳細については、「SAN 用の Windows ソケット SPI 拡張機能」を参照してください。 WSPIoctl 呼び出しの入力バッファーには、指定された拡張関数を識別する値を持つ GUID が含まれています。 SAN サービス プロバイダーは、WSPIoctl の出力バッファー内の要求された関数へのポインターを返します。 次の表に、SAN サービス プロバイダーがサポートできる拡張機能の GUID を示します:

拡張関数 GUID

WSPRegisterMemory

{C0B422F5-F58C-11d1-AD6C-00C04FA34A2D}

WSPDeregisterMemory

{C0B422F6-F58C-11d1-AD6C-00C04FA34A2D}

WSPRegisterRdmaMemory

{C0B422F7-F58C-11d1-AD6C-00C04FA34A2D}

WSPDeregisterRdmaMemory

{C0B422F8-F58C-11d1-AD6C-00C04FA34A2D}

WSPRdmaWrite

{C0B422F9-F58C-11d1-AD6C-00C04FA34A2D}

WSPRdmaRead

{C0B422FA-F58C-11d1-AD6C-00C04FA34A2D}

WSPMemoryRegistrationCacheCallback

{E5DA4AF8-D824-48CD-A799-6337A98ED2AF}

SIO_GET_QOS, SIO_GET_GROUP_QOS, SIO_SET_QOS, SIO_SET_GROUP_QOS
SAN サービス プロバイダーが QoS をサポートしている場合は、これらの制御コードをサポートする必要があります。 それ以外の場合、スイッチはこれらのオプションを TCP/IP プロバイダーに転送します。これは既定値を維持します。 プロバイダーは、WSAPROTOCOL_INFO構造体のdwServiceFlags メンバーに XP1_QOS_SUPPORTED ビットを設定することによって QoS をサポートすることを示します。

SIO_ADDRESS_LIST_QUERY
SAN サービス プロバイダーが制御するネットワーク インターフェイス カード (NIC) に割り当てられているローカル IP アドレスの一覧を取得します。 SAN サービス プロバイダーは、次のように定義された SOCKET_ADDRESS_LIST 構造体を使用して、WSPIoctl の出力バッファー内のリストを返します:

typedef struct _SOCKET_ADDRESS_LIST {
    INT             iAddressCount; 
    SOCKET_ADDRESS  Address[1]; 
} SOCKET_ADDRESS_LIST, FAR * LPSOCKET_ADDRESS_LIST;

この構造体のメンバーには、次の情報が含まれています:

iAddressCount
リスト内のアドレス構造の数を指定します。

住所
IP アドレス構造の配列。

スイッチは、この IOCTL コードを内部的に使用して、特定の SAN サービス プロバイダーを使用してアプリケーションの要求を実行して接続を行うか、着信接続をリッスンするかを決定します。 スイッチは、ローカル IP アドレスの一覧に対する実際のアプリケーション要求を TCP/IP プロバイダーに転送します。 また、スイッチは TCP/IP プロバイダーを使用して、すべての SAN サービス プロバイダー サービスのアドレス一覧の変更を検出します。 TCP/IP が変更を報告すると、スイッチはすべての SAN サービス プロバイダーにクエリを実行してリストを更新します。