Gestion des options de socket et des codes de contrôle pour un SAN
Le commutateur Windows Sockets, conjointement avec le fournisseur TCP/IP, gère la plupart des appels WSPGetSockOpt, WSPSetSockOpt et WSPIoctl lancés par les applications. Ces demandes visent généralement à définir et à récupérer des options et des paramètres de fonctionnement associés au socket d’une application. Le commutateur ne transfère généralement pas ces appels à un fournisseur de services SAN, sauf comme décrit dans les sections suivantes.
Récupération des options de socket SAN
Le commutateur Windows Sockets appelle la fonction WSPGetSockOpt d’un fournisseur de services SAN et passe l’une des options de socket suivantes pour récupérer la valeur actuelle de cette option, si le fournisseur de services SAN prend en charge cette option :
SO_DEBUG
Les fournisseurs de services SAN ne sont pas nécessaires pour prendre en charge cette option. Ils sont encouragés, mais pas obligatoires, à fournir des informations de débogage de sortie si les applications définissent l’option SO_DEBUG.
SO_MAX_MSG_SIZE
Un fournisseur de services SAN doit prendre en charge cette option si le transport SAN sous-jacent est orienté message et que le transport limite la quantité de données que le commutateur peut envoyer dans un appel à la fonction WSPSend du fournisseur de services SAN. Par la suite, le commutateur ne transmet pas les demandes envoyées au fournisseur de services SAN qui dépassent la taille que le fournisseur de services SAN retourne pour la valeur de cette option.
SO_MAX_RDMA_SIZE
Un fournisseur de services SAN doit prendre en charge cette option si le transport SAN sous-jacent limite la quantité de données que le commutateur peut transférer dans les appels à la fonction WSPRdmaRead ou WSPRdmaWrite du fournisseur de services SAN. Par la suite, le commutateur ne transmet pas les demandes de transfert RDMA au fournisseur de services SAN qui dépassent la taille retournée par le fournisseur de services SAN pour la valeur de cette option.
SO_RDMA_THRESHOLD_SIZE
Un fournisseur de services SAN prend en charge cette option pour indiquer sa préférence pour la quantité minimale de données que le commutateur peut transférer dans les appels à la fonction WSPRdmaRead ou WSPRdmaWrite du fournisseur de services SAN. Toutefois, le commutateur peut définir le seuil réel sur une valeur différente de la valeur retournée par le fournisseur de services SAN. Le commutateur appelle ensuite la fonction WSPRdmaRead ou WSPRdmaWrite pour transférer des blocs de données (transferts RDMA) qui dépassent la taille de ce seuil et la fonction WSPSend ou WSPRecv pour transférer des blocs de données (transferts orientés message) inférieurs ou égaux à la taille de ce seuil.
SO_GROUP_ID, SO_GROUP_PRIORITY
Un fournisseur de services SAN doit prendre en charge ces options s’il prend en charge la qualité de service (QoS). Sinon, le commutateur transfère ces options au fournisseur TCP/IP, qui conserve les valeurs par défaut. Un fournisseur de services SAN indique qu’il prend en charge qoS en définissant le bit XP1_QOS_SUPPORTED dans le membre dwServiceFlags de la structure WSAPROTOCOL_INFO.
Définition des options de socket SAN
Le commutateur Windows Sockets appelle la fonction WSPSetSockOpt d’un fournisseur de services SAN et passe l’une des options de socket suivantes pour définir une valeur pour cette option, si le fournisseur de services SAN prend en charge cette option :
SO_DEBUG
Pour obtenir une description de cette option de socket, consultez la liste précédente.
SO_GROUP_PRIORITY
Pour obtenir une description de cette option de socket, consultez la liste précédente.
Accès aux informations de socket SAN
Le commutateur Windows Sockets appelle la fonction WSPIoctl d’un fournisseur de services SAN et transmet l’un des codes de contrôle suivants pour définir ou récupérer des informations pour ce fournisseur de services SAN, si le fournisseur de services SAN prend en charge ce code de contrôle :
SIO_GET_EXTENSION_FUNCTION_POINTER
Récupère un pointeur vers une fonction d’extension qu’un fournisseur de services SAN doit prendre en charge. Pour plus d’informations sur les fonctions d’extension, consultez Extensions SPI des sockets Windows pour les SAN. La mémoire tampon d’entrée de l’appel WSPIoctl contient le GUID dont la valeur identifie la fonction d’extension spécifiée. Le fournisseur de services SAN retourne le pointeur vers la fonction demandée dans la mémoire tampon de sortie de WSPIoctl. Le tableau suivant contient des GUID pour les fonctions d’extension qu’un fournisseur de services SAN peut prendre en charge :
Fonction d’extension | GUID |
---|---|
{C0B422F5-F58C-11d1-AD6C-00C04FA34A2D} |
|
{C0B422F6-F58C-11d1-AD6C-00C04FA34A2D} |
|
{C0B422F7-F58C-11d1-AD6C-00C04FA34A2D} |
|
{C0B422F8-F58C-11d1-AD6C-00C04FA34A2D} |
|
{C0B422F9-F58C-11d1-AD6C-00C04FA34A2D} |
|
{C0B422FA-F58C-11d1-AD6C-00C04FA34A2D} |
|
{E5DA4AF8-D824-48CD-A799-6337A98ED2AF} |
SIO_GET_QOS, SIO_GET_GROUP_QOS, SIO_SET_QOS, SIO_SET_GROUP_QOS
Un fournisseur de services SAN doit prendre en charge ces codes de contrôle s’il prend en charge QoS. Sinon, le commutateur transfère ces options au fournisseur TCP/IP, qui conserve les valeurs par défaut. Un fournisseur indique qu’il prend en charge qoS en définissant le bit XP1_QOS_SUPPORTED dans le membre dwServiceFlags de la structure WSAPROTOCOL_INFO.
SIO_ADDRESS_LIST_QUERY
Récupère la liste des adresses IP locales affectées aux cartes d’interface réseau que le fournisseur de services SAN contrôle. Le fournisseur de services SAN utilise une structure SOCKET_ADDRESS_LIST, définie comme suit, pour renvoyer la liste dans la mémoire tampon de sortie de WSPIoctl :
typedef struct _SOCKET_ADDRESS_LIST {
INT iAddressCount;
SOCKET_ADDRESS Address[1];
} SOCKET_ADDRESS_LIST, FAR * LPSOCKET_ADDRESS_LIST;
Les membres de cette structure contiennent les informations suivantes :
iAddressCount
Spécifie le nombre de structures d’adresses dans la liste.
Adresse
Tableau de structures d’adresses IP.
Le commutateur utilise ce code IOCTL en interne pour décider s’il faut utiliser un fournisseur de services SAN donné pour exécuter les demandes d’une application pour établir des connexions ou pour écouter les connexions entrantes. Le commutateur transfère les demandes d’application réelles pour la liste des adresses IP locales vers le fournisseur TCP/IP. Le commutateur utilise également le fournisseur TCP/IP pour détecter les modifications dans les listes d’adresses que tous les fournisseurs de services SAN traitent. Une fois que TCP/IP signale une modification, le commutateur interroge tous les fournisseurs de services SAN pour actualiser leurs listes.