Поделиться через


Обработка параметров сокета и кодов управления для сети SAN

Коммутатор Windows Sockets в сочетании с поставщиком TCP/IP обрабатывает большинство вызовов WSPGetSockOpt, WSPSetSockOpt и WSPIoctl , инициированных приложениями. Эти запросы обычно предназначены для задания и извлечения параметров и параметров работы, связанных с сокетом приложения. Коммутатор обычно не перенаправит эти вызовы поставщику услуг SAN, за исключением случаев, описанных в следующих разделах.

Получение параметров сокета SAN

Коммутатор Windows Sockets вызывает функцию WSPGetSockOpt поставщика услуг SAN и передает один из следующих параметров сокета для получения текущего значения этого параметра, если поставщик услуг SAN поддерживает этот параметр:

SO_DEBUG
Поставщики служб SAN не обязаны поддерживать этот параметр. Они рекомендуется, но не обязательно предоставлять выходные отладочные сведения, если приложения задают параметр SO_DEBUG.

SO_MAX_MSG_SIZE
Поставщик услуг SAN должен поддерживать этот параметр, если базовый транспорт SAN ориентирован на сообщения и транспорт ограничивает объем данных, которые коммутатор может отправить в вызове функции WSPSend поставщика услуг SAN. Впоследствии параметр не передает поставщику услуг SAN запросы на отправку, превышающие размер, возвращаемого поставщиком услуг SAN для значения этого параметра.

SO_MAX_RDMA_SIZE
Поставщик услуг SAN должен поддерживать этот параметр, если базовый транспорт SAN ограничивает объем данных, которые коммутатор может передавать в вызовах функции WSPRdmaRead или WSPRdmaWrite поставщика услуг SAN. Впоследствии этот параметр не передает запросы на передачу RDMA поставщику услуг SAN, превышающие размер, который поставщик услуг SAN возвращает для значения этого параметра.

SO_RDMA_THRESHOLD_SIZE
Поставщик услуг SAN поддерживает этот параметр, чтобы указать его предпочтения для минимального объема данных, которые коммутатор может передавать в вызовах функции WSPRdmaRead или WSPRdmaWrite поставщика услуг SAN. Однако параметр может задать фактическое пороговое значение, отличное от значения, возвращаемого поставщиком услуг SAN. Затем параметр вызывает функцию WSPRdmaRead или WSPRdmaWrite для передачи блоков данных (передачи RDMA), превышающих этот порог, и функцию WSPSend или WSPRecv для передачи блоков данных (передачи на основе сообщений), размер которых меньше или равен этому порогового значения.

SO_GROUP_ID, SO_GROUP_PRIORITY
Поставщик услуг SAN должен поддерживать эти параметры, если он поддерживает качество обслуживания (QoS). В противном случае коммутатор перенаправит эти параметры поставщику TCP/IP, который сохраняет значения по умолчанию. Поставщик услуг SAN указывает, что он поддерживает QoS, задав бит XP1_QOS_SUPPORTED в элементе dwServiceFlags структуры WSAPROTOCOL_INFO.

Настройка параметров сокета SAN

Коммутатор Windows Sockets вызывает функцию WSPSetSockOpt поставщика услуг SAN и передает один из следующих параметров сокета, чтобы задать значение для этого параметра, если поставщик услуг SAN поддерживает этот параметр:

SO_DEBUG
Описание этого параметра сокета см. в предыдущем списке.

SO_GROUP_PRIORITY
Описание этого параметра сокета см. в предыдущем списке.

Доступ к сведениям о сокете SAN

Коммутатор Windows Sockets вызывает функцию WSPIoctl поставщика услуг SAN и передает один из следующих кодов управления, чтобы задать или получить сведения для этого поставщика услуг SAN, если поставщик служб SAN поддерживает этот код управления:

SIO_GET_EXTENSION_FUNCTION_POINTER
Извлекает указатель на функцию расширения, которую должен поддерживать поставщик услуг SAN. Дополнительные сведения о функциях расширений см. в разделе Windows Sockets SPI Extensions for SAN. Входной буфер вызова WSPIoctl содержит ИДЕНТИФИКАТОР GUID, значение которого определяет указанную функцию расширения. Поставщик службы SAN возвращает указатель на запрошенную функцию в выходном буфере WSPIoctl. В следующей таблице содержатся идентификаторы GUID для функций расширений, которые может поддерживать поставщик услуг SAN:

Функция расширения 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, который сохраняет значения по умолчанию. Поставщик указывает, что он поддерживает QoS, задав бит XP1_QOS_SUPPORTED в элементе dwServiceFlags структуры WSAPROTOCOL_INFO.

SIO_ADDRESS_LIST_QUERY
Извлекает список локальных IP-адресов, назначенных сетевым картам (NIC), которыми управляет поставщик услуг SAN. Поставщик служб 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.