Behandeln von Socketoptionen und Steuerungscodes für ein SAN
Der Windows Sockets-Switch verarbeitet in Verbindung mit dem TCP/IP-Anbieter die meisten WSPGetSockOpt-, WSPSetSockOpt- und WSPIoctl-Aufrufe , die von Anwendungen initiiert werden. Diese Anforderungen dienen im Allgemeinen zum Festlegen und Abrufen von Optionen und Betriebsparametern, die dem Socket einer Anwendung zugeordnet sind. Der Switch leitet diese Aufrufe im Allgemeinen nicht an einen SAN-Dienstanbieter weiter, außer wie in den folgenden Abschnitten beschrieben.
Abrufen von SAN-Socketoptionen
Der Windows Sockets-Switch ruft die WSPGetSockOpt-Funktion eines SAN-Dienstanbieters auf und übergibt eine der folgenden Socketoptionen, um den aktuellen Wert dieser Option abzurufen, wenn der SAN-Dienstanbieter diese Option unterstützt:
SO_DEBUG
SAN-Dienstanbieter müssen diese Option nicht unterstützen. Es wird empfohlen, aber nicht erforderlich, Ausgabedebuginformationen zur Verfügung zu stellen, wenn Anwendungen die Option SO_DEBUG festlegen.
SO_MAX_MSG_SIZE
Ein SAN-Dienstanbieter muss diese Option unterstützen, wenn der zugrunde liegende SAN-Transport nachrichtenorientiert ist und der Transport die Datenmenge begrenzt, die der Switch in einem Aufruf der WSPSend-Funktion des SAN-Dienstanbieters senden kann. Der Switch übergibt anschließend keine Sendeanforderungen an den SAN-Dienstanbieter, die die Größe überschreiten, die der SAN-Dienstanbieter für den Wert dieser Option zurückgibt.
SO_MAX_RDMA_SIZE
Ein SAN-Dienstanbieter muss diese Option unterstützen, wenn der zugrunde liegende SAN-Transport die Datenmenge einschränkt, die der Switch in Aufrufen der WSPRdmaRead - oder WSPRdmaWrite-Funktion des SAN-Dienstanbieters übertragen kann. Der Switch übergibt anschließend keine RDMA-Übertragungsanforderungen an den SAN-Dienstanbieter, die die Größe überschreiten, die der SAN-Dienstanbieter für den Wert dieser Option zurückgibt.
SO_RDMA_THRESHOLD_SIZE
Ein SAN-Dienstanbieter unterstützt diese Option, um seine Präferenz für die minimale Datenmenge anzugeben, die der Switch in Aufrufen der WSPRdmaRead - oder WSPRdmaWrite-Funktion des SAN-Dienstanbieters übertragen kann. Der Switch kann jedoch den tatsächlichen Schwellenwert auf einen anderen Wert als den vom SAN-Dienstanbieter zurückgegebenen Wert festlegen. Der Switch ruft anschließend die Funktion WSPRdmaRead oder WSPRdmaWrite auf, um Datenblöcke (RDMA-Übertragungen) zu übertragen, die die Größe dieses Schwellenwerts überschreiten, und die WSPSend - oder WSPRecv-Funktion zum Übertragen von Datenblöcken (nachrichtenorientierte Übertragungen), die kleiner oder gleich der Größe dieses Schwellenwerts sind.
SO_GROUP_ID, SO_GROUP_PRIORITY
Ein SAN-Dienstanbieter muss diese Optionen unterstützen, wenn er QoS (Quality of Service) unterstützt. Andernfalls leitet der Switch diese Optionen an den TCP/IP-Anbieter weiter, der Standardwerte beibehält. Ein SAN-Dienstanbieter gibt an, dass er QoS unterstützt, indem er das XP1_QOS_SUPPORTED Bit im dwServiceFlags-Member der WSAPROTOCOL_INFO-Struktur festlegt.
Festlegen von SAN-Socketoptionen
Der Windows Sockets-Switch ruft die WSPSetSockOpt-Funktion eines SAN-Dienstanbieters auf und übergibt eine der folgenden Socketoptionen, um einen Wert für diese Option festzulegen, wenn der SAN-Dienstanbieter diese Option unterstützt:
SO_DEBUG
Eine Beschreibung dieser Socketoption finden Sie in der vorherigen Liste.
SO_GROUP_PRIORITY
Eine Beschreibung dieser Socketoption finden Sie in der vorherigen Liste.
Zugreifen auf SAN-Socketinformationen
Der Windows Sockets-Switch ruft die WSPIoctl-Funktion eines SAN-Dienstanbieters auf und übergibt einen der folgenden Steuercodes, um Informationen für diesen SAN-Dienstanbieter festzulegen oder abzurufen, wenn der SAN-Dienstanbieter diesen Steuerungscode unterstützt:
SIO_GET_EXTENSION_FUNCTION_POINTER
Ruft einen Zeiger auf eine Erweiterungsfunktion ab, die ein SAN-Dienstanbieter unterstützen muss. Weitere Informationen zu Erweiterungsfunktionen finden Sie unter Windows Sockets SPI-Erweiterungen für SANs. Der Eingabepuffer des WSPIoctl-Aufrufs enthält die GUID, deren Wert die angegebene Erweiterungsfunktion identifiziert. Der SAN-Dienstanbieter gibt den Zeiger auf die angeforderte Funktion im Ausgabepuffer von WSPIoctl zurück. Die folgende Tabelle enthält GUIDs für Erweiterungsfunktionen, die ein SAN-Dienstanbieter unterstützen kann:
Erweiterungsfunktion | 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
Ein SAN-Dienstanbieter muss diese Steuercodes unterstützen, wenn er QoS unterstützt. Andernfalls leitet der Switch diese Optionen an den TCP/IP-Anbieter weiter, der Standardwerte beibehält. Ein Anbieter gibt an, dass er QoS unterstützt, indem er das XP1_QOS_SUPPORTED Bit im dwServiceFlags-Member der WSAPROTOCOL_INFO-Struktur festlegt.
SIO_ADDRESS_LIST_QUERY
Ruft die Liste der lokalen IP-Adressen ab, die den Netzwerkschnittstellenkarten (NICs) zugewiesen sind, die der SAN-Dienstanbieter steuert. Der SAN-Dienstanbieter verwendet eine wie folgt definierte SOCKET_ADDRESS_LIST-Struktur, um die Liste im Ausgabepuffer von WSPIoctl zurückzugeben:
typedef struct _SOCKET_ADDRESS_LIST {
INT iAddressCount;
SOCKET_ADDRESS Address[1];
} SOCKET_ADDRESS_LIST, FAR * LPSOCKET_ADDRESS_LIST;
Die Member dieser Struktur enthalten die folgenden Informationen:
iAddressCount
Gibt die Anzahl der Adressstrukturen in der Liste an.
Adresse
Array von IP-Adressstrukturen.
Der Switch verwendet diesen IOCTL-Code intern, um zu entscheiden, ob ein bestimmter SAN-Dienstanbieter zum Ausführen der Anforderungen einer Anwendung zum Herstellen von Verbindungen oder zum Lauschen auf eingehende Verbindungen verwendet werden soll. Der Switch leitet tatsächliche Anwendungsanforderungen für die Liste der lokalen IP-Adressen an den TCP/IP-Anbieter weiter. Der Switch verwendet auch den TCP/IP-Anbieter, um Änderungen in Adresslisten zu erkennen, die von allen SAN-Dienstanbietern verwendet werden. Nachdem TCP/IP eine Änderung gemeldet hat, fragt der Switch alle SAN-Dienstanbieter ab, um ihre Listen zu aktualisieren.