Перечисление виртуальных портов в сетевом адаптере
Сверхуровневый драйвер или пользовательское приложение может получить список всех виртуальных портов (VPorts) в сетевом коммутаторе сетевого адаптера, который поддерживает виртуализацию одно корневых операций ввода-вывода (SR-IOV). Драйвер или приложение отправляет запрос метода идентификатора объекта (OID) OID_NIC_SWITCH_ENUM_VPORTS для получения этого списка.
После успешного возврата из этого запроса OID элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на буфер, содержащий следующее:
Структура NDIS_NIC_SWITCH_VPORT_INFO_ARRAY , определяющая количество элементов в массиве.
Массив структур NDIS_NIC_SWITCH_VPORT_INFO . Каждая из этих структур содержит сведения о VPort на сетевом коммутаторе сетевого адаптера.
Примечание Если на сетевом адаптере не созданы виртуальные порты, драйвер устанавливает для элемента NumElements структуры NDIS_NIC_SWITCH_VPORT_INFO_ARRAY значение 0 и NDIS_NIC_SWITCH_VPORT_INFO структуры не возвращаются.
Перед тем, как драйвер или приложение пользователя выдает запрос на OID_NIC_SWITCH_ENUM_VPORTS , оно должно инициализировать структуру NDIS_NIC_SWITCH_VPORT_INFO_ARRAY , которая передается вместе с запросом. При инициализации структуры NDIS_NIC_SWITCH_VPORT_INFO_ARRAY драйвер или приложение должны следовать следующим рекомендациям:
Если флаг NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_SWITCH установлен в элементе Flags , возвращаются сведения обо всех виртуальных портах, созданных на указанном коммутаторе сетевой карты. Переключатель сетевого адаптера задается элементом SwitchId этой структуры.
Примечание Начиная с Windows Server 2012 интерфейс SR-IOV поддерживает только один коммутатор сетевого адаптера. Этот параметр называется коммутатором сетевой карты по умолчанию, на который ссылается идентификатор NDIS_DEFAULT_SWITCH_ID. Независимо от флагов, установленных в элементе Flags , параметру SwitchId необходимо задать значение NDIS_DEFAULT_SWITCH_ID.
Если флаг NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_FUNCTION установлен в элементе Flags , возвращаются сведения обо всех виртуальных портах, подключенных к указанной физической функции PCI Express (PCIe) или виртуальной функции (VF) сетевого адаптера. PF или VF задается элементом AttachedFunctionId этой структуры.
Если для элемента AttachedFunctionId задано значение NDIS_PF_FUNCTION_ID, возвращаются сведения для всех виртуальных портов. Сюда входит VPort по умолчанию, подключенный к PF. Если для элемента AttachedFunctionId задан допустимый идентификатор VF, возвращаются сведения обо всех виртуальных портах, присоединенных к указанному VF.
Примечание Начиная с Windows Server 2012 к VF можно подключить только один неотложимый VPort. Однако к PF можно подключить несколько виртуальных портов (включая VPort по умолчанию).
Если для элемента Flags задано значение 0, возвращаются сведения обо всех виртуальных портах, подключенных к PF или VF на сетевом адаптере. В этом случае значения SwitchId и AttachedFunctionId игнорируются.
NDIS обрабатывает запрос OID_NIC_SWITCH_ENUM_VPORTS для водителей минипорта. NDIS возвращает информацию из внутреннего кэша данных, которые он хранит, из проверки следующих источников:
Запросы метода OID OID_NIC_SWITCH_CREATE_VPORT.
Запросы на настройку OID OID_NIC_SWITCH_VPORT_PARAMETERS.